vm

package
v0.0.64 Latest Latest
Warning

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

Go to latest
Published: Jun 30, 2025 License: MIT Imports: 28 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, error)

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 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 {
	Credentials *cloudyazure.AzureCredentials
	Config      *VirtualMachineManagerConfig

	LogBody bool
	// contains filtered or unexported fields
}

func NewAzureVirtualMachineManager

func NewAzureVirtualMachineManager(
	ctx context.Context, name string,
	credentials *cloudyazure.AzureCredentials,
	config *VirtualMachineManagerConfig,
) (*AzureVirtualMachineManager, error)

func (*AzureVirtualMachineManager) Configure

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

func (*AzureVirtualMachineManager) CreateNic

func (*AzureVirtualMachineManager) CreateVirtualMachine added in v0.0.61

func (*AzureVirtualMachineManager) DeleteDisk

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

func (*AzureVirtualMachineManager) DeleteNic

func (*AzureVirtualMachineManager) DeleteNics

func (*AzureVirtualMachineManager) DeleteVirtualMachine added in v0.0.61

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

Delete a VM, first by deallocating it, then deleting it and its associated resources

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 uses the RunCommand API with the "RunPowerShellScript" command.

func (*AzureVirtualMachineManager) ExecuteRemoteShellScript added in v0.0.59

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

ExecuteRemoteShellScript executes a shell script on a remote Azure virtual machine. It uses the RunCommand API with the "RunShellScript" command.

func (*AzureVirtualMachineManager) GetAllDisks

func (*AzureVirtualMachineManager) GetAllNics

func (*AzureVirtualMachineManager) GetAllSessionHostVirtualMachines added in v0.0.61

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

Queries Azure for the details of all Session Host 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) GetAllUserVirtualMachines added in v0.0.61

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

Queries Azure for the details of all User 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) GetAllVirtualMachineSizes added in v0.0.61

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

func (*AzureVirtualMachineManager) GetAllVmDisks

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

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) GetVirtualMachine added in v0.0.61

func (vmm *AzureVirtualMachineManager) GetVirtualMachine(ctx context.Context, vmName 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) GetVirtualMachineSizesForTemplate added in v0.0.61

func (vmm *AzureVirtualMachineManager) GetVirtualMachineSizesForTemplate(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) GetVirtualMachineSizesWithUsage added in v0.0.61

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

func (*AzureVirtualMachineManager) GetVirtualMachineUsage added in v0.0.61

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

func (*AzureVirtualMachineManager) RunCommand

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

func (*AzureVirtualMachineManager) StartVirtualMachine added in v0.0.61

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

func (*AzureVirtualMachineManager) StopVirtualMachine added in v0.0.61

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

func (*AzureVirtualMachineManager) UpdateVirtualMachine added in v0.0.61

type ScoredVMSize

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

type VirtualMachineManagerConfig

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

Jump to

Keyboard shortcuts

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