# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for
# license information.
#
# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.
# --------------------------------------------------------------------------

from msrest.serialization import Model


class ResourcePool(Model):
    """Define the resourcePool.

    Variables are only populated by the server, and will be ignored when
    sending a request.

    All required parameters must be populated in order to send to Azure.

    :ivar uuid: Gets or sets a unique identifier for this resource.
    :vartype uuid: str
    :param v_center_id: Gets or sets the ARM Id of the vCenter resource in
     which this resource pool resides.
    :type v_center_id: str
    :param mo_ref_id: Gets or sets the vCenter MoRef (Managed Object
     Reference) ID for the resource pool.
    :type mo_ref_id: str
    :param inventory_item_id: Gets or sets the inventory Item ID for the
     resource pool.
    :type inventory_item_id: str
    :ivar mo_name: Gets or sets the vCenter Managed Object name for the
     resource pool.
    :vartype mo_name: str
    :ivar cpu_shares_level: Gets or sets CPUSharesLevel which specifies the
     CPU allocation level for this pool.
     This property is used in relative allocation between resource consumers.
    :vartype cpu_shares_level: str
    :ivar cpu_reservation_mhz: Gets or sets CPUReservationMHz which specifies
     the CPU size in MHz that is guaranteed
     to be available.
    :vartype cpu_reservation_mhz: long
    :ivar cpu_limit_mhz: Gets or sets CPULimitMHz which specifies a CPU usage
     limit in MHz.
     Utilization will not exceed this limit even if there are available
     resources.
    :vartype cpu_limit_mhz: long
    :ivar mem_shares_level: Gets or sets CPUSharesLevel which specifies the
     memory allocation level for this pool.
     This property is used in relative allocation between resource consumers.
    :vartype mem_shares_level: str
    :ivar mem_reservation_mb: Gets or sets MemReservationMB which specifies
     the guaranteed available memory in
     megabytes.
    :vartype mem_reservation_mb: long
    :ivar mem_limit_mb: Gets or sets MemLimitMB specifies a memory usage limit
     in megabytes.
     Utilization will not exceed the specified limit even if there are
     available resources.
    :vartype mem_limit_mb: long
    :ivar custom_resource_name: Gets the name of the corresponding resource in
     Kubernetes.
    :vartype custom_resource_name: str
    :ivar provisioning_state: Gets or sets the provisioning state.
    :vartype provisioning_state: str
    :param location: Required. Gets or sets the location.
    :type location: str
    :param extended_location: Gets or sets the extended location.
    :type extended_location:
     ~azure.mgmt.vmware.v2020_10_01_preview.models.ExtendedLocation
    :param system_data: The system data.
    :type system_data:
     ~azure.mgmt.vmware.v2020_10_01_preview.models.SystemData
    :param tags: Gets or sets the Resource tags.
    :type tags: dict[str, str]
    :ivar name: Gets or sets the name.
    :vartype name: str
    :ivar id: Gets or sets the Id.
    :vartype id: str
    :ivar type: Gets or sets the type of the resource.
    :vartype type: str
    :param kind: Metadata used by portal/tooling/etc to render different UX
     experiences for resources of the same type; e.g. ApiApps are a kind of
     Microsoft.Web/sites type.  If supported, the resource provider must
     validate and persist this value.
    :type kind: str
    """

    _validation = {
        'uuid': {'readonly': True},
        'mo_name': {'readonly': True},
        'cpu_shares_level': {'readonly': True},
        'cpu_reservation_mhz': {'readonly': True},
        'cpu_limit_mhz': {'readonly': True},
        'mem_shares_level': {'readonly': True},
        'mem_reservation_mb': {'readonly': True},
        'mem_limit_mb': {'readonly': True},
        'custom_resource_name': {'readonly': True},
        'provisioning_state': {'readonly': True},
        'location': {'required': True},
        'name': {'readonly': True},
        'id': {'readonly': True},
        'type': {'readonly': True},
    }

    _attribute_map = {
        'uuid': {'key': 'properties.uuid', 'type': 'str'},
        'v_center_id': {'key': 'properties.vCenterId', 'type': 'str'},
        'mo_ref_id': {'key': 'properties.moRefId', 'type': 'str'},
        'inventory_item_id': {'key': 'properties.inventoryItemId', 'type': 'str'},
        'mo_name': {'key': 'properties.moName', 'type': 'str'},
        'cpu_shares_level': {'key': 'properties.cpuSharesLevel', 'type': 'str'},
        'cpu_reservation_mhz': {'key': 'properties.cpuReservationMHz', 'type': 'long'},
        'cpu_limit_mhz': {'key': 'properties.cpuLimitMHz', 'type': 'long'},
        'mem_shares_level': {'key': 'properties.memSharesLevel', 'type': 'str'},
        'mem_reservation_mb': {'key': 'properties.memReservationMB', 'type': 'long'},
        'mem_limit_mb': {'key': 'properties.memLimitMB', 'type': 'long'},
        'custom_resource_name': {'key': 'properties.customResourceName', 'type': 'str'},
        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
        'location': {'key': 'location', 'type': 'str'},
        'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'},
        'system_data': {'key': 'systemData', 'type': 'SystemData'},
        'tags': {'key': 'tags', 'type': '{str}'},
        'name': {'key': 'name', 'type': 'str'},
        'id': {'key': 'id', 'type': 'str'},
        'type': {'key': 'type', 'type': 'str'},
        'kind': {'key': 'kind', 'type': 'str'},
    }

    def __init__(self, *, location: str, v_center_id: str=None, mo_ref_id: str=None, inventory_item_id: str=None, extended_location=None, system_data=None, tags=None, kind: str=None, **kwargs) -> None:
        super(ResourcePool, self).__init__(**kwargs)
        self.uuid = None
        self.v_center_id = v_center_id
        self.mo_ref_id = mo_ref_id
        self.inventory_item_id = inventory_item_id
        self.mo_name = None
        self.cpu_shares_level = None
        self.cpu_reservation_mhz = None
        self.cpu_limit_mhz = None
        self.mem_shares_level = None
        self.mem_reservation_mb = None
        self.mem_limit_mb = None
        self.custom_resource_name = None
        self.provisioning_state = None
        self.location = location
        self.extended_location = extended_location
        self.system_data = system_data
        self.tags = tags
        self.name = None
        self.id = None
        self.type = None
        self.kind = kind
