diff --git a/fuelweb_test/config_templates/create_primary_role.yaml b/fuelweb_test/config_templates/create_primary_role.yaml new file mode 100644 index 000000000..809c07739 --- /dev/null +++ b/fuelweb_test/config_templates/create_primary_role.yaml @@ -0,0 +1,11 @@ +meta: + conflicts: + - controller + - compute + description: New role + has_primary: true + name: Test primary role +name: test-primary-role +volumes_roles_mapping: +- allocate_size: min + id: os diff --git a/fuelweb_test/tests/tests_cli/test_cli_role.py b/fuelweb_test/tests/tests_cli/test_cli_role.py index f8a3bdef6..341477be8 100644 --- a/fuelweb_test/tests/tests_cli/test_cli_role.py +++ b/fuelweb_test/tests/tests_cli/test_cli_role.py @@ -14,7 +14,7 @@ import os from proboscis import test -from proboscis.asserts import assert_equal +from proboscis.asserts import assert_equal, assert_true from fuelweb_test.helpers.decorators import log_snapshot_after_test from fuelweb_test.helpers.utils import run_on_remote @@ -155,3 +155,186 @@ class CommandLineRoleTests(test_cli_base.CommandLine): "We shouldn't be able to assign controller and" " compute node to node id {}".format(node_ids[1])) self.env.make_snapshot("cli_create_role") + + @test(depends_on=[SetupEnvironment.prepare_slaves_3], + groups=["cli_create_role_with_has_primary"]) + @log_snapshot_after_test + def cli_create_role_with_has_primary(self): + """Create new role using Fuel CLI + + Scenario: + 1. Revert snapshot "ready_with_3_slaves" + 2. Upload new role yaml to master + 3. Upload yaml to nailgun using Fuel CLI + 4. Create new cluster + 5. Try to create node with new role + + Duration 20m + """ + self.show_step(1, initialize=True) + self.env.revert_snapshot("ready_with_3_slaves") + node_ids = [self.fuel_web.get_nailgun_node_by_devops_node( + self.env.d_env.nodes().slaves[slave_id])['id'] + for slave_id in range(3)] + release_id = self.fuel_web.get_releases_list_for_os( + release_name=OPENSTACK_RELEASE)[0] + templates_path = os.path.join( + '{0}/fuelweb_test/config_templates/'.format(os.environ.get( + "WORKSPACE", "./")), 'create_primary_role.yaml') + self.show_step(2) + if os.path.exists(templates_path): + self.ssh_manager.upload_to_remote(self.ssh_manager.admin_ip, + templates_path, '/tmp') + self.show_step(3) + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd='fuel role --rel {} --create --file' + ' /tmp/create_primary_role.yaml'.format(release_id)) + + with self.env.d_env.get_admin_remote() as remote: + + if NEUTRON_SEGMENT_TYPE: + nst = '--nst={0}'.format(NEUTRON_SEGMENT_TYPE) + else: + nst = '' + self.show_step(4) + cmd = ('fuel env create --name={0} --release={1} ' + '{2} --json'.format(self.__class__.__name__, + release_id, nst)) + env_result = run_on_remote(remote, cmd, jsonify=True) + cluster_id = env_result['id'] + self.show_step(5) + cmd = ('fuel --env-id={0} node set --node {1}' + ' --role=test-primary-role'.format(cluster_id, + node_ids[0])) + result = remote.execute(cmd) + assert_equal(result['exit_code'], 0, + "Can't assign new role" + " to node id {}".format(node_ids[0])) + self.env.make_snapshot("cli_create_role_with_has_primary") + + @test(depends_on=[SetupEnvironment.prepare_slaves_3], + groups=["cli_delete_role"]) + @log_snapshot_after_test + def cli_delete_role(self): + """Delete role using Fuel CLI + + Scenario: + 1. Revert snapshot "ready_with_3_slaves" + 2. Upload new role yaml to master + 3. Upload yaml to nailgun using Fuel CLI + 4. Check new role exists + 5. Create new cluster + 6. Create node with controller, compute + 7. Delete new role + 8. Try to delete controller role and check it's impossible + + Duration 20m + """ + self.show_step(1, initialize=True) + self.env.revert_snapshot("ready_with_3_slaves") + node_ids = [self.fuel_web.get_nailgun_node_by_devops_node( + self.env.d_env.nodes().slaves[slave_id])['id'] + for slave_id in range(3)] + release_id = self.fuel_web.get_releases_list_for_os( + release_name=OPENSTACK_RELEASE)[0] + templates_path = os.path.join( + '{0}/fuelweb_test/config_templates/'.format(os.environ.get( + "WORKSPACE", "./")), 'create_role.yaml') + self.show_step(2) + if os.path.exists(templates_path): + self.ssh_manager.upload_to_remote(self.ssh_manager.admin_ip, + templates_path, '/tmp') + self.show_step(3) + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd='fuel role --rel {} --create --file' + ' /tmp/create_role.yaml'.format(release_id)) + result = self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd='fuel role --rel {}'.format(release_id))['stdout'] + self.show_step(4) + roles = [i.strip() for i in result] + assert_true('test-role' in roles, + "role is not in the list {}".format(roles)) + + with self.env.d_env.get_admin_remote() as remote: + if NEUTRON_SEGMENT_TYPE: + nst = '--nst={0}'.format(NEUTRON_SEGMENT_TYPE) + else: + nst = '' + self.show_step(5) + cmd = ('fuel env create --name={0} --release={1} ' + '{2} --json'.format(self.__class__.__name__, + release_id, nst)) + env_result = run_on_remote(remote, cmd, jsonify=True) + cluster_id = env_result['id'] + self.show_step(6) + cmd = ('fuel --env-id={0} node set --node {1}' + ' --role=controller'.format(cluster_id, node_ids[0])) + result = remote.execute(cmd) + assert_equal(result['exit_code'], 0, + "Can't assign controller and" + " compute node to node id {}".format(node_ids[0])) + + self.show_step(7) + cmd = ('fuel role --rel {} --delete' + ' --role test-role'.format(release_id)) + result = remote.execute(cmd) + assert_equal(result['exit_code'], 0, + "Can't delete role, result is {}".format(result)) + + result = self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd='fuel role --rel {}'.format(release_id))['stdout'] + roles = [i.strip() for i in result] + assert_true('test-role' not in roles, + "role is not in the list {}".format(roles)) + cmd = ('fuel role --rel {} --delete' + ' --role controller'.format(release_id)) + result = remote.execute(cmd) + self.show_step(8) + assert_equal(result['exit_code'], 1, + "Controller role shouldn't be able to be deleted") + + self.env.make_snapshot("cli_delete_role") + + @test(depends_on=[SetupEnvironment.prepare_slaves_3], + groups=["cli_incorrect_update_role"]) + @log_snapshot_after_test + def cli_incorrect_update_role(self): + """Update controller role using Fuel CLI + + Scenario: + 1. Revert snapshot "ready_with_3_slaves" + 2. Download controller role yaml to master + 3. Modify "id" section to incorrect value + 4. Upload changes using Fuel CLI + 5. Check that error message was got + + Duration 20m + """ + self.show_step(1, initialize=True) + self.env.revert_snapshot("ready_with_3_slaves") + release_id = self.fuel_web.get_releases_list_for_os( + release_name=OPENSTACK_RELEASE)[0] + + self.show_step(2) + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd='fuel role --rel {} --role controller --file' + ' /tmp/controller.yaml'.format(release_id)) + + self.show_step(3) + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd="sed -i -r 's/id: os/id: blabla/' /tmp/controller.yaml") + + self.show_step(4) + self.show_step(5) + self.ssh_manager.execute_on_remote( + ip=self.ssh_manager.admin_ip, + cmd='fuel role --rel {} --role controller --update --file' + ' /tmp/controller.yaml'.format(release_id), + assert_ec_equal=[1]) + self.env.make_snapshot("cli_incorrect_update_role")