multi-rhel images prepare default

New arguments:
 --enable-multi-rhel : flag to create multi-rhel prepare
 --excludes: list of containers to include/exclude
 --minor-override: tags to override on the minor release
 --major-override: tags to override on the mayor release
 --role: list of the roles
 --role-file: role_data.yaml patch

Example:

[stack@standalone ~]$ openstack tripleo container image prepare default \
 --enable-multi-rhel --excludes nova-compute \
 --excludes nova-libvirt   --excludes ovn-controller \
 --major-override "{'tag':'other_tag'}" \
 --minor-override "{'tag':'my_tag'}"  --role ComputeEL8

parameter_defaults:
  ComputeEL8ContainerImagePrepare:
  - excludes:
    - nova-compute
    - nova-libvirt
    - ovn-controller
    set:
      ceph_alertmanager_image: alertmanager
      ceph_alertmanager_namespace: quay.io/prometheus
      ceph_alertmanager_tag: v0.23.0
      ceph_grafana_image: ceph-grafana
      ceph_grafana_namespace: quay.io/ceph
      ceph_grafana_tag: 6.7.4
      ceph_haproxy_image: haproxy
      ceph_haproxy_namespace: quay.io/ceph
      ceph_haproxy_tag: 2.3
      ceph_image: daemon
      ceph_keepalived_image: keepalived
      ceph_keepalived_namespace: quay.io/ceph
      ceph_keepalived_tag: 2.1.5
      ceph_namespace: quay.rdoproject.org/tripleomastercentos9
      ceph_node_exporter_image: node-exporter
      ceph_node_exporter_namespace: quay.io/prometheus
      ceph_node_exporter_tag: v1.3.1
      ceph_prometheus_image: prometheus
      ceph_prometheus_namespace: quay.io/prometheus
      ceph_prometheus_tag: v2.33.4
      ceph_tag: current-ceph
      name_prefix: openstack-
      name_suffix: ''
      namespace: quay.io/tripleomastercentos9
      neutron_driver: ovn
      pushgateway_image: pushgateway
      pushgateway_namespace: quay.io/prometheus
      pushgateway_tag: v1.4.2
      rhel_containers: false
      tag: other_tag
    tag_from_label: rdo_version
  - includes:
    - nova-compute
    - nova-libvirt
    - ovn-controller
    set:
      ceph_alertmanager_image: alertmanager
      ceph_alertmanager_namespace: quay.io/prometheus
      ceph_alertmanager_tag: v0.23.0
      ceph_grafana_image: ceph-grafana
      ceph_grafana_namespace: quay.io/ceph
      ceph_grafana_tag: 6.7.4
      ceph_haproxy_image: haproxy
      ceph_haproxy_namespace: quay.io/ceph
      ceph_haproxy_tag: 2.3
      ceph_image: daemon
      ceph_keepalived_image: keepalived
      ceph_keepalived_namespace: quay.io/ceph
      ceph_keepalived_tag: 2.1.5
      ceph_namespace: quay.rdoproject.org/tripleomastercentos9
      ceph_node_exporter_image: node-exporter
      ceph_node_exporter_namespace: quay.io/prometheus
      ceph_node_exporter_tag: v1.3.1
      ceph_prometheus_image: prometheus
      ceph_prometheus_namespace: quay.io/prometheus
      ceph_prometheus_tag: v2.33.4
      ceph_tag: current-ceph
      name_prefix: openstack-
      name_suffix: ''
      namespace: quay.io/tripleomastercentos9
      neutron_driver: ovn
      pushgateway_image: pushgateway
      pushgateway_namespace: quay.io/prometheus
      pushgateway_tag: v1.4.2
      rhel_containers: false
      tag: my_tag
    tag_from_label: rdo_version
  ContainerImagePrepare:
  - set:
      ceph_alertmanager_image: alertmanager
      ceph_alertmanager_namespace: quay.io/prometheus
      ceph_alertmanager_tag: v0.23.0
      ceph_grafana_image: ceph-grafana
      ceph_grafana_namespace: quay.io/ceph
      ceph_grafana_tag: 6.7.4
      ceph_haproxy_image: haproxy
      ceph_haproxy_namespace: quay.io/ceph
      ceph_haproxy_tag: 2.3
      ceph_image: daemon
      ceph_keepalived_image: keepalived
      ceph_keepalived_namespace: quay.io/ceph
      ceph_keepalived_tag: 2.1.5
      ceph_namespace: quay.rdoproject.org/tripleomastercentos9
      ceph_node_exporter_image: node-exporter
      ceph_node_exporter_namespace: quay.io/prometheus
      ceph_node_exporter_tag: v1.3.1
      ceph_prometheus_image: prometheus
      ceph_prometheus_namespace: quay.io/prometheus
      ceph_prometheus_tag: v2.33.4
      ceph_tag: current-ceph
      name_prefix: openstack-
      name_suffix: ''
      namespace: quay.io/tripleomastercentos9
      neutron_driver: ovn
      pushgateway_image: pushgateway
      pushgateway_namespace: quay.io/prometheus
      pushgateway_tag: v1.4.2
      rhel_containers: false
      tag: other_tag
    tag_from_label: rdo_version

Change-Id: Ib834234c57ff525bb2f7a4993534515091a7138a
This commit is contained in:
Juan Badia Payno 2023-01-11 16:51:56 +01:00
parent 21d95d299f
commit 37a6982605
1 changed files with 86 additions and 2 deletions

View File

@ -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: