def take_action(self, parsed_args): self.log.debug("take_action(%s)" % parsed_args) env_files = [] if parsed_args.environment_directories: env_files.extend( utils.load_environment_directories( parsed_args.environment_directories)) if parsed_args.environment_files: env_files.extend(parsed_args.environment_files) service_filter = self.build_service_filter(env_files, parsed_args.roles_file) neutron_driver = None if service_filter: if 'OS::TripleO::Services::OpenDaylightApi' in service_filter: neutron_driver = 'odl' elif 'OS::TripleO::Services::OVNController' in service_filter: neutron_driver = 'ovn' subs = { 'tag': parsed_args.tag, 'namespace': parsed_args.namespace, 'name_prefix': parsed_args.prefix, 'name_suffix': parsed_args.suffix, 'neutron_driver': neutron_driver, } self.parse_set_values(subs, parsed_args.set) output_images_file = (parsed_args.output_images_file or 'container_images.yaml') prepare_data = kolla_builder.container_images_prepare( excludes=parsed_args.excludes, service_filter=service_filter, pull_source=parsed_args.pull_source, push_destination=parsed_args.push_destination, mapping_args=subs, output_env_file=parsed_args.output_env_file, output_images_file=output_images_file, tag_from_label=parsed_args.tag_from_label) if parsed_args.output_env_file: params = prepare_data[parsed_args.output_env_file] self.write_env_file(params, parsed_args.output_env_file) result = prepare_data[output_images_file] result_str = yaml.safe_dump({'container_images': result}, default_flow_style=False) sys.stdout.write(result_str) if parsed_args.output_images_file: with os.fdopen( os.open(parsed_args.output_images_file, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o666), 'w') as f: f.write(result_str)
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 take_action(self, parsed_args): self.log.debug("take_action(%s)" % parsed_args) env_files = [] if parsed_args.environment_directories: env_files.extend( utils.load_environment_directories( parsed_args.environment_directories)) if parsed_args.environment_files: env_files.extend(parsed_args.environment_files) service_filter = self.build_service_filter(env_files, parsed_args.roles_file) neutron_driver = None if service_filter: if 'OS::TripleO::Services::OpenDaylightApi' in service_filter: neutron_driver = 'odl' elif 'OS::TripleO::Services::OVNController' in service_filter: neutron_driver = 'ovn' subs = { 'tag': parsed_args.tag, 'namespace': parsed_args.namespace, 'name_prefix': parsed_args.prefix, 'name_suffix': parsed_args.suffix, 'neutron_driver': neutron_driver, } self.parse_set_values(subs, parsed_args.set) def ffunc(entry): imagename = entry.get('imagename', '') for p in parsed_args.excludes: if re.search(p, imagename): return None if service_filter is not None: # check the entry is for a service being deployed image_services = set(entry.get('services', [])) if not service_filter.intersection(image_services): return None if parsed_args.pull_source: entry['pull_source'] = parsed_args.pull_source if parsed_args.push_destination: entry['push_destination'] = parsed_args.push_destination return entry builder = kolla_builder.KollaImageBuilder([parsed_args.template_file]) result = builder.container_images_from_template(filter=ffunc, **subs) params = {} for entry in result: imagename = entry.get('imagename', '') if 'params' in entry: for p in entry.pop('params'): params[p] = imagename if 'services' in entry: del (entry['services']) if parsed_args.output_env_file: params.update(self.detect_insecure_registries(params)) self.write_env_file(params, parsed_args.output_env_file) result_str = yaml.safe_dump({'container_images': result}, default_flow_style=False) sys.stdout.write(result_str) if parsed_args.output_images_file: with os.fdopen( os.open(parsed_args.output_images_file, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o666), 'w') as f: f.write(result_str)