# Code generated by Microsoft (R) AutoRest Code Generator.
# Changes may cause incorrect behavior and will be lost if the code is
# regenerated.

module Azure::KeyVault::Mgmt::V2018_02_14
  module Models
    #
    # Properties of the vault
    #
    class VaultProperties

      include MsRestAzure

      # @return The Azure Active Directory tenant ID that should be used for
      # authenticating requests to the key vault.
      attr_accessor :tenant_id

      # @return [Sku] SKU details
      attr_accessor :sku

      # @return [Array<AccessPolicyEntry>] An array of 0 to 16 identities that
      # have access to the key vault. All identities in the array must use the
      # same tenant ID as the key vault's tenant ID.
      attr_accessor :access_policies

      # @return [String] The URI of the vault for performing operations on keys
      # and secrets.
      attr_accessor :vault_uri

      # @return [Boolean] Property to specify whether Azure Virtual Machines
      # are permitted to retrieve certificates stored as secrets from the key
      # vault.
      attr_accessor :enabled_for_deployment

      # @return [Boolean] Property to specify whether Azure Disk Encryption is
      # permitted to retrieve secrets from the vault and unwrap keys.
      attr_accessor :enabled_for_disk_encryption

      # @return [Boolean] Property to specify whether Azure Resource Manager is
      # permitted to retrieve secrets from the key vault.
      attr_accessor :enabled_for_template_deployment

      # @return [Boolean] Property to specify whether the 'soft delete'
      # functionality is enabled for this key vault. It does not accept false
      # value.
      attr_accessor :enable_soft_delete

      # @return [CreateMode] The vault's create mode to indicate whether the
      # vault need to be recovered or not. Possible values include: 'recover',
      # 'default'
      attr_accessor :create_mode

      # @return [Boolean] Property specifying whether protection against purge
      # is enabled for this vault. Setting this property to true activates
      # protection against purge for this vault and its content - only the Key
      # Vault service may initiate a hard, irrecoverable deletion. The setting
      # is effective only if soft delete is also enabled. Enabling this
      # functionality is irreversible - that is, the property does not accept
      # false as its value.
      attr_accessor :enable_purge_protection

      # @return [NetworkRuleSet] A collection of rules governing the
      # accessibility of the vault from specific network locations.
      attr_accessor :network_acls


      #
      # Mapper for VaultProperties class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'VaultProperties',
          type: {
            name: 'Composite',
            class_name: 'VaultProperties',
            model_properties: {
              tenant_id: {
                client_side_validation: true,
                required: true,
                serialized_name: 'tenantId',
                type: {
                  name: 'String'
                }
              },
              sku: {
                client_side_validation: true,
                required: true,
                serialized_name: 'sku',
                default_value: {},
                type: {
                  name: 'Composite',
                  class_name: 'Sku'
                }
              },
              access_policies: {
                client_side_validation: true,
                required: false,
                serialized_name: 'accessPolicies',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'AccessPolicyEntryElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'AccessPolicyEntry'
                      }
                  }
                }
              },
              vault_uri: {
                client_side_validation: true,
                required: false,
                serialized_name: 'vaultUri',
                type: {
                  name: 'String'
                }
              },
              enabled_for_deployment: {
                client_side_validation: true,
                required: false,
                serialized_name: 'enabledForDeployment',
                type: {
                  name: 'Boolean'
                }
              },
              enabled_for_disk_encryption: {
                client_side_validation: true,
                required: false,
                serialized_name: 'enabledForDiskEncryption',
                type: {
                  name: 'Boolean'
                }
              },
              enabled_for_template_deployment: {
                client_side_validation: true,
                required: false,
                serialized_name: 'enabledForTemplateDeployment',
                type: {
                  name: 'Boolean'
                }
              },
              enable_soft_delete: {
                client_side_validation: true,
                required: false,
                serialized_name: 'enableSoftDelete',
                type: {
                  name: 'Boolean'
                }
              },
              create_mode: {
                client_side_validation: true,
                required: false,
                serialized_name: 'createMode',
                type: {
                  name: 'Enum',
                  module: 'CreateMode'
                }
              },
              enable_purge_protection: {
                client_side_validation: true,
                required: false,
                serialized_name: 'enablePurgeProtection',
                type: {
                  name: 'Boolean'
                }
              },
              network_acls: {
                client_side_validation: true,
                required: false,
                serialized_name: 'networkAcls',
                type: {
                  name: 'Composite',
                  class_name: 'NetworkRuleSet'
                }
              }
            }
          }
        }
      end
    end
  end
end
