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

module Azure::ServiceFabric::Mgmt::V2017_07_01_preview
  module Models
    #
    # Cluster update request
    #
    class ClusterUpdateParameters

      include MsRestAzure

      # @return [Enum] The reliability level sets the replica set size of
      # system services. Learn about
      # [ReliabilityLevel](https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-capacity).
      # Possible values include: 'Bronze', 'Silver', 'Gold'
      attr_accessor :reliability_level

      # @return [Enum] The upgrade mode of the cluster. This indicates if the
      # cluster should be automatically upgraded when new Service Fabric
      # runtime version is available. Possible values include: 'Automatic',
      # 'Manual'
      attr_accessor :upgrade_mode

      # @return [String] The Service Fabric runtime version of the cluster.
      # This property can only by set the user when **upgradeMode** is set to
      # 'Manual'. To get list of available Service Fabric versions for new
      # clusters use [ClusterVersion API](./ClusterVersion.md). To get the list
      # of available version for existing clusters use
      # **availableClusterVersions**.
      attr_accessor :cluster_code_version

      # @return [CertificateDescription] The certificate to use for securing
      # the cluster. The certificate provided will be used for  node to node
      # security within the cluster, SSL certificate for cluster management
      # endpoint and default  admin client.
      attr_accessor :certificate

      # @return [Array<ClientCertificateThumbprint>] The list of client
      # certificates referenced by thumbprint that are allowed to manage the
      # cluster. This will overwrite the existing list.
      attr_accessor :client_certificate_thumbprints

      # @return [Array<ClientCertificateCommonName>] The list of client
      # certificates referenced by common name that are allowed to manage the
      # cluster. This will overwrite the existing list.
      attr_accessor :client_certificate_common_names

      # @return [Array<SettingsSectionDescription>] The list of custom fabric
      # settings to configure the cluster. This will overwrite the existing
      # list.
      attr_accessor :fabric_settings

      # @return [CertificateDescription] The server certificate used by reverse
      # proxy.
      attr_accessor :reverse_proxy_certificate

      # @return [Array<NodeTypeDescription>] The list of node types in the
      # cluster. This will overwrite the existing list.
      attr_accessor :node_types

      # @return [ClusterUpgradePolicy] The policy to use when upgrading the
      # cluster.
      attr_accessor :upgrade_description

      # @return [Array<Enum>] The list of add-on features to enable in the
      # cluster.
      attr_accessor :add_on_features

      # @return [Hash{String => String}] Cluster update parameters
      attr_accessor :tags


      #
      # Mapper for ClusterUpdateParameters class as Ruby Hash.
      # This will be used for serialization/deserialization.
      #
      def self.mapper()
        {
          client_side_validation: true,
          required: false,
          serialized_name: 'ClusterUpdateParameters',
          type: {
            name: 'Composite',
            class_name: 'ClusterUpdateParameters',
            model_properties: {
              reliability_level: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.reliabilityLevel',
                type: {
                  name: 'String'
                }
              },
              upgrade_mode: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.upgradeMode',
                type: {
                  name: 'String'
                }
              },
              cluster_code_version: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.clusterCodeVersion',
                type: {
                  name: 'String'
                }
              },
              certificate: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.certificate',
                type: {
                  name: 'Composite',
                  class_name: 'CertificateDescription'
                }
              },
              client_certificate_thumbprints: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.clientCertificateThumbprints',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'ClientCertificateThumbprintElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'ClientCertificateThumbprint'
                      }
                  }
                }
              },
              client_certificate_common_names: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.clientCertificateCommonNames',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'ClientCertificateCommonNameElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'ClientCertificateCommonName'
                      }
                  }
                }
              },
              fabric_settings: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.fabricSettings',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'SettingsSectionDescriptionElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'SettingsSectionDescription'
                      }
                  }
                }
              },
              reverse_proxy_certificate: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.reverseProxyCertificate',
                type: {
                  name: 'Composite',
                  class_name: 'CertificateDescription'
                }
              },
              node_types: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.nodeTypes',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'NodeTypeDescriptionElementType',
                      type: {
                        name: 'Composite',
                        class_name: 'NodeTypeDescription'
                      }
                  }
                }
              },
              upgrade_description: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.upgradeDescription',
                type: {
                  name: 'Composite',
                  class_name: 'ClusterUpgradePolicy'
                }
              },
              add_on_features: {
                client_side_validation: true,
                required: false,
                serialized_name: 'properties.addOnFeatures',
                type: {
                  name: 'Sequence',
                  element: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'enumElementType',
                      type: {
                        name: 'String'
                      }
                  }
                }
              },
              tags: {
                client_side_validation: true,
                required: false,
                serialized_name: 'tags',
                type: {
                  name: 'Dictionary',
                  value: {
                      client_side_validation: true,
                      required: false,
                      serialized_name: 'StringElementType',
                      type: {
                        name: 'String'
                      }
                  }
                }
              }
            }
          }
        }
      end
    end
  end
end
