diff --git a/pkg/cluster/ansible.go b/pkg/cluster/ansible.go index 8e8cfa2953..1d1de856d8 100644 --- a/pkg/cluster/ansible.go +++ b/pkg/cluster/ansible.go @@ -21,11 +21,12 @@ const ( updateAction = "update" deleteAction = "delete" - provisionProvisioningAction = "PROVISION" - upgradeProvisioningAction = "UPGRADE" - importProvisioningAction = "IMPORT" - addComputeProvisioningAction = "ADD_COMPUTE" - addCSNProvisioningAction = "ADD_CSN" + provisionProvisioningAction = "PROVISION" + upgradeProvisioningAction = "UPGRADE" + importProvisioningAction = "IMPORT" + addComputeProvisioningAction = "ADD_COMPUTE" + deleteComputeProvisioningAction = "DELETE_COMPUTE" + addCSNProvisioningAction = "ADD_CSN" enable = "yes" disable = "no" @@ -412,7 +413,7 @@ func (a *ansibleProvisioner) playOrchestratorProvision(ansibleArgs []string) err case orchestratorOpenstack: ansibleArgs = append(ansibleArgs, "-e force_checkout=yes") switch a.clusterData.clusterInfo.ProvisioningAction { - case addComputeProvisioningAction: + case addComputeProvisioningAction, deleteComputeProvisioningAction: ansibleArgs = append(ansibleArgs, "--tags=nova") } ansibleArgs = append(ansibleArgs, defaultOpenstackProvPlay) @@ -532,6 +533,19 @@ func (a *ansibleProvisioner) playBook() error { if err := a.playAppformixProvision(); err != nil { return err } + case deleteComputeProvisioningAction: + if err := a.playInstancesConfig(args); err != nil { + return err + } + if err := a.playOrchestratorProvision(args); err != nil { + return err + } + if err := a.playContrailProvision(args); err != nil { + return err + } + if err := a.playAppformixProvision(); err != nil { + return err + } case addCSNProvisioningAction: if err := a.playInstancesConfig(args); err != nil { return err diff --git a/pkg/cluster/cluster_test.go b/pkg/cluster/cluster_test.go index 733eab696c..b864371df8 100644 --- a/pkg/cluster/cluster_test.go +++ b/pkg/cluster/cluster_test.go @@ -21,6 +21,7 @@ const ( updatePlaybooks = "./test_data/expected_ansible_update_playbook.yml" upgradePlaybooks = "./test_data/expected_ansible_upgrade_playbook.yml" addComputePlaybooks = "./test_data/expected_ansible_add_compute_playbook.yml" + deleteComputePlaybooks = "./test_data/expected_ansible_delete_compute_playbook.yml" addCSNPlaybooks = "./test_data/expected_ansible_add_csn_playbook.yml" createEncryptPlaybooks = "./test_data/expected_ansible_create_encrypt_playbook.yml" updateEncryptPlaybooks = "./test_data/expected_ansible_update_encrypt_playbook.yml" @@ -136,6 +137,12 @@ func runClusterActionTest(t *testing.T, testScenario integration.TestScenario, if expectedInventory != "" { expectedPlaybooks = addComputeEncryptPlaybooks } + case deleteComputeProvisioningAction: + // remove instances.yml to mock trriger cluster update + err = os.Remove(generatedInstancesPath()) + if err != nil { + assert.NoError(t, err, "failed to delete instances.yml") + } case addCSNProvisioningAction: // remove instances.yml to mock trriger cluster update err = os.Remove(generatedInstancesPath()) @@ -290,6 +297,11 @@ func runClusterTest(t *testing.T, expectedInstance, expectedInventory string, addComputeProvisioningAction, expectedInstance, expectedInventory, addComputePlaybooks, expectedEndpoints) + // DELETE_COMPUTE test + runClusterActionTest(t, testScenario, config, + deleteComputeProvisioningAction, expectedInstance, "", + deleteComputePlaybooks, expectedEndpoints) + // ADD_CSN test runClusterActionTest(t, testScenario, config, addCSNProvisioningAction, expectedInstance, expectedInventory, diff --git a/pkg/cluster/test_data/expected_ansible_delete_compute_playbook.yml b/pkg/cluster/test_data/expected_ansible_delete_compute_playbook.yml new file mode 100644 index 0000000000..661807517e --- /dev/null +++ b/pkg/cluster/test_data/expected_ansible_delete_compute_playbook.yml @@ -0,0 +1,6 @@ +playbooks/configure_instances.yml: + args: -i inventory/ -e config_file=/var/tmp/contrail_cluster/test_cluster_uuid/instances.yml -e orchestrator=openstack +playbooks/install_openstack.yml: + args: -i inventory/ -e config_file=/var/tmp/contrail_cluster/test_cluster_uuid/instances.yml -e orchestrator=openstack -e force_checkout=yes --tags=nova +playbooks/install_contrail.yml: + args: -i inventory/ -e config_file=/var/tmp/contrail_cluster/test_cluster_uuid/instances.yml -e orchestrator=openstack diff --git a/schemas/abstract/has_status.yml b/schemas/abstract/has_status.yml index 5e41976f4a..87f506b924 100755 --- a/schemas/abstract/has_status.yml +++ b/schemas/abstract/has_status.yml @@ -88,6 +88,7 @@ schema: enum: - "PROVISION" - "ADD_COMPUTE" + - "DELETE_COMPUTE" - "ADD_CSN" - "UPGRADE" permission: