def create_account(self): self.log("Creating account {0}".format(self.name)) if not self.location: self.fail( 'Parameter error: location required when creating a storage account.' ) if not self.account_type: self.fail( 'Parameter error: account_type required when creating a storage account.' ) self.check_name_availability() self.results['changed'] = True if self.check_mode: account_dict = dict(location=self.location, account_type=self.account_type, name=self.name, resource_group=self.resource_group, tags=dict()) if self.tags: account_dict['tags'] = self.tags return account_dict sku = Sku(SkuName(self.account_type)) sku.tier = SkuTier.standard if 'Standard' in self.account_type else SkuTier.premium parameters = StorageAccountCreateParameters(sku, self.kind, self.location, tags=self.tags) self.log(str(parameters)) try: poller = self.storage_client.storage_accounts.create( self.resource_group, self.name, parameters) self.get_poller_result(poller) except CloudError as e: self.log('Error creating storage account.') self.fail("Failed to create account: {0}".format(str(e))) # the poller doesn't actually return anything return self.get_account()
def update_account(self): self.log('Update storage account {0}'.format(self.name)) if self.account_type: if self.account_type != self.account_dict['sku_name']: # change the account type if self.account_dict['sku_name'] in [SkuName.premium_lrs, SkuName.standard_zrs]: self.fail("Storage accounts of type {0} and {1} cannot be changed.".format( SkuName.premium_lrs, SkuName.standard_zrs)) if self.account_type in [SkuName.premium_lrs, SkuName.standard_zrs]: self.fail("Storage account of type {0} cannot be changed to a type of {1} or {2}.".format( self.account_dict['sku_name'], SkuName.premium_lrs, SkuName.standard_zrs)) self.results['changed'] = True self.account_dict['sku_name'] = self.account_type if self.results['changed'] and not self.check_mode: # Perform the update. The API only allows changing one attribute per call. try: self.log("sku_name: %s" % self.account_dict['sku_name']) self.log("sku_tier: %s" % self.account_dict['sku_tier']) sku = Sku(SkuName(self.account_dict['sku_name'])) sku.tier = SkuTier(self.account_dict['sku_tier']) parameters = StorageAccountUpdateParameters(sku=sku) self.storage_client.storage_accounts.update(self.resource_group, self.name, parameters) except Exception as exc: self.fail("Failed to update account type: {0}".format(str(exc))) if self.custom_domain: if not self.account_dict['custom_domain'] or self.account_dict['custom_domain'] != self.custom_domain: self.results['changed'] = True self.account_dict['custom_domain'] = self.custom_domain if self.results['changed'] and not self.check_mode: new_domain = CustomDomain(name=self.custom_domain['name'], use_sub_domain=self.custom_domain['use_sub_domain']) parameters = StorageAccountUpdateParameters(custom_domain=new_domain) try: self.storage_client.storage_accounts.update(self.resource_group, self.name, parameters) except Exception as exc: self.fail("Failed to update custom domain: {0}".format(str(exc))) if self.access_tier: if not self.account_dict['access_tier'] or self.account_dict['access_tier'] != self.access_tier: self.results['changed'] = True self.account_dict['access_tier'] = self.access_tier if self.results['changed'] and not self.check_mode: parameters = StorageAccountUpdateParameters(access_tier=self.access_tier) try: self.storage_client.storage_accounts.update(self.resource_group, self.name, parameters) except Exception as exc: self.fail("Failed to update access tier: {0}".format(str(exc))) update_tags, self.account_dict['tags'] = self.update_tags(self.account_dict['tags']) if update_tags: self.results['changed'] = True if not self.check_mode: parameters = StorageAccountUpdateParameters(tags=self.account_dict['tags']) try: self.storage_client.storage_accounts.update(self.resource_group, self.name, parameters) except Exception as exc: self.fail("Failed to update tags: {0}".format(str(exc)))