class HAConfigItem(ComplexSchemaItem): """ Schema item of ESX cluster high availability """ title = "HA Configuration" description = "ESX cluster HA configuration json schema item" enabled = BooleanItem(title="Enabled", description="Specifies if HA should be enabled") admission_control_enabled = BooleanItem(title="Admission Control Enabled") admission_control_policy = AdmissionControlPolicyItem() default_vm_settings = DefaultVmSettingsItem() hb_ds_candidate_policy = StringItem( title="Heartbeat Datastore Candidate Policy", enum=[ "allFeasibleDs", "allFeasibleDsWithUserPreference", "userSelectedDs" ], ) host_monitoring = StringItem(title="Host Monitoring", choices=["enabled", "disabled"]) options = ArrayItem(min_items=1, items=OptionValueItem()) vm_monitoring = StringItem( title="Vm Monitoring", choices=[ "vmMonitoringDisabled", "vmAndAppMonitoring", "vmMonitoringOnly" ], )
class HAConfigItem(ComplexSchemaItem): ''' Schema item of ESX cluster high availability ''' title = 'HA Configuration' description = 'ESX cluster HA configuration json schema item' enabled = BooleanItem(title='Enabled', description='Specifies if HA should be enabled') admission_control_enabled = BooleanItem(title='Admission Control Enabled') admission_control_policy = AdmissionControlPolicyItem() default_vm_settings = DefaultVmSettingsItem() hb_ds_candidate_policy = StringItem( title='Heartbeat Datastore Candidate Policy', enum=[ 'allFeasibleDs', 'allFeasibleDsWithUserPreference', 'userSelectedDs' ]) host_monitoring = StringItem(title='Host Monitoring', choices=['enabled', 'disabled']) options = ArrayItem(min_items=1, items=OptionValueItem()) vm_monitoring = StringItem(title='Vm Monitoring', choices=[ 'vmMonitoringDisabled', 'vmAndAppMonitoring', 'vmMonitoringOnly' ])
class DiskGroupsDiskIdSchema(DefinitionsSchema): ''' Schema of ESXi host diskgroups containing disk ids ''' title = 'Diskgroups Disk Id Schema' description = 'ESXi host diskgroup schema containing disk ids' diskgroups = ArrayItem(title='DiskGroups', description='List of disk groups in an ESXi host', min_items=1, items=DiskGroupDiskIdItem(), required=True)
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 DiskGroupsDiskIdSchema(DefinitionsSchema): """ Schema of ESXi host diskgroups containing disk ids """ title = "Diskgroups Disk Id Schema" description = "ESXi host diskgroup schema containing disk ids" diskgroups = ArrayItem( title="DiskGroups", description="List of disk groups in an ESXi host", min_items=1, items=DiskGroupDiskIdItem(), required=True, )
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 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) domain = StringItem() principal = StringItem(default='host') protocol = StringItem(default='https') port = IntegerItem(minimum=1)
class DiskGroupDiskIdItem(ComplexSchemaItem): ''' Schema item of a ESXi host disk group containg disk ids ''' title = 'Diskgroup Disk Id Item' description = 'ESXi host diskgroup item containing disk ids' cache_id = StringItem(title='Cache Disk Id', description='Specifies the id of the cache disk', pattern=r'[^\s]+') capacity_ids = ArrayItem( title='Capacity Disk Ids', description='Array with the ids of the capacity disks', items=StringItem(pattern=r'[^\s]+'), min_items=1)
class DiskGroupDiskScsiAddressItem(ComplexSchemaItem): ''' Schema item of a ESXi host disk group containing disk SCSI addresses ''' title = 'Diskgroup Disk Scsi Address Item' description = 'ESXi host diskgroup item containing disk SCSI addresses' cache_scsi_addr = VMwareScsiAddressItem( title='Cache Disk Scsi Address', description='Specifies the SCSI address of the cache disk', required=True) capacity_scsi_addrs = ArrayItem( title='Capacity Scsi Addresses', description='Array with the SCSI addresses of the capacity disks', items=VMwareScsiAddressItem(), min_items=1)
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) domain = StringItem() principal = StringItem(default="host") protocol = StringItem(default="https") port = IntegerItem(minimum=1)
class EsxdatacenterProxySchema(Schema): ''' Schema of the esxdatacenter proxy input ''' title = 'Esxdatacenter Proxy Schema' description = 'Esxdatacenter proxy schema' additional_properties = False proxytype = StringItem(required=True, enum=['esxdatacenter']) vcenter = StringItem(required=True, pattern=r'[^\s]+') datacenter = StringItem(required=True) mechanism = StringItem(required=True, enum=['userpass', 'sspi']) username = StringItem() passwords = ArrayItem(min_items=1, items=StringItem(), unique_items=True) # TODO Should be changed when anyOf is supported for schemas domain = StringItem() principal = StringItem() protocol = StringItem() port = IntegerItem(minimum=1)
class EsxdatacenterProxySchema(Schema): """ Schema of the esxdatacenter proxy input """ title = "Esxdatacenter Proxy Schema" description = "Esxdatacenter proxy schema" additional_properties = False proxytype = StringItem(required=True, enum=["esxdatacenter"]) vcenter = StringItem(required=True, pattern=r"[^\s]+") datacenter = StringItem(required=True) mechanism = StringItem(required=True, enum=["userpass", "sspi"]) username = StringItem() passwords = ArrayItem(min_items=1, items=StringItem(), unique_items=True) # TODO Should be changed when anyOf is supported for schemas domain = StringItem() principal = StringItem() protocol = StringItem() port = IntegerItem(minimum=1)
class DiskGroupDiskIdItem(ComplexSchemaItem): """ Schema item of a ESXi host disk group containg disk ids """ title = "Diskgroup Disk Id Item" description = "ESXi host diskgroup item containing disk ids" cache_id = StringItem( title="Cache Disk Id", description="Specifies the id of the cache disk", pattern=r"[^\s]+", ) capacity_ids = ArrayItem( title="Capacity Disk Ids", description="Array with the ids of the capacity disks", items=StringItem(pattern=r"[^\s]+"), min_items=1, )
class DiskGroupDiskScsiAddressItem(ComplexSchemaItem): """ Schema item of a ESXi host disk group containing disk SCSI addresses """ title = "Diskgroup Disk Scsi Address Item" description = "ESXi host diskgroup item containing disk SCSI addresses" cache_scsi_addr = VMwareScsiAddressItem( title="Cache Disk Scsi Address", description="Specifies the SCSI address of the cache disk", required=True, ) capacity_scsi_addrs = ArrayItem( title="Capacity Scsi Addresses", description="Array with the SCSI addresses of the capacity disks", items=VMwareScsiAddressItem(), min_items=1, )
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 IncludeConfig(Schema): title = 'Include Configuration File(s)' description = 'Include one or more specific configuration files' string_or_array = OneOfItem( items=(StringItem(), ArrayItem(items=StringItem())))(flatten=True)
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, )