From 1847d9ed952f5a1f0e34bfde30b9629db0e9c754 Mon Sep 17 00:00:00 2001 From: Michael Turek Date: Wed, 31 Aug 2022 17:15:03 -0400 Subject: [PATCH 1/3] Power VS: Enable IBM DNS for private cluster support --- data/data/powervs/cluster/dns/dns.tf | 61 ++++- data/data/powervs/cluster/dns/outputs.tf | 3 + data/data/powervs/cluster/dns/variables.tf | 10 +- data/data/powervs/cluster/main.tf | 12 +- .../powervs/cluster/power_network/outputs.tf | 2 +- .../cluster/power_network/pi_network.tf | 2 +- .../cluster/power_network/variables.tf | 6 + data/data/powervs/cluster/vpc/outputs.tf | 4 + data/data/powervs/cluster/vpc/vpc.tf | 12 +- data/data/powervs/variables-powervs.tf | 9 +- pkg/asset/cluster/powervs/powervs.go | 2 + pkg/asset/cluster/tfvars.go | 23 +- .../installconfig/platformprovisioncheck.go | 2 +- pkg/asset/installconfig/powervs/client.go | 195 +++++++++++---- pkg/asset/installconfig/powervs/dns.go | 12 +- pkg/asset/installconfig/powervs/metadata.go | 140 +++-------- pkg/asset/installconfig/powervs/validation.go | 61 ++++- .../installconfig/powervs/validation_test.go | 28 +-- pkg/asset/manifests/dns.go | 2 +- pkg/asset/manifests/infrastructure.go | 19 +- pkg/destroy/powervs/dns.go | 149 ++++++++--- pkg/destroy/powervs/powervs.go | 232 ++++++++++++------ pkg/tfvars/powervs/powervs.go | 15 +- pkg/types/powervs/metadata.go | 1 + 24 files changed, 677 insertions(+), 325 deletions(-) create mode 100644 data/data/powervs/cluster/dns/outputs.tf diff --git a/data/data/powervs/cluster/dns/dns.tf b/data/data/powervs/cluster/dns/dns.tf index 37d50ca331e..2d6d97d3253 100644 --- a/data/data/powervs/cluster/dns/dns.tf +++ b/data/data/powervs/cluster/dns/dns.tf @@ -1,11 +1,17 @@ +############ +# Public DNS +############ + data "ibm_cis_domain" "base_domain" { - cis_id = var.cis_id + count = var.publish_strategy == "Internal" ? 0 : 1 + cis_id = var.service_id domain = var.base_domain } resource "ibm_cis_dns_record" "kubernetes_api" { - cis_id = var.cis_id - domain_id = data.ibm_cis_domain.base_domain.id + count = var.publish_strategy == "Internal" ? 0 : 1 + cis_id = var.service_id + domain_id = data.ibm_cis_domain.base_domain[count.index].id type = "CNAME" name = "api.${var.cluster_domain}" content = var.load_balancer_hostname @@ -13,16 +19,50 @@ resource "ibm_cis_dns_record" "kubernetes_api" { } resource "ibm_cis_dns_record" "kubernetes_api_internal" { - cis_id = var.cis_id - domain_id = data.ibm_cis_domain.base_domain.id + count = var.publish_strategy == "Internal" ? 0 : 1 + cis_id = var.service_id + domain_id = data.ibm_cis_domain.base_domain[count.index].id type = "CNAME" name = "api-int.${var.cluster_domain}" content = var.load_balancer_int_hostname ttl = 60 } -locals { - proxy_count = var.publish_strategy == "Internal" ? 1 : 0 +############# +# Private DNS +############# + +data "ibm_dns_zones" "dns_zones" { + count = var.publish_strategy == "Internal" ? 1 : 0 + instance_id = var.service_id +} + +resource "ibm_dns_permitted_network" "permit_vpc_network_for_dns" { + count = var.publish_strategy == "Internal" ? 1 : 0 + instance_id = var.service_id + zone_id = local.dns_zone.zone_id + vpc_crn = var.vpc_crn + type = "vpc" +} + +resource "ibm_dns_resource_record" "kubernetes_api" { + count = var.publish_strategy == "Internal" ? 1 : 0 + instance_id = var.service_id + zone_id = local.dns_zone.zone_id + type = "CNAME" + name = "api.${var.cluster_domain}" + rdata = var.load_balancer_int_hostname + ttl = 60 +} + +resource "ibm_dns_resource_record" "kubernetes_api_internal" { + count = var.publish_strategy == "Internal" ? 1 : 0 + instance_id = var.service_id + zone_id = local.dns_zone.zone_id + type = "CNAME" + name = "api-int.${var.cluster_domain}" + rdata = var.load_balancer_int_hostname + ttl = 60 } resource "ibm_is_ssh_key" "dns_ssh_key" { @@ -76,7 +116,10 @@ data "ibm_is_image" "dns_vm_image" { name = var.dns_vm_image_name } + locals { + dns_zone = var.publish_strategy == "Internal" ? data.ibm_dns_zones.dns_zones[0].dns_zones[index(data.ibm_dns_zones.dns_zones[0].dns_zones.*.name, var.base_domain)] : null + proxy_count = var.publish_strategy == "Internal" ? 1 : 0 user_data_string = < 0 { + if items = o.getPendingItems(cisDNSRecordTypeName); len(items) > 0 { return errors.Errorf("destroyDNSRecords: %d undeleted items pending", len(items)) } return nil diff --git a/pkg/destroy/powervs/powervs.go b/pkg/destroy/powervs/powervs.go index 679fc3aa390..872691ff9e8 100644 --- a/pkg/destroy/powervs/powervs.go +++ b/pkg/destroy/powervs/powervs.go @@ -11,6 +11,7 @@ import ( "github.com/IBM-Cloud/bluemix-go" "github.com/IBM-Cloud/bluemix-go/api/resource/resourcev2/controllerv2" "github.com/IBM-Cloud/bluemix-go/authentication" + "github.com/IBM-Cloud/bluemix-go/crn" "github.com/IBM-Cloud/bluemix-go/http" "github.com/IBM-Cloud/bluemix-go/rest" bxsession "github.com/IBM-Cloud/bluemix-go/session" @@ -18,6 +19,8 @@ import ( "github.com/IBM-Cloud/power-go-client/ibmpisession" "github.com/IBM/go-sdk-core/v5/core" "github.com/IBM/networking-go-sdk/dnsrecordsv1" + "github.com/IBM/networking-go-sdk/dnszonesv1" + "github.com/IBM/networking-go-sdk/resourcerecordsv1" "github.com/IBM/networking-go-sdk/zonesv1" "github.com/IBM/platform-services-go-sdk/resourcecontrollerv2" "github.com/IBM/platform-services-go-sdk/resourcemanagerv2" @@ -128,6 +131,8 @@ type ClusterUninstaller struct { CISInstanceCRN string ClusterName string Context context.Context + DNSInstanceCRN string + DNSZone string InfraID string Logger logrus.FieldLogger Region string @@ -140,6 +145,8 @@ type ClusterUninstaller struct { vpcSvc *vpcv1.VpcV1 zonesSvc *zonesv1.ZonesV1 dnsRecordsSvc *dnsrecordsv1.DnsRecordsV1 + dnsZonesSvc *dnszonesv1.DnsZonesV1 + resourceRecordsSvc *resourcerecordsv1.ResourceRecordsV1 piSession *ibmpisession.IBMPISession instanceClient *instance.IBMPIInstanceClient imageClient *instance.IBMPIImageClient @@ -150,6 +157,7 @@ type ClusterUninstaller struct { resourceGroupID string cosInstanceID string + dnsZoneID string errorTracker pendingItemTracker @@ -199,6 +207,7 @@ func New(logger logrus.FieldLogger, metadata *types.ClusterMetadata) (providers. Logger: logger, InfraID: metadata.InfraID, CISInstanceCRN: metadata.ClusterPlatformMetadata.PowerVS.CISInstanceCRN, + DNSInstanceCRN: metadata.ClusterPlatformMetadata.PowerVS.DNSInstanceCRN, Region: metadata.ClusterPlatformMetadata.PowerVS.Region, ServiceGUID: metadata.ClusterPlatformMetadata.PowerVS.ServiceInstanceGUID, VPCRegion: metadata.ClusterPlatformMetadata.PowerVS.VPCRegion, @@ -385,7 +394,8 @@ func (o *ClusterUninstaller) executeStageFunction(f struct { } func (o *ClusterUninstaller) loadSDKServices() error { - + // TODO(mjturek): We should clean up the error reporting here to avoid the + // duplicate Logger calls. if o.APIKey == "" { return fmt.Errorf("loadSDKServices: missing APIKey in metadata.json") } @@ -695,89 +705,167 @@ func (o *ClusterUninstaller) loadSDKServices() error { ApiKey: o.APIKey, } - err = authenticator.Validate() - if err != nil { + authenticator = &core.IamAuthenticator{ + ApiKey: o.APIKey, } - o.zonesSvc, err = zonesv1.NewZonesV1(&zonesv1.ZonesV1Options{ - Authenticator: authenticator, - Crn: &o.CISInstanceCRN, - }) + err = authenticator.Validate() if err != nil { - o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) - o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) - o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) - o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) - o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) - o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) - o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) - o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) - o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) - o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) - o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) - o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) - o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) - return fmt.Errorf("loadSDKServices: loadSDKServices: creating zonesSvc: %v", err) } - // Get the Zone ID - zoneOptions := o.zonesSvc.NewListZonesOptions() - zoneResources, detailedResponse, err := o.zonesSvc.ListZonesWithContext(ctx, zoneOptions) - if err != nil { - o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) - o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) - o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) - o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) - o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) - o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) - o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) - o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) - o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) - o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) - o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) - o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) - o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) - return fmt.Errorf("loadSDKServices: loadSDKServices: Failed to list Zones: %v and the response is: %s", err, detailedResponse) - } + // Either CISInstanceCRN is set or DNSInstanceCRN is set. Both should not be set at the same time, + // but check both just to be safe. + if len(o.CISInstanceCRN) > 0 { + err = authenticator.Validate() + if err != nil { + } - zoneID := "" - for _, zone := range zoneResources.Result { - o.Logger.Debugf("loadSDKServices: Zone: %v", *zone.Name) - if strings.Contains(o.BaseDomain, *zone.Name) { - zoneID = *zone.ID + o.zonesSvc, err = zonesv1.NewZonesV1(&zonesv1.ZonesV1Options{ + Authenticator: authenticator, + Crn: &o.CISInstanceCRN, + }) + if err != nil { + o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) + o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) + o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) + o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) + o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) + o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) + o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) + o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) + o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) + o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) + o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) + o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) + o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) + return fmt.Errorf("loadSDKServices: loadSDKServices: creating zonesSvc: %v", err) } - } - authenticator = &core.IamAuthenticator{ - ApiKey: o.APIKey, - } + // Get the Zone ID + zoneOptions := o.zonesSvc.NewListZonesOptions() + zoneResources, detailedResponse, err := o.zonesSvc.ListZonesWithContext(ctx, zoneOptions) + if err != nil { + o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) + o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) + o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) + o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) + o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) + o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) + o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) + o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) + o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) + o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) + o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) + o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) + o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) + return fmt.Errorf("loadSDKServices: loadSDKServices: Failed to list Zones: %v and the response is: %s", err, detailedResponse) + } - err = authenticator.Validate() - if err != nil { + for _, zone := range zoneResources.Result { + o.Logger.Debugf("loadSDKServices: Zone: %v", *zone.Name) + if strings.Contains(o.BaseDomain, *zone.Name) { + o.dnsZoneID = *zone.ID + } + } + o.dnsRecordsSvc, err = dnsrecordsv1.NewDnsRecordsV1(&dnsrecordsv1.DnsRecordsV1Options{ + Authenticator: authenticator, + Crn: &o.CISInstanceCRN, + ZoneIdentifier: &o.dnsZoneID, + }) + if err != nil { + o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) + o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) + o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) + o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) + o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) + o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) + o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) + o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) + o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) + o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) + o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) + o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) + o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) + return fmt.Errorf("loadSDKServices: loadSDKServices: Failed to instantiate dnsRecordsSvc: %v", err) + } } - o.dnsRecordsSvc, err = dnsrecordsv1.NewDnsRecordsV1(&dnsrecordsv1.DnsRecordsV1Options{ - Authenticator: authenticator, - Crn: &o.CISInstanceCRN, - ZoneIdentifier: &zoneID, - }) - if err != nil { - o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) - o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) - o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) - o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) - o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) - o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) - o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) - o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) - o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) - o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) - o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) - o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) - o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) - return fmt.Errorf("loadSDKServices: loadSDKServices: Failed to instantiate dnsRecordsSvc: %v", err) - } + if len(o.DNSInstanceCRN) > 0 { + err = authenticator.Validate() + if err != nil { + } + + o.dnsZonesSvc, err = dnszonesv1.NewDnsZonesV1(&dnszonesv1.DnsZonesV1Options{ + Authenticator: authenticator, + }) + if err != nil { + o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) + o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) + o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) + o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) + o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) + o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) + o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) + o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) + o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) + o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) + o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) + o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) + o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) + return fmt.Errorf("loadSDKServices: loadSDKServices: creating zonesSvc: %v", err) + } + + // Get the Zone ID + dnsCRN, err := crn.Parse(o.DNSInstanceCRN) + if err != nil { + return errors.Wrap(err, "Failed to parse DNSInstanceCRN") + } + options := o.dnsZonesSvc.NewListDnszonesOptions(dnsCRN.ServiceInstance) + listZonesResponse, detailedResponse, err := o.dnsZonesSvc.ListDnszones(options) + if err != nil { + o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) + o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) + o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) + o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) + o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) + o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) + o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) + o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) + o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) + o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) + o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) + o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) + o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) + return fmt.Errorf("loadSDKServices: loadSDKServices: Failed to list Zones: %v and the response is: %s", err, detailedResponse) + } + + for _, zone := range listZonesResponse.Dnszones { + o.Logger.Debugf("loadSDKServices: Zone: %v", *zone.Name) + if strings.Contains(o.BaseDomain, *zone.Name) { + o.dnsZoneID = *zone.ID + } + } + o.resourceRecordsSvc, err = resourcerecordsv1.NewResourceRecordsV1(&resourcerecordsv1.ResourceRecordsV1Options{ + Authenticator: authenticator, + }) + if err != nil { + o.Logger.Debugf("loadSDKServices: bxSession = %v", bxSession) + o.Logger.Debugf("loadSDKServices: tokenRefresher = %v", tokenRefresher) + o.Logger.Debugf("loadSDKServices: ctrlv2 = %v", ctrlv2) + o.Logger.Debugf("loadSDKServices: resourceClientV2 = %v", resourceClientV2) + o.Logger.Debugf("loadSDKServices: o.ServiceGUID = %v", o.ServiceGUID) + o.Logger.Debugf("loadSDKServices: serviceInstance = %v", serviceInstance) + o.Logger.Debugf("loadSDKServices: o.piSession = %v", o.piSession) + o.Logger.Debugf("loadSDKServices: o.instanceClient = %v", o.instanceClient) + o.Logger.Debugf("loadSDKServices: o.imageClient = %v", o.imageClient) + o.Logger.Debugf("loadSDKServices: o.jobClient = %v", o.jobClient) + o.Logger.Debugf("loadSDKServices: o.vpcSvc = %v", o.vpcSvc) + o.Logger.Debugf("loadSDKServices: o.managementSvc = %v", o.managementSvc) + o.Logger.Debugf("loadSDKServices: o.controllerSvc = %v", o.controllerSvc) + return fmt.Errorf("loadSDKServices: loadSDKServices: Failed to instantiate resourceRecordsSvc: %v", err) + } + } return nil } diff --git a/pkg/tfvars/powervs/powervs.go b/pkg/tfvars/powervs/powervs.go index 70001bbc671..7c0b20418c6 100644 --- a/pkg/tfvars/powervs/powervs.go +++ b/pkg/tfvars/powervs/powervs.go @@ -8,6 +8,7 @@ import ( "strings" "time" + "github.com/IBM-Cloud/bluemix-go/crn" machinev1 "github.com/openshift/api/machine/v1" "github.com/openshift/installer/pkg/types" "github.com/openshift/installer/pkg/types/powervs" @@ -23,6 +24,7 @@ type config struct { VPCZone string `json:"powervs_vpc_zone"` PowerVSResourceGroup string `json:"powervs_resource_group"` CISInstanceCRN string `json:"powervs_cis_crn"` + DNSInstanceGUID string `json:"powervs_dns_guid"` ImageBucketName string `json:"powervs_image_bucket_name"` ImageBucketFileName string `json:"powervs_image_bucket_file_name"` NetworkName string `json:"powervs_network_name"` @@ -51,6 +53,7 @@ type TFVarsSources struct { PowerVSResourceGroup string CloudConnectionName string CISInstanceCRN string + DNSInstanceCRN string VPCName string VPCSubnetName string PublishStrategy types.PublishingStrategy @@ -68,7 +71,7 @@ func TFVars(sources TFVarsSources) ([]byte, error) { // All supported Regions are MZRs and have Zones named "region-[1-3]" vpcZone := fmt.Sprintf("%s-%d", vpcRegion, rand.Intn(2)+1) - var serviceInstanceID, processor string + var serviceInstanceID, processor, dnsGUID string if masterConfig.ServiceInstance.ID != nil { serviceInstanceID = *masterConfig.ServiceInstance.ID } else { @@ -81,6 +84,15 @@ func TFVars(sources TFVarsSources) ([]byte, error) { processor = fmt.Sprintf("%d", masterConfig.Processors.IntVal) } + // Parse GUID from DNS CRN + if sources.DNSInstanceCRN != "" { + dnsCRN, err := crn.Parse(sources.DNSInstanceCRN) + if err != nil { + return nil, fmt.Errorf("failed to parse DNSInstanceCRN") + } + dnsGUID = dnsCRN.ServiceInstance + } + cfg := &config{ ServiceInstanceID: serviceInstanceID, APIKey: sources.APIKey, @@ -91,6 +103,7 @@ func TFVars(sources TFVarsSources) ([]byte, error) { VPCZone: vpcZone, PowerVSResourceGroup: sources.PowerVSResourceGroup, CISInstanceCRN: sources.CISInstanceCRN, + DNSInstanceGUID: dnsGUID, ImageBucketName: sources.ImageBucketName, ImageBucketFileName: sources.ImageBucketFileName, VPCName: sources.VPCName, diff --git a/pkg/types/powervs/metadata.go b/pkg/types/powervs/metadata.go index 89fe6cb8906..78a8b10af91 100644 --- a/pkg/types/powervs/metadata.go +++ b/pkg/types/powervs/metadata.go @@ -4,6 +4,7 @@ package powervs type Metadata struct { BaseDomain string `json:"BaseDomain"` CISInstanceCRN string `json:"cisInstanceCRN"` + DNSInstanceCRN string `json:"dnsInstanceCRN"` PowerVSResourceGroup string `json:"powerVSResourceGroup"` Region string `json:"region"` VPCRegion string `json:"vpcRegion"` From 6342a6528528a03ac3ca35a670115ee6e685412c Mon Sep 17 00:00:00 2001 From: Michael Turek Date: Thu, 29 Sep 2022 11:53:41 -0400 Subject: [PATCH 2/3] Mock gen --- .../powervs/mock/powervsclient_generated.go | 28 +++++++++---------- .../powervs/mock/powervsmetadata_generated.go | 15 ++++++++++ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/pkg/asset/installconfig/powervs/mock/powervsclient_generated.go b/pkg/asset/installconfig/powervs/mock/powervsclient_generated.go index c6bffd2f444..d2956e014f8 100644 --- a/pkg/asset/installconfig/powervs/mock/powervsclient_generated.go +++ b/pkg/asset/installconfig/powervs/mock/powervsclient_generated.go @@ -8,10 +8,10 @@ import ( context "context" reflect "reflect" - dnsrecordsv1 "github.com/IBM/networking-go-sdk/dnsrecordsv1" iamidentityv1 "github.com/IBM/platform-services-go-sdk/iamidentityv1" gomock "github.com/golang/mock/gomock" powervs "github.com/openshift/installer/pkg/asset/installconfig/powervs" + types "github.com/openshift/installer/pkg/types" ) // MockAPI is a mock of API interface. @@ -67,46 +67,46 @@ func (mr *MockAPIMockRecorder) GetAuthenticatorAPIKeyDetails(ctx interface{}) *g } // GetDNSRecordsByName mocks base method. -func (m *MockAPI) GetDNSRecordsByName(ctx context.Context, crnstr, zoneID, recordName string) ([]dnsrecordsv1.DnsrecordDetails, error) { +func (m *MockAPI) GetDNSRecordsByName(ctx context.Context, crnstr, zoneID, recordName string, publish types.PublishingStrategy) ([]powervs.DNSRecordResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDNSRecordsByName", ctx, crnstr, zoneID, recordName) - ret0, _ := ret[0].([]dnsrecordsv1.DnsrecordDetails) + ret := m.ctrl.Call(m, "GetDNSRecordsByName", ctx, crnstr, zoneID, recordName, publish) + ret0, _ := ret[0].([]powervs.DNSRecordResponse) ret1, _ := ret[1].(error) return ret0, ret1 } // GetDNSRecordsByName indicates an expected call of GetDNSRecordsByName. -func (mr *MockAPIMockRecorder) GetDNSRecordsByName(ctx, crnstr, zoneID, recordName interface{}) *gomock.Call { +func (mr *MockAPIMockRecorder) GetDNSRecordsByName(ctx, crnstr, zoneID, recordName, publish interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDNSRecordsByName", reflect.TypeOf((*MockAPI)(nil).GetDNSRecordsByName), ctx, crnstr, zoneID, recordName) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDNSRecordsByName", reflect.TypeOf((*MockAPI)(nil).GetDNSRecordsByName), ctx, crnstr, zoneID, recordName, publish) } // GetDNSZoneIDByName mocks base method. -func (m *MockAPI) GetDNSZoneIDByName(ctx context.Context, name string) (string, error) { +func (m *MockAPI) GetDNSZoneIDByName(ctx context.Context, name string, publish types.PublishingStrategy) (string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDNSZoneIDByName", ctx, name) + ret := m.ctrl.Call(m, "GetDNSZoneIDByName", ctx, name, publish) ret0, _ := ret[0].(string) ret1, _ := ret[1].(error) return ret0, ret1 } // GetDNSZoneIDByName indicates an expected call of GetDNSZoneIDByName. -func (mr *MockAPIMockRecorder) GetDNSZoneIDByName(ctx, name interface{}) *gomock.Call { +func (mr *MockAPIMockRecorder) GetDNSZoneIDByName(ctx, name, publish interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDNSZoneIDByName", reflect.TypeOf((*MockAPI)(nil).GetDNSZoneIDByName), ctx, name) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDNSZoneIDByName", reflect.TypeOf((*MockAPI)(nil).GetDNSZoneIDByName), ctx, name, publish) } // GetDNSZones mocks base method. -func (m *MockAPI) GetDNSZones(ctx context.Context) ([]powervs.DNSZoneResponse, error) { +func (m *MockAPI) GetDNSZones(ctx context.Context, publish types.PublishingStrategy) ([]powervs.DNSZoneResponse, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetDNSZones", ctx) + ret := m.ctrl.Call(m, "GetDNSZones", ctx, publish) ret0, _ := ret[0].([]powervs.DNSZoneResponse) ret1, _ := ret[1].(error) return ret0, ret1 } // GetDNSZones indicates an expected call of GetDNSZones. -func (mr *MockAPIMockRecorder) GetDNSZones(ctx interface{}) *gomock.Call { +func (mr *MockAPIMockRecorder) GetDNSZones(ctx, publish interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDNSZones", reflect.TypeOf((*MockAPI)(nil).GetDNSZones), ctx) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDNSZones", reflect.TypeOf((*MockAPI)(nil).GetDNSZones), ctx, publish) } diff --git a/pkg/asset/installconfig/powervs/mock/powervsmetadata_generated.go b/pkg/asset/installconfig/powervs/mock/powervsmetadata_generated.go index 593e73224d1..9ece59cbac9 100644 --- a/pkg/asset/installconfig/powervs/mock/powervsmetadata_generated.go +++ b/pkg/asset/installconfig/powervs/mock/powervsmetadata_generated.go @@ -78,3 +78,18 @@ func (mr *MockMetadataAPIMockRecorder) CISInstanceCRN(ctx interface{}) *gomock.C mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CISInstanceCRN", reflect.TypeOf((*MockMetadataAPI)(nil).CISInstanceCRN), ctx) } + +// DNSInstanceCRN mocks base method. +func (m *MockMetadataAPI) DNSInstanceCRN(ctx context.Context) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DNSInstanceCRN", ctx) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// DNSInstanceCRN indicates an expected call of DNSInstanceCRN. +func (mr *MockMetadataAPIMockRecorder) DNSInstanceCRN(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DNSInstanceCRN", reflect.TypeOf((*MockMetadataAPI)(nil).DNSInstanceCRN), ctx) +} From 5988bfe841c3acd51347259f43ee9eb964d07a48 Mon Sep 17 00:00:00 2001 From: Michael Turek Date: Tue, 27 Sep 2022 17:46:36 -0400 Subject: [PATCH 3/3] Vendor changes --- .../resourcerecordsv1/resource_records_v1.go | 1672 +++++++++++++++++ vendor/modules.txt | 1 + 2 files changed, 1673 insertions(+) create mode 100644 vendor/github.com/IBM/networking-go-sdk/resourcerecordsv1/resource_records_v1.go diff --git a/vendor/github.com/IBM/networking-go-sdk/resourcerecordsv1/resource_records_v1.go b/vendor/github.com/IBM/networking-go-sdk/resourcerecordsv1/resource_records_v1.go new file mode 100644 index 00000000000..43944842c93 --- /dev/null +++ b/vendor/github.com/IBM/networking-go-sdk/resourcerecordsv1/resource_records_v1.go @@ -0,0 +1,1672 @@ +/** + * (C) Copyright IBM Corp. 2020. + * + * 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. + */ + +// Package resourcerecordsv1 : Operations and models for the ResourceRecordsV1 service +// Deprecated: This module is deprecated. For more detail https://github.com/IBM/networking-go-sdk/blob/master/DEPRECATION-NOTICE.md +package resourcerecordsv1 + +import ( + "encoding/json" + "fmt" + "reflect" + + "github.com/IBM/go-sdk-core/v4/core" + common "github.com/IBM/networking-go-sdk/common" +) + +// ResourceRecordsV1 : Resource Records +// +// Version: 1.0.0 +type ResourceRecordsV1 struct { + Service *core.BaseService +} + +// DefaultServiceURL is the default URL to make service requests to. +const DefaultServiceURL = "https://api.dns-svcs.cloud.ibm.com/v1" + +// DefaultServiceName is the default key used to find external configuration information. +const DefaultServiceName = "resource_records" + +// ResourceRecordsV1Options : Service options +type ResourceRecordsV1Options struct { + ServiceName string + URL string + Authenticator core.Authenticator +} + +// NewResourceRecordsV1UsingExternalConfig : constructs an instance of ResourceRecordsV1 with passed in options and external configuration. +func NewResourceRecordsV1UsingExternalConfig(options *ResourceRecordsV1Options) (resourceRecords *ResourceRecordsV1, err error) { + if options.ServiceName == "" { + options.ServiceName = DefaultServiceName + } + + if options.Authenticator == nil { + options.Authenticator, err = core.GetAuthenticatorFromEnvironment(options.ServiceName) + if err != nil { + return + } + } + + resourceRecords, err = NewResourceRecordsV1(options) + if err != nil { + return + } + + err = resourceRecords.Service.ConfigureService(options.ServiceName) + if err != nil { + return + } + + if options.URL != "" { + err = resourceRecords.Service.SetServiceURL(options.URL) + } + return +} + +// NewResourceRecordsV1 : constructs an instance of ResourceRecordsV1 with passed in options. +func NewResourceRecordsV1(options *ResourceRecordsV1Options) (service *ResourceRecordsV1, err error) { + serviceOptions := &core.ServiceOptions{ + URL: DefaultServiceURL, + Authenticator: options.Authenticator, + } + + baseService, err := core.NewBaseService(serviceOptions) + if err != nil { + return + } + + if options.URL != "" { + err = baseService.SetServiceURL(options.URL) + if err != nil { + return + } + } + + service = &ResourceRecordsV1{ + Service: baseService, + } + + return +} + +// SetServiceURL sets the service URL +func (resourceRecords *ResourceRecordsV1) SetServiceURL(url string) error { + return resourceRecords.Service.SetServiceURL(url) +} + +// ListResourceRecords : List Resource Records +// List the Resource Records for a given DNS zone. +func (resourceRecords *ResourceRecordsV1) ListResourceRecords(listResourceRecordsOptions *ListResourceRecordsOptions) (result *ListResourceRecords, response *core.DetailedResponse, err error) { + err = core.ValidateNotNil(listResourceRecordsOptions, "listResourceRecordsOptions cannot be nil") + if err != nil { + return + } + err = core.ValidateStruct(listResourceRecordsOptions, "listResourceRecordsOptions") + if err != nil { + return + } + + pathSegments := []string{"instances", "dnszones", "resource_records"} + pathParameters := []string{*listResourceRecordsOptions.InstanceID, *listResourceRecordsOptions.DnszoneID} + + builder := core.NewRequestBuilder(core.GET) + _, err = builder.ConstructHTTPURL(resourceRecords.Service.Options.URL, pathSegments, pathParameters) + if err != nil { + return + } + + for headerName, headerValue := range listResourceRecordsOptions.Headers { + builder.AddHeader(headerName, headerValue) + } + + sdkHeaders := common.GetSdkHeaders("resource_records", "V1", "ListResourceRecords") + for headerName, headerValue := range sdkHeaders { + builder.AddHeader(headerName, headerValue) + } + builder.AddHeader("Accept", "application/json") + if listResourceRecordsOptions.XCorrelationID != nil { + builder.AddHeader("X-Correlation-ID", fmt.Sprint(*listResourceRecordsOptions.XCorrelationID)) + } + + if listResourceRecordsOptions.Offset != nil { + builder.AddQuery("offset", fmt.Sprint(*listResourceRecordsOptions.Offset)) + } + if listResourceRecordsOptions.Limit != nil { + builder.AddQuery("limit", fmt.Sprint(*listResourceRecordsOptions.Limit)) + } + + request, err := builder.Build() + if err != nil { + return + } + + var rawResponse map[string]json.RawMessage + response, err = resourceRecords.Service.Request(request, &rawResponse) + if err != nil { + return + } + err = core.UnmarshalModel(rawResponse, "", &result, UnmarshalListResourceRecords) + if err != nil { + return + } + response.Result = result + + return +} + +// CreateResourceRecord : Create a resource record +// Create a resource record for a given DNS zone. +func (resourceRecords *ResourceRecordsV1) CreateResourceRecord(createResourceRecordOptions *CreateResourceRecordOptions) (result *ResourceRecord, response *core.DetailedResponse, err error) { + err = core.ValidateNotNil(createResourceRecordOptions, "createResourceRecordOptions cannot be nil") + if err != nil { + return + } + err = core.ValidateStruct(createResourceRecordOptions, "createResourceRecordOptions") + if err != nil { + return + } + + pathSegments := []string{"instances", "dnszones", "resource_records"} + pathParameters := []string{*createResourceRecordOptions.InstanceID, *createResourceRecordOptions.DnszoneID} + + builder := core.NewRequestBuilder(core.POST) + _, err = builder.ConstructHTTPURL(resourceRecords.Service.Options.URL, pathSegments, pathParameters) + if err != nil { + return + } + + for headerName, headerValue := range createResourceRecordOptions.Headers { + builder.AddHeader(headerName, headerValue) + } + + sdkHeaders := common.GetSdkHeaders("resource_records", "V1", "CreateResourceRecord") + for headerName, headerValue := range sdkHeaders { + builder.AddHeader(headerName, headerValue) + } + builder.AddHeader("Accept", "application/json") + builder.AddHeader("Content-Type", "application/json") + if createResourceRecordOptions.XCorrelationID != nil { + builder.AddHeader("X-Correlation-ID", fmt.Sprint(*createResourceRecordOptions.XCorrelationID)) + } + + body := make(map[string]interface{}) + if createResourceRecordOptions.Name != nil { + body["name"] = createResourceRecordOptions.Name + } + if createResourceRecordOptions.Type != nil { + body["type"] = createResourceRecordOptions.Type + } + if createResourceRecordOptions.Rdata != nil { + body["rdata"] = createResourceRecordOptions.Rdata + } + if createResourceRecordOptions.TTL != nil { + body["ttl"] = createResourceRecordOptions.TTL + } + if createResourceRecordOptions.Service != nil { + body["service"] = createResourceRecordOptions.Service + } + if createResourceRecordOptions.Protocol != nil { + body["protocol"] = createResourceRecordOptions.Protocol + } + _, err = builder.SetBodyContentJSON(body) + if err != nil { + return + } + + request, err := builder.Build() + if err != nil { + return + } + + var rawResponse map[string]json.RawMessage + response, err = resourceRecords.Service.Request(request, &rawResponse) + if err != nil { + return + } + err = core.UnmarshalModel(rawResponse, "", &result, UnmarshalResourceRecord) + if err != nil { + return + } + response.Result = result + + return +} + +// DeleteResourceRecord : Delete a resource record +// Delete a resource record. +func (resourceRecords *ResourceRecordsV1) DeleteResourceRecord(deleteResourceRecordOptions *DeleteResourceRecordOptions) (response *core.DetailedResponse, err error) { + err = core.ValidateNotNil(deleteResourceRecordOptions, "deleteResourceRecordOptions cannot be nil") + if err != nil { + return + } + err = core.ValidateStruct(deleteResourceRecordOptions, "deleteResourceRecordOptions") + if err != nil { + return + } + + pathSegments := []string{"instances", "dnszones", "resource_records"} + pathParameters := []string{*deleteResourceRecordOptions.InstanceID, *deleteResourceRecordOptions.DnszoneID, *deleteResourceRecordOptions.RecordID} + + builder := core.NewRequestBuilder(core.DELETE) + _, err = builder.ConstructHTTPURL(resourceRecords.Service.Options.URL, pathSegments, pathParameters) + if err != nil { + return + } + + for headerName, headerValue := range deleteResourceRecordOptions.Headers { + builder.AddHeader(headerName, headerValue) + } + + sdkHeaders := common.GetSdkHeaders("resource_records", "V1", "DeleteResourceRecord") + for headerName, headerValue := range sdkHeaders { + builder.AddHeader(headerName, headerValue) + } + if deleteResourceRecordOptions.XCorrelationID != nil { + builder.AddHeader("X-Correlation-ID", fmt.Sprint(*deleteResourceRecordOptions.XCorrelationID)) + } + + request, err := builder.Build() + if err != nil { + return + } + + response, err = resourceRecords.Service.Request(request, nil) + + return +} + +// GetResourceRecord : Get a resource record +// Get details of a resource record. +func (resourceRecords *ResourceRecordsV1) GetResourceRecord(getResourceRecordOptions *GetResourceRecordOptions) (result *ResourceRecord, response *core.DetailedResponse, err error) { + err = core.ValidateNotNil(getResourceRecordOptions, "getResourceRecordOptions cannot be nil") + if err != nil { + return + } + err = core.ValidateStruct(getResourceRecordOptions, "getResourceRecordOptions") + if err != nil { + return + } + + pathSegments := []string{"instances", "dnszones", "resource_records"} + pathParameters := []string{*getResourceRecordOptions.InstanceID, *getResourceRecordOptions.DnszoneID, *getResourceRecordOptions.RecordID} + + builder := core.NewRequestBuilder(core.GET) + _, err = builder.ConstructHTTPURL(resourceRecords.Service.Options.URL, pathSegments, pathParameters) + if err != nil { + return + } + + for headerName, headerValue := range getResourceRecordOptions.Headers { + builder.AddHeader(headerName, headerValue) + } + + sdkHeaders := common.GetSdkHeaders("resource_records", "V1", "GetResourceRecord") + for headerName, headerValue := range sdkHeaders { + builder.AddHeader(headerName, headerValue) + } + builder.AddHeader("Accept", "application/json") + if getResourceRecordOptions.XCorrelationID != nil { + builder.AddHeader("X-Correlation-ID", fmt.Sprint(*getResourceRecordOptions.XCorrelationID)) + } + + request, err := builder.Build() + if err != nil { + return + } + + var rawResponse map[string]json.RawMessage + response, err = resourceRecords.Service.Request(request, &rawResponse) + if err != nil { + return + } + err = core.UnmarshalModel(rawResponse, "", &result, UnmarshalResourceRecord) + if err != nil { + return + } + response.Result = result + + return +} + +// UpdateResourceRecord : Update the properties of a resource record +// Update the properties of a resource record. +func (resourceRecords *ResourceRecordsV1) UpdateResourceRecord(updateResourceRecordOptions *UpdateResourceRecordOptions) (result *ResourceRecord, response *core.DetailedResponse, err error) { + err = core.ValidateNotNil(updateResourceRecordOptions, "updateResourceRecordOptions cannot be nil") + if err != nil { + return + } + err = core.ValidateStruct(updateResourceRecordOptions, "updateResourceRecordOptions") + if err != nil { + return + } + + pathSegments := []string{"instances", "dnszones", "resource_records"} + pathParameters := []string{*updateResourceRecordOptions.InstanceID, *updateResourceRecordOptions.DnszoneID, *updateResourceRecordOptions.RecordID} + + builder := core.NewRequestBuilder(core.PUT) + _, err = builder.ConstructHTTPURL(resourceRecords.Service.Options.URL, pathSegments, pathParameters) + if err != nil { + return + } + + for headerName, headerValue := range updateResourceRecordOptions.Headers { + builder.AddHeader(headerName, headerValue) + } + + sdkHeaders := common.GetSdkHeaders("resource_records", "V1", "UpdateResourceRecord") + for headerName, headerValue := range sdkHeaders { + builder.AddHeader(headerName, headerValue) + } + builder.AddHeader("Accept", "application/json") + builder.AddHeader("Content-Type", "application/json") + if updateResourceRecordOptions.XCorrelationID != nil { + builder.AddHeader("X-Correlation-ID", fmt.Sprint(*updateResourceRecordOptions.XCorrelationID)) + } + + body := make(map[string]interface{}) + if updateResourceRecordOptions.Name != nil { + body["name"] = updateResourceRecordOptions.Name + } + if updateResourceRecordOptions.Rdata != nil { + body["rdata"] = updateResourceRecordOptions.Rdata + } + if updateResourceRecordOptions.TTL != nil { + body["ttl"] = updateResourceRecordOptions.TTL + } + if updateResourceRecordOptions.Service != nil { + body["service"] = updateResourceRecordOptions.Service + } + if updateResourceRecordOptions.Protocol != nil { + body["protocol"] = updateResourceRecordOptions.Protocol + } + _, err = builder.SetBodyContentJSON(body) + if err != nil { + return + } + + request, err := builder.Build() + if err != nil { + return + } + + var rawResponse map[string]json.RawMessage + response, err = resourceRecords.Service.Request(request, &rawResponse) + if err != nil { + return + } + err = core.UnmarshalModel(rawResponse, "", &result, UnmarshalResourceRecord) + if err != nil { + return + } + response.Result = result + + return +} + +// CreateResourceRecordOptions : The CreateResourceRecord options. +type CreateResourceRecordOptions struct { + // The unique identifier of a service instance. + InstanceID *string `json:"instance_id" validate:"required"` + + // The unique identifier of a DNS zone. + DnszoneID *string `json:"dnszone_id" validate:"required"` + + // Name of the resource record. + Name *string `json:"name,omitempty"` + + // Type of the resource record. + Type *string `json:"type,omitempty"` + + // Content of the resource record. + Rdata ResourceRecordInputRdataIntf `json:"rdata,omitempty"` + + // Time to live in second. + TTL *int64 `json:"ttl,omitempty"` + + // Only used for SRV record. + Service *string `json:"service,omitempty"` + + // Only used for SRV record. + Protocol *string `json:"protocol,omitempty"` + + // Uniquely identifying a request. + XCorrelationID *string `json:"X-Correlation-ID,omitempty"` + + // Allows users to set headers on API requests + Headers map[string]string +} + +// Constants associated with the CreateResourceRecordOptions.Type property. +// Type of the resource record. +const ( + CreateResourceRecordOptions_Type_A = "A" + CreateResourceRecordOptions_Type_Aaaa = "AAAA" + CreateResourceRecordOptions_Type_Cname = "CNAME" + CreateResourceRecordOptions_Type_Mx = "MX" + CreateResourceRecordOptions_Type_Ptr = "PTR" + CreateResourceRecordOptions_Type_Srv = "SRV" + CreateResourceRecordOptions_Type_Txt = "TXT" +) + +// NewCreateResourceRecordOptions : Instantiate CreateResourceRecordOptions +func (*ResourceRecordsV1) NewCreateResourceRecordOptions(instanceID string, dnszoneID string) *CreateResourceRecordOptions { + return &CreateResourceRecordOptions{ + InstanceID: core.StringPtr(instanceID), + DnszoneID: core.StringPtr(dnszoneID), + } +} + +// SetInstanceID : Allow user to set InstanceID +func (options *CreateResourceRecordOptions) SetInstanceID(instanceID string) *CreateResourceRecordOptions { + options.InstanceID = core.StringPtr(instanceID) + return options +} + +// SetDnszoneID : Allow user to set DnszoneID +func (options *CreateResourceRecordOptions) SetDnszoneID(dnszoneID string) *CreateResourceRecordOptions { + options.DnszoneID = core.StringPtr(dnszoneID) + return options +} + +// SetName : Allow user to set Name +func (options *CreateResourceRecordOptions) SetName(name string) *CreateResourceRecordOptions { + options.Name = core.StringPtr(name) + return options +} + +// SetType : Allow user to set Type +func (options *CreateResourceRecordOptions) SetType(typeVar string) *CreateResourceRecordOptions { + options.Type = core.StringPtr(typeVar) + return options +} + +// SetRdata : Allow user to set Rdata +func (options *CreateResourceRecordOptions) SetRdata(rdata ResourceRecordInputRdataIntf) *CreateResourceRecordOptions { + options.Rdata = rdata + return options +} + +// SetTTL : Allow user to set TTL +func (options *CreateResourceRecordOptions) SetTTL(ttl int64) *CreateResourceRecordOptions { + options.TTL = core.Int64Ptr(ttl) + return options +} + +// SetService : Allow user to set Service +func (options *CreateResourceRecordOptions) SetService(service string) *CreateResourceRecordOptions { + options.Service = core.StringPtr(service) + return options +} + +// SetProtocol : Allow user to set Protocol +func (options *CreateResourceRecordOptions) SetProtocol(protocol string) *CreateResourceRecordOptions { + options.Protocol = core.StringPtr(protocol) + return options +} + +// SetXCorrelationID : Allow user to set XCorrelationID +func (options *CreateResourceRecordOptions) SetXCorrelationID(xCorrelationID string) *CreateResourceRecordOptions { + options.XCorrelationID = core.StringPtr(xCorrelationID) + return options +} + +// SetHeaders : Allow user to set Headers +func (options *CreateResourceRecordOptions) SetHeaders(param map[string]string) *CreateResourceRecordOptions { + options.Headers = param + return options +} + +// DeleteResourceRecordOptions : The DeleteResourceRecord options. +type DeleteResourceRecordOptions struct { + // The unique identifier of a service instance. + InstanceID *string `json:"instance_id" validate:"required"` + + // The unique identifier of a DNS zone. + DnszoneID *string `json:"dnszone_id" validate:"required"` + + // The unique identifier of a resource record. + RecordID *string `json:"record_id" validate:"required"` + + // Uniquely identifying a request. + XCorrelationID *string `json:"X-Correlation-ID,omitempty"` + + // Allows users to set headers on API requests + Headers map[string]string +} + +// NewDeleteResourceRecordOptions : Instantiate DeleteResourceRecordOptions +func (*ResourceRecordsV1) NewDeleteResourceRecordOptions(instanceID string, dnszoneID string, recordID string) *DeleteResourceRecordOptions { + return &DeleteResourceRecordOptions{ + InstanceID: core.StringPtr(instanceID), + DnszoneID: core.StringPtr(dnszoneID), + RecordID: core.StringPtr(recordID), + } +} + +// SetInstanceID : Allow user to set InstanceID +func (options *DeleteResourceRecordOptions) SetInstanceID(instanceID string) *DeleteResourceRecordOptions { + options.InstanceID = core.StringPtr(instanceID) + return options +} + +// SetDnszoneID : Allow user to set DnszoneID +func (options *DeleteResourceRecordOptions) SetDnszoneID(dnszoneID string) *DeleteResourceRecordOptions { + options.DnszoneID = core.StringPtr(dnszoneID) + return options +} + +// SetRecordID : Allow user to set RecordID +func (options *DeleteResourceRecordOptions) SetRecordID(recordID string) *DeleteResourceRecordOptions { + options.RecordID = core.StringPtr(recordID) + return options +} + +// SetXCorrelationID : Allow user to set XCorrelationID +func (options *DeleteResourceRecordOptions) SetXCorrelationID(xCorrelationID string) *DeleteResourceRecordOptions { + options.XCorrelationID = core.StringPtr(xCorrelationID) + return options +} + +// SetHeaders : Allow user to set Headers +func (options *DeleteResourceRecordOptions) SetHeaders(param map[string]string) *DeleteResourceRecordOptions { + options.Headers = param + return options +} + +// GetResourceRecordOptions : The GetResourceRecord options. +type GetResourceRecordOptions struct { + // The unique identifier of a service instance. + InstanceID *string `json:"instance_id" validate:"required"` + + // The unique identifier of a DNS zone. + DnszoneID *string `json:"dnszone_id" validate:"required"` + + // The unique identifier of a resource record. + RecordID *string `json:"record_id" validate:"required"` + + // Uniquely identifying a request. + XCorrelationID *string `json:"X-Correlation-ID,omitempty"` + + // Allows users to set headers on API requests + Headers map[string]string +} + +// NewGetResourceRecordOptions : Instantiate GetResourceRecordOptions +func (*ResourceRecordsV1) NewGetResourceRecordOptions(instanceID string, dnszoneID string, recordID string) *GetResourceRecordOptions { + return &GetResourceRecordOptions{ + InstanceID: core.StringPtr(instanceID), + DnszoneID: core.StringPtr(dnszoneID), + RecordID: core.StringPtr(recordID), + } +} + +// SetInstanceID : Allow user to set InstanceID +func (options *GetResourceRecordOptions) SetInstanceID(instanceID string) *GetResourceRecordOptions { + options.InstanceID = core.StringPtr(instanceID) + return options +} + +// SetDnszoneID : Allow user to set DnszoneID +func (options *GetResourceRecordOptions) SetDnszoneID(dnszoneID string) *GetResourceRecordOptions { + options.DnszoneID = core.StringPtr(dnszoneID) + return options +} + +// SetRecordID : Allow user to set RecordID +func (options *GetResourceRecordOptions) SetRecordID(recordID string) *GetResourceRecordOptions { + options.RecordID = core.StringPtr(recordID) + return options +} + +// SetXCorrelationID : Allow user to set XCorrelationID +func (options *GetResourceRecordOptions) SetXCorrelationID(xCorrelationID string) *GetResourceRecordOptions { + options.XCorrelationID = core.StringPtr(xCorrelationID) + return options +} + +// SetHeaders : Allow user to set Headers +func (options *GetResourceRecordOptions) SetHeaders(param map[string]string) *GetResourceRecordOptions { + options.Headers = param + return options +} + +// ListResourceRecordsOptions : The ListResourceRecords options. +type ListResourceRecordsOptions struct { + // The unique identifier of a service instance. + InstanceID *string `json:"instance_id" validate:"required"` + + // The unique identifier of a DNS zone. + DnszoneID *string `json:"dnszone_id" validate:"required"` + + // Uniquely identifying a request. + XCorrelationID *string `json:"X-Correlation-ID,omitempty"` + + // Specify how many resource records to skip over, the default value is 0. + Offset *int64 `json:"offset,omitempty"` + + // Specify how many resource records are returned, the default value is 200. + Limit *int64 `json:"limit,omitempty"` + + // Allows users to set headers on API requests + Headers map[string]string +} + +// NewListResourceRecordsOptions : Instantiate ListResourceRecordsOptions +func (*ResourceRecordsV1) NewListResourceRecordsOptions(instanceID string, dnszoneID string) *ListResourceRecordsOptions { + return &ListResourceRecordsOptions{ + InstanceID: core.StringPtr(instanceID), + DnszoneID: core.StringPtr(dnszoneID), + } +} + +// SetInstanceID : Allow user to set InstanceID +func (options *ListResourceRecordsOptions) SetInstanceID(instanceID string) *ListResourceRecordsOptions { + options.InstanceID = core.StringPtr(instanceID) + return options +} + +// SetDnszoneID : Allow user to set DnszoneID +func (options *ListResourceRecordsOptions) SetDnszoneID(dnszoneID string) *ListResourceRecordsOptions { + options.DnszoneID = core.StringPtr(dnszoneID) + return options +} + +// SetXCorrelationID : Allow user to set XCorrelationID +func (options *ListResourceRecordsOptions) SetXCorrelationID(xCorrelationID string) *ListResourceRecordsOptions { + options.XCorrelationID = core.StringPtr(xCorrelationID) + return options +} + +// SetOffset : Allow user to set Offset +func (options *ListResourceRecordsOptions) SetOffset(offset int64) *ListResourceRecordsOptions { + options.Offset = core.Int64Ptr(offset) + return options +} + +// SetLimit : Allow user to set Limit +func (options *ListResourceRecordsOptions) SetLimit(limit int64) *ListResourceRecordsOptions { + options.Limit = core.Int64Ptr(limit) + return options +} + +// SetHeaders : Allow user to set Headers +func (options *ListResourceRecordsOptions) SetHeaders(param map[string]string) *ListResourceRecordsOptions { + options.Headers = param + return options +} + +// ResourceRecordInputRdata : Content of the resource record. +// Models which "extend" this model: +// - ResourceRecordInputRdataRdataARecord +// - ResourceRecordInputRdataRdataAaaaRecord +// - ResourceRecordInputRdataRdataCnameRecord +// - ResourceRecordInputRdataRdataMxRecord +// - ResourceRecordInputRdataRdataSrvRecord +// - ResourceRecordInputRdataRdataTxtRecord +// - ResourceRecordInputRdataRdataPtrRecord +type ResourceRecordInputRdata struct { + // IPv4 address. + Ip *string `json:"ip,omitempty"` + + // Canonical name. + Cname *string `json:"cname,omitempty"` + + // Hostname of Exchange server. + Exchange *string `json:"exchange,omitempty"` + + // Preference of the MX record. + Preference *int64 `json:"preference,omitempty"` + + // Port number of the target server. + Port *int64 `json:"port,omitempty"` + + // Priority of the SRV record. + Priority *int64 `json:"priority,omitempty"` + + // Hostname of the target server. + Target *string `json:"target,omitempty"` + + // Weight of distributing queries among multiple target servers. + Weight *int64 `json:"weight,omitempty"` + + // Human readable text. + Text *string `json:"text,omitempty"` + + // Hostname of the relevant A or AAAA record. + Ptrdname *string `json:"ptrdname,omitempty"` +} + +func (*ResourceRecordInputRdata) isaResourceRecordInputRdata() bool { + return true +} + +type ResourceRecordInputRdataIntf interface { + isaResourceRecordInputRdata() bool +} + +// UnmarshalResourceRecordInputRdata unmarshals an instance of ResourceRecordInputRdata from the specified map of raw messages. +func UnmarshalResourceRecordInputRdata(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdata) + err = core.UnmarshalPrimitive(m, "ip", &obj.Ip) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "cname", &obj.Cname) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "exchange", &obj.Exchange) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "preference", &obj.Preference) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "port", &obj.Port) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "priority", &obj.Priority) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "target", &obj.Target) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "weight", &obj.Weight) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "text", &obj.Text) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "ptrdname", &obj.Ptrdname) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdata : Content of the resource record. +// Models which "extend" this model: +// - ResourceRecordUpdateInputRdataRdataARecord +// - ResourceRecordUpdateInputRdataRdataAaaaRecord +// - ResourceRecordUpdateInputRdataRdataCnameRecord +// - ResourceRecordUpdateInputRdataRdataMxRecord +// - ResourceRecordUpdateInputRdataRdataSrvRecord +// - ResourceRecordUpdateInputRdataRdataTxtRecord +// - ResourceRecordUpdateInputRdataRdataPtrRecord +type ResourceRecordUpdateInputRdata struct { + // IPv4 address. + Ip *string `json:"ip,omitempty"` + + // Canonical name. + Cname *string `json:"cname,omitempty"` + + // Hostname of Exchange server. + Exchange *string `json:"exchange,omitempty"` + + // Preference of the MX record. + Preference *int64 `json:"preference,omitempty"` + + // Port number of the target server. + Port *int64 `json:"port,omitempty"` + + // Priority of the SRV record. + Priority *int64 `json:"priority,omitempty"` + + // Hostname of the target server. + Target *string `json:"target,omitempty"` + + // Weight of distributing queries among multiple target servers. + Weight *int64 `json:"weight,omitempty"` + + // Human readable text. + Text *string `json:"text,omitempty"` + + // Hostname of the relevant A or AAAA record. + Ptrdname *string `json:"ptrdname,omitempty"` +} + +func (*ResourceRecordUpdateInputRdata) isaResourceRecordUpdateInputRdata() bool { + return true +} + +type ResourceRecordUpdateInputRdataIntf interface { + isaResourceRecordUpdateInputRdata() bool +} + +// UnmarshalResourceRecordUpdateInputRdata unmarshals an instance of ResourceRecordUpdateInputRdata from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdata(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdata) + err = core.UnmarshalPrimitive(m, "ip", &obj.Ip) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "cname", &obj.Cname) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "exchange", &obj.Exchange) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "preference", &obj.Preference) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "port", &obj.Port) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "priority", &obj.Priority) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "target", &obj.Target) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "weight", &obj.Weight) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "text", &obj.Text) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "ptrdname", &obj.Ptrdname) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// UpdateResourceRecordOptions : The UpdateResourceRecord options. +type UpdateResourceRecordOptions struct { + // The unique identifier of a service instance. + InstanceID *string `json:"instance_id" validate:"required"` + + // The unique identifier of a DNS zone. + DnszoneID *string `json:"dnszone_id" validate:"required"` + + // The unique identifier of a resource record. + RecordID *string `json:"record_id" validate:"required"` + + // Name of the resource record. + Name *string `json:"name,omitempty"` + + // Content of the resource record. + Rdata ResourceRecordUpdateInputRdataIntf `json:"rdata,omitempty"` + + // Time to live in second. + TTL *int64 `json:"ttl,omitempty"` + + // Only used for SRV record. + Service *string `json:"service,omitempty"` + + // Only used for SRV record. + Protocol *string `json:"protocol,omitempty"` + + // Uniquely identifying a request. + XCorrelationID *string `json:"X-Correlation-ID,omitempty"` + + // Allows users to set headers on API requests + Headers map[string]string +} + +// NewUpdateResourceRecordOptions : Instantiate UpdateResourceRecordOptions +func (*ResourceRecordsV1) NewUpdateResourceRecordOptions(instanceID string, dnszoneID string, recordID string) *UpdateResourceRecordOptions { + return &UpdateResourceRecordOptions{ + InstanceID: core.StringPtr(instanceID), + DnszoneID: core.StringPtr(dnszoneID), + RecordID: core.StringPtr(recordID), + } +} + +// SetInstanceID : Allow user to set InstanceID +func (options *UpdateResourceRecordOptions) SetInstanceID(instanceID string) *UpdateResourceRecordOptions { + options.InstanceID = core.StringPtr(instanceID) + return options +} + +// SetDnszoneID : Allow user to set DnszoneID +func (options *UpdateResourceRecordOptions) SetDnszoneID(dnszoneID string) *UpdateResourceRecordOptions { + options.DnszoneID = core.StringPtr(dnszoneID) + return options +} + +// SetRecordID : Allow user to set RecordID +func (options *UpdateResourceRecordOptions) SetRecordID(recordID string) *UpdateResourceRecordOptions { + options.RecordID = core.StringPtr(recordID) + return options +} + +// SetName : Allow user to set Name +func (options *UpdateResourceRecordOptions) SetName(name string) *UpdateResourceRecordOptions { + options.Name = core.StringPtr(name) + return options +} + +// SetRdata : Allow user to set Rdata +func (options *UpdateResourceRecordOptions) SetRdata(rdata ResourceRecordUpdateInputRdataIntf) *UpdateResourceRecordOptions { + options.Rdata = rdata + return options +} + +// SetTTL : Allow user to set TTL +func (options *UpdateResourceRecordOptions) SetTTL(ttl int64) *UpdateResourceRecordOptions { + options.TTL = core.Int64Ptr(ttl) + return options +} + +// SetService : Allow user to set Service +func (options *UpdateResourceRecordOptions) SetService(service string) *UpdateResourceRecordOptions { + options.Service = core.StringPtr(service) + return options +} + +// SetProtocol : Allow user to set Protocol +func (options *UpdateResourceRecordOptions) SetProtocol(protocol string) *UpdateResourceRecordOptions { + options.Protocol = core.StringPtr(protocol) + return options +} + +// SetXCorrelationID : Allow user to set XCorrelationID +func (options *UpdateResourceRecordOptions) SetXCorrelationID(xCorrelationID string) *UpdateResourceRecordOptions { + options.XCorrelationID = core.StringPtr(xCorrelationID) + return options +} + +// SetHeaders : Allow user to set Headers +func (options *UpdateResourceRecordOptions) SetHeaders(param map[string]string) *UpdateResourceRecordOptions { + options.Headers = param + return options +} + +// FirstHref : href. +type FirstHref struct { + // href. + Href *string `json:"href,omitempty"` +} + +// UnmarshalFirstHref unmarshals an instance of FirstHref from the specified map of raw messages. +func UnmarshalFirstHref(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(FirstHref) + err = core.UnmarshalPrimitive(m, "href", &obj.Href) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ListResourceRecords : List Resource Records response. +type ListResourceRecords struct { + // An array of resource records. + ResourceRecords []ResourceRecord `json:"resource_records" validate:"required"` + + // Specify how many resource records to skip over, the default value is 0. + Offset *int64 `json:"offset" validate:"required"` + + // Specify how many resource records are returned, the default value is 20. + Limit *int64 `json:"limit" validate:"required"` + + // Total number of resource records. + TotalCount *int64 `json:"total_count" validate:"required"` + + // href. + First *FirstHref `json:"first" validate:"required"` + + // href. + Next *NextHref `json:"next,omitempty"` +} + +// UnmarshalListResourceRecords unmarshals an instance of ListResourceRecords from the specified map of raw messages. +func UnmarshalListResourceRecords(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ListResourceRecords) + err = core.UnmarshalModel(m, "resource_records", &obj.ResourceRecords, UnmarshalResourceRecord) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "offset", &obj.Offset) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "limit", &obj.Limit) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "total_count", &obj.TotalCount) + if err != nil { + return + } + err = core.UnmarshalModel(m, "first", &obj.First, UnmarshalFirstHref) + if err != nil { + return + } + err = core.UnmarshalModel(m, "next", &obj.Next, UnmarshalNextHref) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// NextHref : href. +type NextHref struct { + // href. + Href *string `json:"href,omitempty"` +} + +// UnmarshalNextHref unmarshals an instance of NextHref from the specified map of raw messages. +func UnmarshalNextHref(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(NextHref) + err = core.UnmarshalPrimitive(m, "href", &obj.Href) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecord : Resource record details. +type ResourceRecord struct { + // Identifier of the resource record. + ID *string `json:"id,omitempty"` + + // the time when a resource record is created. + CreatedOn *string `json:"created_on,omitempty"` + + // the recent time when a resource record is modified. + ModifiedOn *string `json:"modified_on,omitempty"` + + // Name of the resource record. + Name *string `json:"name,omitempty"` + + // Type of the resource record. + Type *string `json:"type,omitempty"` + + // Time to live in second. + TTL *int64 `json:"ttl,omitempty"` + + // Content of the resource record. + Rdata interface{} `json:"rdata,omitempty"` + + // Only used for SRV record. + Service *string `json:"service,omitempty"` + + // Only used for SRV record. + Protocol *string `json:"protocol,omitempty"` +} + +// Constants associated with the ResourceRecord.Type property. +// Type of the resource record. +const ( + ResourceRecord_Type_A = "A" + ResourceRecord_Type_Aaaa = "AAAA" + ResourceRecord_Type_Cname = "CNAME" + ResourceRecord_Type_Mx = "MX" + ResourceRecord_Type_Ptr = "PTR" + ResourceRecord_Type_Srv = "SRV" + ResourceRecord_Type_Txt = "TXT" +) + +// UnmarshalResourceRecord unmarshals an instance of ResourceRecord from the specified map of raw messages. +func UnmarshalResourceRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecord) + err = core.UnmarshalPrimitive(m, "id", &obj.ID) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "created_on", &obj.CreatedOn) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "modified_on", &obj.ModifiedOn) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "name", &obj.Name) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "type", &obj.Type) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "ttl", &obj.TTL) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "rdata", &obj.Rdata) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "service", &obj.Service) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "protocol", &obj.Protocol) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordInputRdataRdataARecord : The content of type-A resource record. +// This model "extends" ResourceRecordInputRdata +type ResourceRecordInputRdataRdataARecord struct { + // IPv4 address. + Ip *string `json:"ip" validate:"required"` +} + +// NewResourceRecordInputRdataRdataARecord : Instantiate ResourceRecordInputRdataRdataARecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordInputRdataRdataARecord(ip string) (model *ResourceRecordInputRdataRdataARecord, err error) { + model = &ResourceRecordInputRdataRdataARecord{ + Ip: core.StringPtr(ip), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordInputRdataRdataARecord) isaResourceRecordInputRdata() bool { + return true +} + +// UnmarshalResourceRecordInputRdataRdataARecord unmarshals an instance of ResourceRecordInputRdataRdataARecord from the specified map of raw messages. +func UnmarshalResourceRecordInputRdataRdataARecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdataRdataARecord) + err = core.UnmarshalPrimitive(m, "ip", &obj.Ip) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordInputRdataRdataAaaaRecord : The content of type-AAAA resource record. +// This model "extends" ResourceRecordInputRdata +type ResourceRecordInputRdataRdataAaaaRecord struct { + // IPv6 address. + Ip *string `json:"ip" validate:"required"` +} + +// NewResourceRecordInputRdataRdataAaaaRecord : Instantiate ResourceRecordInputRdataRdataAaaaRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordInputRdataRdataAaaaRecord(ip string) (model *ResourceRecordInputRdataRdataAaaaRecord, err error) { + model = &ResourceRecordInputRdataRdataAaaaRecord{ + Ip: core.StringPtr(ip), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordInputRdataRdataAaaaRecord) isaResourceRecordInputRdata() bool { + return true +} + +// UnmarshalResourceRecordInputRdataRdataAaaaRecord unmarshals an instance of ResourceRecordInputRdataRdataAaaaRecord from the specified map of raw messages. +func UnmarshalResourceRecordInputRdataRdataAaaaRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdataRdataAaaaRecord) + err = core.UnmarshalPrimitive(m, "ip", &obj.Ip) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordInputRdataRdataCnameRecord : The content of type-CNAME resource record. +// This model "extends" ResourceRecordInputRdata +type ResourceRecordInputRdataRdataCnameRecord struct { + // Canonical name. + Cname *string `json:"cname" validate:"required"` +} + +// NewResourceRecordInputRdataRdataCnameRecord : Instantiate ResourceRecordInputRdataRdataCnameRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordInputRdataRdataCnameRecord(cname string) (model *ResourceRecordInputRdataRdataCnameRecord, err error) { + model = &ResourceRecordInputRdataRdataCnameRecord{ + Cname: core.StringPtr(cname), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordInputRdataRdataCnameRecord) isaResourceRecordInputRdata() bool { + return true +} + +// UnmarshalResourceRecordInputRdataRdataCnameRecord unmarshals an instance of ResourceRecordInputRdataRdataCnameRecord from the specified map of raw messages. +func UnmarshalResourceRecordInputRdataRdataCnameRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdataRdataCnameRecord) + err = core.UnmarshalPrimitive(m, "cname", &obj.Cname) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordInputRdataRdataMxRecord : The content of type-MX resource record. +// This model "extends" ResourceRecordInputRdata +type ResourceRecordInputRdataRdataMxRecord struct { + // Hostname of Exchange server. + Exchange *string `json:"exchange" validate:"required"` + + // Preference of the MX record. + Preference *int64 `json:"preference" validate:"required"` +} + +// NewResourceRecordInputRdataRdataMxRecord : Instantiate ResourceRecordInputRdataRdataMxRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordInputRdataRdataMxRecord(exchange string, preference int64) (model *ResourceRecordInputRdataRdataMxRecord, err error) { + model = &ResourceRecordInputRdataRdataMxRecord{ + Exchange: core.StringPtr(exchange), + Preference: core.Int64Ptr(preference), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordInputRdataRdataMxRecord) isaResourceRecordInputRdata() bool { + return true +} + +// UnmarshalResourceRecordInputRdataRdataMxRecord unmarshals an instance of ResourceRecordInputRdataRdataMxRecord from the specified map of raw messages. +func UnmarshalResourceRecordInputRdataRdataMxRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdataRdataMxRecord) + err = core.UnmarshalPrimitive(m, "exchange", &obj.Exchange) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "preference", &obj.Preference) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordInputRdataRdataPtrRecord : The content of type-PTR resource record. +// This model "extends" ResourceRecordInputRdata +type ResourceRecordInputRdataRdataPtrRecord struct { + // Hostname of the relevant A or AAAA record. + Ptrdname *string `json:"ptrdname" validate:"required"` +} + +// NewResourceRecordInputRdataRdataPtrRecord : Instantiate ResourceRecordInputRdataRdataPtrRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordInputRdataRdataPtrRecord(ptrdname string) (model *ResourceRecordInputRdataRdataPtrRecord, err error) { + model = &ResourceRecordInputRdataRdataPtrRecord{ + Ptrdname: core.StringPtr(ptrdname), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordInputRdataRdataPtrRecord) isaResourceRecordInputRdata() bool { + return true +} + +// UnmarshalResourceRecordInputRdataRdataPtrRecord unmarshals an instance of ResourceRecordInputRdataRdataPtrRecord from the specified map of raw messages. +func UnmarshalResourceRecordInputRdataRdataPtrRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdataRdataPtrRecord) + err = core.UnmarshalPrimitive(m, "ptrdname", &obj.Ptrdname) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordInputRdataRdataSrvRecord : The content of type-SRV resource record. +// This model "extends" ResourceRecordInputRdata +type ResourceRecordInputRdataRdataSrvRecord struct { + // Port number of the target server. + Port *int64 `json:"port" validate:"required"` + + // Priority of the SRV record. + Priority *int64 `json:"priority" validate:"required"` + + // Hostname of the target server. + Target *string `json:"target" validate:"required"` + + // Weight of distributing queries among multiple target servers. + Weight *int64 `json:"weight" validate:"required"` +} + +// NewResourceRecordInputRdataRdataSrvRecord : Instantiate ResourceRecordInputRdataRdataSrvRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordInputRdataRdataSrvRecord(port int64, priority int64, target string, weight int64) (model *ResourceRecordInputRdataRdataSrvRecord, err error) { + model = &ResourceRecordInputRdataRdataSrvRecord{ + Port: core.Int64Ptr(port), + Priority: core.Int64Ptr(priority), + Target: core.StringPtr(target), + Weight: core.Int64Ptr(weight), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordInputRdataRdataSrvRecord) isaResourceRecordInputRdata() bool { + return true +} + +// UnmarshalResourceRecordInputRdataRdataSrvRecord unmarshals an instance of ResourceRecordInputRdataRdataSrvRecord from the specified map of raw messages. +func UnmarshalResourceRecordInputRdataRdataSrvRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdataRdataSrvRecord) + err = core.UnmarshalPrimitive(m, "port", &obj.Port) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "priority", &obj.Priority) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "target", &obj.Target) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "weight", &obj.Weight) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordInputRdataRdataTxtRecord : The content of type-TXT resource record. +// This model "extends" ResourceRecordInputRdata +type ResourceRecordInputRdataRdataTxtRecord struct { + // Human readable text. + Text *string `json:"text" validate:"required"` +} + +// NewResourceRecordInputRdataRdataTxtRecord : Instantiate ResourceRecordInputRdataRdataTxtRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordInputRdataRdataTxtRecord(text string) (model *ResourceRecordInputRdataRdataTxtRecord, err error) { + model = &ResourceRecordInputRdataRdataTxtRecord{ + Text: core.StringPtr(text), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordInputRdataRdataTxtRecord) isaResourceRecordInputRdata() bool { + return true +} + +// UnmarshalResourceRecordInputRdataRdataTxtRecord unmarshals an instance of ResourceRecordInputRdataRdataTxtRecord from the specified map of raw messages. +func UnmarshalResourceRecordInputRdataRdataTxtRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordInputRdataRdataTxtRecord) + err = core.UnmarshalPrimitive(m, "text", &obj.Text) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdataRdataARecord : The content of type-A resource record. +// This model "extends" ResourceRecordUpdateInputRdata +type ResourceRecordUpdateInputRdataRdataARecord struct { + // IPv4 address. + Ip *string `json:"ip" validate:"required"` +} + +// NewResourceRecordUpdateInputRdataRdataARecord : Instantiate ResourceRecordUpdateInputRdataRdataARecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordUpdateInputRdataRdataARecord(ip string) (model *ResourceRecordUpdateInputRdataRdataARecord, err error) { + model = &ResourceRecordUpdateInputRdataRdataARecord{ + Ip: core.StringPtr(ip), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordUpdateInputRdataRdataARecord) isaResourceRecordUpdateInputRdata() bool { + return true +} + +// UnmarshalResourceRecordUpdateInputRdataRdataARecord unmarshals an instance of ResourceRecordUpdateInputRdataRdataARecord from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdataRdataARecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdataRdataARecord) + err = core.UnmarshalPrimitive(m, "ip", &obj.Ip) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdataRdataAaaaRecord : The content of type-AAAA resource record. +// This model "extends" ResourceRecordUpdateInputRdata +type ResourceRecordUpdateInputRdataRdataAaaaRecord struct { + // IPv6 address. + Ip *string `json:"ip" validate:"required"` +} + +// NewResourceRecordUpdateInputRdataRdataAaaaRecord : Instantiate ResourceRecordUpdateInputRdataRdataAaaaRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordUpdateInputRdataRdataAaaaRecord(ip string) (model *ResourceRecordUpdateInputRdataRdataAaaaRecord, err error) { + model = &ResourceRecordUpdateInputRdataRdataAaaaRecord{ + Ip: core.StringPtr(ip), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordUpdateInputRdataRdataAaaaRecord) isaResourceRecordUpdateInputRdata() bool { + return true +} + +// UnmarshalResourceRecordUpdateInputRdataRdataAaaaRecord unmarshals an instance of ResourceRecordUpdateInputRdataRdataAaaaRecord from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdataRdataAaaaRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdataRdataAaaaRecord) + err = core.UnmarshalPrimitive(m, "ip", &obj.Ip) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdataRdataCnameRecord : The content of type-CNAME resource record. +// This model "extends" ResourceRecordUpdateInputRdata +type ResourceRecordUpdateInputRdataRdataCnameRecord struct { + // Canonical name. + Cname *string `json:"cname" validate:"required"` +} + +// NewResourceRecordUpdateInputRdataRdataCnameRecord : Instantiate ResourceRecordUpdateInputRdataRdataCnameRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordUpdateInputRdataRdataCnameRecord(cname string) (model *ResourceRecordUpdateInputRdataRdataCnameRecord, err error) { + model = &ResourceRecordUpdateInputRdataRdataCnameRecord{ + Cname: core.StringPtr(cname), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordUpdateInputRdataRdataCnameRecord) isaResourceRecordUpdateInputRdata() bool { + return true +} + +// UnmarshalResourceRecordUpdateInputRdataRdataCnameRecord unmarshals an instance of ResourceRecordUpdateInputRdataRdataCnameRecord from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdataRdataCnameRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdataRdataCnameRecord) + err = core.UnmarshalPrimitive(m, "cname", &obj.Cname) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdataRdataMxRecord : The content of type-MX resource record. +// This model "extends" ResourceRecordUpdateInputRdata +type ResourceRecordUpdateInputRdataRdataMxRecord struct { + // Hostname of Exchange server. + Exchange *string `json:"exchange" validate:"required"` + + // Preference of the MX record. + Preference *int64 `json:"preference" validate:"required"` +} + +// NewResourceRecordUpdateInputRdataRdataMxRecord : Instantiate ResourceRecordUpdateInputRdataRdataMxRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordUpdateInputRdataRdataMxRecord(exchange string, preference int64) (model *ResourceRecordUpdateInputRdataRdataMxRecord, err error) { + model = &ResourceRecordUpdateInputRdataRdataMxRecord{ + Exchange: core.StringPtr(exchange), + Preference: core.Int64Ptr(preference), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordUpdateInputRdataRdataMxRecord) isaResourceRecordUpdateInputRdata() bool { + return true +} + +// UnmarshalResourceRecordUpdateInputRdataRdataMxRecord unmarshals an instance of ResourceRecordUpdateInputRdataRdataMxRecord from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdataRdataMxRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdataRdataMxRecord) + err = core.UnmarshalPrimitive(m, "exchange", &obj.Exchange) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "preference", &obj.Preference) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdataRdataPtrRecord : The content of type-PTR resource record. +// This model "extends" ResourceRecordUpdateInputRdata +type ResourceRecordUpdateInputRdataRdataPtrRecord struct { + // Hostname of the relevant A or AAAA record. + Ptrdname *string `json:"ptrdname" validate:"required"` +} + +// NewResourceRecordUpdateInputRdataRdataPtrRecord : Instantiate ResourceRecordUpdateInputRdataRdataPtrRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordUpdateInputRdataRdataPtrRecord(ptrdname string) (model *ResourceRecordUpdateInputRdataRdataPtrRecord, err error) { + model = &ResourceRecordUpdateInputRdataRdataPtrRecord{ + Ptrdname: core.StringPtr(ptrdname), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordUpdateInputRdataRdataPtrRecord) isaResourceRecordUpdateInputRdata() bool { + return true +} + +// UnmarshalResourceRecordUpdateInputRdataRdataPtrRecord unmarshals an instance of ResourceRecordUpdateInputRdataRdataPtrRecord from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdataRdataPtrRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdataRdataPtrRecord) + err = core.UnmarshalPrimitive(m, "ptrdname", &obj.Ptrdname) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdataRdataSrvRecord : The content of type-SRV resource record. +// This model "extends" ResourceRecordUpdateInputRdata +type ResourceRecordUpdateInputRdataRdataSrvRecord struct { + // Port number of the target server. + Port *int64 `json:"port" validate:"required"` + + // Priority of the SRV record. + Priority *int64 `json:"priority" validate:"required"` + + // Hostname of the target server. + Target *string `json:"target" validate:"required"` + + // Weight of distributing queries among multiple target servers. + Weight *int64 `json:"weight" validate:"required"` +} + +// NewResourceRecordUpdateInputRdataRdataSrvRecord : Instantiate ResourceRecordUpdateInputRdataRdataSrvRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordUpdateInputRdataRdataSrvRecord(port int64, priority int64, target string, weight int64) (model *ResourceRecordUpdateInputRdataRdataSrvRecord, err error) { + model = &ResourceRecordUpdateInputRdataRdataSrvRecord{ + Port: core.Int64Ptr(port), + Priority: core.Int64Ptr(priority), + Target: core.StringPtr(target), + Weight: core.Int64Ptr(weight), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordUpdateInputRdataRdataSrvRecord) isaResourceRecordUpdateInputRdata() bool { + return true +} + +// UnmarshalResourceRecordUpdateInputRdataRdataSrvRecord unmarshals an instance of ResourceRecordUpdateInputRdataRdataSrvRecord from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdataRdataSrvRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdataRdataSrvRecord) + err = core.UnmarshalPrimitive(m, "port", &obj.Port) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "priority", &obj.Priority) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "target", &obj.Target) + if err != nil { + return + } + err = core.UnmarshalPrimitive(m, "weight", &obj.Weight) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} + +// ResourceRecordUpdateInputRdataRdataTxtRecord : The content of type-TXT resource record. +// This model "extends" ResourceRecordUpdateInputRdata +type ResourceRecordUpdateInputRdataRdataTxtRecord struct { + // Human readable text. + Text *string `json:"text" validate:"required"` +} + +// NewResourceRecordUpdateInputRdataRdataTxtRecord : Instantiate ResourceRecordUpdateInputRdataRdataTxtRecord (Generic Model Constructor) +func (*ResourceRecordsV1) NewResourceRecordUpdateInputRdataRdataTxtRecord(text string) (model *ResourceRecordUpdateInputRdataRdataTxtRecord, err error) { + model = &ResourceRecordUpdateInputRdataRdataTxtRecord{ + Text: core.StringPtr(text), + } + err = core.ValidateStruct(model, "required parameters") + return +} + +func (*ResourceRecordUpdateInputRdataRdataTxtRecord) isaResourceRecordUpdateInputRdata() bool { + return true +} + +// UnmarshalResourceRecordUpdateInputRdataRdataTxtRecord unmarshals an instance of ResourceRecordUpdateInputRdataRdataTxtRecord from the specified map of raw messages. +func UnmarshalResourceRecordUpdateInputRdataRdataTxtRecord(m map[string]json.RawMessage, result interface{}) (err error) { + obj := new(ResourceRecordUpdateInputRdataRdataTxtRecord) + err = core.UnmarshalPrimitive(m, "text", &obj.Text) + if err != nil { + return + } + reflect.ValueOf(result).Elem().Set(reflect.ValueOf(obj)) + return +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 0639affa11a..c5845e3ad33 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -161,6 +161,7 @@ github.com/IBM/networking-go-sdk/common github.com/IBM/networking-go-sdk/dnsrecordsv1 github.com/IBM/networking-go-sdk/dnssvcsv1 github.com/IBM/networking-go-sdk/dnszonesv1 +github.com/IBM/networking-go-sdk/resourcerecordsv1 github.com/IBM/networking-go-sdk/zonesv1 # github.com/IBM/platform-services-go-sdk v0.18.16 ## explicit; go 1.12