def _collect_flavors(self, parsed_args): """Collect nova flavors in use. :returns: dictionary flavor name -> (flavor object, scale) """ compute_client = self.app.client_manager.compute flavors = {f.name: f for f in compute_client.flavors.list()} result = {} message = "Provided --{}-flavor, '{}', does not exist" for target, (flavor_name, scale) in (utils.get_roles_info(parsed_args).items()): if flavor_name is None or not scale: self.log.debug("--{}-flavor not used".format(target)) continue try: flavor = flavors[flavor_name] except KeyError: raise exceptions.ProfileMatchingError( message.format(target, flavor_name)) result[flavor_name] = (flavor, scale) return result
def _collect_flavors(self, parsed_args): """Collect nova flavors in use. :returns: dictionary flavor name -> (flavor object, scale) """ compute_client = self.app.client_manager.compute flavors = {f.name: f for f in compute_client.flavors.list()} result = {} message = "Provided --{}-flavor, '{}', does not exist" for target, (flavor_name, scale) in ( utils.get_roles_info(parsed_args).items() ): if flavor_name is None or not scale: self.log.debug("--{}-flavor not used".format(target)) continue try: flavor = flavors[flavor_name] except KeyError: raise exceptions.ProfileMatchingError( message.format(target, flavor_name)) result[flavor_name] = (flavor, scale) return result
def _collect_flavors(self, parsed_args): """Validate and collect nova flavors in use. Ensure that selected flavors (--ROLE-flavor) are valid in nova. Issue a warning of local boot is not set for a flavor. :returns: dictionary flavor name -> (flavor object, scale) """ compute_client = self.app.client_manager.compute flavors = {f.name: f for f in compute_client.flavors.list()} result = {} message = "Provided --{}-flavor, '{}', does not exist" for target, (flavor_name, scale) in ( utils.get_roles_info(parsed_args).items() ): if flavor_name is None or not scale: self.log.debug("--{}-flavor not used".format(target)) continue try: flavor, old_scale = result[flavor_name] except KeyError: pass else: result[flavor_name] = (flavor, old_scale + scale) continue try: flavor = flavors[flavor_name] except KeyError: self.predeploy_errors += 1 self.log.error(message.format(target, flavor_name)) continue if flavor.get_keys().get('capabilities:boot_option', '') \ != 'local': self.predeploy_warnings += 1 self.log.warning( 'Flavor %s "capabilities:boot_option" is not set to ' '"local". Nodes must have ability to PXE boot from ' 'deploy image.', flavor_name) self.log.warning( 'Recommended solution: openstack flavor set --property ' '"cpu_arch"="x86_64" --property ' '"capabilities:boot_option"="local" ' + flavor_name) result[flavor_name] = (flavor, scale) return result
def _predeploy_verify_capabilities(self, stack, parameters, parsed_args): self.predeploy_errors = 0 self.predeploy_warnings = 0 self.log.debug("Starting _pre_verify_capabilities") validation_params = { 'deploy_kernel_name': 'bm-deploy-kernel', 'deploy_ramdisk_name': 'bm-deploy-ramdisk', 'roles_info': utils.get_roles_info(parsed_args), 'stack_id': parsed_args.stack, 'parameters': parameters, 'default_role_counts': self._get_default_role_counts(parsed_args), 'run_validations': True, } errors, warnings = validations.check_predeployment_validations( self.app.client_manager, **validation_params) self.predeploy_errors += errors self.predeploy_warnings += warnings return self.predeploy_errors, self.predeploy_warnings