vm

package
v0.0.52 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 25, 2025 License: MIT Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const AzureArmCompute = "azure-arm-compute"
View Source
const (
	MIN_WINDOWS_OS_DISK_SIZE = 200
)

Variables

This section is empty.

Functions

func ExtractResourceGroupFromID

func ExtractResourceGroupFromID(ctx context.Context, id string) string

func FromCloudyVirtualMachine

func FromCloudyVirtualMachine(ctx context.Context, cloudyVM *models.VirtualMachine) armcompute.VirtualMachine

func GenerateInstallAvdScript added in v0.0.51

func GenerateInstallAvdScript(ctx context.Context, creds *cloudyazure.AzureCredentials, storageAccountName, containerName string, avdConfig *AVDInstallConfig, hostPoolToken string) (string, error)

func GenerateInstallSaltMinionScript added in v0.0.51

func GenerateInstallSaltMinionScript(ctx context.Context, creds *cloudyazure.AzureCredentials, storageAccountName, containerName string, saltConfig *SaltMinionInstallConfig) (string, error)

func GenerateJoinDomainScript added in v0.0.51

func GenerateJoinDomainScript(adConfig *ADJoinConfig) string

func GenerateRestartScript added in v0.0.51

func GenerateRestartScript() string

func GenerateScriptEnd added in v0.0.51

func GenerateScriptEnd() string

func GenerateScriptStart added in v0.0.51

func GenerateScriptStart() string

func IsAvailable

func IsAvailable(restrictions []*armcompute.ResourceSKURestrictions) bool

func IsInLocation

func IsInLocation(region string, locations []*string) bool

func LongIdToShortId

func LongIdToShortId(longId string) string

func SizeFromResource

func SizeFromResource(ctx context.Context, res *armcompute.ResourceSKU) *cloudyvm.VmSize

func ToCloudyVirtualMachine

func ToCloudyVirtualMachine(ctx context.Context, azVM *armcompute.VirtualMachine) *models.VirtualMachine

func ToCloudyVirtualMachineLocation

func ToCloudyVirtualMachineLocation(location *string) *models.VirtualMachineLocation

func ToCloudyVirtualMachineSize

func ToCloudyVirtualMachineSize(ctx context.Context, resource *armcompute.ResourceSKU) *models.VirtualMachineSize

func UpdateCloudyVirtualMachine

func UpdateCloudyVirtualMachine(vm *models.VirtualMachine, responseVirtualMachine armcompute.VirtualMachine) error

func VMAddTag

func VMAddTag(ctx context.Context)

func VMGetPowerState

func VMGetPowerState(vm *armcompute.VirtualMachine) string

Types

type ADJoinConfig added in v0.0.51

type ADJoinConfig struct {
	DomainName             string
	DomainUsername         string
	DomainPassword         string
	OrganizationalUnitPath *string // optional, nil is not specified
}

ADJoinConfig defines the settings required for Active Directory Join

type AVDInstallConfig added in v0.0.51

type AVDInstallConfig struct {
	AVDAgentInstallerFilename      string
	AVDBootloaderInstallerFilename string
}

AVDInstallConfig defines the settings required for AVD installation

type AzureVMController

type AzureVMController struct {
	Vault  *keyvault.KeyVault
	Client *armcompute.VirtualMachinesClient
	Usage  *armcompute.UsageClient
	Config *AzureVMControllerConfig
	// contains filtered or unexported fields
}

func NewAzureVMController

func NewAzureVMController(ctx context.Context, config *AzureVMControllerConfig) (*AzureVMController, error)

func (*AzureVMController) ConfigureDiskSize

func (vmc *AzureVMController) ConfigureDiskSize(ctx context.Context, vm *cloudyvm.VirtualMachineConfiguration) (int32, error)

func (*AzureVMController) ConfigureVmOsDiskOsTypeType

func (*AzureVMController) ConfigureVmOsProfile

func (*AzureVMController) CreateNIC

CreateNIC - Creates the Network Interface for the virtual machine. It mimics the terraform code listed below. The elements used by this method are: - VM Name / ID (from vm) - Region (from factory) - Resource Group (from factory) - Subnet ID (from vm)

Once created the NIC has an ID and an IP address that we care about. The VirtualMachineConfiguration input is mutated to add the appropriate information.

 az network nic create \
 	--resource-group go-on-azure  \
	--vnet-name go-on-azure-vmVNET \
	--subnet go-on-azure-vmSubnet \
	--name uvm-gotest-ip
resource "azurerm_network_interface" "main-nic" {
    name                      = join("-", [var.vdi-name, random_string.random.result])
    location                  = data.azurerm_resource_group.main-rg.location
    resource_group_name       = data.azurerm_resource_group.main-rg.name

	ip_configuration {
		name                          = join("-", [var.vdi-name, "IP"])
		subnet_id                     = data.azurerm_subnet.main-subnet.id
		private_ip_address_allocation = "Dynamic"
    }
}

NOT WORKING YET

func (*AzureVMController) CreateNSG

data "azurerm_network_security_group" "vdi-security-group" {
    name = var.vdi-nsg
    resource_group_name = data.azurerm_resource_group.main-rg.name
}

func (*AzureVMController) CreateVirtualMachine

func (vmc *AzureVMController) CreateVirtualMachine(ctx context.Context, vm *cloudyvm.VirtualMachineConfiguration) error

CreateVirtualMachine

resource "azurerm_linux_virtual_machine" "main-vm" {
    name                    = var.vdi-name
    computer_name           = var.vdi-name
    admin_username          = "salt"
    resource_group_name     = var.app-rg-name
    location                = var.def-location
    size                    = var.vdi-size
    source_image_id         = "/subscriptions/${var.subscription-id}/resourceGroups/${var.app-rg-name}/providers/Microsoft.Compute/galleries/${var.source-image-gallery-name}/images/${var.source-image}/versions/${var.source-image-version}"
    network_interface_ids   = [
        azurerm_network_interface.main-nic.id,
    ]

    admin_ssh_key {
        username = "salt"
        public_key = file("${path.module}/vdi-terraform_id_rsa.pub")
    }

    os_disk {
        caching              = "ReadWrite"
        storage_account_type = "Standard_LRS"
    }

    tags = {
        Application            = "SKYBORG"
        "Functional Area "     = "VDI"
        "User Principle Name"  = var.user-principle-name
    }
}

func (*AzureVMController) DeleteNIC

func (vmc *AzureVMController) DeleteNIC(ctx context.Context, vmId string, nicName string) error

func (*AzureVMController) DeleteVM

func (*AzureVMController) DeleteVMOSDisk

func (*AzureVMController) FindBestSubnet

func (vmc *AzureVMController) FindBestSubnet(ctx context.Context, availableSubnets []string) (string, error)

Finds the best subnet based on IP availabilty

func (*AzureVMController) GetAvailableIPS

func (vmc *AzureVMController) GetAvailableIPS(ctx context.Context, subnet string) (int, error)

Finds the best subnet based on IP availabilty

func (*AzureVMController) GetLatestImageVersion

func (vmc *AzureVMController) GetLatestImageVersion(ctx context.Context, imageName string) (string, error)

func (*AzureVMController) GetLimits

func (*AzureVMController) GetNIC

Find NIC if it already exists

func (*AzureVMController) GetNSG

func (*AzureVMController) GetVM

Find VM if it already exists

func (*AzureVMController) GetVMSize

func (vmc *AzureVMController) GetVMSize(ctx context.Context, size string) (*cloudyvm.VmSize, error)

func (*AzureVMController) GetVMSizes

func (vmc *AzureVMController) GetVMSizes(ctx context.Context) (map[string]*cloudyvm.VmSize, error)

func (*AzureVMController) GetVmOsDisk

func (*AzureVMController) ListAll

func (*AzureVMController) ListWithTag

func (vmc *AzureVMController) ListWithTag(ctx context.Context, tag string) ([]*cloudyvm.VirtualMachineStatus, error)

func (*AzureVMController) SetState

func (*AzureVMController) Start

func (vmc *AzureVMController) Start(ctx context.Context, vmName string, wait bool) error

func (*AzureVMController) Status

func (*AzureVMController) Stop

func (vmc *AzureVMController) Stop(ctx context.Context, vmName string, wait bool) error

func (*AzureVMController) Terminate

func (vmc *AzureVMController) Terminate(ctx context.Context, vmName string, wait bool) error

func (*AzureVMController) ValidateConfiguration

func (vmc *AzureVMController) ValidateConfiguration(ctx context.Context, vm *cloudyvm.VirtualMachineConfiguration) error

type AzureVMControllerConfig

type AzureVMControllerConfig struct {
	cloudyazure.AzureCredentials
	SubscriptionID string
	ResourceGroup  string

	// ??
	NetworkResourceGroup            string // From Environment Variable
	SourceImageGalleryResourceGroup string
	SourceImageGalleryName          string   // From Environment Variable
	Vnet                            string   // From Environment Variable
	AvailableSubnets                []string // From Environment Variable
	NetworkSecurityGroupName        string   // From Environment Variable
	NetworkSecurityGroupID          string   // From Environment Variable
	// SaltCmd                         string   // From Environment Variable
	VaultURL string

	DomainControllerOverride string
	DomainControllers        []*string // From Environment Variable

	LogBody bool
}

type AzureVMControllerFactory

type AzureVMControllerFactory struct{}

func (*AzureVMControllerFactory) Create

func (f *AzureVMControllerFactory) Create(cfg interface{}) (cloudyvm.VMController, error)

func (*AzureVMControllerFactory) FromEnv

func (f *AzureVMControllerFactory) FromEnv(env *cloudy.Environment) (interface{}, error)

type AzureVirtualMachineManager

type AzureVirtualMachineManager struct {
	LogBody bool
	// contains filtered or unexported fields
}

func (*AzureVirtualMachineManager) Configure

func (vmm *AzureVirtualMachineManager) Configure(ctx context.Context) error

func (*AzureVirtualMachineManager) Create

func (*AzureVirtualMachineManager) CreateNic

func (*AzureVirtualMachineManager) Deallocate

func (vmm *AzureVirtualMachineManager) Deallocate(ctx context.Context, vmName string) error

func (*AzureVirtualMachineManager) Delete

func (vmm *AzureVirtualMachineManager) Delete(ctx context.Context, vmId string) error

func (*AzureVirtualMachineManager) DeleteDisk

func (vmm *AzureVirtualMachineManager) DeleteDisk(ctx context.Context, diskName string) error

func (*AzureVirtualMachineManager) DeleteNic

func (*AzureVirtualMachineManager) DeleteNics

func (*AzureVirtualMachineManager) ExecuteRemotePowershell added in v0.0.51

func (vmm *AzureVirtualMachineManager) ExecuteRemotePowershell(ctx context.Context, vmID string, script *string, timeout, pollInterval time.Duration) error

ExecuteRemotePowershell executes a PowerShell script on a remote Azure virtual machine. It constructs a RunCommandInput for PowerShell execution, starts the execution, and polls for the result.

func (*AzureVirtualMachineManager) GetAll

func (vmm *AzureVirtualMachineManager) GetAll(ctx context.Context, filter string, attrs []string, includeState bool) (*[]models.VirtualMachine, error)

Queries Azure for the details of all VMs.

If includeState is true, this will also retrieve the state of the VMs (running, stopped, etc.)
If includeState is false, vm.State will be an empty string

func (*AzureVirtualMachineManager) GetAllDisks

func (*AzureVirtualMachineManager) GetAllNics

func (*AzureVirtualMachineManager) GetAllSizes

func (*AzureVirtualMachineManager) GetAllVmDisks

func (vmm *AzureVirtualMachineManager) GetAllVmDisks(ctx context.Context, vmId string) ([]*models.VirtualMachineDisk, error)

func (*AzureVirtualMachineManager) GetById

func (vmm *AzureVirtualMachineManager) GetById(ctx context.Context, id string, includeState bool) (*models.VirtualMachine, error)

Queries Azure for the details of a single VM.

If includeState is true, this will also retrieve the state of the VM (running, stopped, etc.)
If includeState is false, vm.State will be an empty string

func (*AzureVirtualMachineManager) GetLatestImageVersion

func (vmm *AzureVirtualMachineManager) GetLatestImageVersion(ctx context.Context, imageName string) (string, error)

This function was unused in v1 It would need the config to have the source image gallery name in it

func (*AzureVirtualMachineManager) GetNics

func (*AzureVirtualMachineManager) GetOsDisk

func (*AzureVirtualMachineManager) GetSizesForTemplate

func (vmm *AzureVirtualMachineManager) GetSizesForTemplate(ctx context.Context, template models.VirtualMachineTemplate) (
	matches map[string]*models.VirtualMachineSize,
	worse map[string]*models.VirtualMachineSize,
	better map[string]*models.VirtualMachineSize,
	err error)

func (*AzureVirtualMachineManager) GetSizesWithUsage

func (vmm *AzureVirtualMachineManager) GetSizesWithUsage(ctx context.Context) (map[string]*models.VirtualMachineSize, error)

func (*AzureVirtualMachineManager) GetUsage

func (*AzureVirtualMachineManager) InitialVirtualMachineSetup added in v0.0.51

func (vmm *AzureVirtualMachineManager) InitialVirtualMachineSetup(ctx context.Context, vm *models.VirtualMachine) (*models.VirtualMachine, error)

func (*AzureVirtualMachineManager) RunCommand

func (vmm *AzureVirtualMachineManager) RunCommand(ctx context.Context, vmId string, script string) error

func (*AzureVirtualMachineManager) Start

func (vmm *AzureVirtualMachineManager) Start(ctx context.Context, vmName string) error

func (*AzureVirtualMachineManager) Stop

func (vmm *AzureVirtualMachineManager) Stop(ctx context.Context, vmName string) error

func (*AzureVirtualMachineManager) Update

type InstallerBinaryStorageConfig added in v0.0.51

type InstallerBinaryStorageConfig struct {
	BlobStorageAccount string
	BlobContainer      string
}

InstallerBinaryStorageConfig defines the settings required for storing installer binaries

type PowershellConfig added in v0.0.51

type PowershellConfig struct {
	ADJoin                  *ADJoinConfig
	AVDInstall              *AVDInstallConfig
	SaltMinionInstallConfig *SaltMinionInstallConfig
	BinaryStorage           *InstallerBinaryStorageConfig
	RestartVirtualMachine   bool
}

PowershellConfig defines the overall configuration for the powershell script used in the initial setup process on the Virtual Machine. Marking a section nil / not defined will remove it from the setup process.

type SaltMinionInstallConfig added in v0.0.51

type SaltMinionInstallConfig struct {
	SaltMaster                  string // ip or hostname of Salt Master, to be used for registering the Salt Minion
	SaltMinionInstallerFilename string
}

SaltMinionInstallConfig defines the settings required for Salt Minion installation

type ScoredVMSize

type ScoredVMSize struct {
	Score float64
	Size  *models.VirtualMachineSize
}

type VirtualMachineManagerConfig

type VirtualMachineManagerConfig struct {
	DomainControllers  []*string
	SubnetIds          []string
	VnetResourceGroup  string
	VnetId             string
	InitialSetupConfig *PowershellConfig
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL