func (d *Driver) Create() error {
	// NOTE(ahmetalpbalkan): We can probably parallelize the sh*t out of this.
	// However that would lead to a concurrency logic and while creation of a
	// resource fails, other ones would be kicked off, which could lead to a
	// resource leak. This is slower but safer.
	c, err := d.newAzureClient()
	if err != nil {
		return err
	}

	var customData string
	if d.CustomDataFile != "" {
		buf, err := ioutil.ReadFile(d.CustomDataFile)
		if err != nil {
			return err
		}
		customData = base64.StdEncoding.EncodeToString(buf)
	}

	if err := c.CreateResourceGroup(d.ResourceGroup, d.Location); err != nil {
		return err
	}
	if err := c.CreateAvailabilitySetIfNotExists(d.ctx, d.ResourceGroup, d.AvailabilitySet, d.Location); err != nil {
		return err
	}
	if err := c.CreateNetworkSecurityGroup(d.ctx, d.ResourceGroup, d.naming().NSG(), d.Location, d.ctx.FirewallRules); err != nil {
		return err
	}
	vnetResourceGroup, vNetName := parseVirtualNetwork(d.VirtualNetwork, d.ResourceGroup)
	if err := c.CreateVirtualNetworkIfNotExists(vnetResourceGroup, vNetName, d.Location); err != nil {
		return err
	}
	if err := c.CreateSubnet(d.ctx, vnetResourceGroup, vNetName, d.SubnetName, d.SubnetPrefix); err != nil {
		return err
	}
	if d.NoPublicIP {
		log.Info("Not creating a public IP address.")
	} else {
		if err := c.CreatePublicIPAddress(d.ctx, d.ResourceGroup, d.naming().IP(), d.Location, d.StaticPublicIP, d.DNSLabel); err != nil {
			return err
		}
	}
	if err := c.CreateNetworkInterface(d.ctx, d.ResourceGroup, d.naming().NIC(), d.Location,
		d.ctx.PublicIPAddressID, d.ctx.SubnetID, d.ctx.NetworkSecurityGroupID, d.PrivateIPAddr); err != nil {
		return err
	}
	if err := c.CreateStorageAccount(d.ctx, d.ResourceGroup, d.Location, storage.SkuName(d.StorageType)); err != nil {
		return err
	}
	if err := d.generateSSHKey(d.ctx); err != nil {
		return err
	}
	err = c.CreateVirtualMachine(d.ResourceGroup, d.naming().VM(), d.Location, d.Size, d.ctx.AvailabilitySetID,
		d.ctx.NetworkInterfaceID, d.BaseDriver.SSHUser, d.ctx.SSHPublicKey, d.Image, customData, d.ctx.StorageAccount)
	return err
}
func (d *Driver) Create() error {
	
	
	
	
	c, err := d.newAzureClient()
	if err != nil {
		return err
	}

	var customData string
	if d.CustomDataFile != "" {
		buf, err := ioutil.ReadFile(d.CustomDataFile)
		if err != nil {
			return err
		}
		customData = base64.StdEncoding.EncodeToString(buf)
	}

	if err := c.CreateResourceGroup(d.ResourceGroup, d.Location); err != nil {
		return err
	}
	if err := c.CreateAvailabilitySetIfNotExists(d.ctx, d.ResourceGroup, d.AvailabilitySet, d.Location); err != nil {
		return err
	}
	if err := c.CreateNetworkSecurityGroup(d.ctx, d.ResourceGroup, d.naming().NSG(), d.Location, d.ctx.FirewallRules); err != nil {
		return err
	}
	vnetResourceGroup, vNetName := parseVirtualNetwork(d.VirtualNetwork, d.ResourceGroup)
	if err := c.CreateVirtualNetworkIfNotExists(vnetResourceGroup, vNetName, d.Location); err != nil {
		return err
	}
	if err := c.CreateSubnet(d.ctx, vnetResourceGroup, vNetName, d.SubnetName, d.SubnetPrefix); err != nil {
		return err
	}
	if d.NoPublicIP {
		log.Info("Not creating a public IP address.")
	} else {
		if err := c.CreatePublicIPAddress(d.ctx, d.ResourceGroup, d.naming().IP(), d.Location, d.StaticPublicIP, d.DNSLabel); err != nil {
			return err
		}
	}
	if err := c.CreateNetworkInterface(d.ctx, d.ResourceGroup, d.naming().NIC(), d.Location,
		d.ctx.PublicIPAddressID, d.ctx.SubnetID, d.ctx.NetworkSecurityGroupID, d.PrivateIPAddr); err != nil {
		return err
	}
	if err := c.CreateStorageAccount(d.ctx, d.ResourceGroup, d.Location, storage.SkuName(d.StorageType)); err != nil {
		return err
	}
	if err := d.generateSSHKey(d.ctx); err != nil {
		return err
	}
	err = c.CreateVirtualMachine(d.ResourceGroup, d.naming().VM(), d.Location, d.Size, d.ctx.AvailabilitySetID,
		d.ctx.NetworkInterfaceID, d.BaseDriver.SSHUser, d.ctx.SSHPublicKey, d.Image, customData, d.ctx.StorageAccount)
	return err
}
func ( d * Driver ) Create ( ) error { // NOTE(ahmetalpbalkan): We can probably parallelize the sh*t out of this. // However that would lead to a concurrency logic and while creation of a // resource fails, other ones would be kicked off, which could lead to a // resource leak. This is slower but safer. c , err := d . newAzureClient ( ) if err != nil { return err } var customData string if d . CustomDataFile != " " { buf , err := ioutil . ReadFile ( d . CustomDataFile ) if err != nil { return err } customData = base64 . StdEncoding . EncodeToString ( buf ) } if err := c . CreateResourceGroup ( d . ResourceGroup , d . Location ) ; err != nil { return err } if err := c . CreateAvailabilitySetIfNotExists ( d . ctx , d . ResourceGroup , d . AvailabilitySet , d . Location ) ; err != nil { return err } if err := c . CreateNetworkSecurityGroup ( d . ctx , d . ResourceGroup , d . naming ( ) . NSG ( ) , d . Location , d . ctx . FirewallRules ) ; err != nil { return err } vnetResourceGroup , vNetName := parseVirtualNetwork ( d . VirtualNetwork , d . ResourceGroup ) if err := c . CreateVirtualNetworkIfNotExists ( vnetResourceGroup , vNetName , d . Location ) ; err != nil { return err } if err := c . CreateSubnet ( d . ctx , vnetResourceGroup , vNetName , d . SubnetName , d . SubnetPrefix ) ; err != nil { return err } if d . NoPublicIP { log . Info ( " " ) } else { if err := c . CreatePublicIPAddress ( d . ctx , d . ResourceGroup , d . naming ( ) . IP ( ) , d . Location , d . StaticPublicIP , d . DNSLabel ) ; err != nil { return err } } if err := c . CreateNetworkInterface ( d . ctx , d . ResourceGroup , d . naming ( ) . NIC ( ) , d . Location , d . ctx . PublicIPAddressID , d . ctx . SubnetID , d . ctx . NetworkSecurityGroupID , d . PrivateIPAddr ) ; err != nil { return err } if err := c . CreateStorageAccount ( d . ctx , d . ResourceGroup , d . Location , storage . SkuName ( d . StorageType ) ) ; err != nil { return err } if err := d . generateSSHKey ( d . ctx ) ; err != nil { return err } err = c . CreateVirtualMachine ( d . ResourceGroup , d . naming ( ) . VM ( ) , d . Location , d . Size , d . ctx . AvailabilitySetID , d . ctx . NetworkInterfaceID , d . BaseDriver . SSHUser , d . ctx . SSHPublicKey , d . Image , customData , d . ctx . StorageAccount ) return err }
// Create creates the virtual machine.
Create creates the virtual machine .