// initResourceGroup creates and initialises a resource group for this // environment. The resource group will have a storage account and a // subnet associated with it (but not necessarily contained within: // see subnet creation). func (env *azureEnviron) initResourceGroup() (*config.Config, error) { location := env.config.location tags, _ := env.config.ResourceTags() resourceGroupsClient := resources.GroupsClient{env.resources} logger.Debugf("creating resource group %q", env.resourceGroup) _, err := resourceGroupsClient.CreateOrUpdate(env.resourceGroup, resources.Group{ Location: to.StringPtr(location), Tags: toTagsPtr(tags), }) if err != nil { return nil, errors.Annotate(err, "creating resource group") } var vnetPtr *network.VirtualNetwork if env.resourceGroup == env.controllerResourceGroup { // Create an internal network for all VMs to connect to. vnetPtr, err = createInternalVirtualNetwork( env.network, env.controllerResourceGroup, location, tags, ) if err != nil { return nil, errors.Annotate(err, "creating virtual network") } } else { // We're creating a hosted environment, so we need to fetch // the virtual network to create a subnet below. vnetClient := network.VirtualNetworksClient{env.network} vnet, err := vnetClient.Get(env.controllerResourceGroup, internalNetworkName) if err != nil { return nil, errors.Annotate(err, "getting virtual network") } vnetPtr = &vnet } _, err = createInternalSubnet( env.network, env.resourceGroup, env.controllerResourceGroup, vnetPtr, location, tags, ) if err != nil { return nil, errors.Annotate(err, "creating subnet") } // Create a storage account for the resource group. storageAccountsClient := storage.AccountsClient{env.storage} storageAccountName, storageAccountKey, err := createStorageAccount( storageAccountsClient, env.config.storageAccountType, env.resourceGroup, location, tags, env.provider.config.StorageAccountNameGenerator, ) if err != nil { return nil, errors.Annotate(err, "creating storage account") } return env.config.Config.Apply(map[string]interface{}{ configAttrStorageAccount: storageAccountName, configAttrStorageAccountKey: storageAccountKey, }) }
func (env *azureEnviron) deleteResourceGroup() error { client := resources.GroupsClient{env.resources} result, err := client.Delete(env.resourceGroup) if err != nil { if result.Response == nil || result.StatusCode != http.StatusNotFound { return errors.Annotatef(err, "deleting resource group %q", env.resourceGroup) } } return nil }
// initResourceGroup creates and initialises a resource group for this // environment. The resource group will have a storage account and a // subnet associated with it (but not necessarily contained within: // see subnet creation). func (env *azureEnviron) initResourceGroup() (*config.Config, error) { location := env.config.location tags := tags.ResourceTags( names.NewModelTag(env.config.Config.UUID()), names.NewModelTag(env.config.Config.ControllerUUID()), env.config, ) resourceGroupsClient := resources.GroupsClient{env.resources} logger.Debugf("creating resource group %q", env.resourceGroup) _, err := resourceGroupsClient.CreateOrUpdate(env.resourceGroup, resources.Group{ Location: to.StringPtr(location), Tags: toTagsPtr(tags), }) if err != nil { return nil, errors.Annotate(err, "creating resource group") } // Create an internal network for all VMs in the // resource group to connect to. vnetPtr, err := createInternalVirtualNetwork( env.network, env.resourceGroup, location, tags, ) if err != nil { return nil, errors.Annotate(err, "creating virtual network") } _, err = createInternalSubnet( env.network, env.resourceGroup, vnetPtr, location, tags, ) if err != nil { return nil, errors.Annotate(err, "creating subnet") } // Create a storage account for the resource group. storageAccountsClient := storage.AccountsClient{env.storage} storageAccountName, storageAccountKey, err := createStorageAccount( storageAccountsClient, env.config.storageAccountType, env.resourceGroup, location, tags, env.provider.config.StorageAccountNameGenerator, ) if err != nil { return nil, errors.Annotate(err, "creating storage account") } return env.config.Config.Apply(map[string]interface{}{ configAttrStorageAccount: storageAccountName, configAttrStorageAccountKey: storageAccountKey, }) }