diff --git a/machine/v1/tests/controlplanemachinesets.machine.openshift.io/MachineAPIMigration.yaml b/machine/v1/tests/controlplanemachinesets.machine.openshift.io/MachineAPIMigration.yaml new file mode 100644 index 00000000000..3e49b7026c1 --- /dev/null +++ b/machine/v1/tests/controlplanemachinesets.machine.openshift.io/MachineAPIMigration.yaml @@ -0,0 +1,534 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "ControlPlaneMachineSet" +crdName: controlplanemachinesets.machine.openshift.io +tests: + onCreate: + - name: Should reject an VSphere platform failure domain without any VSphere config + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + failureDomains: + platform: VSphere + expectedError: "spec.template.machines_v1beta1_machine_openshift_io.failureDomains: Invalid value: \"object\": vsphere configuration is required when platform is VSphere" + - name: Should reject an VSphere configured failure domain without a platform type + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + failureDomains: + vsphere: + - name: foo + expectedError: "spec.template.machines_v1beta1_machine_openshift_io.failureDomains.platform: Required value" + - name: Should be able to create a minimal ControlPlaneMachineSet + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expected: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + - name: Should reject a missing machineType + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.template.machineType: Required value" + - name: Should reject a missing machines_v1beta1_machine_openshift_io + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + expectedError: "spec.template: Invalid value: \"object\": machines_v1beta1_machine_openshift_io configuration is required when machineType is machines_v1beta1_machine_openshift_io, and forbidden otherwise" + - name: Should reject a worker role label + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: worker + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.template.machines_v1beta1_machine_openshift_io.metadata.labels: Invalid value: \"object\": label 'machine.openshift.io/cluster-api-machine-role' is required, and must have value 'master'" + - name: Should reject a missing role label + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.template.machines_v1beta1_machine_openshift_io.metadata.labels: Invalid value: \"object\": label 'machine.openshift.io/cluster-api-machine-role' is required, and must have value 'master'" + - name: Should reject a worker type label + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: worker + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.template.machines_v1beta1_machine_openshift_io.metadata.labels: Invalid value: \"object\": label 'machine.openshift.io/cluster-api-machine-type' is required, and must have value 'master'" + - name: Should reject a missing type label + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.template.machines_v1beta1_machine_openshift_io.metadata.labels: Invalid value: \"object\": label 'machine.openshift.io/cluster-api-machine-type' is required, and must have value 'master'" + - name: Should reject a missing cluster ID label + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + spec: + providerSpec: {} + expectedError: "spec.template.machines_v1beta1_machine_openshift_io.metadata.labels: Invalid value: \"object\": label 'machine.openshift.io/cluster-api-cluster' is required" + - name: Should be able to create an Active ControlPlaneMachineSet + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + state: Active + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expected: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Active + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + onUpdate: + - name: Replicas should be immutable + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + updated: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 5 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.replicas: Invalid value: \"integer\": replicas is immutable" + - name: Selector should be immutable + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + updated: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + foo: bar + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.selector: Invalid value: \"object\": selector is immutable" + - name: Should default the strategy when removed + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: OnDelete + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + updated: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expected: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + - name: Should allow the state to change to Active + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + updated: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Active + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expected: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Active + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + - name: Should not allow the state to change from Active + initial: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Active + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + updated: | + apiVersion: machine.openshift.io/v1 + kind: ControlPlaneMachineSet + spec: + replicas: 3 + state: Inactive + strategy: + type: RollingUpdate + selector: + matchLabels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + template: + machineType: machines_v1beta1_machine_openshift_io + machines_v1beta1_machine_openshift_io: + metadata: + labels: + machine.openshift.io/cluster-api-machine-role: master + machine.openshift.io/cluster-api-machine-type: master + machine.openshift.io/cluster-api-cluster: cluster + spec: + providerSpec: {} + expectedError: "spec.state: Invalid value: \"string\": state cannot be changed once Active" + diff --git a/machine/v1beta1/tests/machines.machine.openshift.io/MachineAPIMigration.yaml b/machine/v1beta1/tests/machines.machine.openshift.io/MachineAPIMigration.yaml new file mode 100644 index 00000000000..f0e9388d2d8 --- /dev/null +++ b/machine/v1beta1/tests/machines.machine.openshift.io/MachineAPIMigration.yaml @@ -0,0 +1,415 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "Machine" +crdName: machines.machine.openshift.io +featureGate: MachineAPIMigration +tests: + onCreate: + - name: Should accept MachineAPI as a valid spec authoritative API + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + - name: Should accept ClusterAPI as a valid spec authoritative API + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + - name: Should reject Migrating as a valid spec authoritative API + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: Migrating + expectedError: "spec.authoritativeAPI: Unsupported value: \"Migrating\": supported values: \"MachineAPI\", \"ClusterAPI\"" + onUpdate: + - name: Should allow updating the spec authoritative API to ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + - name: Should allow updating the spec authoritative API to MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + - name: Should allow updating the status authoritative API to Migrating from MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: Migrating + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: Migrating + - name: Should allow updating the status authoritative API to Migrating from ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: ClusterAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + - name: Should allow updating the status authoritative API to MachineAPI from Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + - name: Should allow updating the status authoritative API to ClusterAPI from Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: Migrating + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + - name: Should not allow updating the status authoritative API to ClusterAPI from MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + expectedStatusError: "status.authoritativeAPI: Invalid value: \"string\": The authoritativeAPI field must not transition directly from MachineAPI to ClusterAPI or vice versa. It must transition through Migrating." + - name: Should not allow updating the status authoritative API to MachineAPI from ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: ClusterAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + expectedStatusError: "status.authoritativeAPI: Invalid value: \"string\": The authoritativeAPI field must not transition directly from MachineAPI to ClusterAPI or vice versa. It must transition through Migrating." + - name: Should allow adding the synchronizedGeneration field to an existing status + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + - name: Should allow adding the authoritativeAPI field to an existing status + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + synchronizedGeneration: 0 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + - name: Should increasing the synchronizedGeneration while the Authoritative API is MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 2 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 2 + - name: Should increasing the synchronizedGeneration while the Authoritative API is Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 2 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 2 + - name: Should increasing the synchronizedGeneration while the Authoritative API is ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 2 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 2 + - name: Should not allow decreasing the synchronizedGeneration while the Authoritative API is MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 2 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 1 + expectedStatusError: "status: Invalid value: \"object\": syncronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value" + - name: Should not allow decreasing the synchronizedGeneration while the Authoritative API is Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 2 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + expectedStatusError: "status: Invalid value: \"object\": syncronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value" + - name: Should not allow decreasing the synchronizedGeneration while the Authoritative API is ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 2 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 1 + expectedStatusError: "status: Invalid value: \"object\": syncronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value" + - name: Should allow decreasing the synchronizedGeneration while the Authoritative API is moved from Migrating to MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + - name: Should allow decreasing the synchronizedGeneration while the Authoritative API is moved from Migrating to ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 0 diff --git a/machine/v1beta1/tests/machinesets.machine.openshift.io/MachineAPIMigration.yaml b/machine/v1beta1/tests/machinesets.machine.openshift.io/MachineAPIMigration.yaml new file mode 100644 index 00000000000..448145a2074 --- /dev/null +++ b/machine/v1beta1/tests/machinesets.machine.openshift.io/MachineAPIMigration.yaml @@ -0,0 +1,430 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "MachineSet" +crdName: machinesets.machine.openshift.io +featureGate: MachineAPIMigration +tests: + onCreate: + - name: Should accept MachineAPI as a valid spec authoritative API + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + - name: Should accept ClusterAPI as a valid spec authoritative API + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + replicas: 1 + - name: Should reject Migrating as a valid spec authoritative API + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: Migrating + expectedError: "spec.authoritativeAPI: Unsupported value: \"Migrating\": supported values: \"MachineAPI\", \"ClusterAPI\"" + onUpdate: + - name: Should allow updating the spec authoritative API to ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + replicas: 1 + - name: Should allow updating the spec authoritative API to MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + - name: Should allow updating the status authoritative API to Migrating from MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: Migrating + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + replicas: 1 + status: + authoritativeAPI: Migrating + - name: Should allow updating the status authoritative API to Migrating from ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: ClusterAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + status: + authoritativeAPI: Migrating + - name: Should allow updating the status authoritative API to MachineAPI from Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + status: + authoritativeAPI: MachineAPI + - name: Should allow updating the status authoritative API to ClusterAPI from Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: Migrating + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + replicas: 1 + status: + authoritativeAPI: ClusterAPI + - name: Should not allow updating the status authoritative API to ClusterAPI from MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + expectedStatusError: "status.authoritativeAPI: Invalid value: \"string\": The authoritativeAPI field must not transition directly from MachineAPI to ClusterAPI or vice versa. It must transition through Migrating." + - name: Should not allow updating the status authoritative API to MachineAPI from ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: ClusterAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + expectedStatusError: "status.authoritativeAPI: Invalid value: \"string\": The authoritativeAPI field must not transition directly from MachineAPI to ClusterAPI or vice versa. It must transition through Migrating." + - name: Should allow adding the synchronizedGeneration field to an existing status + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + - name: Should allow adding the authoritativeAPI field to an existing status + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + synchronizedGeneration: 0 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + - name: Should increasing the synchronizedGeneration while the Authoritative API is MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 2 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 2 + - name: Should increasing the synchronizedGeneration while the Authoritative API is Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 2 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + status: + authoritativeAPI: Migrating + synchronizedGeneration: 2 + - name: Should increasing the synchronizedGeneration while the Authoritative API is ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 2 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + replicas: 1 + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 2 + - name: Should not allow decreasing the synchronizedGeneration while the Authoritative API is MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 2 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 1 + expectedStatusError: "status: Invalid value: \"object\": syncronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value" + - name: Should not allow decreasing the synchronizedGeneration while the Authoritative API is Migrating + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 2 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + expectedStatusError: "status: Invalid value: \"object\": syncronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value" + - name: Should not allow decreasing the synchronizedGeneration while the Authoritative API is ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 2 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 1 + expectedStatusError: "status: Invalid value: \"object\": syncronizedGeneration must not decrease unless authoritativeAPI is transitioning from Migrating to another value" + - name: Should allow decreasing the synchronizedGeneration while the Authoritative API is moved from Migrating to MachineAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: MachineAPI + replicas: 1 + status: + authoritativeAPI: MachineAPI + synchronizedGeneration: 0 + - name: Should allow decreasing the synchronizedGeneration while the Authoritative API is moved from Migrating to ClusterAPI + initial: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: Migrating + synchronizedGeneration: 1 + updated: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 0 + expected: | + apiVersion: machine.openshift.io/v1beta1 + kind: MachineSet + spec: + authoritativeAPI: ClusterAPI + replicas: 1 + status: + authoritativeAPI: ClusterAPI + synchronizedGeneration: 0