class ESXVirtualMachineMemorySchemaItem(ComplexSchemaItem): ''' Configurtation Schema Item for ESX Virtual Machine Memory ''' title = 'ESX Virtual Machine Memory Configuration' description = 'ESX Virtual Machine memory property' required = True size = IntegerItem(title='Memory size', description='Size of the memory', required=True) unit = StringItem(title='Memory unit', description='Unit of the memory, to VMware a ' 'GB is the same as GiB = 1024MiB', required=False, default='MB', enum=('MB', 'GB')) hotadd = BooleanItem(required=False, default=False) reservation_max = BooleanItem(required=False, default=False)
class vSANClusterConfigItem(ComplexSchemaItem): """ Schema item of the ESX cluster vSAN configuration """ title = "vSAN Configuration" description = "ESX cluster vSAN configurationi item" enabled = BooleanItem(title="Enabled", description="Specifies if vSAN should be enabled") auto_claim_storage = BooleanItem( title="Auto Claim Storage", description="Specifies whether the storage of member ESXi hosts should " "be automatically claimed for vSAN", ) dedup_enabled = BooleanItem( title="Enabled", description="Specifies dedup should be enabled") compression_enabled = BooleanItem( title="Enabled", description="Specifies if compression should be enabled")
class vSANClusterConfigItem(ComplexSchemaItem): ''' Schema item of the ESX cluster vSAN configuration ''' title = 'vSAN Configuration' description = 'ESX cluster vSAN configurationi item' enabled = BooleanItem( title='Enabled', description='Specifies if vSAN should be enabled') auto_claim_storage = BooleanItem( title='Auto Claim Storage', description='Specifies whether the storage of member ESXi hosts should ' 'be automatically claimed for vSAN') dedup_enabled = BooleanItem( title='Enabled', description='Specifies dedup should be enabled') compression_enabled = BooleanItem( title='Enabled', description='Specifies if compression should be enabled')
class DiskGroupsDiskScsiAddressSchema(DefinitionsSchema): ''' Schema of ESXi host diskgroups containing disk SCSI addresses ''' title = 'Diskgroups Disk Scsi Address Schema' description = 'ESXi host diskgroup schema containing disk SCSI addresses' diskgroups = ArrayItem(title='Diskgroups', description='List of diskgroups in an ESXi host', min_items=1, items=DiskGroupDiskScsiAddressItem(), required=True) erase_disks = BooleanItem(title='Erase Diskgroup Disks', required=True)
class RosterEntryConfig(Schema): ''' Schema definition of a Salt SSH Roster entry ''' title = 'Roster Entry' description = 'Salt SSH roster entry definition' host = StringItem( title='Host', description='The IP address or DNS name of the remote host', # Pretty naive pattern matching pattern= r'^((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|([A-Za-z0-9][A-Za-z0-9\.\-]{1,255}))$', min_length=1, required=True) port = PortItem(title='Port', description='The target system\'s ssh port number', default=22) user = StringItem(title='User', description='The user to log in as. Defaults to root', default='root', min_length=1, required=True) passwd = SecretItem(title='Password', description='The password to log in with', min_length=1) priv = StringItem( title='Private Key', description='File path to ssh private key, defaults to salt-ssh.rsa', min_length=1) priv_passwd = SecretItem(title='Private Key passphrase', description='Passphrase for private key file', min_length=1) passwd_or_priv_requirement = AnyOfItem( items=(RequirementsItem(requirements=['passwd']), RequirementsItem(requirements=['priv'])))(flatten=True) sudo = BooleanItem(title='Sudo', description='run command via sudo. Defaults to False', default=False) timeout = IntegerItem( title='Timeout', description=('Number of seconds to wait for response ' 'when establishing an SSH connection')) thin_dir = StringItem( title='Thin Directory', description=('The target system\'s storage directory for Salt ' 'components. Defaults to /tmp/salt-<hash>.')) minion_opts = DictItem(title='Minion Options', description='Dictionary of minion options', properties=MinionConfiguration())
class ESXVirtualMachineCpuSchemaItem(ComplexSchemaItem): ''' Configurtation Schema Item for ESX Virtual Machine CPU ''' title = 'ESX Virtual Machine Memory Configuration' description = 'ESX Virtual Machine memory property' required = True count = IntegerItem(title='CPU core count', description='CPU core count', required=True) cores_per_socket = IntegerItem(title='CPU cores per socket', description='CPU cores per socket count', required=False) nested = BooleanItem(title='Virtual Machine Nested Property', description='Nested virtualization support', default=False) hotadd = BooleanItem(title='Virtual Machine CPU hot add', description='CPU hot add', default=False) hotremove = BooleanItem(title='Virtual Machine CPU hot remove', description='CPU hot remove', default=False)
class ESXVirtualMachineMemorySchemaItem(ComplexSchemaItem): """ Configurtation Schema Item for ESX Virtual Machine Memory """ title = "ESX Virtual Machine Memory Configuration" description = "ESX Virtual Machine memory property" required = True size = IntegerItem( title="Memory size", description="Size of the memory", required=True ) unit = StringItem( title="Memory unit", description="Unit of the memory, to VMware a " "GB is the same as GiB = 1024MiB", required=False, default="MB", enum=("MB", "GB"), ) hotadd = BooleanItem(required=False, default=False) reservation_max = BooleanItem(required=False, default=False)
class DiskGroupsDiskScsiAddressSchema(DefinitionsSchema): """ Schema of ESXi host diskgroups containing disk SCSI addresses """ title = "Diskgroups Disk Scsi Address Schema" description = "ESXi host diskgroup schema containing disk SCSI addresses" diskgroups = ArrayItem( title="Diskgroups", description="List of diskgroups in an ESXi host", min_items=1, items=DiskGroupDiskScsiAddressItem(), required=True, ) erase_disks = BooleanItem(title="Erase Diskgroup Disks", required=True)
class ESXVirtualMachineRemoveSchema(DefinitionsSchema): ''' Remove Schema for ESX Virtual Machines to delete or unregister virtual machines ''' name = StringItem(title='Virtual Machine name', description='Name of the virtual machine', required=True) datacenter = StringItem(title='Virtual Machine Datacenter', description='Datacenter of the virtual machine', required=True) placement = AnyOfItem( required=False, items=[ESXVirtualMachinePlacementSchemaItem(), NullItem()]) power_off = BooleanItem(title='Power off vm', description='Power off vm before delete operation', required=False)
class VCenterProxySchema(Schema): ''' Schema for the configuration for the proxy to connect to a VCenter. ''' title = 'VCenter Proxy Connection Schema' description = 'Schema that describes the connection to a VCenter' additional_properties = False proxytype = StringItem(required=True, enum=['vcenter']) vcenter = StringItem(required=True, pattern=r'[^\s]+') mechanism = StringItem(required=True, enum=['userpass', 'sspi']) username = StringItem() passwords = ArrayItem(min_items=1, items=StringItem(), unique_items=True) verify_ssl = BooleanItem() ca_bundle = StringItem() domain = StringItem() principal = StringItem(default='host') protocol = StringItem(default='https') port = IntegerItem(minimum=1)
class ESXVirtualMachineSerialSchemaItem(ComplexSchemaItem): ''' Configuration Schema Item for ESX Virtual Machine Serial Port ''' title = 'ESX Virtual Machine Serial Port Configuration' description = 'ESX virtual machine serial port properties' type = StringItem(title='Virtual Machine Serial Port Type', required=True, enum=('network', 'pipe', 'file', 'device')) adapter = StringItem( title='Virtual Machine Serial Port Name', description='Unique adapter name for virtual machine serial port' 'for creation an arbitrary value should be specified', required=True) backing = ESXVirtualMachineSerialBackingItem() connectable = ESXVirtualMachineDeviceConnectionItem() yield_port = BooleanItem(title='Serial Port Yield', description='Serial port yield', default=False)
class DRSConfigItem(ComplexSchemaItem): ''' Schema item of the ESX cluster DRS configuration ''' title = 'DRS Configuration' description = 'ESX cluster DRS configuration item' enabled = BooleanItem(title='Enabled', description='Specifies if DRS should be enabled') vmotion_rate = IntegerItem( title='vMotion rate', description='Aggressiveness to do automatic vMotions: ' '1 (least aggressive) - 5 (most aggressive)', minimum=1, maximum=5) default_vm_behavior = StringItem( title='Default VM DRS Behavior', description='Specifies the default VM DRS behavior', enum=['fullyAutomated', 'partiallyAutomated', 'manual'])
class VCenterProxySchema(Schema): """ Schema for the configuration for the proxy to connect to a VCenter. """ title = "VCenter Proxy Connection Schema" description = "Schema that describes the connection to a VCenter" additional_properties = False proxytype = StringItem(required=True, enum=["vcenter"]) vcenter = StringItem(required=True, pattern=r"[^\s]+") mechanism = StringItem(required=True, enum=["userpass", "sspi"]) username = StringItem() passwords = ArrayItem(min_items=1, items=StringItem(), unique_items=True) verify_ssl = BooleanItem() ca_bundle = StringItem() domain = StringItem() principal = StringItem(default="host") protocol = StringItem(default="https") port = IntegerItem(minimum=1)
class DRSConfigItem(ComplexSchemaItem): """ Schema item of the ESX cluster DRS configuration """ title = "DRS Configuration" description = "ESX cluster DRS configuration item" enabled = BooleanItem(title="Enabled", description="Specifies if DRS should be enabled") vmotion_rate = IntegerItem( title="vMotion rate", description="Aggressiveness to do automatic vMotions: " "1 (least aggressive) - 5 (most aggressive)", minimum=1, maximum=5, ) default_vm_behavior = StringItem( title="Default VM DRS Behavior", description="Specifies the default VM DRS behavior", enum=["fullyAutomated", "partiallyAutomated", "manual"], )
class ESXVirtualMachineRemoveSchema(DefinitionsSchema): """ Remove Schema for ESX Virtual Machines to delete or unregister virtual machines """ name = StringItem( title="Virtual Machine name", description="Name of the virtual machine", required=True, ) datacenter = StringItem( title="Virtual Machine Datacenter", description="Datacenter of the virtual machine", required=True, ) placement = AnyOfItem( required=False, items=[ESXVirtualMachinePlacementSchemaItem(), NullItem()] ) power_off = BooleanItem( title="Power off vm", description="Power off vm before delete operation", required=False, )
class ESXVirtualMachineSerialSchemaItem(ComplexSchemaItem): """ Configuration Schema Item for ESX Virtual Machine Serial Port """ title = "ESX Virtual Machine Serial Port Configuration" description = "ESX virtual machine serial port properties" type = StringItem( title="Virtual Machine Serial Port Type", required=True, enum=("network", "pipe", "file", "device"), ) adapter = StringItem( title="Virtual Machine Serial Port Name", description="Unique adapter name for virtual machine serial port" "for creation an arbitrary value should be specified", required=True, ) backing = ESXVirtualMachineSerialBackingItem() connectable = ESXVirtualMachineDeviceConnectionItem() yield_port = BooleanItem( title="Serial Port Yield", description="Serial port yield", default=False )
class ESXVirtualMachineConfigSchema(DefinitionsSchema): ''' Configuration Schema for ESX Virtual Machines ''' title = 'ESX Virtual Machine Configuration Schema' description = 'ESX Virtual Machine configuration schema' vm_name = StringItem(title='Virtual Machine name', description='Name of the virtual machine', required=True) cpu = ESXVirtualMachineCpuSchemaItem() memory = ESXVirtualMachineMemorySchemaItem() image = StringItem(title='Virtual Machine guest OS', description='Guest OS type', required=True) version = StringItem(title='Virtual Machine hardware version', description='Container hardware version property', required=True) interfaces = ArrayItem(items=ESXVirtualMachineInterfaceSchemaItem(), min_items=1, required=False, unique_items=True) disks = ArrayItem(items=ESXVirtualMachineDiskSchemaItem(), min_items=1, required=False, unique_items=True) scsi_devices = ArrayItem(items=ESXVirtualMachineScsiSchemaItem(), min_items=1, required=False, unique_items=True) serial_ports = ArrayItem(items=ESXVirtualMachineSerialSchemaItem(), min_items=0, required=False, unique_items=True) cd_dvd_drives = ArrayItem(items=ESXVirtualMachineCdDriveSchemaItem(), min_items=0, required=False, unique_items=True) sata_controllers = ArrayItem(items=ESXVirtualMachineSataSchemaItem(), min_items=0, required=False, unique_items=True) datacenter = StringItem(title='Virtual Machine Datacenter', description='Datacenter of the virtual machine', required=True) datastore = StringItem(title='Virtual Machine Datastore', description='Datastore of the virtual machine', required=True) placement = ESXVirtualMachinePlacementSchemaItem() template = BooleanItem( title='Virtual Machine Template', description='Template to create the virtual machine from', default=False) tools = BooleanItem( title='Virtual Machine VMware Tools', description='Install VMware tools on the guest machine', default=False) power_on = BooleanItem( title='Virtual Machine Power', description='Power on virtual machine afret creation', default=False) deploy = BooleanItem( title='Virtual Machine Deploy Salt', description='Deploy salt after successful installation', default=False)
class ESXVirtualMachineConfigSchema(DefinitionsSchema): """ Configuration Schema for ESX Virtual Machines """ title = "ESX Virtual Machine Configuration Schema" description = "ESX Virtual Machine configuration schema" vm_name = StringItem( title="Virtual Machine name", description="Name of the virtual machine", required=True, ) cpu = ESXVirtualMachineCpuSchemaItem() memory = ESXVirtualMachineMemorySchemaItem() image = StringItem( title="Virtual Machine guest OS", description="Guest OS type", required=True ) version = StringItem( title="Virtual Machine hardware version", description="Container hardware version property", required=True, ) interfaces = ArrayItem( items=ESXVirtualMachineInterfaceSchemaItem(), min_items=1, required=False, unique_items=True, ) disks = ArrayItem( items=ESXVirtualMachineDiskSchemaItem(), min_items=1, required=False, unique_items=True, ) scsi_devices = ArrayItem( items=ESXVirtualMachineScsiSchemaItem(), min_items=1, required=False, unique_items=True, ) serial_ports = ArrayItem( items=ESXVirtualMachineSerialSchemaItem(), min_items=0, required=False, unique_items=True, ) cd_dvd_drives = ArrayItem( items=ESXVirtualMachineCdDriveSchemaItem(), min_items=0, required=False, unique_items=True, ) sata_controllers = ArrayItem( items=ESXVirtualMachineSataSchemaItem(), min_items=0, required=False, unique_items=True, ) datacenter = StringItem( title="Virtual Machine Datacenter", description="Datacenter of the virtual machine", required=True, ) datastore = StringItem( title="Virtual Machine Datastore", description="Datastore of the virtual machine", required=True, ) placement = ESXVirtualMachinePlacementSchemaItem() template = BooleanItem( title="Virtual Machine Template", description="Template to create the virtual machine from", default=False, ) tools = BooleanItem( title="Virtual Machine VMware Tools", description="Install VMware tools on the guest machine", default=False, ) power_on = BooleanItem( title="Virtual Machine Power", description="Power on virtual machine afret creation", default=False, ) deploy = BooleanItem( title="Virtual Machine Deploy Salt", description="Deploy salt after successful installation", default=False, )
class RosterEntryConfig(Schema): """ Schema definition of a Salt SSH Roster entry """ title = "Roster Entry" description = "Salt SSH roster entry definition" host = StringItem( title="Host", description="The IP address or DNS name of the remote host", # Pretty naive pattern matching pattern= r"^((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|([A-Za-z0-9][A-Za-z0-9\.\-]{1,255}))$", min_length=1, required=True, ) port = PortItem(title="Port", description="The target system's ssh port number", default=22) user = StringItem( title="User", description="The user to log in as. Defaults to root", default="root", min_length=1, required=True, ) passwd = SecretItem(title="Password", description="The password to log in with", min_length=1) priv = StringItem( title="Private Key", description="File path to ssh private key, defaults to salt-ssh.rsa", min_length=1, ) priv_passwd = SecretItem( title="Private Key passphrase", description="Passphrase for private key file", min_length=1, ) passwd_or_priv_requirement = AnyOfItem(items=( RequirementsItem(requirements=["passwd"]), RequirementsItem(requirements=["priv"]), ))(flatten=True) sudo = BooleanItem( title="Sudo", description="run command via sudo. Defaults to False", default=False, ) timeout = IntegerItem( title="Timeout", description=("Number of seconds to wait for response " "when establishing an SSH connection"), ) thin_dir = StringItem( title="Thin Directory", description=("The target system's storage directory for Salt " "components. Defaults to /tmp/salt-<hash>."), ) minion_opts = DictItem( title="Minion Options", description="Dictionary of minion options", properties=MinionConfiguration(), )
class OptionValueItem(ComplexSchemaItem): '''Sechma item of the OptionValue''' title = 'OptionValue' key = StringItem(title='Key', required=True) value = AnyOfItem(items=[StringItem(), BooleanItem(), IntegerItem()])
class OptionValueItem(ComplexSchemaItem): """Sechma item of the OptionValue""" title = "OptionValue" key = StringItem(title="Key", required=True) value = AnyOfItem(items=[StringItem(), BooleanItem(), IntegerItem()])