diff --git a/tripleoclient/v1/container_image.py b/tripleoclient/v1/container_image.py index a73f82739..d63e7fbde 100644 --- a/tripleoclient/v1/container_image.py +++ b/tripleoclient/v1/container_image.py @@ -46,7 +46,8 @@ def build_env_file(params, command_options): ' '.join(command_options)) yaml.safe_dump({'parameter_defaults': params}, f, - default_flow_style=False) + default_flow_style=False, + sort_keys=False) return f.getvalue() @@ -444,6 +445,48 @@ class TripleOImagePrepareDefault(command.Command): 'registries. Do not use this for an overcloud that ' 'may not have network connectivity to a remote registry.') ) + parser.add_argument( + '--enable-multi-rhel', + dest='multi_rhel', + action='store_true', + default=False, + help=_('Use this flag to enable multi-rhel') + ) + parser.add_argument( + '--excludes', + dest='excludes', + action='append', + default=[], + help=_('List of services to include/exclude') + ) + parser.add_argument( + '--major-override', + dest='major', + action='store', + default='{}', + help=_('The override parameters for major release') + ) + parser.add_argument( + '--minor-override', + dest='minor', + action='store', + default='{}', + help=_('The override parameters for minor release') + ) + parser.add_argument( + '--role', + dest='roles', + action='append', + default=[], + help=_('List of roles') + ) + parser.add_argument( + '--role-file', + dest='rolefile', + action='store', + default='', + help=_('role_data.yaml file') + ) return parser def take_action(self, parsed_args): @@ -467,7 +510,48 @@ class TripleOImagePrepareDefault(command.Command): ' with ContainerImageRegistryCredentials for the ' 'registries requiring authentication.') params['ContainerImageRegistryLogin'] = True - + if parsed_args.multi_rhel: + cip_exc = copy.deepcopy(cip) + cip_inc = copy.deepcopy(cip) + if parsed_args.major is not None: + major = yaml.safe_load(parsed_args.major) + if len(parsed_args.excludes) > 0: + cip_exc[0]['excludes'] = copy.deepcopy(parsed_args.excludes) + cip_inc[0]['includes'] = copy.deepcopy(parsed_args.excludes) + if parsed_args.minor is not None: + minor = yaml.safe_load(parsed_args.minor) + for key in minor.keys(): + if key in cip_inc[0]['set'].keys(): + cip_inc[0]['set'][key] = minor[key] + if parsed_args.major is not None: + major = yaml.safe_load(parsed_args.major) + for key in major.keys(): + if key in cip_exc[0]['set'].keys(): + cip_exc[0]['set'][key] = major[key] + params_set = params['ContainerImagePrepare'][0]['set'] + if key in params_set.keys(): + params_set[key] = major[key] + base_role = [cip_exc[0], cip_inc[0]] + if parsed_args.rolefile != '': + read_roles = [] + if os.path.exists(parsed_args.rolefile): + with open(parsed_args.rolefile) as file: + roles = yaml.safe_load(file) + self.log.fatal('{} file'.format(parsed_args.rolefile)) + self.log.fatal('{} roles'.format(roles)) + for role in roles: + read_roles.append(role['name']) + else: + self.log.fatal('[ERROR] {} role file does' + ' not exits'.format(parsed_args.rolefile)) + roles = read_roles + else: + roles = parsed_args.roles + params['MultiRhelRoleContainerImagePrepare'] = base_role + for role in roles: + params[('{}ContainerImagePrepare').format(role)] = base_role + self.app.command_options = [word.replace("\n", "") + for word in self.app.command_options] env_data = build_env_file(params, self.app.command_options) self.app.stdout.write(env_data) if parsed_args.output_env_file: