public async Task <bool> OrchestrateNetworkInterfaceDeleteAsync([OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            var orchestratorParameters = context.GetInput <OrchestratorParameters>();

            // Get DNS Entities associated with this Resource Id
            var dnsEntity = await context.CallActivityAsync <DnsEntity>(nameof(SharedDurableFunctions.GetDnsEntityAsync), orchestratorParameters.ResourceId);

            if (dnsEntity != null)
            {
                var dnsParameters = new DnsParameters
                {
                    ResourceId = orchestratorParameters.ResourceId,
                    DnsZone    = dnsEntity.DnsZone,
                    Hostname   = dnsEntity.Hostname,
                    IpAddress  = dnsEntity.IpAddress,
                    RecordType = dnsEntity.RecordType
                };

                if (await context.CallActivityAsync <bool>(nameof(SharedDurableFunctions.DeleteDnsRecordSetAsync), dnsParameters))
                {
                    return(await context.CallActivityAsync <bool>(nameof(SharedDurableFunctions.DeleteDnsEntityAsync), dnsEntity));
                }
            }

            return(false);
        }
        public async Task <bool> CreateDnsRecordSetAsync([ActivityTrigger] DnsParameters parameters, ILogger log)
        {
            var newRecordSet = new DnsRecordSet(aRecords: new List <ARecord> {
                new ARecord(parameters.IpAddress)
            }, ttl: 3600);
            var savedRecordSet = await privateDnsManagementService.CreateOrUpdateAsync(parameters.DnsZone, parameters.RecordType, parameters.Hostname, newRecordSet);

            return(!(savedRecordSet is null));
        }
        private async Task <bool> OrchestrateNetworkInterfaceCreateAsync(IDurableOrchestrationContext context, NetworkInterface nic)
        {
            // If NIC wasn't tagged [with a value] there's nothing for us to do so just return.
            if (nic.Tags == null || !nic.Tags.ContainsKey(hostNameTagName))
            {
                return(true);
            }

            // If NIC tag is empty string there's nothing for us to do so just return.
            var hostname = nic.Tags.SingleOrDefault(s => s.Key.Equals(hostNameTagName, StringComparison.OrdinalIgnoreCase)).Value;

            if (string.IsNullOrWhiteSpace(hostname))
            {
                return(true);
            }

            // Create new recordset in default private DNS zone.
            var dnsParameters = new DnsParameters
            {
                ResourceId = nic.Id,
                DnsZone    = defaultPrivateDnsZone,
                Hostname   = hostname,
                RecordType = RecordType.A,
                IpAddress  = nic.IpConfigurations[0].PrivateIPAddress
            };

            var recordSetCreated = await context.CallActivityAsync <bool>(nameof(SharedDurableFunctions.CreateDnsRecordSetAsync), dnsParameters);

            if (recordSetCreated)
            {
                // Save the record as Table Entity so we can delete.
                return(await context.CallActivityAsync <bool>(nameof(SharedDurableFunctions.CreateDnsEntityAsync), dnsParameters));
            }

            return(false);
        }
 public async Task <bool> DeleteDnsRecordSetAsync([ActivityTrigger] DnsParameters parameters, ILogger log)
 {
     return(await privateDnsManagementService.DeleteAsync(parameters.DnsZone, parameters.RecordType, parameters.Hostname));
 }
        public async Task <bool> CreateDnsEntityAsync([ActivityTrigger] DnsParameters parameters, ILogger log)
        {
            var dnsEntity = new DnsEntity(parameters.ResourceId, parameters.Hostname, parameters.DnsZone, RecordType.A, parameters.IpAddress);

            return(await dnsEntityService.InsertOrUpdateDnsEntityAsync(dnsEntity));
        }