def _deploy_arm_template_core(resource_group_name, deployment_name, template_file_path, parameters_file_path=None, mode='incremental', validate_only=False): from azure.mgmt.resource.resources.models import DeploymentProperties parameters = None if parameters_file_path: parameters = get_file_json(parameters_file_path) if parameters: parameters = parameters.get('parameters', parameters) template = get_file_json(template_file_path) properties = DeploymentProperties(template=template, parameters=parameters, mode=mode) smc = get_mgmt_service_client(ResourceManagementClient) if validate_only: return smc.deployments.validate(resource_group_name, deployment_name, properties) else: return smc.deployments.create_or_update(resource_group_name, deployment_name, properties)
def _deploy_arm_template_core(resource_group_name, template_file=None, template_uri=None, deployment_name=None, parameters=None, mode='incremental', validate_only=False, no_wait=False): from azure.mgmt.resource.resources.models import DeploymentProperties, TemplateLink if bool(template_uri) == bool(template_file): raise CLIError('please provide either template file path or uri, but not both') if parameters: parameters = json.loads(parameters) if parameters: parameters = parameters.get('parameters', parameters) template = None template_link = None if template_uri: template_link = TemplateLink(uri=template_uri) else: template = get_file_json(template_file) properties = DeploymentProperties(template=template, template_link=template_link, parameters=parameters, mode=mode) smc = get_mgmt_service_client(ResourceManagementClient) if validate_only: return smc.deployments.validate(resource_group_name, deployment_name, properties, raw=no_wait) else: return smc.deployments.create_or_update(resource_group_name, deployment_name, properties, raw=no_wait)
def create_role_definition(role_definition): role_id = uuid.uuid4() if os.path.exists(role_definition): role_definition = get_file_json(role_definition) else: role_definition = json.loads(role_definition) #to workaround service defects, ensure property names are camel case names = [p for p in role_definition if p[:1].isupper()] for n in names: new_name = n[:1].lower() + n[1:] role_definition[new_name] = role_definition.pop(n) if not 'name' in role_definition: raise CLIError("please provide 'name'") if not 'assignableScopes' in role_definition: raise CLIError("please provide 'assignableScopes'") permission = Permission(actions=role_definition.get('actions', None), not_actions=role_definition.get('notActions', None)) properties = RoleDefinitionProperties(role_name=role_definition['name'], description=role_definition.get('description', None), type=_CUSTOM_RULE, assignable_scopes=role_definition['assignableScopes'], permissions=[permission]) definition = RoleDefinition(name=role_id, properties=properties) definitions_client = _auth_client_factory().role_definitions return definitions_client.create_or_update(role_definition_id=role_id, scope=properties.assignable_scopes[0], role_definition=definition)
def arm_deploy_template_new_storage(resource_group_name, #pylint: disable=too-many-arguments registry_name, location, sku, storage_account_name, admin_user_enabled, deployment_name=None): '''Deploys ARM template to create a container registry with a new storage account. :param str resource_group_name: The name of resource group :param str registry_name: The name of container registry :param str location: The name of location :param str sku: The SKU of the container registry :param str storage_account_name: The name of storage account :param bool admin_user_enabled: Enable admin user :param str deployment_name: The name of the deployment ''' from azure.mgmt.resource.resources.models import DeploymentProperties from azure.cli.core._util import get_file_json import os parameters = _parameters( registry_name=registry_name, location=location, sku=sku, admin_user_enabled=admin_user_enabled, storage_account_name=storage_account_name) file_path = os.path.join(os.path.dirname(__file__), 'template.json') template = get_file_json(file_path) properties = DeploymentProperties(template=template, parameters=parameters, mode='incremental') return _arm_deploy_template( get_arm_service_client().deployments, resource_group_name, deployment_name, properties)
def test_load_json_from_file(self): _, pathname = tempfile.mkstemp() #test good case with open(pathname, 'w') as good_file: good_file.write('{"key1":"value1", "key2":"value2"}') result = get_file_json(pathname) self.assertEqual('value2', result['key2']) #test error case with open(pathname, 'w') as bad_file: try: bad_file.write('{"key1":"value1" "key2":"value2"}') get_file_json(pathname) self.fail('expect throw on reading from badly formatted file') except Exception as ex: #pylint: disable=broad-except self.assertTrue(str(ex).find( 'contains error: Expecting value: line 1 column 1 (char 0)'))
def create_policy_definition(name, rules, display_name=None, description=None): if os.path.exists(rules): rules = get_file_json(rules) else: rules = json.loads(rules) policy_client = _resource_policy_client_factory() parameters = PolicyDefinition(policy_rule=rules, description=description, display_name=display_name) return policy_client.policy_definitions.create_or_update(name, parameters)
def deploy_pools(self, new_pool_sizes): print('deploying') from azure.mgmt.resource.resources.models import DeploymentProperties, TemplateLink parameters = get_file_json('./azuredeploy.parameters.json') parameters = parameters.get('parameters', parameters) original_parameters = deepcopy(parameters) for pool_name in new_pool_sizes: parameters[pool_name + 'Count'] = {'value': new_pool_sizes[pool_name]} logger.info('Requested size for {}: {}'.format(pool_name, new_pool_sizes[pool_name])) template = get_file_json('./azuredeploy.json') properties = DeploymentProperties(template=template, template_link=None, parameters=parameters, mode='complete') smc = get_mgmt_service_client(ResourceManagementClient) op = smc.deployments.create_or_update(self.resource_group_name, "autoscale", properties, raw=False) while not op.done(): print("Waiting for operation to finish...") time.sleep(30) print(op.result())
def update_policy_definition(policy_definition_name, rules=None, display_name=None, description=None): if rules is not None: if os.path.exists(rules): rules = get_file_json(rules) else: rules = json.loads(rules) policy_client = _resource_policy_client_factory() definition = policy_client.policy_definitions.get(policy_definition_name) #pylint: disable=line-too-long,no-member parameters = PolicyDefinition(policy_rule=rules if rules is not None else definition.policy_rule, description=description if description is not None else definition.description, display_name=display_name if display_name is not None else definition.display_name) return policy_client.policy_definitions.create_or_update(policy_definition_name, parameters)
def _deploy_arm_template_core(resource_group_name, template_file=None, template_uri=None, deployment_name=None, parameter_list=None, mode='incremental', validate_only=False, no_wait=False): from azure.mgmt.resource.resources.models import DeploymentProperties, TemplateLink if bool(template_uri) == bool(template_file): raise CLIError( 'please provide either template file path or uri, but not both') parameters = _merge_parameters(parameter_list) template = None template_link = None if template_uri: template_link = TemplateLink(uri=template_uri) else: template = get_file_json(template_file) missing = _find_missing_parameters(parameters, template) if len(missing) > 0: prompt_parameters = _prompt_for_parameters(missing) for param_name in prompt_parameters: parameters[param_name] = prompt_parameters[param_name] properties = DeploymentProperties(template=template, template_link=template_link, parameters=parameters, mode=mode) smc = get_mgmt_service_client(ResourceManagementClient) if validate_only: return smc.deployments.validate(resource_group_name, deployment_name, properties, raw=no_wait) else: return smc.deployments.create_or_update(resource_group_name, deployment_name, properties, raw=no_wait)
def arm_deploy_template(resource_group_name, registry_name, location, storage_account_name, admin_user_enabled): '''Deploys ARM template to create a container registry with a new storage account. :param str resource_group_name: The name of resource group :param str registry_name: The name of container registry :param str location: The name of location :param str storage_account_name: The name of storage account :param bool admin_user_enabled: Enable admin user ''' from azure.mgmt.resource.resources.models import DeploymentProperties from azure.cli.core._util import get_file_json import os parameters = _parameters(registry_name, location, storage_account_name, admin_user_enabled) file_path = os.path.join(os.path.dirname(__file__), 'template.json') template = get_file_json(file_path) properties = DeploymentProperties(template=template, parameters=parameters, mode='incremental') return _arm_deploy_template( get_arm_service_client().deployments, resource_group_name, properties)
def arm_deploy_template(resource_group_name, registry_name, location, storage_account_name, admin_user_enabled): '''Deploys ARM template to create/update a container registry. :param str resource_group_name: The name of resource group :param str registry_name: The name of container registry :param str location: The name of location :param str storage_account_name: The name of storage account :param bool admin_user_enabled: Enable admin user ''' from azure.mgmt.resource.resources.models import DeploymentProperties from azure.cli.core._util import get_file_json import os parameters = _parameters(registry_name, location, storage_account_name, admin_user_enabled) storage_account_resource_group, _ = _parse_storage_account( storage_account_name) if storage_account_resource_group: file_path = os.path.join(os.path.dirname(__file__), 'template.existing.json') parameters['storageAccountResourceGroup'] = { 'value': storage_account_resource_group } else: file_path = os.path.join(os.path.dirname(__file__), 'template.new.json') parameters['storageAccountType'] = {'value': 'Standard_LRS'} template = get_file_json(file_path) properties = DeploymentProperties(template=template, parameters=parameters, mode='incremental') return _arm_deploy_template(get_arm_service_client().deployments, resource_group_name, properties)
def _load_tokens_from_file(file_path): all_entries = [] if os.path.isfile(file_path): all_entries = get_file_json(file_path, throw_on_empty=False) or [] return all_entries
def load_json(string_or_file_path): if os.path.exists(string_or_file_path): return get_file_json(string_or_file_path) else: return json.loads(string_or_file_path)
def _load_autoscale_settings_parameters(file_path): if not os.path.exists(file_path): raise CLIError('File {} not found.'.format(file_path)) return get_file_json(file_path)