Skip to content

vmss

Sample rules

A few rules that use objects from this package:

non_car_virtual_machines_and_virtual_machine_scale_sets_only_use_managed_disks
from typing import Dict, List, Union

from cloudrail.knowledge.context.azure.azure_environment_context import AzureEnvironmentContext
from cloudrail.knowledge.context.azure.resources.vm.azure_virtual_machine import AzureVirtualMachine
from cloudrail.knowledge.context.azure.resources.vmss.azure_virtual_machine_scale_set import AzureVirtualMachineScaleSet
from cloudrail.knowledge.rules.azure.azure_base_rule import AzureBaseRule
from cloudrail.knowledge.rules.base_rule import Issue
from cloudrail.knowledge.rules.rule_parameters.base_paramerter import ParameterType


class EnsureVmAndVmssUseManagedDisksRule(AzureBaseRule):

    def get_id(self) -> str:
        return 'non_car_virtual_machines_and_virtual_machine_scale_sets_only_use_managed_disks'

    def execute(self, env_context: AzureEnvironmentContext, parameters: Dict[ParameterType, any]) -> List[Issue]:
        issues: List[Issue] = []
        for virtual_machine in env_context.virtual_machines:
            if not virtual_machine.disk_settings.os_disk.is_managed_disk:
                self._append_issue(virtual_machine, issues)
        for vmss in env_context.virtual_machines_scale_sets:
            if not vmss.disk_settings.os_disk.is_managed_disk:
                self._append_issue(vmss, issues)
        return issues

    def should_run_rule(self, environment_context: AzureEnvironmentContext) -> bool:
        return bool(environment_context.virtual_machines or environment_context.virtual_machines_scale_sets)

    @staticmethod
    def _append_issue(vm_entity: Union[AzureVirtualMachine, AzureVirtualMachineScaleSet], issues_list: List[Issue]):
        issues_list.append(
            Issue(
                f"The {vm_entity.get_type()} `{vm_entity.get_friendly_name()}` is using an unmanaged disk",
                vm_entity, vm_entity))

AzureVirtualMachineScaleSet (AzureResource)

Attributes:

Name Type Description
name str

The name of the Virtual machine scale set resource.

os_type OperatingSystemType

The VM's instances operating system. Either Windows or Linux.

disk_settings DiskSettings

The disk settings which will be used for the VM's instances.

network_interfaces_config List[AzureNetworkInterface]

The network interfaces configurations which will be used for the VM's instances.

upgrade_policy_mode Optional[UpgradePolicyMode]

Specifies the mode of an upgrade to virtual machines in the scale set.

sku Sku

The SKU configuration block for the scale set.

instances int

The number of Virtual Machines in the Scale Set.

source_image_reference SourceImageReference

The image used in the Virtual Machine OS.

disable_password_authentication Optional[bool]

If Password Authentication should be disabled on this Virtual Machine Scale Set (relavant for Linux OS).

extensions Optional[List[AzureVirtualMachineExtension]]

List of extension profiles to add to the scale set.

custom_invalidation(self) inherited

A list of manual reasons why this resource should be invalidated

exclude_from_invalidation(self) inherited

A list of attributes that should be excluded from the invalidation process

Sku dataclass

Attributes:

Name Type Description
name str

The SKU name

tier Optional[cloudrail.knowledge.context.azure.resources.vmss.azure_virtual_machine_scale_set.SkuTier]

The tier of virtual machines in a scale set (Values: standard or basic)

capacity Optional[int]

The number of virtual machines in the scale set

SkuTier (str, Enum)

An enumeration.

UpgradePolicyMode (Enum)

An enumeration.