# coding: utf-8

"""
    Managed Ray API

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    The version of the OpenAPI document: 0.1.0
    Generated by: https://openapi-generator.tech
"""


import pprint
import re  # noqa: F401

import six

from openapi_client.configuration import Configuration


class CloudResource(object):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'compute_stack': 'ComputeStack',
        'kubernetes_ingress_external_address': 'str',
        'kubernetes_namespaces': 'list[str]',
        'kubernetes_zones': 'list[str]',
        'kubernetes_dataplane_identity': 'str',
        'kubernetes_nfs_persistent_volume_claim': 'str',
        'cloud_storage_bucket_name': 'str',
        'cloud_storage_bucket_endpoint': 'str',
        'cloud_storage_bucket_region': 'str',
        'nfs_mount_targets': 'list[NFSMountTarget]',
        'nfs_mount_path': 'str',
        'aws_vpc_id': 'str',
        'aws_subnet_ids_with_availability_zones': 'list[SubnetIdWithAvailabilityZoneAWS]',
        'aws_iam_role_arns': 'list[str]',
        'aws_security_groups': 'list[str]',
        'aws_s3_id': 'str',
        'aws_efs_id': 'str',
        'aws_efs_mount_target_ip': 'str',
        'aws_cloudformation_stack_id': 'str',
        'gcp_vpc_id': 'str',
        'gcp_subnet_ids': 'list[str]',
        'memorydb_cluster_config': 'AWSMemoryDBClusterConfig',
        'id': 'str',
        'cloud_id': 'str'
    }

    attribute_map = {
        'compute_stack': 'compute_stack',
        'kubernetes_ingress_external_address': 'kubernetes_ingress_external_address',
        'kubernetes_namespaces': 'kubernetes_namespaces',
        'kubernetes_zones': 'kubernetes_zones',
        'kubernetes_dataplane_identity': 'kubernetes_dataplane_identity',
        'kubernetes_nfs_persistent_volume_claim': 'kubernetes_nfs_persistent_volume_claim',
        'cloud_storage_bucket_name': 'cloud_storage_bucket_name',
        'cloud_storage_bucket_endpoint': 'cloud_storage_bucket_endpoint',
        'cloud_storage_bucket_region': 'cloud_storage_bucket_region',
        'nfs_mount_targets': 'nfs_mount_targets',
        'nfs_mount_path': 'nfs_mount_path',
        'aws_vpc_id': 'aws_vpc_id',
        'aws_subnet_ids_with_availability_zones': 'aws_subnet_ids_with_availability_zones',
        'aws_iam_role_arns': 'aws_iam_role_arns',
        'aws_security_groups': 'aws_security_groups',
        'aws_s3_id': 'aws_s3_id',
        'aws_efs_id': 'aws_efs_id',
        'aws_efs_mount_target_ip': 'aws_efs_mount_target_ip',
        'aws_cloudformation_stack_id': 'aws_cloudformation_stack_id',
        'gcp_vpc_id': 'gcp_vpc_id',
        'gcp_subnet_ids': 'gcp_subnet_ids',
        'memorydb_cluster_config': 'memorydb_cluster_config',
        'id': 'id',
        'cloud_id': 'cloud_id'
    }

    def __init__(self, compute_stack=None, kubernetes_ingress_external_address=None, kubernetes_namespaces=None, kubernetes_zones=None, kubernetes_dataplane_identity=None, kubernetes_nfs_persistent_volume_claim=None, cloud_storage_bucket_name=None, cloud_storage_bucket_endpoint=None, cloud_storage_bucket_region=None, nfs_mount_targets=None, nfs_mount_path=None, aws_vpc_id=None, aws_subnet_ids_with_availability_zones=None, aws_iam_role_arns=None, aws_security_groups=None, aws_s3_id=None, aws_efs_id=None, aws_efs_mount_target_ip=None, aws_cloudformation_stack_id=None, gcp_vpc_id=None, gcp_subnet_ids=None, memorydb_cluster_config=None, id=None, cloud_id=None, local_vars_configuration=None):  # noqa: E501
        """CloudResource - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._compute_stack = None
        self._kubernetes_ingress_external_address = None
        self._kubernetes_namespaces = None
        self._kubernetes_zones = None
        self._kubernetes_dataplane_identity = None
        self._kubernetes_nfs_persistent_volume_claim = None
        self._cloud_storage_bucket_name = None
        self._cloud_storage_bucket_endpoint = None
        self._cloud_storage_bucket_region = None
        self._nfs_mount_targets = None
        self._nfs_mount_path = None
        self._aws_vpc_id = None
        self._aws_subnet_ids_with_availability_zones = None
        self._aws_iam_role_arns = None
        self._aws_security_groups = None
        self._aws_s3_id = None
        self._aws_efs_id = None
        self._aws_efs_mount_target_ip = None
        self._aws_cloudformation_stack_id = None
        self._gcp_vpc_id = None
        self._gcp_subnet_ids = None
        self._memorydb_cluster_config = None
        self._id = None
        self._cloud_id = None
        self.discriminator = None

        if compute_stack is not None:
            self.compute_stack = compute_stack
        if kubernetes_ingress_external_address is not None:
            self.kubernetes_ingress_external_address = kubernetes_ingress_external_address
        if kubernetes_namespaces is not None:
            self.kubernetes_namespaces = kubernetes_namespaces
        if kubernetes_zones is not None:
            self.kubernetes_zones = kubernetes_zones
        if kubernetes_dataplane_identity is not None:
            self.kubernetes_dataplane_identity = kubernetes_dataplane_identity
        if kubernetes_nfs_persistent_volume_claim is not None:
            self.kubernetes_nfs_persistent_volume_claim = kubernetes_nfs_persistent_volume_claim
        if cloud_storage_bucket_name is not None:
            self.cloud_storage_bucket_name = cloud_storage_bucket_name
        if cloud_storage_bucket_endpoint is not None:
            self.cloud_storage_bucket_endpoint = cloud_storage_bucket_endpoint
        if cloud_storage_bucket_region is not None:
            self.cloud_storage_bucket_region = cloud_storage_bucket_region
        if nfs_mount_targets is not None:
            self.nfs_mount_targets = nfs_mount_targets
        if nfs_mount_path is not None:
            self.nfs_mount_path = nfs_mount_path
        if aws_vpc_id is not None:
            self.aws_vpc_id = aws_vpc_id
        if aws_subnet_ids_with_availability_zones is not None:
            self.aws_subnet_ids_with_availability_zones = aws_subnet_ids_with_availability_zones
        if aws_iam_role_arns is not None:
            self.aws_iam_role_arns = aws_iam_role_arns
        if aws_security_groups is not None:
            self.aws_security_groups = aws_security_groups
        if aws_s3_id is not None:
            self.aws_s3_id = aws_s3_id
        if aws_efs_id is not None:
            self.aws_efs_id = aws_efs_id
        if aws_efs_mount_target_ip is not None:
            self.aws_efs_mount_target_ip = aws_efs_mount_target_ip
        if aws_cloudformation_stack_id is not None:
            self.aws_cloudformation_stack_id = aws_cloudformation_stack_id
        if gcp_vpc_id is not None:
            self.gcp_vpc_id = gcp_vpc_id
        if gcp_subnet_ids is not None:
            self.gcp_subnet_ids = gcp_subnet_ids
        if memorydb_cluster_config is not None:
            self.memorydb_cluster_config = memorydb_cluster_config
        self.id = id
        self.cloud_id = cloud_id

    @property
    def compute_stack(self):
        """Gets the compute_stack of this CloudResource.  # noqa: E501

        The compute stack associated with this cloud resource.  # noqa: E501

        :return: The compute_stack of this CloudResource.  # noqa: E501
        :rtype: ComputeStack
        """
        return self._compute_stack

    @compute_stack.setter
    def compute_stack(self, compute_stack):
        """Sets the compute_stack of this CloudResource.

        The compute stack associated with this cloud resource.  # noqa: E501

        :param compute_stack: The compute_stack of this CloudResource.  # noqa: E501
        :type: ComputeStack
        """

        self._compute_stack = compute_stack

    @property
    def kubernetes_ingress_external_address(self):
        """Gets the kubernetes_ingress_external_address of this CloudResource.  # noqa: E501

        On the Kubernetes compute stack, the address of the ingress used for serving traffic for Anyscale services.  # noqa: E501

        :return: The kubernetes_ingress_external_address of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._kubernetes_ingress_external_address

    @kubernetes_ingress_external_address.setter
    def kubernetes_ingress_external_address(self, kubernetes_ingress_external_address):
        """Sets the kubernetes_ingress_external_address of this CloudResource.

        On the Kubernetes compute stack, the address of the ingress used for serving traffic for Anyscale services.  # noqa: E501

        :param kubernetes_ingress_external_address: The kubernetes_ingress_external_address of this CloudResource.  # noqa: E501
        :type: str
        """

        self._kubernetes_ingress_external_address = kubernetes_ingress_external_address

    @property
    def kubernetes_namespaces(self):
        """Gets the kubernetes_namespaces of this CloudResource.  # noqa: E501

        A list of Kubernetes namespaces associated with this cloud resource.  # noqa: E501

        :return: The kubernetes_namespaces of this CloudResource.  # noqa: E501
        :rtype: list[str]
        """
        return self._kubernetes_namespaces

    @kubernetes_namespaces.setter
    def kubernetes_namespaces(self, kubernetes_namespaces):
        """Sets the kubernetes_namespaces of this CloudResource.

        A list of Kubernetes namespaces associated with this cloud resource.  # noqa: E501

        :param kubernetes_namespaces: The kubernetes_namespaces of this CloudResource.  # noqa: E501
        :type: list[str]
        """

        self._kubernetes_namespaces = kubernetes_namespaces

    @property
    def kubernetes_zones(self):
        """Gets the kubernetes_zones of this CloudResource.  # noqa: E501

        On the Kubernetes compute stack, a list of zones to launch pods in.  # noqa: E501

        :return: The kubernetes_zones of this CloudResource.  # noqa: E501
        :rtype: list[str]
        """
        return self._kubernetes_zones

    @kubernetes_zones.setter
    def kubernetes_zones(self, kubernetes_zones):
        """Sets the kubernetes_zones of this CloudResource.

        On the Kubernetes compute stack, a list of zones to launch pods in.  # noqa: E501

        :param kubernetes_zones: The kubernetes_zones of this CloudResource.  # noqa: E501
        :type: list[str]
        """

        self._kubernetes_zones = kubernetes_zones

    @property
    def kubernetes_dataplane_identity(self):
        """Gets the kubernetes_dataplane_identity of this CloudResource.  # noqa: E501

        The IAM identity of the kubernetes manager which will be used for the validation during registration.  # noqa: E501

        :return: The kubernetes_dataplane_identity of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._kubernetes_dataplane_identity

    @kubernetes_dataplane_identity.setter
    def kubernetes_dataplane_identity(self, kubernetes_dataplane_identity):
        """Sets the kubernetes_dataplane_identity of this CloudResource.

        The IAM identity of the kubernetes manager which will be used for the validation during registration.  # noqa: E501

        :param kubernetes_dataplane_identity: The kubernetes_dataplane_identity of this CloudResource.  # noqa: E501
        :type: str
        """

        self._kubernetes_dataplane_identity = kubernetes_dataplane_identity

    @property
    def kubernetes_nfs_persistent_volume_claim(self):
        """Gets the kubernetes_nfs_persistent_volume_claim of this CloudResource.  # noqa: E501

        The name of the persistent volume claim used to mount NFS into pods.  # noqa: E501

        :return: The kubernetes_nfs_persistent_volume_claim of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._kubernetes_nfs_persistent_volume_claim

    @kubernetes_nfs_persistent_volume_claim.setter
    def kubernetes_nfs_persistent_volume_claim(self, kubernetes_nfs_persistent_volume_claim):
        """Sets the kubernetes_nfs_persistent_volume_claim of this CloudResource.

        The name of the persistent volume claim used to mount NFS into pods.  # noqa: E501

        :param kubernetes_nfs_persistent_volume_claim: The kubernetes_nfs_persistent_volume_claim of this CloudResource.  # noqa: E501
        :type: str
        """

        self._kubernetes_nfs_persistent_volume_claim = kubernetes_nfs_persistent_volume_claim

    @property
    def cloud_storage_bucket_name(self):
        """Gets the cloud_storage_bucket_name of this CloudResource.  # noqa: E501

        A fully qualified storage bucket name for cloud storage, e.g. s3://bucket-name, gs://bucket-name, or azure://bucket-name.  # noqa: E501

        :return: The cloud_storage_bucket_name of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._cloud_storage_bucket_name

    @cloud_storage_bucket_name.setter
    def cloud_storage_bucket_name(self, cloud_storage_bucket_name):
        """Sets the cloud_storage_bucket_name of this CloudResource.

        A fully qualified storage bucket name for cloud storage, e.g. s3://bucket-name, gs://bucket-name, or azure://bucket-name.  # noqa: E501

        :param cloud_storage_bucket_name: The cloud_storage_bucket_name of this CloudResource.  # noqa: E501
        :type: str
        """

        self._cloud_storage_bucket_name = cloud_storage_bucket_name

    @property
    def cloud_storage_bucket_endpoint(self):
        """Gets the cloud_storage_bucket_endpoint of this CloudResource.  # noqa: E501

        An endpoint for cloud storage, e.g. used to override the default cloud storage scheme's endpoint (e.g. for S3, this would be passed to the AWS_ENDPOINT_URL environment variable).  # noqa: E501

        :return: The cloud_storage_bucket_endpoint of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._cloud_storage_bucket_endpoint

    @cloud_storage_bucket_endpoint.setter
    def cloud_storage_bucket_endpoint(self, cloud_storage_bucket_endpoint):
        """Sets the cloud_storage_bucket_endpoint of this CloudResource.

        An endpoint for cloud storage, e.g. used to override the default cloud storage scheme's endpoint (e.g. for S3, this would be passed to the AWS_ENDPOINT_URL environment variable).  # noqa: E501

        :param cloud_storage_bucket_endpoint: The cloud_storage_bucket_endpoint of this CloudResource.  # noqa: E501
        :type: str
        """

        self._cloud_storage_bucket_endpoint = cloud_storage_bucket_endpoint

    @property
    def cloud_storage_bucket_region(self):
        """Gets the cloud_storage_bucket_region of this CloudResource.  # noqa: E501

        The region of the cloud storage bucket.  # noqa: E501

        :return: The cloud_storage_bucket_region of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._cloud_storage_bucket_region

    @cloud_storage_bucket_region.setter
    def cloud_storage_bucket_region(self, cloud_storage_bucket_region):
        """Sets the cloud_storage_bucket_region of this CloudResource.

        The region of the cloud storage bucket.  # noqa: E501

        :param cloud_storage_bucket_region: The cloud_storage_bucket_region of this CloudResource.  # noqa: E501
        :type: str
        """

        self._cloud_storage_bucket_region = cloud_storage_bucket_region

    @property
    def nfs_mount_targets(self):
        """Gets the nfs_mount_targets of this CloudResource.  # noqa: E501

        A set of mount targets that should be used for mounting NFS (potentially one per zone, or just a single one to be used for all zone(s) that the cloud resource spans).  # noqa: E501

        :return: The nfs_mount_targets of this CloudResource.  # noqa: E501
        :rtype: list[NFSMountTarget]
        """
        return self._nfs_mount_targets

    @nfs_mount_targets.setter
    def nfs_mount_targets(self, nfs_mount_targets):
        """Sets the nfs_mount_targets of this CloudResource.

        A set of mount targets that should be used for mounting NFS (potentially one per zone, or just a single one to be used for all zone(s) that the cloud resource spans).  # noqa: E501

        :param nfs_mount_targets: The nfs_mount_targets of this CloudResource.  # noqa: E501
        :type: list[NFSMountTarget]
        """

        self._nfs_mount_targets = nfs_mount_targets

    @property
    def nfs_mount_path(self):
        """Gets the nfs_mount_path of this CloudResource.  # noqa: E501

        The path of the NFS server to mount (e.g. on GCP, this is the \"root_dir\" parameter).  # noqa: E501

        :return: The nfs_mount_path of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._nfs_mount_path

    @nfs_mount_path.setter
    def nfs_mount_path(self, nfs_mount_path):
        """Sets the nfs_mount_path of this CloudResource.

        The path of the NFS server to mount (e.g. on GCP, this is the \"root_dir\" parameter).  # noqa: E501

        :param nfs_mount_path: The nfs_mount_path of this CloudResource.  # noqa: E501
        :type: str
        """

        self._nfs_mount_path = nfs_mount_path

    @property
    def aws_vpc_id(self):
        """Gets the aws_vpc_id of this CloudResource.  # noqa: E501

        The AWS vpc id of this cloud.  # noqa: E501

        :return: The aws_vpc_id of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._aws_vpc_id

    @aws_vpc_id.setter
    def aws_vpc_id(self, aws_vpc_id):
        """Sets the aws_vpc_id of this CloudResource.

        The AWS vpc id of this cloud.  # noqa: E501

        :param aws_vpc_id: The aws_vpc_id of this CloudResource.  # noqa: E501
        :type: str
        """

        self._aws_vpc_id = aws_vpc_id

    @property
    def aws_subnet_ids_with_availability_zones(self):
        """Gets the aws_subnet_ids_with_availability_zones of this CloudResource.  # noqa: E501

        A list of AWS subnet IDs with its availability zone of this cloud.  # noqa: E501

        :return: The aws_subnet_ids_with_availability_zones of this CloudResource.  # noqa: E501
        :rtype: list[SubnetIdWithAvailabilityZoneAWS]
        """
        return self._aws_subnet_ids_with_availability_zones

    @aws_subnet_ids_with_availability_zones.setter
    def aws_subnet_ids_with_availability_zones(self, aws_subnet_ids_with_availability_zones):
        """Sets the aws_subnet_ids_with_availability_zones of this CloudResource.

        A list of AWS subnet IDs with its availability zone of this cloud.  # noqa: E501

        :param aws_subnet_ids_with_availability_zones: The aws_subnet_ids_with_availability_zones of this CloudResource.  # noqa: E501
        :type: list[SubnetIdWithAvailabilityZoneAWS]
        """

        self._aws_subnet_ids_with_availability_zones = aws_subnet_ids_with_availability_zones

    @property
    def aws_iam_role_arns(self):
        """Gets the aws_iam_role_arns of this CloudResource.  # noqa: E501

        A list of 1 or 2 AWS IAM role arns of this cloud (the IAM role Anyscale uses to access this cloud & the IAM role assigned to nodes in the cluster). In the VM compute stack, both are required; in the K8S compute stack, only the first is required.  # noqa: E501

        :return: The aws_iam_role_arns of this CloudResource.  # noqa: E501
        :rtype: list[str]
        """
        return self._aws_iam_role_arns

    @aws_iam_role_arns.setter
    def aws_iam_role_arns(self, aws_iam_role_arns):
        """Sets the aws_iam_role_arns of this CloudResource.

        A list of 1 or 2 AWS IAM role arns of this cloud (the IAM role Anyscale uses to access this cloud & the IAM role assigned to nodes in the cluster). In the VM compute stack, both are required; in the K8S compute stack, only the first is required.  # noqa: E501

        :param aws_iam_role_arns: The aws_iam_role_arns of this CloudResource.  # noqa: E501
        :type: list[str]
        """

        self._aws_iam_role_arns = aws_iam_role_arns

    @property
    def aws_security_groups(self):
        """Gets the aws_security_groups of this CloudResource.  # noqa: E501

        A list of AWS security groups of this cloud.  # noqa: E501

        :return: The aws_security_groups of this CloudResource.  # noqa: E501
        :rtype: list[str]
        """
        return self._aws_security_groups

    @aws_security_groups.setter
    def aws_security_groups(self, aws_security_groups):
        """Sets the aws_security_groups of this CloudResource.

        A list of AWS security groups of this cloud.  # noqa: E501

        :param aws_security_groups: The aws_security_groups of this CloudResource.  # noqa: E501
        :type: list[str]
        """

        self._aws_security_groups = aws_security_groups

    @property
    def aws_s3_id(self):
        """Gets the aws_s3_id of this CloudResource.  # noqa: E501

        The AWS S3 id of this cloud.  # noqa: E501

        :return: The aws_s3_id of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._aws_s3_id

    @aws_s3_id.setter
    def aws_s3_id(self, aws_s3_id):
        """Sets the aws_s3_id of this CloudResource.

        The AWS S3 id of this cloud.  # noqa: E501

        :param aws_s3_id: The aws_s3_id of this CloudResource.  # noqa: E501
        :type: str
        """

        self._aws_s3_id = aws_s3_id

    @property
    def aws_efs_id(self):
        """Gets the aws_efs_id of this CloudResource.  # noqa: E501

        The AWS EFS id of this cloud.  # noqa: E501

        :return: The aws_efs_id of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._aws_efs_id

    @aws_efs_id.setter
    def aws_efs_id(self, aws_efs_id):
        """Sets the aws_efs_id of this CloudResource.

        The AWS EFS id of this cloud.  # noqa: E501

        :param aws_efs_id: The aws_efs_id of this CloudResource.  # noqa: E501
        :type: str
        """

        self._aws_efs_id = aws_efs_id

    @property
    def aws_efs_mount_target_ip(self):
        """Gets the aws_efs_mount_target_ip of this CloudResource.  # noqa: E501

        The AWS EFS mount target IP of this cloud.  # noqa: E501

        :return: The aws_efs_mount_target_ip of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._aws_efs_mount_target_ip

    @aws_efs_mount_target_ip.setter
    def aws_efs_mount_target_ip(self, aws_efs_mount_target_ip):
        """Sets the aws_efs_mount_target_ip of this CloudResource.

        The AWS EFS mount target IP of this cloud.  # noqa: E501

        :param aws_efs_mount_target_ip: The aws_efs_mount_target_ip of this CloudResource.  # noqa: E501
        :type: str
        """

        self._aws_efs_mount_target_ip = aws_efs_mount_target_ip

    @property
    def aws_cloudformation_stack_id(self):
        """Gets the aws_cloudformation_stack_id of this CloudResource.  # noqa: E501

        The AWS CloudFormation stack id of this cloud.  # noqa: E501

        :return: The aws_cloudformation_stack_id of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._aws_cloudformation_stack_id

    @aws_cloudformation_stack_id.setter
    def aws_cloudformation_stack_id(self, aws_cloudformation_stack_id):
        """Sets the aws_cloudformation_stack_id of this CloudResource.

        The AWS CloudFormation stack id of this cloud.  # noqa: E501

        :param aws_cloudformation_stack_id: The aws_cloudformation_stack_id of this CloudResource.  # noqa: E501
        :type: str
        """

        self._aws_cloudformation_stack_id = aws_cloudformation_stack_id

    @property
    def gcp_vpc_id(self):
        """Gets the gcp_vpc_id of this CloudResource.  # noqa: E501

        The GCP vpc id of this cloud.  # noqa: E501

        :return: The gcp_vpc_id of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._gcp_vpc_id

    @gcp_vpc_id.setter
    def gcp_vpc_id(self, gcp_vpc_id):
        """Sets the gcp_vpc_id of this CloudResource.

        The GCP vpc id of this cloud.  # noqa: E501

        :param gcp_vpc_id: The gcp_vpc_id of this CloudResource.  # noqa: E501
        :type: str
        """

        self._gcp_vpc_id = gcp_vpc_id

    @property
    def gcp_subnet_ids(self):
        """Gets the gcp_subnet_ids of this CloudResource.  # noqa: E501

        A list of GCP subnet IDs of this cloud.  # noqa: E501

        :return: The gcp_subnet_ids of this CloudResource.  # noqa: E501
        :rtype: list[str]
        """
        return self._gcp_subnet_ids

    @gcp_subnet_ids.setter
    def gcp_subnet_ids(self, gcp_subnet_ids):
        """Sets the gcp_subnet_ids of this CloudResource.

        A list of GCP subnet IDs of this cloud.  # noqa: E501

        :param gcp_subnet_ids: The gcp_subnet_ids of this CloudResource.  # noqa: E501
        :type: list[str]
        """

        self._gcp_subnet_ids = gcp_subnet_ids

    @property
    def memorydb_cluster_config(self):
        """Gets the memorydb_cluster_config of this CloudResource.  # noqa: E501

        The AWS memorydb cluster config of this cloud.  # noqa: E501

        :return: The memorydb_cluster_config of this CloudResource.  # noqa: E501
        :rtype: AWSMemoryDBClusterConfig
        """
        return self._memorydb_cluster_config

    @memorydb_cluster_config.setter
    def memorydb_cluster_config(self, memorydb_cluster_config):
        """Sets the memorydb_cluster_config of this CloudResource.

        The AWS memorydb cluster config of this cloud.  # noqa: E501

        :param memorydb_cluster_config: The memorydb_cluster_config of this CloudResource.  # noqa: E501
        :type: AWSMemoryDBClusterConfig
        """

        self._memorydb_cluster_config = memorydb_cluster_config

    @property
    def id(self):
        """Gets the id of this CloudResource.  # noqa: E501

        Server assigned unique identifier.  # noqa: E501

        :return: The id of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this CloudResource.

        Server assigned unique identifier.  # noqa: E501

        :param id: The id of this CloudResource.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and id is None:  # noqa: E501
            raise ValueError("Invalid value for `id`, must not be `None`")  # noqa: E501

        self._id = id

    @property
    def cloud_id(self):
        """Gets the cloud_id of this CloudResource.  # noqa: E501

        The ID of the cloud that this cloud resource belongs to.  # noqa: E501

        :return: The cloud_id of this CloudResource.  # noqa: E501
        :rtype: str
        """
        return self._cloud_id

    @cloud_id.setter
    def cloud_id(self, cloud_id):
        """Sets the cloud_id of this CloudResource.

        The ID of the cloud that this cloud resource belongs to.  # noqa: E501

        :param cloud_id: The cloud_id of this CloudResource.  # noqa: E501
        :type: str
        """
        if self.local_vars_configuration.client_side_validation and cloud_id is None:  # noqa: E501
            raise ValueError("Invalid value for `cloud_id`, must not be `None`")  # noqa: E501

        self._cloud_id = cloud_id

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, CloudResource):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, CloudResource):
            return True

        return self.to_dict() != other.to_dict()
