Esempio n. 1
0
        public VirtualMachine(AzureSubscription azureSubscription, CloudService asmCloudService, XmlNode virtualMachineXml, Hashtable vmDetails)
        {
            this._AzureSubscription = azureSubscription;
            this._AsmCloudService   = asmCloudService;
            this._XmlNode           = virtualMachineXml;
            this._VmDetails         = vmDetails;

            _OSVirtualHardDisk = new Disk(azureSubscription, _XmlNode.SelectSingleNode("//OSVirtualHardDisk"));

            _DataDisks = new List <Disk>();
            foreach (XmlNode dataDiskNode in _XmlNode.SelectNodes("//DataVirtualHardDisks/DataVirtualHardDisk"))
            {
                Disk asmDisk = new Disk(azureSubscription, dataDiskNode);
                _DataDisks.Add(asmDisk);
            }

            foreach (XmlNode loadBalancerRuleNode in _XmlNode.SelectNodes("//ConfigurationSets/ConfigurationSet/InputEndpoints/InputEndpoint"))
            {
                _LoadBalancerRules.Add(new LoadBalancerRule(azureSubscription, loadBalancerRuleNode));
            }

            #region Primary Network Interface

            NetworkInterface primaryNetworkInterface = new NetworkInterface(this.AzureSubscription, this);
            this.NetworkInterfaces.Add(primaryNetworkInterface);

            primaryNetworkInterface.IsPrimary = true;
            primaryNetworkInterface.Name      = this.RoleName + "-NIC1";

            NetworkInterfaceIpConfiguration primaryNetworkInterfaceIpConfiguration = new NetworkInterfaceIpConfiguration(this.AzureSubscription);
            primaryNetworkInterface.NetworkInterfaceIpConfigurations.Add(primaryNetworkInterfaceIpConfiguration);

            primaryNetworkInterfaceIpConfiguration.VirtualNetworkName = vmDetails["virtualnetworkname"].ToString();

            // code note, unclear why this is index [1] on the ConfigurationSet ... couldn't it be a different order?
            if (_XmlNode.SelectSingleNode("//ConfigurationSets/ConfigurationSet[1]/SubnetNames/SubnetName") != null)
            {
                primaryNetworkInterfaceIpConfiguration.SubnetName = _XmlNode.SelectSingleNode("//ConfigurationSets/ConfigurationSet[1]/SubnetNames/SubnetName").InnerText;
            }

            if (_XmlNode.SelectSingleNode("//ConfigurationSets/ConfigurationSet[1]/StaticVirtualNetworkIPAddress") != null)
            {
                primaryNetworkInterfaceIpConfiguration.PrivateIpAllocationMethod = "Static";
                primaryNetworkInterfaceIpConfiguration.PrivateIpAddress          = _XmlNode.SelectSingleNode("//ConfigurationSets/ConfigurationSet[1]/StaticVirtualNetworkIPAddress").InnerText;
            }

            if (_XmlNode.SelectSingleNode("//ConfigurationSets/ConfigurationSet[1]/NetworkSecurityGroup") != null)
            {
                _NetworkSecurityGroupName = _XmlNode.SelectSingleNode("//ConfigurationSets/ConfigurationSet[1]/NetworkSecurityGroup").InnerText;
            }

            #endregion


            #region Additional Network Interfaces

            foreach (XmlNode additionalNetworkInterfaceXml in _XmlNode.SelectNodes("//ConfigurationSets/ConfigurationSet/NetworkInterfaces/NetworkInterface"))
            {
                NetworkInterface additionalNetworkInterface = new NetworkInterface(this.AzureSubscription, this);
                this.NetworkInterfaces.Add(additionalNetworkInterface);

                additionalNetworkInterface.Name = this.RoleName + "-" + additionalNetworkInterfaceXml.SelectSingleNode("Name").InnerText;

                if (additionalNetworkInterfaceXml.SelectNodes("IPForwarding").Count > 0)
                {
                    additionalNetworkInterface.EnableIpForwarding = true;
                }

                NetworkInterfaceIpConfiguration ipConfiguration = new NetworkInterfaceIpConfiguration(this.AzureSubscription);
                additionalNetworkInterface.NetworkInterfaceIpConfigurations.Add(ipConfiguration);

                ipConfiguration.Name = "ipconfig1";
                ipConfiguration.VirtualNetworkName = vmDetails["virtualnetworkname"].ToString();

                if (_XmlNode.SelectSingleNode("IPConfigurations/IPConfiguration/SubnetName") != null)
                {
                    ipConfiguration.SubnetName = additionalNetworkInterfaceXml.SelectSingleNode("IPConfigurations/IPConfiguration/SubnetName").InnerText;
                }

                if (additionalNetworkInterfaceXml.SelectSingleNode("IPConfigurations/IPConfiguration/StaticVirtualNetworkIPAddress") != null)
                {
                    ipConfiguration.PrivateIpAllocationMethod = "Static";
                    ipConfiguration.PrivateIpAddress          = additionalNetworkInterfaceXml.SelectSingleNode("IPConfigurations/IPConfiguration/StaticVirtualNetworkIPAddress").InnerText;
                }
            }

            #endregion
        }