def do_plan_scale(tuskar, args, outfile=sys.stdout): """Scale plan by changing count of roles.""" roles = tuskar.roles.list() plan = utils.find_resource(tuskar.plans, args.plan_uuid) attributes = [] for role in roles: versioned_name = "{name}-{v}".format(name=role.name, v=role.version) if versioned_name == args.role_name: role_name_key = versioned_name + "::count" attributes.append({'name': role_name_key, 'value': args.count}) old_val = [ p['value'] for p in plan.parameters if p['name'] == role_name_key ][0] if old_val != args.count: print("Scaling {role} count: {old_val} -> {new_val}".format( role=args.role_name, old_val=old_val, new_val=args.count), file=outfile) else: print("Keeping scale {role} count: {count}".format( role=args.role_name, count=old_val), file=outfile) return if attributes: return tuskar.plans.patch(args.plan_uuid, attributes) else: print( "ERROR: no roles were found in the Plan with the name {0}".format( args.role_name), file=sys.stderr)
def do_plan_scale(tuskar, args, outfile=sys.stdout): """Scale plan by changing count of roles.""" roles = tuskar.roles.list() plan = utils.find_resource(tuskar.plans, args.plan_uuid) attributes = [] for role in roles: versioned_name = "{name}-{v}".format(name=role.name, v=role.version) if versioned_name == args.role_name: role_name_key = versioned_name + "::count" attributes.append({'name': role_name_key, 'value': args.count}) old_val = [p['value'] for p in plan.parameters if p['name'] == role_name_key][0] if old_val != args.count: print("Scaling {role} count: {old_val} -> {new_val}".format( role=args.role_name, old_val=old_val, new_val=args.count ), file=outfile) else: print("Keeping scale {role} count: {count}".format( role=args.role_name, count=old_val), file=outfile) return if attributes: return tuskar.plans.patch(args.plan_uuid, attributes) else: print("ERROR: no roles were found in the Plan with the name {0}". format(args.role_name), file=sys.stderr)
def do_plan_flavor(tuskar, args, outfile=sys.stdout): """Change flavor of role in the plan.""" roles = tuskar.roles.list() plan = utils.find_resource(tuskar.plans, args.plan_uuid) attributes = [] for role in roles: versioned_name = "{name}-{v}".format(name=role.name, v=role.version) if versioned_name == args.role_name: role_name_key = versioned_name + "::Flavor" attributes.append({'name': role_name_key, 'value': args.flavor}) old_val = [p['value'] for p in plan.parameters if p['name'] == role_name_key][0] if old_val != args.flavor: print("Changing {role} flavor: {old_val} -> {new_val}".format( role=args.role_name, old_val=old_val, new_val=args.flavor ), file=outfile) else: print("Keeping flavor {role} unchanged: {flavor}".format( role=args.role_name, flavor=old_val), file=outfile) return if attributes: return tuskar.plans.patch(args.plan_uuid, attributes) else: print("ERROR: no roles were found in the Plan with the name {0}". format(args.role_name), file=sys.stderr)
def do_plan_flavor(tuskar, args, outfile=sys.stdout): """Change flavor of role in the plan.""" roles = tuskar.roles.list() plan = utils.find_resource(tuskar.plans, args.plan_uuid) attributes = [] for role in roles: versioned_name = "{name}-{v}".format(name=role.name, v=role.version) if versioned_name == args.role_name: role_name_key = versioned_name + "::Flavor" attributes.append({'name': role_name_key, 'value': args.flavor}) old_val = [ p['value'] for p in plan.parameters if p['name'] == role_name_key ][0] if old_val != args.flavor: print("Changing {role} flavor: {old_val} -> {new_val}".format( role=args.role_name, old_val=old_val, new_val=args.flavor), file=outfile) else: print("Keeping flavor {role} unchanged: {flavor}".format( role=args.role_name, flavor=old_val), file=outfile) return if attributes: return tuskar.plans.patch(args.plan_uuid, attributes) else: print( "ERROR: no roles were found in the Plan with the name {0}".format( args.role_name), file=sys.stderr)
def do_overcloud_update(tuskar, args, outfile=sys.stdout): """Update an existing Overcloud by its ID or name.""" overcloud = utils.find_resource(tuskar.overclouds, args.overcloud) overcloud_roles = tuskar.overcloud_roles.list() overcloud_dict = create_overcloud_dict(args, overcloud_roles) updated_overcloud = tuskar.overclouds.update(overcloud.id, **overcloud_dict) print_overcloud_detail(updated_overcloud, outfile=outfile)
def do_overcloud_role_update(tuskar, args, outfile=sys.stdout): """Update an existing Overcloud Role by its ID or name.""" overcloud_role = utils.find_resource(tuskar.overcloud_roles, args.role) overcloud_role_dict = create_overcloud_role_dict(args) updated_overcloud_role = tuskar.overcloud_roles.update( overcloud_role.id, **overcloud_role_dict ) print_role_detail(updated_overcloud_role, outfile=outfile)
def __init__(self, heatclient, stack_id, tuskarclient=None, plan_id=None, tht_dir=None, environment_files=None): self.tuskarclient = tuskarclient self.heatclient = heatclient self.stack_id = stack_id self.tht_dir = tht_dir self.environment_files = environment_files if self.tuskarclient: self.plan = tuskarutils.find_resource(self.tuskarclient.plans, plan_id)
def __init__(self, heatclient, novaclient, stack_id, tuskarclient=None, plan_id=None, tht_dir=None, environment_files=None): stack = heatclient.stacks.get(stack_id) self.tuskarclient = tuskarclient self.plan_id = plan_id self.tht_dir = tht_dir self.hook_resource = 'UpdateDeployment' if self.tuskarclient: self.plan = tuskarutils.find_resource(self.tuskarclient.plans, self.plan_id) self.environment_files = environment_files super(PackageUpdateManager, self).__init__( heatclient=heatclient, novaclient=novaclient, stack=stack, hook_type='pre-update', nested_depth=5, hook_resource=self.hook_resource)
def do_rack_show(tuskar, args): try: rack = utils.find_resource(tuskar.racks, args.id) except exc.HTTPNotFound: raise exc.CommandError("Rack not found: %s" % args.id) formatters = { 'capacities': fmt.capacities_formatter, 'chassis': fmt.resource_link_formatter, 'links': fmt.links_formatter, 'nodes': fmt.resource_links_formatter, 'resource_class': fmt.resource_link_formatter, } rack_dict = rack.to_dict() # Workaround for API inconsistency, where empty chassis link # prints out as '{}'. if 'chassis' in rack_dict and not rack_dict['chassis']: del rack_dict['chassis'] fmt.print_dict(rack_dict, formatters)
def __init__(self, heatclient, tuskarclient, stack_id, plan_id=None): self.tuskarclient = tuskarclient self.heatclient = heatclient self.stack = heatclient.stacks.get(stack_id) self.plan = tuskarutils.find_resource(self.tuskarclient.plans, plan_id)
def __init__(self, tuskarclient, heatclient, plan_id=None, stack_id=None): self.tuskarclient = tuskarclient self.heatclient = heatclient self.stack_id = stack_id self.plan = tuskarutils.find_resource(self.tuskarclient.plans, plan_id)
def _deploy_tuskar(self, stack, parsed_args): clients = self.app.client_manager management = clients.rdomanager_oscplugin.management() network_client = clients.network # TODO(dmatthews): The Tuskar client has very similar code to this for # downloading templates. It should be refactored upstream so we can use # it. if parsed_args.output_dir: output_dir = parsed_args.output_dir else: output_dir = tempfile.mkdtemp() if not os.path.isdir(output_dir): os.mkdir(output_dir) management_plan = tuskarutils.find_resource(management.plans, parsed_args.plan) # retrieve templates templates = management.plans.templates(management_plan.uuid) parameters = self._update_paramaters(parsed_args, network_client, stack) if stack is None: ca_key_pem, ca_cert_pem = keystone_pki.create_ca_pair() signing_key_pem, signing_cert_pem = ( keystone_pki.create_signing_pair(ca_key_pem, ca_cert_pem)) parameters['Controller-1::KeystoneCACertificate'] = ca_cert_pem parameters['Controller-1::KeystoneSigningCertificate'] = ( signing_cert_pem) parameters['Controller-1::KeystoneSigningKey'] = signing_key_pem # Save the parameters to Tuskar so they can be used when redeploying. # Tuskar expects to get all values as strings. So we convert them all # below. management.plans.patch(management_plan.uuid, [{ 'name': x[0], 'value': six.text_type(x[1]) } for x in parameters.items()]) # write file for each key-value in templates print("The following templates will be written:") for template_name, template_content in templates.items(): # It's possible to organize the role templates and their dependent # files into directories, in which case the template_name will # carry the directory information. If that's the case, first # create the directory structure (if it hasn't already been # created by another file in the templates list). template_dir = os.path.dirname(template_name) output_template_dir = os.path.join(output_dir, template_dir) if template_dir and not os.path.exists(output_template_dir): os.makedirs(output_template_dir) filename = os.path.join(output_dir, template_name) with open(filename, 'w+') as template_file: template_file.write(template_content) print(filename) overcloud_yaml = os.path.join(output_dir, 'plan.yaml') environment_yaml = os.path.join(output_dir, 'environment.yaml') environments = [ environment_yaml, ] if parsed_args.rhel_reg: reg_env = self._create_registration_env(parsed_args) environments.extend(reg_env) if parsed_args.environment_files: environments.extend(parsed_args.environment_files) self._heat_deploy(stack, overcloud_yaml, parameters, environments, parsed_args.timeout)
def do_plan_delete(tuskar, args, outfile=sys.stdout): """Delete an plan by its UUID.""" plan = utils.find_resource(tuskar.plans, args.plan) tuskar.plans.delete(plan.uuid) print(u'Deleted Plan "%s".' % plan.name, file=outfile)
def do_plan_show_flavors(tuskar, args, outfile=sys.stdout): """Show flavors assigned to roles of Plan.""" plan = utils.find_resource(tuskar.plans, args.plan) flavors = filter_parameters_to_dict(plan.parameters, 'Flavor') fmt.print_dict(flavors, outfile=outfile)
def do_overcloud_delete(tuskar, args, outfile=sys.stdout): """Delete an Overcloud by its ID or name.""" overcloud = utils.find_resource(tuskar.overclouds, args.overcloud) tuskar.overclouds.delete(overcloud.id) print(u'Deleted Overcloud "%s".' % overcloud.name, file=outfile)
def do_overcloud_show(tuskar, args, outfile=sys.stdout): """Show an individual Overcloud by its ID or name.""" overcloud = utils.find_resource(tuskar.overclouds, args.overcloud) print_overcloud_detail(overcloud, outfile=outfile)
def test_with_name(self): overcloud = utils.find_resource(self.manager, 'My Overcloud 1') self.assertEqual(self.overcloud1, overcloud)
def test_with_id(self): overcloud = utils.find_resource(self.manager, '1') self.manager.get.assert_called_with(1) self.assertEqual(self.overcloud1, overcloud)
def do_plan_show_scale(tuskar, args, outfile=sys.stdout): """Show scale counts of Plan.""" plan = utils.find_resource(tuskar.plans, args.plan) scales = filter_parameters_to_dict(plan.parameters, 'count') fmt.print_dict(scales, outfile=outfile)
def do_overcloud_role_delete(tuskar, args, outfile=sys.stdout): """Delete an Overcloud Role by its ID or name.""" overcloud_role = utils.find_resource(tuskar.overcloud_roles, args.role) tuskar.overcloud_roles.delete(overcloud_role.id) print(u'Deleted Overcloud Role "%s".' % overcloud_role.name, file=outfile)
def do_plan_show(tuskar, args, outfile=sys.stdout): """Show an individual Plan by its UUID.""" plan = utils.find_resource(tuskar.plans, args.plan) print_plan_detail(plan, outfile=outfile)
def _deploy_tuskar(self, stack, parsed_args): clients = self.app.client_manager management = clients.rdomanager_oscplugin.management() network_client = clients.network # TODO(dmatthews): The Tuskar client has very similar code to this for # downloading templates. It should be refactored upstream so we can use # it. if parsed_args.output_dir: output_dir = parsed_args.output_dir else: output_dir = tempfile.mkdtemp() if not os.path.isdir(output_dir): os.mkdir(output_dir) management_plan = tuskarutils.find_resource( management.plans, parsed_args.plan) # retrieve templates templates = management.plans.templates(management_plan.uuid) parameters = self._update_paramaters( parsed_args, network_client, stack) if stack is None: ca_key_pem, ca_cert_pem = keystone_pki.create_ca_pair() signing_key_pem, signing_cert_pem = ( keystone_pki.create_signing_pair(ca_key_pem, ca_cert_pem)) parameters['Controller-1::KeystoneCACertificate'] = ca_cert_pem parameters['Controller-1::KeystoneSigningCertificate'] = ( signing_cert_pem) parameters['Controller-1::KeystoneSigningKey'] = signing_key_pem # Save the parameters to Tuskar so they can be used when redeploying. # Tuskar expects to get all values as strings. So we convert them all # below. management.plans.patch( management_plan.uuid, [{'name': x[0], 'value': six.text_type(x[1])} for x in parameters.items()] ) # write file for each key-value in templates print("The following templates will be written:") for template_name, template_content in templates.items(): # It's possible to organize the role templates and their dependent # files into directories, in which case the template_name will # carry the directory information. If that's the case, first # create the directory structure (if it hasn't already been # created by another file in the templates list). template_dir = os.path.dirname(template_name) output_template_dir = os.path.join(output_dir, template_dir) if template_dir and not os.path.exists(output_template_dir): os.makedirs(output_template_dir) filename = os.path.join(output_dir, template_name) with open(filename, 'w+') as template_file: template_file.write(template_content) print(filename) overcloud_yaml = os.path.join(output_dir, 'plan.yaml') environment_yaml = os.path.join(output_dir, 'environment.yaml') environments = [environment_yaml, ] if parsed_args.rhel_reg: reg_env = self._create_registration_env(parsed_args) environments.extend(reg_env) if parsed_args.environment_files: environments.extend(parsed_args.environment_files) self._heat_deploy(stack, overcloud_yaml, parameters, environments, parsed_args.timeout)
def do_overcloud_role_show(tuskar, args, outfile=sys.stdout): """Show an individual Overcloud Role by its ID or name.""" overcloud_role = utils.find_resource(tuskar.overcloud_roles, args.role) print_role_detail(overcloud_role, outfile=outfile)