def test_update_plan_from_templates_recreate_env(self, mock_empty_container, mock_tarball): plan_management.update_plan_from_templates(self.app.client_manager, 'test-overcloud', '/tht-root/', validate_stack=False) mock_empty_container.assert_called_once_with(self.object_store, 'test-overcloud') # make sure passwords got persisted self.object_store.put_object.assert_called_with( 'test-overcloud', 'plan-environment.yaml', 'passwords: somepasswords\n' 'plan-environment.yaml: mock content\n') self.workflow.executions.create.assert_called_once_with( 'tripleo.plan_management.v1.update_deployment_plan', workflow_input={ 'container': 'test-overcloud', 'generate_passwords': True, 'source_url': None, 'validate_stack': False })
def test_update_plan_from_templates_recreate_env_missing_passwords( self, mock_tmp, mock_cd, mock_empty_container, mock_tarball, mock_yaml_safe_load, mock_update_passwords, mock_run_playbook): plan_management.update_plan_from_templates( self.app.client_manager, 'test-overcloud', '/tht-root/', validate_stack=False) # A dictionary without the "passwords" key is provided in # the _load_passwords method. mock_yaml_safe_load.return_value = {} # Ensure that the passwords variable is passed with a value of None. mock_update_passwords.assert_called_with( mock.ANY, 'test-overcloud', None) mock_run_playbook.assert_called_once_with( 'cli-update-deployment-plan.yaml', 'undercloud,', mock.ANY, constants.ANSIBLE_TRIPLEO_PLAYBOOKS, extra_vars={ "container": "test-overcloud", "generate_passwords": True, "validate": False }, verbosity=1, )
def test_update_plan_from_templates_recreate_env( self, mock_empty_container, mock_tarball, mock_run_playbook): plan_management.update_plan_from_templates( self.app.client_manager, 'test-overcloud', '/tht-root/', validate_stack=False) mock_empty_container.assert_called_once_with( self.object_store, 'test-overcloud') # make sure passwords got persisted self.object_store.put_object.assert_called_with( 'test-overcloud', 'plan-environment.yaml', 'passwords: somepasswords\n' 'plan-environment.yaml: mock content\n' ) mock_run_playbook.assert_called_once_with( 'cli-update-deployment-plan.yaml', 'undercloud,', mock.ANY, constants.ANSIBLE_TRIPLEO_PLAYBOOKS, extra_vars={ "container": "test-overcloud", "generate_passwords": True, "validate": False }, verbosity=1, )
def _deploy_tripleo_heat_templates(self, stack, parsed_args): """Deploy the fixed templates in TripleO Heat Templates""" clients = self.app.client_manager network_client = clients.network workflow_client = clients.workflow_engine parameters = self._update_parameters( parsed_args, network_client, stack) tht_root = os.path.abspath(parsed_args.templates) plans = plan_management.list_deployment_plans(workflow_client) # TODO(d0ugal): We need to put a more robust strategy in place here to # handle updating plans. if parsed_args.stack in plans: # Upload the new plan templates to swift to replace the existing # templates. plan_management.update_plan_from_templates( clients, parsed_args.stack, tht_root) else: plan_management.create_plan_from_templates( clients, parsed_args.stack, tht_root) print("Deploying templates in the directory {0}".format( os.path.abspath(tht_root))) self.log.debug("Creating Environment file") # TODO(jprovazn): env file generated by create_environment_file() # is not very usable any more, scale params are included in # parameters and keystone cert is generated on create only env_path = utils.create_environment_file() env = {} created_env_files = [] if stack is None: self.log.debug("Creating Keystone certificates") keystone_pki.generate_certs_into_json(env_path, False) created_env_files.append(env_path) if parsed_args.environment_directories: created_env_files.extend(self._load_environment_directories( parsed_args.environment_directories)) env.update(self._create_parameters_env(parameters)) if parsed_args.rhel_reg: reg_env_files, reg_env = self._create_registration_env(parsed_args) created_env_files.extend(reg_env_files) template_utils.deep_update(env, reg_env) if parsed_args.environment_files: created_env_files.extend(parsed_args.environment_files) self._try_overcloud_deploy_with_compat_yaml( tht_root, stack, parsed_args.stack, parameters, created_env_files, parsed_args.timeout, env)
def test_update_plan_from_templates_keep_env( self, mock_tmp, mock_cd, mock_empty_container, mock_tarball, mock_run_playbook): plan_management.update_plan_from_templates( self.app.client_manager, 'test-overcloud', '/tht-root/', keep_env=True, validate_stack=False) mock_empty_container.assert_called_once_with( self.object_store, 'test-overcloud') # make sure we're pushing the saved files back to plan self.object_store.put_object.assert_has_calls( [ mock.call('test-overcloud', 'plan-environment.yaml', 'passwords: somepasswords\n' 'plan-environment.yaml: mock content\n'), mock.call('test-overcloud', 'user-environment.yaml', 'user-environment.yaml: mock content\n'), mock.call('test-overcloud', 'roles_data.yaml', 'roles_data.yaml: mock content\n'), mock.call('test-overcloud', 'network_data.yaml', 'network_data.yaml: mock content\n'), mock.call('test-overcloud', 'user-files/somecustomfile.yaml', 'user-files/somecustomfile.yaml: mock content\n'), mock.call('test-overcloud', 'user-files/othercustomfile.yaml', 'user-files/othercustomfile.yaml: mock content\n'), ], any_order=True, ) mock_run_playbook.assert_called_once_with( 'cli-update-deployment-plan.yaml', 'undercloud,', mock.ANY, constants.ANSIBLE_TRIPLEO_PLAYBOOKS, extra_vars={ "container": "test-overcloud", "generate_passwords": True, "validate": False }, verbosity=1, )
def test_update_plan_from_templates_keep_env(self, mock_empty_container, mock_tarball): plan_management.update_plan_from_templates(self.app.client_manager, 'test-overcloud', '/tht-root/', keep_env=True, validate_stack=False) mock_empty_container.assert_called_once_with(self.object_store, 'test-overcloud') # make sure we're pushing the saved files back to plan self.object_store.put_object.assert_has_calls( [ mock.call( 'test-overcloud', 'plan-environment.yaml', 'passwords: somepasswords\n' 'plan-environment.yaml: mock content\n'), mock.call('test-overcloud', 'user-environment.yaml', 'user-environment.yaml: mock content\n'), mock.call('test-overcloud', 'roles_data.yaml', 'roles_data.yaml: mock content\n'), mock.call('test-overcloud', 'network_data.yaml', 'network_data.yaml: mock content\n'), mock.call('test-overcloud', 'user-files/somecustomfile.yaml', 'user-files/somecustomfile.yaml: mock content\n'), mock.call('test-overcloud', 'user-files/othercustomfile.yaml', 'user-files/othercustomfile.yaml: mock content\n'), ], any_order=True, ) self.workflow.executions.create.assert_called_once_with( 'tripleo.plan_management.v1.update_deployment_plan', workflow_input={ 'container': 'test-overcloud', 'generate_passwords': True, 'source_url': None, 'validate_stack': False })
def _deploy_tripleo_heat_templates(self, stack, parsed_args, tht_root, user_tht_root): """Deploy the fixed templates in TripleO Heat Templates""" plans = plan_management.list_deployment_plans(self.clients) generate_passwords = not parsed_args.disable_password_generation # TODO(d0ugal): We need to put a more robust strategy in place here to # handle updating plans. if parsed_args.stack in plans: # Upload the new plan templates to swift to replace the existing # templates. plan_management.update_plan_from_templates( self.clients, parsed_args.stack, tht_root, parsed_args.roles_file, generate_passwords, parsed_args.plan_environment_file, parsed_args.networks_file, type(self)._keep_env_on_update) else: plan_management.create_plan_from_templates( self.clients, parsed_args.stack, tht_root, parsed_args.roles_file, generate_passwords, parsed_args.plan_environment_file, parsed_args.networks_file) # Get any missing (e.g j2 rendered) files from the plan to tht_root self._download_missing_files_from_plan(tht_root, parsed_args.stack) print("Processing templates in the directory {0}".format( os.path.abspath(tht_root))) self.log.debug("Creating Environment files") env = {} created_env_files = [] if parsed_args.environment_directories: created_env_files.extend( utils.load_environment_directories( parsed_args.environment_directories)) parameters = {} if stack: try: # If user environment already exist then keep it user_env = yaml.safe_load( self.object_client.get_object( parsed_args.stack, constants.USER_ENVIRONMENT)[1]) template_utils.deep_update(env, user_env) except ClientException: pass parameters.update(self._update_parameters(parsed_args, stack)) template_utils.deep_update( env, self._create_parameters_env(parameters, tht_root, parsed_args.stack)) if parsed_args.rhel_reg: reg_env_files, reg_env = self._create_registration_env( parsed_args, tht_root) created_env_files.extend(reg_env_files) template_utils.deep_update(env, reg_env) if parsed_args.environment_files: created_env_files.extend(parsed_args.environment_files) self.log.debug("Processing environment files %s" % created_env_files) env_files, localenv = utils.process_multiple_environments( created_env_files, tht_root, user_tht_root, cleanup=not parsed_args.no_cleanup) template_utils.deep_update(env, localenv) if stack: bp_cleanup = self._create_breakpoint_cleanup_env( tht_root, parsed_args.stack) template_utils.deep_update(env, bp_cleanup) # FIXME(shardy) It'd be better to validate this via mistral # e.g part of the plan create/update workflow number_controllers = int(parameters.get('ControllerCount', 0)) if number_controllers > 1: if not env.get('parameter_defaults').get('NtpServer'): raise exceptions.InvalidConfiguration( 'Specify --ntp-server as parameter or NtpServer in ' 'environments when using multiple controllers ' '(with HA).') self._try_overcloud_deploy_with_compat_yaml( tht_root, stack, parsed_args.stack, parameters, env_files, parsed_args.timeout, env, parsed_args.update_plan_only, parsed_args.run_validations, parsed_args.skip_deploy_identifier, parsed_args.plan_environment_file)
def _deploy_tripleo_heat_templates(self, stack, parsed_args, tht_root, user_tht_root): """Deploy the fixed templates in TripleO Heat Templates""" clients = self.app.client_manager network_client = clients.network workflow_client = clients.workflow_engine parameters = self._update_parameters( parsed_args, network_client, stack) plans = plan_management.list_deployment_plans(workflow_client) # TODO(d0ugal): We need to put a more robust strategy in place here to # handle updating plans. if parsed_args.stack in plans: # Upload the new plan templates to swift to replace the existing # templates. plan_management.update_plan_from_templates( clients, parsed_args.stack, tht_root, parsed_args.roles_file) else: plan_management.create_plan_from_templates( clients, parsed_args.stack, tht_root, parsed_args.roles_file) # Get any missing (e.g j2 rendered) files from the plan to tht_root added_files = self._download_missing_files_from_plan( tht_root, parsed_args.stack) print("Deploying templates in the directory {0}".format( os.path.abspath(tht_root))) self.log.debug("Creating Environment file") # TODO(jprovazn): env file generated by create_environment_file() # is not very usable any more, scale params are included in # parameters and keystone cert is generated on create only env_path = utils.create_environment_file() env = {} created_env_files = [] if stack is None: self.log.debug("Creating Keystone certificates") keystone_pki.generate_certs_into_json(env_path, False) created_env_files.append(env_path) if parsed_args.environment_directories: created_env_files.extend(self._load_environment_directories( parsed_args.environment_directories)) env.update(self._create_parameters_env(parameters)) if parsed_args.rhel_reg: reg_env_files, reg_env = self._create_registration_env(parsed_args) created_env_files.extend(reg_env_files) template_utils.deep_update(env, reg_env) if parsed_args.environment_files: created_env_files.extend(parsed_args.environment_files) self.log.debug("Processing environment files %s" % created_env_files) env_files, localenv = self._process_multiple_environments( created_env_files, added_files, tht_root, user_tht_root, cleanup=not parsed_args.no_cleanup) template_utils.deep_update(env, localenv) self._try_overcloud_deploy_with_compat_yaml( tht_root, stack, parsed_args.stack, parameters, env_files, parsed_args.timeout, env, parsed_args.update_plan_only)