// 
// Copyright (c) Microsoft and contributors.  All rights reserved.
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// 
// See the License for the specific language governing permissions and
// limitations under the License.
// 

// Warning: This code was generated by a tool.
// 
// Changes to this file may cause incorrect behavior and will be lost if the
// code is regenerated.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Management.Compute.Models;

namespace Microsoft.WindowsAzure.Management.Compute.Models
{
    /// <summary>
    /// A deployment that exists in the cloud service.
    /// </summary>
    public partial class DeploymentGetResponse : OperationResponse
    {
        private string _configuration;
        
        /// <summary>
        /// The configuration file of the deployment.
        /// </summary>
        public string Configuration
        {
            get { return this._configuration; }
            set { this._configuration = value; }
        }
        
        private DateTime _createdTime;
        
        /// <summary>
        /// The time that the deployment was created.
        /// </summary>
        public DateTime CreatedTime
        {
            get { return this._createdTime; }
            set { this._createdTime = value; }
        }
        
        private DeploymentSlot _deploymentSlot;
        
        /// <summary>
        /// The deployment environment in which this deployment is running.
        /// </summary>
        public DeploymentSlot DeploymentSlot
        {
            get { return this._deploymentSlot; }
            set { this._deploymentSlot = value; }
        }
        
        private DnsSettings _dnsSettings;
        
        /// <summary>
        /// The custom DNS settings that are specified for deployment.
        /// </summary>
        public DnsSettings DnsSettings
        {
            get { return this._dnsSettings; }
            set { this._dnsSettings = value; }
        }
        
        private IDictionary<string, string> _extendedProperties;
        
        /// <summary>
        /// Optional. Represents the name of an extended cloud service
        /// property. Each extended property must have both a defined name and
        /// value. You can have a maximum of 50 extended property name and
        /// value pairs.  The maximum length of the Name element is 64
        /// characters, only alphanumeric characters and underscores are valid
        /// in the name, and it must start with a letter. Attempting to use
        /// other characters, starting with a non-letter character, or
        /// entering a name that is identical to that of another extended
        /// property owned by the same service, will result in a status code
        /// 400 (Bad Request) error.  Each extended property value has a
        /// maximum length of 255 characters.
        /// </summary>
        public IDictionary<string, string> ExtendedProperties
        {
            get { return this._extendedProperties; }
            set { this._extendedProperties = value; }
        }
        
        private ExtensionConfiguration _extensionConfiguration;
        
        /// <summary>
        /// Represents an extension that is added to the cloud service.
        /// </summary>
        public ExtensionConfiguration ExtensionConfiguration
        {
            get { return this._extensionConfiguration; }
            set { this._extensionConfiguration = value; }
        }
        
        private string _label;
        
        /// <summary>
        /// The user supplied name of the deployment. This name can be used
        /// identify the deployment for tracking purposes.
        /// </summary>
        public string Label
        {
            get { return this._label; }
            set { this._label = value; }
        }
        
        private DateTime _lastModifiedTime;
        
        /// <summary>
        /// The last time that the deployment was modified.
        /// </summary>
        public DateTime LastModifiedTime
        {
            get { return this._lastModifiedTime; }
            set { this._lastModifiedTime = value; }
        }
        
        private bool _locked;
        
        /// <summary>
        /// Indicates whether the deployment is locked for new write
        /// operations. True if the deployment is locked because an existing
        /// operation is updating the deployment; otherwise false.
        /// </summary>
        public bool Locked
        {
            get { return this._locked; }
            set { this._locked = value; }
        }
        
        private string _name;
        
        public string Name
        {
            get { return this._name; }
            set { this._name = value; }
        }
        
        private PersistentVMDowntime _persistentVMDowntime;
        
        /// <summary>
        /// Specifies information about when the virtual machine has been
        /// started and stopped.
        /// </summary>
        public PersistentVMDowntime PersistentVMDowntime
        {
            get { return this._persistentVMDowntime; }
            set { this._persistentVMDowntime = value; }
        }
        
        private string _privateId;
        
        /// <summary>
        /// The unique identifier for this deployment.
        /// </summary>
        public string PrivateId
        {
            get { return this._privateId; }
            set { this._privateId = value; }
        }
        
        private string _reservedIPName;
        
        /// <summary>
        /// Preview Only. The name of the Reserved IP that the deployment
        /// belongs to.
        /// </summary>
        public string ReservedIPName
        {
            get { return this._reservedIPName; }
            set { this._reservedIPName = value; }
        }
        
        private IList<RoleInstance> _roleInstances;
        
        /// <summary>
        /// The list of role instances in the deployment.
        /// </summary>
        public IList<RoleInstance> RoleInstances
        {
            get { return this._roleInstances; }
            set { this._roleInstances = value; }
        }
        
        private IList<Role> _roles;
        
        /// <summary>
        /// The list of roles in the deployment.
        /// </summary>
        public IList<Role> Roles
        {
            get { return this._roles; }
            set { this._roles = value; }
        }
        
        private string _rollbackAllowed;
        
        /// <summary>
        /// Indicates whether the Rollback Update Or Upgrade operation is
        /// allowed at this time. True if the operation is allowed; otherwise
        /// false.
        /// </summary>
        public string RollbackAllowed
        {
            get { return this._rollbackAllowed; }
            set { this._rollbackAllowed = value; }
        }
        
        private string _sdkVersion;
        
        /// <summary>
        /// The version of the Windows Azure SDK that was used to generate the
        /// .cspkg that created this deployment.  The first two numerical
        /// components of the returned version represent the version of the
        /// SDK used to create the package.
        /// </summary>
        public string SdkVersion
        {
            get { return this._sdkVersion; }
            set { this._sdkVersion = value; }
        }
        
        private DeploymentStatus _status;
        
        /// <summary>
        /// The status of the deployment.
        /// </summary>
        public DeploymentStatus Status
        {
            get { return this._status; }
            set { this._status = value; }
        }
        
        private int _upgradeDomainCount;
        
        /// <summary>
        /// The number of upgrade domains available to this cloud service.
        /// </summary>
        public int UpgradeDomainCount
        {
            get { return this._upgradeDomainCount; }
            set { this._upgradeDomainCount = value; }
        }
        
        private UpgradeStatus _upgradeStatus;
        
        /// <summary>
        /// Specifies information about an update occurring on the deployment.
        /// </summary>
        public UpgradeStatus UpgradeStatus
        {
            get { return this._upgradeStatus; }
            set { this._upgradeStatus = value; }
        }
        
        private Uri _uri;
        
        /// <summary>
        /// The URL used to access the hosted service. For example, if the
        /// service name is MyService you could access the access the service
        /// by calling: http://MyService.cloudapp.net
        /// </summary>
        public Uri Uri
        {
            get { return this._uri; }
            set { this._uri = value; }
        }
        
        private IList<VirtualIPAddress> _virtualIPAddresses;
        
        /// <summary>
        /// The virtual IP addresses that are specified for thedeployment.
        /// </summary>
        public IList<VirtualIPAddress> VirtualIPAddresses
        {
            get { return this._virtualIPAddresses; }
            set { this._virtualIPAddresses = value; }
        }
        
        private string _virtualNetworkName;
        
        /// <summary>
        /// The name of the Virtual Network that the virtual machine connects
        /// to.
        /// </summary>
        public string VirtualNetworkName
        {
            get { return this._virtualNetworkName; }
            set { this._virtualNetworkName = value; }
        }
        
        /// <summary>
        /// Initializes a new instance of the DeploymentGetResponse class.
        /// </summary>
        public DeploymentGetResponse()
        {
            this._extendedProperties = new Dictionary<string, string>();
            this._roleInstances = new List<RoleInstance>();
            this._roles = new List<Role>();
            this._virtualIPAddresses = new List<VirtualIPAddress>();
        }
    }
}
