Ejemplo n.º 1
0
        public IWithCreate WithDnsServerNames(IList <string> dnsServerNames)
        {
            DnsConfiguration dnsConfiguration = new DnsConfiguration();

            dnsConfiguration.NameServers = dnsServerNames;
            this.Inner.DnsConfig         = dnsConfiguration;
            return(this);
        }
Ejemplo n.º 2
0
        public async Task TestCreateDomain()
        {
            string domainName = CreateRandomDomainName();

            IDnsService provider = CreateProvider();

            using (CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TestTimeout(TimeSpan.FromSeconds(60))))
            {
                DnsConfiguration configuration = new DnsConfiguration(
                    new DnsDomainConfiguration(
                        name: domainName,
                        timeToLive: default(TimeSpan?),
                        emailAddress: "admin@" + domainName,
                        comment: "Integration test domain",
                        records: new DnsDomainRecordConfiguration[] { },
                        subdomains: new DnsSubdomainConfiguration[] { }));

                DnsJob <DnsDomains> createResponse = await provider.CreateDomainsAsync(configuration, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                IEnumerable <DnsDomain> createdDomains = Enumerable.Empty <DnsDomain>();
                if (createResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(createResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail();
                }
                else
                {
                    Console.WriteLine(JsonConvert.SerializeObject(createResponse.Response, Formatting.Indented));
                    createdDomains = createResponse.Response.Domains;
                }

                ReadOnlyCollection <DnsDomain> domains = await ListAllDomainsAsync(provider, domainName, null, cancellationTokenSource.Token);

                Assert.IsNotNull(domains);

                if (!domains.Any())
                {
                    Assert.Inconclusive("No domains were returned by the server");
                }

                foreach (var domain in domains)
                {
                    Console.WriteLine();
                    Console.WriteLine("Domain: {0} ({1})", domain.Name, domain.Id);
                    Console.WriteLine();
                    Console.WriteLine(await JsonConvert.SerializeObjectAsync(domain, Formatting.Indented));
                }

                DnsJob deleteResponse = await provider.RemoveDomainsAsync(createdDomains.Select(i => i.Id), false, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (deleteResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(deleteResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to delete temporary domain created during the integration test.");
                }
            }
        }
Ejemplo n.º 3
0
        public IWithCreate WithDnsConfiguration(IList <string> dnsServerNames, string dnsSearchDomains, string dnsOptions)
        {
            DnsConfiguration dnsConfiguration = new DnsConfiguration();

            dnsConfiguration.NameServers   = dnsServerNames;
            dnsConfiguration.SearchDomains = dnsSearchDomains;
            dnsConfiguration.Options       = dnsOptions;
            this.Inner.DnsConfig           = dnsConfiguration;
            return(this);
        }
Ejemplo n.º 4
0
        public async Task TestCloneDomain()
        {
            string domainName = CreateRandomDomainName();
            string clonedName = CreateRandomDomainName();

            IDnsService provider = CreateProvider();

            using (CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TestTimeout(TimeSpan.FromSeconds(60))))
            {
                List <DomainId> domainsToRemove = new List <DomainId>();

                DnsConfiguration configuration = new DnsConfiguration(
                    new DnsDomainConfiguration(
                        name: domainName,
                        timeToLive: default(TimeSpan?),
                        emailAddress: "admin@" + domainName,
                        comment: "Integration test domain",
                        records: new DnsDomainRecordConfiguration[] { },
                        subdomains: new DnsSubdomainConfiguration[] { }));

                DnsJob <DnsDomains> createResponse = await provider.CreateDomainsAsync(configuration, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (createResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(createResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail();
                }
                else
                {
                    Console.WriteLine(JsonConvert.SerializeObject(createResponse.Response, Formatting.Indented));
                    domainsToRemove.AddRange(createResponse.Response.Domains.Select(i => i.Id));
                }

                DnsJob <DnsDomains> cloneResponse = await provider.CloneDomainAsync(createResponse.Response.Domains[0].Id, clonedName, true, true, true, true, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (cloneResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(cloneResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail();
                }
                else
                {
                    Console.WriteLine(JsonConvert.SerializeObject(cloneResponse.Response, Formatting.Indented));
                    domainsToRemove.AddRange(cloneResponse.Response.Domains.Select(i => i.Id));
                }

                DnsJob deleteResponse = await provider.RemoveDomainsAsync(domainsToRemove, false, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (deleteResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(deleteResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to delete temporary domain created during the integration test.");
                }
            }
        }
Ejemplo n.º 5
0
        public static DnsConfiguration PublicDnsConfiguration()
        {
            var dnsConfiguration = new DnsConfiguration {
                Id     = "J8Ho6CGgFUydXUuWf58J-A",
                Type   = DnsType.Public,
                Domain = "",
                Ip     = "8.8.8.8"
            };

            return(dnsConfiguration);
        }
Ejemplo n.º 6
0
        public static DnsConfiguration PrivateExternalDnsConfiguration()
        {
            var host             = Host2Configuration.Host;
            var dnsConfiguration = new DnsConfiguration {
                Id     = "FD1tT-TJZku93WFXt9Ldfw",
                Type   = DnsType.Private,
                Domain = host.ExternalDomainPrimary,
                Ip     = host.ExternalHostIpPrimary
            };

            return(dnsConfiguration);
        }
Ejemplo n.º 7
0
        public static DnsConfiguration PrivateInternalDnsConfiguration()
        {
            var host             = Host2Configuration.Host;
            var dnsConfiguration = new DnsConfiguration {
                Id     = "BhfPEkstWUmACT6rL5vO-w",
                Type   = DnsType.Private,
                Domain = host.InternalDomainPrimary,
                Ip     = host.InternalHostIpPrimary
            };

            return(dnsConfiguration);
        }
Ejemplo n.º 8
0
        public static bool AddDnsConfiguration(DnsConfiguration conf)
        {
            if (string.IsNullOrEmpty(conf.Id))
            {
                return(false);
            }
            var file = $"{DnsDir}/{conf.Id}{DnsConfigurationExt}";
            var text = JsonConvert.SerializeObject(conf, Formatting.Indented);

            try {
                FileWithAcl.WriteAllText(file, text, "644", "root", "wheel");
            }
            catch (Exception) {
                return(false);
            }
            return(File.Exists(file));
        }
Ejemplo n.º 9
0
 internal ContainerGroupData(ResourceIdentifier id, string name, ResourceType resourceType, SystemData systemData, IDictionary <string, string> tags, AzureLocation location, IList <string> zones, ManagedServiceIdentity identity, string provisioningState, IList <ContainerInstanceContainer> containers, IList <ImageRegistryCredential> imageRegistryCredentials, ContainerGroupRestartPolicy?restartPolicy, IPAddress ipAddress, OperatingSystemTypes osType, IList <ContainerInstanceVolume> volumes, ContainerGroupPropertiesInstanceView instanceView, ContainerGroupDiagnostics diagnostics, IList <ContainerGroupSubnetId> subnetIds, DnsConfiguration dnsConfig, ContainerGroupSku?sku, Models.EncryptionProperties encryptionProperties, IList <InitContainerDefinitionContent> initContainers) : base(id, name, resourceType, systemData, tags, location, zones)
 {
     Identity                 = identity;
     ProvisioningState        = provisioningState;
     Containers               = containers;
     ImageRegistryCredentials = imageRegistryCredentials;
     RestartPolicy            = restartPolicy;
     IPAddress                = ipAddress;
     OSType               = osType;
     Volumes              = volumes;
     InstanceView         = instanceView;
     Diagnostics          = diagnostics;
     SubnetIds            = subnetIds;
     DnsConfig            = dnsConfig;
     Sku                  = sku;
     EncryptionProperties = encryptionProperties;
     InitContainers       = initContainers;
 }
Ejemplo n.º 10
0
        public AntdNetwork2Module()
        {
            Get["/network2"] = x => {
                var physicalInterfaces = Network2Configuration.InterfacePhysical.ToList();
                var bridgeInterfaces   = Network2Configuration.InterfaceBridge.ToList();
                var bondInterfaces     = Network2Configuration.InterfaceBond.ToList();
                var virtualInterfaces  = Network2Configuration.InterfaceVirtual.ToList();
                foreach (var vif in virtualInterfaces)
                {
                    if (physicalInterfaces.Any(_ => _ == vif) ||
                        bridgeInterfaces.Any(_ => _ == vif) ||
                        bondInterfaces.Any(_ => _ == vif))
                    {
                        virtualInterfaces.Remove(vif);
                    }
                }
                var allifs = new List <string>();
                allifs.AddRange(physicalInterfaces);
                allifs.AddRange(bridgeInterfaces);
                allifs.AddRange(bondInterfaces);
                var model = new PageNetwork2Model {
                    PhysicalIf = physicalInterfaces,
                    BridgeIf   = bridgeInterfaces,
                    BondIf     = bondInterfaces,
                    VirtualIf  = virtualInterfaces,
                    AllIfs     = allifs, //new List <string> { "dev1", "dev2", "dev3" },
                    InterfaceConfigurationList = Network2Configuration.InterfaceConfigurationList,
                    GatewayConfigurationList   = Network2Configuration.GatewayConfigurationList,
                    RouteConfigurationList     = Network2Configuration.RouteConfigurationList,
                    DnsConfigurationList       = Network2Configuration.DnsConfigurationList,
                    Configuration = Network2Configuration.Conf.Interfaces,
                    NetworkHardwareConfigurationList = Network2Configuration.NetworkHardwareConfigurationList,
                    LagConfigurationList             = Network2Configuration.NetworkAggregatedInterfaceConfigurationList,
                    Variables = Host2Configuration.Host,
                    //ActiveDnsConfiguration = Network2Configuration.Conf.ActiveDnsConfiguration
                };
                return(JsonConvert.SerializeObject(model));
            };

            Post["/network2/restart"] = x => {
                new Do().NetworkChanges();
                return(HttpStatusCode.OK);
            };

            Post["/network2/interfaceconfiguration"] = x => {
                string id        = Request.Form.Id;
                string type      = Request.Form.Type;
                var    typedType = type?.ToEnum <NetworkInterfaceType>() ?? NetworkInterfaceType.Null;
                if (typedType == NetworkInterfaceType.Null)
                {
                    return(HttpStatusCode.InternalServerError);
                }
                var    index       = Network2Configuration.InterfaceConfigurationList.Count(_ => _.Type == typedType);
                string description = Request.Form.Description;
                var    typedVerb   = typedType == NetworkInterfaceType.Internal ? NetworkRoleVerb.iif : NetworkRoleVerb.eif;
                var    alias       = $"{typedVerb.ToString()}{index:D2}";
                string mode        = Request.Form.Mode;
                var    typedMode   = mode?.ToEnum <NetworkInterfaceMode>() ?? NetworkInterfaceMode.Dynamic;
                string ip          = Request.Form.Ip;
                string range       = Request.Form.Range;
                var    vars        = Host2Configuration.Host;

                var hostname = "";
                var subnet   = "";
                if (typedType == NetworkInterfaceType.Internal)
                {
                    hostname = $"{vars.HostName}{typedVerb.ToString()}.{vars.InternalDomainPrimary}";
                    subnet   = vars.InternalNetPrimaryBits;
                }
                if (typedType == NetworkInterfaceType.External)
                {
                    hostname = $"{vars.HostName}{typedVerb.ToString()}.{vars.ExternalDomainPrimary}";
                    subnet   = vars.ExternalNetPrimaryBits;
                }

                var broadcast = "";
                try {
                    broadcast = Cidr.CalcNetwork(ip, subnet).Broadcast.ToString();
                }
                catch (Exception ex) {
                    ConsoleLogger.Error(ex.Message);
                }

                var model = new NetworkInterfaceConfiguration {
                    Id          = string.IsNullOrEmpty(id) ? Random.ShortGuid() : id,
                    Type        = typedType,
                    Hostname    = hostname,
                    Index       = index,
                    Description = description,
                    RoleVerb    = typedVerb,
                    Alias       = alias,
                    Mode        = typedMode,
                    Ip          = ip,
                    Range       = range,
                    Subnet      = subnet,
                    Broadcast   = broadcast
                };
                Network2Configuration.AddInterfaceConfiguration(model);
                return(HttpStatusCode.OK);
            };

            Post["/network2/interfaceconfiguration/del"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.RemoveInterfaceConfiguration(guid);
                return(HttpStatusCode.OK);
            };

            Post["/network2/gatewayconfiguration"] = x => {
                string id             = Request.Form.Id;
                string description    = Request.Form.Description;
                string gatewayAddress = Request.Form.GatewayAddress;
                string def            = Request.Form.Default;
                var    model          = new NetworkGatewayConfiguration {
                    Id             = string.IsNullOrEmpty(id) ? Random.ShortGuid() : id,
                    Description    = description,
                    GatewayAddress = gatewayAddress,
                    IsDefault      = !string.IsNullOrEmpty(def) && Convert.ToBoolean(def)
                };
                Network2Configuration.AddGatewayConfiguration(model);
                return(HttpStatusCode.OK);
            };

            Post["/network2/gatewayconfiguration/del"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.RemoveGatewayConfiguration(guid);
                return(HttpStatusCode.OK);
            };

            Post["/network2/lagconfiguration"] = x => {
                string id       = Request.Form.Id;
                string parent   = Request.Form.Parent;
                string children = Request.Form.Children;
                var    model    = new NetworkAggregatedInterfaceConfiguration {
                    Id       = string.IsNullOrEmpty(id) ? Random.ShortGuid() : id,
                    Parent   = parent,
                    Children = string.IsNullOrEmpty(children) ? new List <string>() : children.SplitToList()
                };
                Network2Configuration.AddAggregatedInterfaceConfiguration(model);
                return(HttpStatusCode.OK);
            };

            Post["/network2/lagconfiguration/del"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.RemoveAggregatedInterfaceConfiguration(guid);
                return(HttpStatusCode.OK);
            };

            Post["/network2/routeconfiguration"] = x => {
                string id               = Request.Form.Id;
                string destinationIp    = Request.Form.DestinationIp;
                string destinationRange = Request.Form.DestinationRange;
                string gateway          = Request.Form.Gateway;
                var    model            = new NetworkRouteConfiguration {
                    Id               = string.IsNullOrEmpty(id) ? Random.ShortGuid() : id,
                    DestinationIp    = destinationIp,
                    DestinationRange = destinationRange,
                    Gateway          = gateway
                };
                Network2Configuration.AddRouteConfiguration(model);
                return(HttpStatusCode.OK);
            };

            Post["/network2/routeconfiguration/del"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.RemoveRouteConfiguration(guid);
                return(HttpStatusCode.OK);
            };

            Post["/network2/dnsconfiguration"] = x => {
                string id        = Request.Form.Id;
                string type      = Request.Form.Type;
                var    typedType = type?.ToEnum <DnsType>() ?? DnsType.Null;
                if (typedType == DnsType.Null)
                {
                    return(HttpStatusCode.InternalServerError);
                }
                string domain = Request.Form.Domain;
                string ip     = Request.Form.Ip;
                var    model  = new DnsConfiguration {
                    Id     = string.IsNullOrEmpty(id) ? Random.ShortGuid() : id,
                    Type   = typedType,
                    Domain = domain,
                    Ip     = ip
                };
                Network2Configuration.AddDnsConfiguration(model);
                return(HttpStatusCode.OK);
            };

            Post["/network2/dnsconfiguration/del"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.RemoveDnsConfiguration(guid);
                return(HttpStatusCode.OK);
            };

            Post["/network2/dnsconfiguration/active"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.SetDnsConfigurationActive(guid);
                return(HttpStatusCode.OK);
            };

            Post["/network2/nsupdateconfiguration"] = x => {
                string id           = Request.Form.Id;
                string serverName   = Request.Form.ServerName;
                string serverPort   = Request.Form.ServerPort;
                string localAddress = Request.Form.LocalAddress;
                string localPort    = Request.Form.LocalPort;
                string zoneName     = Request.Form.ZoneName;
                string className    = Request.Form.ClassName;
                string nxDomain     = Request.Form.NxDomain;
                string yxDomain     = Request.Form.YxDomain;
                string nxRrset      = Request.Form.NxRrset;
                string yxRrset      = Request.Form.YxRrset;
                string delete       = Request.Form.Delete;
                string add          = Request.Form.Add;
                var    model        = new NsUpdateConfiguration {
                    Id           = string.IsNullOrEmpty(id) ? Random.ShortGuid() : id,
                    ServerName   = serverName,
                    ServerPort   = serverPort,
                    LocalAddress = localAddress,
                    LocalPort    = localPort,
                    ZoneName     = zoneName,
                    ClassName    = className,
                    NxDomain     = nxDomain,
                    YxDomain     = yxDomain,
                    NxRrset      = nxRrset,
                    YxRrset      = yxRrset,
                    Delete       = delete,
                    Add          = add
                };
                Network2Configuration.AddNsUpdateConfiguration(model);
                return(HttpStatusCode.OK);
            };

            Post["/network2/nsupdateconfiguration/del"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.RemoveNsUpdateConfiguration(guid);
                return(HttpStatusCode.OK);
            };

            Post["/network2/hardwareconfiguration"] = x => {
                string id         = Request.Form.Id;
                string txqueuelen = Request.Form.Txqueuelen;
                string mtu        = Request.Form.Mtu;
                string macAddress = Request.Form.MacAddress;
                var    model      = new NetworkHardwareConfiguration()
                {
                    Id         = string.IsNullOrEmpty(id) ? Random.ShortGuid() : id,
                    Txqueuelen = txqueuelen,
                    Mtu        = mtu,
                    MacAddress = macAddress
                };
                Network2Configuration.AddNetworkHardwareConfiguration(model);
                return(HttpStatusCode.OK);
            };

            Post["/network2/hardwareconfiguration/del"] = x => {
                string guid = Request.Form.Guid;
                Network2Configuration.RemoveNetworkHardwareConfiguration(guid);
                return(HttpStatusCode.OK);
            };

            //Post["/network2/interface"] = x => {
            //    string dev = Request.Form.Device;
            //    string conf = Request.Form.Configuration;
            //    string confs = Request.Form.AdditionalConfigurations;
            //    string gwConf = Request.Form.GatewayConfiguration;
            //    string hwConf = Request.Form.HardwareConfiguration;
            //    string status = Request.Form.Status;
            //    var typedStatus = status?.ToEnum<NetworkInterfaceStatus>() ?? NetworkInterfaceStatus.Down;
            //    var model = new NetworkInterface {
            //        Device = dev,
            //        Configuration = conf,
            //        HardwareConfiguration = hwConf,
            //        Status = typedStatus,
            //        AdditionalConfigurations = confs == null ? new List<string>() : StringExtensions.SplitToList(confs),
            //        GatewayConfiguration = gwConf
            //    };
            //    Network2Configuration.AddInterfaceSetting(model);
            //    return HttpStatusCode.OK;
            //};

            Post["/network2/interface2"] = x => {
                string conf  = Request.Form.Config;
                var    model = JsonConvert.DeserializeObject <List <NetworkInterface> >(conf);
                Network2Configuration.SaveInterfaceSetting(model);
                return(HttpStatusCode.OK);
            };

            //Post["/network2/interface/del"] = x => {
            //    string dev = Request.Form.Device;
            //    Network2Configuration.RemoveInterfaceSetting(dev);
            //    return HttpStatusCode.OK;
            //};

            Post["/network2/add/bond"] = x => {
                string name = Request.Form.Name;
                try {
                    CommandLauncher.Launch("bond-set", new Dictionary <string, string> {
                        { "$bond", name }
                    });
                    ConsoleLogger.Log($"created bond {name}");
                }
                catch (Exception ex) {
                    ConsoleLogger.Error(ex.Message);
                }
                return(HttpStatusCode.OK);
            };

            Post["/network2/add/bridge"] = x => {
                string name = Request.Form.Name;
                try {
                    CommandLauncher.Launch("brctl-add", new Dictionary <string, string> {
                        { "$bridge", name }
                    });
                    ConsoleLogger.Log($"created bridge {name}");
                }
                catch (Exception ex) {
                    ConsoleLogger.Error(ex.Message);
                }
                return(HttpStatusCode.OK);
            };
        }
Ejemplo n.º 11
0
        internal static ContainerGroupData DeserializeContainerGroupData(JsonElement element)
        {
            Optional <ManagedServiceIdentity> identity = default;
            Optional <IList <string> >        zones    = default;
            IDictionary <string, string>      tags     = default;
            AzureLocation      location          = default;
            ResourceIdentifier id                = default;
            string             name              = default;
            ResourceType       type              = default;
            SystemData         systemData        = default;
            Optional <string>  provisioningState = default;
            IList <ContainerInstanceContainer>          containers = default;
            Optional <IList <ImageRegistryCredential> > imageRegistryCredentials = default;
            Optional <ContainerGroupRestartPolicy>      restartPolicy            = default;
            Optional <IPAddress> ipAddress = default;
            OperatingSystemTypes osType    = default;
            Optional <IList <ContainerInstanceVolume> >     volumes                 = default;
            Optional <ContainerGroupPropertiesInstanceView> instanceView            = default;
            Optional <ContainerGroupDiagnostics>            diagnostics             = default;
            Optional <IList <ContainerGroupSubnetId> >      subnetIds               = default;
            Optional <DnsConfiguration>                        dnsConfig            = default;
            Optional <ContainerGroupSku>                       sku                  = default;
            Optional <Models.EncryptionProperties>             encryptionProperties = default;
            Optional <IList <InitContainerDefinitionContent> > initContainers       = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("identity"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    identity = JsonSerializer.Deserialize <ManagedServiceIdentity>(property.Value.ToString());
                    continue;
                }
                if (property.NameEquals("zones"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    List <string> array = new List <string>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(item.GetString());
                    }
                    zones = array;
                    continue;
                }
                if (property.NameEquals("tags"))
                {
                    Dictionary <string, string> dictionary = new Dictionary <string, string>();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        dictionary.Add(property0.Name, property0.Value.GetString());
                    }
                    tags = dictionary;
                    continue;
                }
                if (property.NameEquals("location"))
                {
                    location = new AzureLocation(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("id"))
                {
                    id = new ResourceIdentifier(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("type"))
                {
                    type = new ResourceType(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("systemData"))
                {
                    systemData = JsonSerializer.Deserialize <SystemData>(property.Value.ToString());
                    continue;
                }
                if (property.NameEquals("properties"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("provisioningState"))
                        {
                            provisioningState = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("containers"))
                        {
                            List <ContainerInstanceContainer> array = new List <ContainerInstanceContainer>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(ContainerInstanceContainer.DeserializeContainerInstanceContainer(item));
                            }
                            containers = array;
                            continue;
                        }
                        if (property0.NameEquals("imageRegistryCredentials"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <ImageRegistryCredential> array = new List <ImageRegistryCredential>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(ImageRegistryCredential.DeserializeImageRegistryCredential(item));
                            }
                            imageRegistryCredentials = array;
                            continue;
                        }
                        if (property0.NameEquals("restartPolicy"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            restartPolicy = new ContainerGroupRestartPolicy(property0.Value.GetString());
                            continue;
                        }
                        if (property0.NameEquals("ipAddress"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            ipAddress = IPAddress.DeserializeIPAddress(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("osType"))
                        {
                            osType = new OperatingSystemTypes(property0.Value.GetString());
                            continue;
                        }
                        if (property0.NameEquals("volumes"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <ContainerInstanceVolume> array = new List <ContainerInstanceVolume>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(ContainerInstanceVolume.DeserializeContainerInstanceVolume(item));
                            }
                            volumes = array;
                            continue;
                        }
                        if (property0.NameEquals("instanceView"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            instanceView = ContainerGroupPropertiesInstanceView.DeserializeContainerGroupPropertiesInstanceView(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("diagnostics"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            diagnostics = ContainerGroupDiagnostics.DeserializeContainerGroupDiagnostics(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("subnetIds"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <ContainerGroupSubnetId> array = new List <ContainerGroupSubnetId>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(ContainerGroupSubnetId.DeserializeContainerGroupSubnetId(item));
                            }
                            subnetIds = array;
                            continue;
                        }
                        if (property0.NameEquals("dnsConfig"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            dnsConfig = DnsConfiguration.DeserializeDnsConfiguration(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("sku"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            sku = new ContainerGroupSku(property0.Value.GetString());
                            continue;
                        }
                        if (property0.NameEquals("encryptionProperties"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            encryptionProperties = Models.EncryptionProperties.DeserializeEncryptionProperties(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("initContainers"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            List <InitContainerDefinitionContent> array = new List <InitContainerDefinitionContent>();
                            foreach (var item in property0.Value.EnumerateArray())
                            {
                                array.Add(InitContainerDefinitionContent.DeserializeInitContainerDefinitionContent(item));
                            }
                            initContainers = array;
                            continue;
                        }
                    }
                    continue;
                }
            }
            return(new ContainerGroupData(id, name, type, systemData, tags, location, Optional.ToList(zones), identity, provisioningState.Value, containers, Optional.ToList(imageRegistryCredentials), Optional.ToNullable(restartPolicy), ipAddress.Value, osType, Optional.ToList(volumes), instanceView.Value, diagnostics.Value, Optional.ToList(subnetIds), dnsConfig.Value, Optional.ToNullable(sku), encryptionProperties.Value, Optional.ToList(initContainers)));
        }
Ejemplo n.º 12
0
        public async Task TestCreateRecords()
        {
            string domainName = CreateRandomDomainName();

            IDnsService provider = CreateProvider();

            using (CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TestTimeout(TimeSpan.FromSeconds(60))))
            {
                DnsConfiguration configuration = new DnsConfiguration(
                    new DnsDomainConfiguration(
                        name: domainName,
                        timeToLive: default(TimeSpan?),
                        emailAddress: "admin@" + domainName,
                        comment: "Integration test domain",
                        records: new DnsDomainRecordConfiguration[] { },
                        subdomains: new DnsSubdomainConfiguration[] { }));

                DnsJob <DnsDomains> createResponse = await provider.CreateDomainsAsync(configuration, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                IEnumerable <DnsDomain> createdDomains = Enumerable.Empty <DnsDomain>();
                if (createResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(createResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail();
                }
                else
                {
                    Console.WriteLine(JsonConvert.SerializeObject(createResponse.Response, Formatting.Indented));
                    createdDomains = createResponse.Response.Domains;
                }

                ReadOnlyCollection <DnsDomain> domains = await ListAllDomainsAsync(provider, domainName, null, cancellationTokenSource.Token);

                Assert.IsNotNull(domains);
                Assert.AreEqual(1, domains.Count);

                foreach (var domain in domains)
                {
                    Console.WriteLine();
                    Console.WriteLine("Domain: {0} ({1})", domain.Name, domain.Id);
                    Console.WriteLine();
                    Console.WriteLine(await JsonConvert.SerializeObjectAsync(domain, Formatting.Indented));
                }

                string   originalData         = "127.0.0.1";
                string   updatedData          = "192.168.0.1";
                string   originalCommentValue = "Integration test record";
                string   updatedCommentValue  = "Integration test record 2";
                TimeSpan?originalTimeToLive;
                TimeSpan?updatedTimeToLive = TimeSpan.FromMinutes(12);

                DomainId domainId = createResponse.Response.Domains[0].Id;
                DnsDomainRecordConfiguration[] recordConfigurations =
                {
                    new DnsDomainRecordConfiguration(
                        type: DnsRecordType.A,
                        name: string.Format("www.{0}",domainName),
                        data: originalData,
                        timeToLive: null,
                        comment: originalCommentValue,
                        priority: null)
                };
                DnsJob <DnsRecordsList> recordsResponse = await provider.AddRecordsAsync(domainId, recordConfigurations, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                Assert.IsNotNull(recordsResponse.Response);
                Assert.IsNotNull(recordsResponse.Response.Records);
                DnsRecord[] records = recordsResponse.Response.Records.ToArray();
                Assert.AreEqual(recordConfigurations.Length, records.Length);
                originalTimeToLive = records[0].TimeToLive;
                Assert.AreNotEqual(originalTimeToLive, updatedTimeToLive);

                Assert.AreEqual(originalData, records[0].Data);
                Assert.AreEqual(originalTimeToLive, records[0].TimeToLive);
                Assert.AreEqual(originalCommentValue, records[0].Comment);

                foreach (var record in records)
                {
                    Console.WriteLine();
                    Console.WriteLine("Record: {0} ({1})", record.Name, record.Id);
                    Console.WriteLine();
                    Console.WriteLine(await JsonConvert.SerializeObjectAsync(record, Formatting.Indented));
                }

                DnsDomainRecordUpdateConfiguration recordUpdateConfiguration = new DnsDomainRecordUpdateConfiguration(records[0], records[0].Name, comment: updatedCommentValue);
                await provider.UpdateRecordsAsync(domainId, new[] { recordUpdateConfiguration }, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                DnsRecord updatedRecord = await provider.ListRecordDetailsAsync(domainId, records[0].Id, cancellationTokenSource.Token);

                Assert.IsNotNull(updatedRecord);
                Assert.AreEqual(originalData, updatedRecord.Data);
                Assert.AreEqual(originalTimeToLive, updatedRecord.TimeToLive);
                Assert.AreEqual(updatedCommentValue, updatedRecord.Comment);

                recordUpdateConfiguration = new DnsDomainRecordUpdateConfiguration(records[0], records[0].Name, timeToLive: updatedTimeToLive);
                await provider.UpdateRecordsAsync(domainId, new[] { recordUpdateConfiguration }, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                updatedRecord = await provider.ListRecordDetailsAsync(domainId, records[0].Id, cancellationTokenSource.Token);

                Assert.IsNotNull(updatedRecord);
                Assert.AreEqual(originalData, updatedRecord.Data);
                Assert.AreEqual(updatedTimeToLive, updatedRecord.TimeToLive);
                Assert.AreEqual(updatedCommentValue, updatedRecord.Comment);

                recordUpdateConfiguration = new DnsDomainRecordUpdateConfiguration(records[0], records[0].Name, data: updatedData);
                await provider.UpdateRecordsAsync(domainId, new[] { recordUpdateConfiguration }, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                updatedRecord = await provider.ListRecordDetailsAsync(domainId, records[0].Id, cancellationTokenSource.Token);

                Assert.IsNotNull(updatedRecord);
                Assert.AreEqual(updatedData, updatedRecord.Data);
                Assert.AreEqual(updatedTimeToLive, updatedRecord.TimeToLive);
                Assert.AreEqual(updatedCommentValue, updatedRecord.Comment);

                await provider.RemoveRecordsAsync(domainId, new[] { records[0].Id }, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                DnsJob deleteResponse = await provider.RemoveDomainsAsync(createdDomains.Select(i => i.Id), false, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (deleteResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(deleteResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to delete temporary domain created during the integration test.");
                }
            }
        }
Ejemplo n.º 13
0
        public async Task TestDomainExportImport()
        {
            string domainName = CreateRandomDomainName();

            IDnsService provider = CreateProvider();

            using (CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(TestTimeout(TimeSpan.FromSeconds(60))))
            {
                List <DomainId> domainsToRemove = new List <DomainId>();

                DnsConfiguration configuration = new DnsConfiguration(
                    new DnsDomainConfiguration(
                        name: domainName,
                        timeToLive: default(TimeSpan?),
                        emailAddress: "admin@" + domainName,
                        comment: "Integration test domain",
                        records: new DnsDomainRecordConfiguration[] { },
                        subdomains: new DnsSubdomainConfiguration[] { }));

                DnsJob <DnsDomains> createResponse = await provider.CreateDomainsAsync(configuration, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (createResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(createResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to create a test domain.");
                }
                else
                {
                    Console.WriteLine(JsonConvert.SerializeObject(createResponse.Response, Formatting.Indented));
                    domainsToRemove.AddRange(createResponse.Response.Domains.Select(i => i.Id));
                }

                DnsJob <ExportedDomain> exportedDomain = await provider.ExportDomainAsync(createResponse.Response.Domains[0].Id, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (exportedDomain.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(exportedDomain.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to export test domain.");
                }

                Assert.AreEqual(DnsJobStatus.Completed, exportedDomain.Status);
                Assert.IsNotNull(exportedDomain.Response);

                Console.WriteLine("Exported domain:");
                Console.WriteLine(JsonConvert.SerializeObject(exportedDomain.Response, Formatting.Indented));
                Console.WriteLine();
                Console.WriteLine("Formatted exported output:");
                Console.WriteLine(exportedDomain.Response.Contents);

                Assert.IsNotNull(exportedDomain.Response.Id);
                Assert.IsNotNull(exportedDomain.Response.AccountId);
                Assert.IsFalse(string.IsNullOrEmpty(exportedDomain.Response.Contents));
                Assert.IsNotNull(exportedDomain.Response.ContentType);

                DnsJob deleteResponse = await provider.RemoveDomainsAsync(domainsToRemove, false, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (deleteResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(deleteResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to delete temporary domain created during the integration test.");
                }

                domainsToRemove.Clear();

                SerializedDomain serializedDomain =
                    new SerializedDomain(
                        RemoveDefaultNameserverEntries(exportedDomain.Response.Contents),
                        exportedDomain.Response.ContentType);
                DnsJob <DnsDomains> importedDomain = await provider.ImportDomainAsync(new[] { serializedDomain }, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (importedDomain.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(importedDomain.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to import the test domain.");
                }
                else
                {
                    Console.WriteLine(JsonConvert.SerializeObject(importedDomain.Response, Formatting.Indented));
                    domainsToRemove.AddRange(importedDomain.Response.Domains.Select(i => i.Id));
                }

                deleteResponse = await provider.RemoveDomainsAsync(domainsToRemove, false, AsyncCompletionOption.RequestCompleted, cancellationTokenSource.Token, null);

                if (deleteResponse.Status == DnsJobStatus.Error)
                {
                    Console.WriteLine(deleteResponse.Error.ToString(Formatting.Indented));
                    Assert.Fail("Failed to delete temporary domain created during the integration test.");
                }
            }
        }