From bd33e5e277f5c7c32fc15e2142737913167004a2 Mon Sep 17 00:00:00 2001 From: ThameezBo Date: Mon, 13 May 2024 22:41:42 +0200 Subject: [PATCH 01/78] feat: support dualstack Gateway route resources --- docs/sources/gateway.md | 42 +++++++++++++++++++++++++++++++++++++- source/gateway.go | 15 ++++++++++++++ source/gateway_test.go | 45 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/docs/sources/gateway.md b/docs/sources/gateway.md index 7482aaa58..4c95d179d 100644 --- a/docs/sources/gateway.md +++ b/docs/sources/gateway.md @@ -79,4 +79,44 @@ the values from that. 2. Otherwise, iterates over that parent Gateway's `status.addresses`, adding each address's `value`. -The targets from each parent Gateway matching the *Route are then combined and de-duplicated. +## Dualstack Routes + +Gateway resources may be served from an external-loadbalancer which may support both IPv4 and "dualstack" (both IPv4 and IPv6) interfaces. +External DNS Controller uses the `external-dns.alpha.kubernetes.io/dualstack` annotation to determine this. If this annotation is +set to `true` then ExternalDNS will create two alias records (one A record +and one AAAA record) for each hostname associated with the Route resource. + +Example: + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + annotations: + konghq.com/strip-path: "true" + external-dns.alpha.kubernetes.io/dualstack: "true" + name: echo +spec: + hostnames: + - echoserver.example.org + parentRefs: + - group: gateway.networking.k8s.io + kind: Gateway + name: kong + namespace: kong + rules: + - backendRefs: + - group: "" + kind: Service + name: echo + port: 1027 + weight: 1 + matches: + - path: + type: PathPrefix + value: /echo +``` + +The above HTTPRoute resource is backed by a dualstack Gateway. +ExternalDNS will create both an A `echoserver.example.org` record and +an AAAA record of the same name, that each are aliases for the same LB. diff --git a/source/gateway.go b/source/gateway.go index 8f8a624a5..26592690c 100644 --- a/source/gateway.go +++ b/source/gateway.go @@ -44,6 +44,10 @@ import ( const ( gatewayGroup = "gateway.networking.k8s.io" gatewayKind = "Gateway" + // GatewayAPIDualstackAnnotationKey is the annotation used for determining if a Gateway Route is dualstack + GatewayAPIDualstackAnnotationKey = "external-dns.alpha.kubernetes.io/dualstack" + // GatewayAPIDualstackAnnotationValue is the value of the Gateway Route dualstack annotation that indicates it is dualstack + GatewayAPIDualstackAnnotationValue = "true" ) type gatewayRoute interface { @@ -235,6 +239,7 @@ func (src *gatewayRouteSource) Endpoints(ctx context.Context) ([]*endpoint.Endpo for host, targets := range hostTargets { endpoints = append(endpoints, endpointsForHostname(host, targets, ttl, providerSpecific, setIdentifier, resource)...) } + setDualstackLabel(rt, endpoints) log.Debugf("Endpoints generated from %s %s/%s: %v", src.rtKind, meta.Namespace, meta.Name, endpoints) } return endpoints, nil @@ -609,3 +614,13 @@ func selectorsEqual(a, b labels.Selector) bool { } return true } + +func setDualstackLabel(rt gatewayRoute, endpoints []*endpoint.Endpoint) { + val, ok := rt.Metadata().Annotations[GatewayAPIDualstackAnnotationKey] + if ok && val == GatewayAPIDualstackAnnotationValue { + log.Debugf("Adding dualstack label to GatewayRoute %s/%s.", rt.Metadata().Namespace, rt.Metadata().Name) + for _, ep := range endpoints { + ep.Labels[endpoint.DualstackLabelKey] = "true" + } + } +} diff --git a/source/gateway_test.go b/source/gateway_test.go index 940622e95..ed6aa228b 100644 --- a/source/gateway_test.go +++ b/source/gateway_test.go @@ -20,6 +20,7 @@ import ( "strings" "testing" + "sigs.k8s.io/external-dns/endpoint" v1 "sigs.k8s.io/gateway-api/apis/v1" ) @@ -245,3 +246,47 @@ func TestIsDNS1123Domain(t *testing.T) { }) } } + +func TestDualStackLabel(t *testing.T) { + tests := []struct { + desc string + in map[string](string) + setsLabel bool + }{ + { + desc: "empty-annotation", + setsLabel: false, + }, + { + desc: "correct-annotation-key-and-value", + in: map[string]string{GatewayAPIDualstackAnnotationKey: GatewayAPIDualstackAnnotationValue}, + setsLabel: true, + }, + { + desc: "correct-annotation-key-incorrect-value", + in: map[string]string{GatewayAPIDualstackAnnotationKey: "foo"}, + setsLabel: false, + }, + { + desc: "incorrect-annotation-key-correct-value", + in: map[string]string{"FOO": GatewayAPIDualstackAnnotationValue}, + setsLabel: false, + }, + } + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + endpoints := make([]*endpoint.Endpoint, 0) + endpoints = append(endpoints, endpoint.NewEndpoint("www.example.com", endpoint.RecordTypeA, "10.0.0.2", "10.0.0.3")) + + rt := &gatewayHTTPRoute{} + rt.Metadata().Annotations = tt.in + + setDualstackLabel(rt, endpoints) + got := endpoints[0].Labels[endpoint.DualstackLabelKey] == "true" + + if got != tt.setsLabel { + t.Errorf("setDualstackLabel(%q); got: %v; want: %v", tt.in, got, tt.setsLabel) + } + }) + } +} From fdb24758924ec061c6ac5ad8c0b7d8847878b1fa Mon Sep 17 00:00:00 2001 From: ThameezBo Date: Mon, 13 May 2024 22:42:16 +0200 Subject: [PATCH 02/78] fix: docs --- docs/sources/gateway.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sources/gateway.md b/docs/sources/gateway.md index 4c95d179d..86b5ff0df 100644 --- a/docs/sources/gateway.md +++ b/docs/sources/gateway.md @@ -79,6 +79,8 @@ the values from that. 2. Otherwise, iterates over that parent Gateway's `status.addresses`, adding each address's `value`. +The targets from each parent Gateway matching the *Route are then combined and de-duplicated. + ## Dualstack Routes Gateway resources may be served from an external-loadbalancer which may support both IPv4 and "dualstack" (both IPv4 and IPv6) interfaces. From 4fcc7268637e575f850b85329ac17d373efc2a6c Mon Sep 17 00:00:00 2001 From: ThameezBo Date: Wed, 15 May 2024 14:25:03 +0200 Subject: [PATCH 03/78] fix: do not expose vars --- source/gateway.go | 12 ++++++------ source/gateway_test.go | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/source/gateway.go b/source/gateway.go index 26592690c..0b336dc6b 100644 --- a/source/gateway.go +++ b/source/gateway.go @@ -44,10 +44,10 @@ import ( const ( gatewayGroup = "gateway.networking.k8s.io" gatewayKind = "Gateway" - // GatewayAPIDualstackAnnotationKey is the annotation used for determining if a Gateway Route is dualstack - GatewayAPIDualstackAnnotationKey = "external-dns.alpha.kubernetes.io/dualstack" - // GatewayAPIDualstackAnnotationValue is the value of the Gateway Route dualstack annotation that indicates it is dualstack - GatewayAPIDualstackAnnotationValue = "true" + // gatewayAPIDualstackAnnotationKey is the annotation used for determining if a Gateway Route is dualstack + gatewayAPIDualstackAnnotationKey = "external-dns.alpha.kubernetes.io/dualstack" + // gatewayAPIDualstackAnnotationValue is the value of the Gateway Route dualstack annotation that indicates it is dualstack + gatewayAPIDualstackAnnotationValue = "true" ) type gatewayRoute interface { @@ -616,8 +616,8 @@ func selectorsEqual(a, b labels.Selector) bool { } func setDualstackLabel(rt gatewayRoute, endpoints []*endpoint.Endpoint) { - val, ok := rt.Metadata().Annotations[GatewayAPIDualstackAnnotationKey] - if ok && val == GatewayAPIDualstackAnnotationValue { + val, ok := rt.Metadata().Annotations[gatewayAPIDualstackAnnotationKey] + if ok && val == gatewayAPIDualstackAnnotationValue { log.Debugf("Adding dualstack label to GatewayRoute %s/%s.", rt.Metadata().Namespace, rt.Metadata().Name) for _, ep := range endpoints { ep.Labels[endpoint.DualstackLabelKey] = "true" diff --git a/source/gateway_test.go b/source/gateway_test.go index ed6aa228b..19d603a24 100644 --- a/source/gateway_test.go +++ b/source/gateway_test.go @@ -259,17 +259,17 @@ func TestDualStackLabel(t *testing.T) { }, { desc: "correct-annotation-key-and-value", - in: map[string]string{GatewayAPIDualstackAnnotationKey: GatewayAPIDualstackAnnotationValue}, + in: map[string]string{gatewayAPIDualstackAnnotationKey: gatewayAPIDualstackAnnotationValue}, setsLabel: true, }, { desc: "correct-annotation-key-incorrect-value", - in: map[string]string{GatewayAPIDualstackAnnotationKey: "foo"}, + in: map[string]string{gatewayAPIDualstackAnnotationKey: "foo"}, setsLabel: false, }, { desc: "incorrect-annotation-key-correct-value", - in: map[string]string{"FOO": GatewayAPIDualstackAnnotationValue}, + in: map[string]string{"FOO": gatewayAPIDualstackAnnotationValue}, setsLabel: false, }, } From ea1ff95711b8e60fc1a475f2986927c7d5da0a3a Mon Sep 17 00:00:00 2001 From: ThameezBo Date: Thu, 20 Jun 2024 13:30:18 +0200 Subject: [PATCH 04/78] feat: update GRPCRoute client to stable --- source/gateway_grpcroute.go | 11 +++++------ source/gateway_grpcroute_test.go | 5 ++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/source/gateway_grpcroute.go b/source/gateway_grpcroute.go index a1091cbd8..de93a72de 100644 --- a/source/gateway_grpcroute.go +++ b/source/gateway_grpcroute.go @@ -20,19 +20,18 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" v1 "sigs.k8s.io/gateway-api/apis/v1" - "sigs.k8s.io/gateway-api/apis/v1alpha2" informers "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions" - informers_v1a2 "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/apis/v1alpha2" + informers_v1 "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/apis/v1" ) // NewGatewayGRPCRouteSource creates a new Gateway GRPCRoute source with the given config. func NewGatewayGRPCRouteSource(clients ClientGenerator, config *Config) (Source, error) { return newGatewayRouteSource(clients, config, "GRPCRoute", func(factory informers.SharedInformerFactory) gatewayRouteInformer { - return &gatewayGRPCRouteInformer{factory.Gateway().V1alpha2().GRPCRoutes()} + return &gatewayGRPCRouteInformer{factory.Gateway().V1().GRPCRoutes()} }) } -type gatewayGRPCRoute struct{ route v1alpha2.GRPCRoute } // NOTE: Must update TypeMeta in List when changing the APIVersion. +type gatewayGRPCRoute struct{ route v1.GRPCRoute } // NOTE: Must update TypeMeta in List when changing the APIVersion. func (rt *gatewayGRPCRoute) Object() kubeObject { return &rt.route } func (rt *gatewayGRPCRoute) Metadata() *metav1.ObjectMeta { return &rt.route.ObjectMeta } @@ -41,7 +40,7 @@ func (rt *gatewayGRPCRoute) Protocol() v1.ProtocolType { return v1.HTTPSProto func (rt *gatewayGRPCRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus } type gatewayGRPCRouteInformer struct { - informers_v1a2.GRPCRouteInformer + informers_v1.GRPCRouteInformer } func (inf gatewayGRPCRouteInformer) List(namespace string, selector labels.Selector) ([]gatewayRoute, error) { @@ -55,7 +54,7 @@ func (inf gatewayGRPCRouteInformer) List(namespace string, selector labels.Selec // We make a shallow copy since we're only interested in setting the TypeMeta. clone := *rt clone.TypeMeta = metav1.TypeMeta{ - APIVersion: v1alpha2.GroupVersion.String(), + APIVersion: v1.GroupVersion.String(), Kind: "GRPCRoute", } routes[i] = &gatewayGRPCRoute{clone} diff --git a/source/gateway_grpcroute_test.go b/source/gateway_grpcroute_test.go index c3cd93c25..cfa1c4abc 100644 --- a/source/gateway_grpcroute_test.go +++ b/source/gateway_grpcroute_test.go @@ -26,7 +26,6 @@ import ( kubefake "k8s.io/client-go/kubernetes/fake" "sigs.k8s.io/external-dns/endpoint" v1 "sigs.k8s.io/gateway-api/apis/v1" - "sigs.k8s.io/gateway-api/apis/v1alpha2" gatewayfake "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/fake" ) @@ -64,7 +63,7 @@ func TestGatewayGRPCRouteSourceEndpoints(t *testing.T) { _, err = gwClient.GatewayV1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) require.NoError(t, err, "failed to create Gateway") - rt := &v1alpha2.GRPCRoute{ + rt := &v1.GRPCRoute{ ObjectMeta: metav1.ObjectMeta{ Name: "api", Namespace: "default", @@ -79,7 +78,7 @@ func TestGatewayGRPCRouteSourceEndpoints(t *testing.T) { RouteStatus: gwRouteStatus(gwParentRef("default", "internal")), }, } - _, err = gwClient.GatewayV1alpha2().GRPCRoutes(rt.Namespace).Create(ctx, rt, metav1.CreateOptions{}) + _, err = gwClient.GatewayV1().GRPCRoutes(rt.Namespace).Create(ctx, rt, metav1.CreateOptions{}) require.NoError(t, err, "failed to create GRPCRoute") src, err := NewGatewayGRPCRouteSource(clients, &Config{ From ebd3a7eafb30cb3d29904989c7031b976317588c Mon Sep 17 00:00:00 2001 From: Pier-Olivier Thibault <23230+pier-oliviert@users.noreply.github.com> Date: Wed, 26 Jun 2024 10:46:34 -0400 Subject: [PATCH 05/78] AWS: Change documentation to use Helm values The Helm section includes templates files that aren't needed as those values can all be generated from the values.yaml file. It seems that the current documentation also missed the role arn annotation so it was added as well. --- docs/tutorials/aws.md | 95 ++++--------------------------------------- 1 file changed, 9 insertions(+), 86 deletions(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index d4ac65741..762e89fb5 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -477,97 +477,20 @@ kubectl create --filename externaldns-no-rbac.yaml \ ### Manifest (for clusters with RBAC enabled) -Save the following below as `externaldns-with-rbac.yaml`. +Update the `values.yaml` file you created earlier to include the annotations to link the Role ARN you created before. ```yaml -# comment out sa if it was previously created -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns - labels: - app.kubernetes.io/name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns - labels: - app.kubernetes.io/name: external-dns -rules: - - apiGroups: [""] - resources: ["services","endpoints","pods","nodes"] - verbs: ["get","watch","list"] - - apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer - labels: - app.kubernetes.io/name: external-dns -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: - - kind: ServiceAccount - name: external-dns - namespace: default # change to desired namespace: externaldns, kube-addons ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns - labels: - app.kubernetes.io/name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app.kubernetes.io/name: external-dns - template: - metadata: - labels: - app.kubernetes.io/name: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service - - --source=ingress - - --domain-filter=example.com # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones - - --provider=aws - - --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization - - --aws-zone-type=public # only look at public hosted zones (valid values are public, private or no value for both) - - --registry=txt - - --txt-owner-id=external-dns - env: - - name: AWS_DEFAULT_REGION - value: us-east-1 # change to region where EKS is installed - # # Uncommend below if using static credentials - # - name: AWS_SHARED_CREDENTIALS_FILE - # value: /.aws/credentials - # volumeMounts: - # - name: aws-credentials - # mountPath: /.aws - # readOnly: true - # volumes: - # - name: aws-credentials - # secret: - # secretName: external-dns +provider: + name: aws +serviceAccount: + annotations: + eks.amazonaws.com/role-arn: arn:aws:iam::${ACCOUNT_ID}:role/${EXTERNALDNS_ROLE_NAME:-"external-dns"} ``` -When ready deploy: +When ready deploy, update your Helm installation: -```bash -kubectl create --filename externaldns-with-rbac.yaml \ - --namespace ${EXTERNALDNS_NS:-"default"} +```shell +helm upgrade --install external-dns external-dns/external-dns --values values.yaml ``` ## Arguments From c7138b8a15e86bc6788c0ee641b7bb32b47b2c10 Mon Sep 17 00:00:00 2001 From: Pier-Olivier Thibault <23230+pier-oliviert@users.noreply.github.com> Date: Thu, 27 Jun 2024 09:44:32 -0400 Subject: [PATCH 06/78] Update docs/tutorials/aws.md Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/tutorials/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 762e89fb5..5077ba2c0 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -475,7 +475,7 @@ kubectl create --filename externaldns-no-rbac.yaml \ --namespace ${EXTERNALDNS_NS:-"default"} ``` -### Manifest (for clusters with RBAC enabled) +### When using clusters with RBAC enabled Update the `values.yaml` file you created earlier to include the annotations to link the Role ARN you created before. From dd0667849cdfa849694f35f97ecf5405a959c965 Mon Sep 17 00:00:00 2001 From: Pier-Olivier Thibault <23230+pier-oliviert@users.noreply.github.com> Date: Thu, 27 Jun 2024 09:56:44 -0400 Subject: [PATCH 07/78] Change header to be consistent within the section --- docs/tutorials/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 5077ba2c0..360d8c7a6 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -418,7 +418,7 @@ Finally, install the ExternalDNS chart with Helm using the configuration specifi helm upgrade --install external-dns external-dns/external-dns --values values.yaml ``` -### Manifest (for clusters without RBAC enabled) +### When using clusters without RBAC enabled Save the following below as `externaldns-no-rbac.yaml`. From edb2513a06b9d90afd8dbba33334f37e405fc3c3 Mon Sep 17 00:00:00 2001 From: Pier-Olivier Thibault <23230+pier-oliviert@users.noreply.github.com> Date: Thu, 27 Jun 2024 09:56:50 -0400 Subject: [PATCH 08/78] Add configuration option for non-eks with Helm --- docs/tutorials/aws.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 360d8c7a6..ae869ebe6 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -477,7 +477,7 @@ kubectl create --filename externaldns-no-rbac.yaml \ ### When using clusters with RBAC enabled -Update the `values.yaml` file you created earlier to include the annotations to link the Role ARN you created before. +If you're using EKS, you can update the `values.yaml` file you created earlier to include the annotations to link the Role ARN you created before. ```yaml provider: @@ -487,7 +487,25 @@ serviceAccount: eks.amazonaws.com/role-arn: arn:aws:iam::${ACCOUNT_ID}:role/${EXTERNALDNS_ROLE_NAME:-"external-dns"} ``` -When ready deploy, update your Helm installation: +If you need to provide credentials directly using a secret (ie. You're not using EKS), you can change the `values.yaml` file to include volume and volume mounts. + +```yaml +provider: + name: aws +env: + - name: AWS_SHARED_CREDENTIALS_FILE + value: /.aws/credentials +extraVolumes: + - name: aws-credentials + secret: + secretName: external-dns +extraVolumeMounts: + - name: aws-credentials + mountPath: /.aws + readOnly: true +``` + +When ready, update your Helm installation: ```shell helm upgrade --install external-dns external-dns/external-dns --values values.yaml From e49c141cedcca834c239d2fe064764e83d427499 Mon Sep 17 00:00:00 2001 From: Pier-Olivier Thibault <23230+pier-oliviert@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:48:41 -0400 Subject: [PATCH 09/78] Update docs/tutorials/aws.md Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/tutorials/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index ae869ebe6..0e8379a26 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -494,7 +494,7 @@ provider: name: aws env: - name: AWS_SHARED_CREDENTIALS_FILE - value: /.aws/credentials + value: /etc/aws/credentials extraVolumes: - name: aws-credentials secret: From 4c86e53d0116c80df35998296842a53f5c5fb8df Mon Sep 17 00:00:00 2001 From: Pier-Olivier Thibault <23230+pier-oliviert@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:48:45 -0400 Subject: [PATCH 10/78] Update docs/tutorials/aws.md Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/tutorials/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 0e8379a26..f32e4747e 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -501,7 +501,7 @@ extraVolumes: secretName: external-dns extraVolumeMounts: - name: aws-credentials - mountPath: /.aws + mountPath: /etc/aws/credentials readOnly: true ``` From bbaa3eb290d3c2db8f2c3069f35f93749c4382cd Mon Sep 17 00:00:00 2001 From: Pier-Olivier Thibault <23230+pier-oliviert@users.noreply.github.com> Date: Thu, 27 Jun 2024 12:14:05 -0400 Subject: [PATCH 11/78] Attempts at making the docs more clear with secret volume The secret includes keys/value pair and a secret, when mounted as a volume, will generate a file for each of the pair where the name of the file is the key and the content of the file, the value. This hopefully makes the doc clear on how to configured credentials. --- docs/tutorials/aws.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index f32e4747e..c7931ad26 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -494,11 +494,11 @@ provider: name: aws env: - name: AWS_SHARED_CREDENTIALS_FILE - value: /etc/aws/credentials + value: /etc/aws/credentials/my_credentials extraVolumes: - name: aws-credentials secret: - secretName: external-dns + secretName: external-dns # In this example, the secret will have the data stored in a key named `my_credentials` extraVolumeMounts: - name: aws-credentials mountPath: /etc/aws/credentials From 8728b25f716e2b4bd2b97f4bd1bb875b187fe782 Mon Sep 17 00:00:00 2001 From: Tobia Bocchi <29007647+tobiabocchi@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:39:52 +0200 Subject: [PATCH 12/78] Update cloudflare.md Hey! I was trying out external-dns using cloudflare. I followed your docs and managed to deploy it successfully on my k3s cluster. While reading the docs and copying pasting the yaml files I noticed there was some inconsistencies with the indentation.. I am no kubernetes expert, I just fixed the problems that were not allowing me to deploy this service and checked the files using yamllint.com While I was at it I also noticed a few errors on the syntax highlighting for code blocks, some had shell where the content was yaml, I fixed those too.. I hope this helps, thank you for this amazing project! --- docs/tutorials/cloudflare.md | 88 ++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/docs/tutorials/cloudflare.md b/docs/tutorials/cloudflare.md index 418fb1c24..dcf8e85f0 100644 --- a/docs/tutorials/cloudflare.md +++ b/docs/tutorials/cloudflare.md @@ -57,7 +57,7 @@ Then apply one of the following manifests file to deploy ExternalDNS. Create a values.yaml file to configure ExternalDNS to use CloudFlare as the DNS provider. This file should include the necessary environment variables: -```shell +```yaml provider: name: cloudflare env: @@ -75,7 +75,7 @@ env: Use this in your values.yaml, if you are using API Token: -```shell +```yaml provider: name: cloudflare env: @@ -120,22 +120,22 @@ spec: app: external-dns spec: containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --zone-id-filter=023e105f4ecef8ad9ca31a8372d0c353 # (optional) limit to a specific zone. - - --provider=cloudflare - - --cloudflare-proxied # (optional) enable the proxy feature of Cloudflare (DDOS protection, CDN...) - - --cloudflare-dns-records-per-page=5000 # (optional) configure how many DNS records to fetch per request + - name: external-dns + image: registry.k8s.io/external-dns/external-dns:v0.14.2 + args: + - --source=service # ingress is also possible + - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. + - --zone-id-filter=023e105f4ecef8ad9ca31a8372d0c353 # (optional) limit to a specific zone. + - --provider=cloudflare + - --cloudflare-proxied # (optional) enable the proxy feature of Cloudflare (DDOS protection, CDN...) + - --cloudflare-dns-records-per-page=5000 # (optional) configure how many DNS records to fetch per request env: - - name: CF_API_KEY + - name: CF_API_KEY valueFrom: secretKeyRef: name: cloudflare-api-key key: apiKey - - name: CF_API_EMAIL + - name: CF_API_EMAIL valueFrom: secretKeyRef: name: cloudflare-api-key @@ -155,15 +155,15 @@ kind: ClusterRole metadata: name: external-dns rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list", "watch"] + - apiGroups: [""] + resources: ["services","endpoints","pods"] + verbs: ["get","watch","list"] + - apiGroups: ["extensions","networking.k8s.io"] + resources: ["ingresses"] + verbs: ["get","watch","list"] + - apiGroups: [""] + resources: ["nodes"] + verbs: ["list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -195,26 +195,26 @@ spec: spec: serviceAccountName: external-dns containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --zone-id-filter=023e105f4ecef8ad9ca31a8372d0c353 # (optional) limit to a specific zone. - - --provider=cloudflare - - --cloudflare-proxied # (optional) enable the proxy feature of Cloudflare (DDOS protection, CDN...) - - --cloudflare-dns-records-per-page=5000 # (optional) configure how many DNS records to fetch per request - env: - - name: CF_API_KEY - valueFrom: - secretKeyRef: - name: cloudflare-api-key - key: apiKey - - name: CF_API_EMAIL - valueFrom: - secretKeyRef: - name: cloudflare-api-key - key: email + - name: external-dns + image: registry.k8s.io/external-dns/external-dns:v0.14.2 + args: + - --source=service # ingress is also possible + - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. + - --zone-id-filter=023e105f4ecef8ad9ca31a8372d0c353 # (optional) limit to a specific zone. + - --provider=cloudflare + - --cloudflare-proxied # (optional) enable the proxy feature of Cloudflare (DDOS protection, CDN...) + - --cloudflare-dns-records-per-page=5000 # (optional) configure how many DNS records to fetch per request + env: + - name: CF_API_KEY + valueFrom: + secretKeyRef: + name: cloudflare-api-key + key: apiKey + - name: CF_API_EMAIL + valueFrom: + secretKeyRef: + name: cloudflare-api-key + key: email ``` ## Deploying an Nginx Service @@ -270,7 +270,7 @@ will cause ExternalDNS to remove the corresponding DNS records. Create the deployment and service: -``` +```shell $ kubectl create -f nginx.yaml ``` @@ -291,7 +291,7 @@ This should show the external IP address of the service as the A record for your Now that we have verified that ExternalDNS will automatically manage Cloudflare DNS records, we can delete the tutorial's example: -``` +```shell $ kubectl delete -f nginx.yaml $ kubectl delete -f externaldns.yaml ``` From 00774b927fb5111b0cff3cdfbaf56c05e1bccedc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 9 Jul 2024 21:50:09 +0000 Subject: [PATCH 13/78] chore(deps): bump google.golang.org/grpc from 1.64.0 to 1.64.1 Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.64.0 to 1.64.1. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.64.0...v1.64.1) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 93bc77ee8..2df4a22bb 100644 --- a/go.mod +++ b/go.mod @@ -204,7 +204,7 @@ require ( golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 // indirect - google.golang.org/grpc v1.64.0 // indirect + google.golang.org/grpc v1.64.1 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/go.sum b/go.sum index 8731741ed..18f28f2c5 100644 --- a/go.sum +++ b/go.sum @@ -1651,8 +1651,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= -google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= +google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= From 9f29d3c18803fbc936568190b5f25eba24ba7c43 Mon Sep 17 00:00:00 2001 From: Thomas Hopkins Date: Wed, 10 Jul 2024 11:07:22 -0400 Subject: [PATCH 14/78] docs(annotations): note how to set multiple hostnames Setting multiple hostnames through this annotation has been possible since #256, but this behavior has not been sufficiently documented before. --- docs/annotations/annotations.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/annotations/annotations.md b/docs/annotations/annotations.md index 6744abc6a..7c2d1f902 100644 --- a/docs/annotations/annotations.md +++ b/docs/annotations/annotations.md @@ -59,7 +59,10 @@ Otherwise, use the `IP` of each of the `Service`'s `Endpoints`'s `Addresses`. ## external-dns.alpha.kubernetes.io/hostname -Specifies the domain for the resource's DNS records. +Specifies the domain for the resource's DNS records. + +Multiple hostnames can be specified through a comma-separated list, e.g. +`svc.mydomain1.com,svc.mydomain2.com`. ## external-dns.alpha.kubernetes.io/ingress-hostname-source From e9968d839c96343e1f9669966ea5285449f7f976 Mon Sep 17 00:00:00 2001 From: ThameezBo Date: Sun, 14 Jul 2024 14:17:55 +0200 Subject: [PATCH 15/78] fix: update docs as per review --- docs/sources/gateway.md | 78 +++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 42 deletions(-) diff --git a/docs/sources/gateway.md b/docs/sources/gateway.md index 86b5ff0df..61913e84f 100644 --- a/docs/sources/gateway.md +++ b/docs/sources/gateway.md @@ -5,7 +5,7 @@ sources create DNS entries based on their respective `gateway.networking.k8s.io` ## Filtering the Routes considered -These sources support the `--label-filter` flag, which filters *Route resources +These sources support the `--label-filter` flag, which filters \*Route resources by a set of labels. ## Domain names @@ -16,76 +16,76 @@ of [domain names from the *Route](#domain-names-from-route). It then iterates over each of the `status.parents` with a [matching Gateway](#matching-gateways) and at least one [matching listener](#matching-listeners). For each matching listener, if the -listener has a `hostname`, it narrows the set of domain names from the *Route to the portion +listener has a `hostname`, it narrows the set of domain names from the \*Route to the portion that overlaps the `hostname`. If a matching listener does not have a `hostname`, it uses the un-narrowed set of domain names. ### Domain names from Route -The set of domain names from a *Route is sourced from the following places: +The set of domain names from a \*Route is sourced from the following places: -* If the *Route is a GRPCRoute, HTTPRoute, or TLSRoute, adds each of the`spec.hostnames`. +- If the \*Route is a GRPCRoute, HTTPRoute, or TLSRoute, adds each of the`spec.hostnames`. -* Adds the hostnames from any `external-dns.alpha.kubernetes.io/hostname` annotation on the *Route. -This behavior is suppressed if the `--ignore-hostname-annotation` flag was specified. +- Adds the hostnames from any `external-dns.alpha.kubernetes.io/hostname` annotation on the \*Route. + This behavior is suppressed if the `--ignore-hostname-annotation` flag was specified. -* If no endpoints were produced by the previous steps -or the `--combine-fqdn-annotation` flag was specified, then adds hostnames -generated from any`--fqdn-template` flag. +- If no endpoints were produced by the previous steps + or the `--combine-fqdn-annotation` flag was specified, then adds hostnames + generated from any`--fqdn-template` flag. -* If no endpoints were produced by the previous steps, each -attached Gateway listener will use its `hostname`, if present. +- If no endpoints were produced by the previous steps, each + attached Gateway listener will use its `hostname`, if present. ### Matching Gateways -Matching Gateways are discovered by iterating over the *Route's `status.parents`: +Matching Gateways are discovered by iterating over the \*Route's `status.parents`: -* Ignores parents with a `parentRef.group` other than -`gateway.networking.k8s.io` or a `parentRef.kind` other than `Gateway`. +- Ignores parents with a `parentRef.group` other than + `gateway.networking.k8s.io` or a `parentRef.kind` other than `Gateway`. -* If the `--gateway-namespace` flag was specified, ignores parents with a `parentRef.namespace` other -than the specified value. +- If the `--gateway-namespace` flag was specified, ignores parents with a `parentRef.namespace` other + than the specified value. -* If the `--gateway-label-filter` flag was specified, ignores parents whose Gateway does not match the -specified label filter. +- If the `--gateway-label-filter` flag was specified, ignores parents whose Gateway does not match the + specified label filter. -* Ignores parents whose Gateway either does not exist or has not accepted the route. +- Ignores parents whose Gateway either does not exist or has not accepted the route. ### Matching listeners Iterates over all listeners for the parent's `parentRef.sectionName`: -* Ignores listeners whose `protocol` field does not match the kind of the *Route per the following table: +- Ignores listeners whose `protocol` field does not match the kind of the \*Route per the following table: -| kind | protocols | -|------------|-------------| -| GRPCRoute | HTTP, HTTPS | -| HTTPRoute | HTTP, HTTPS | -| TCPRoute | TCP | -| TLSRoute | TLS | -| UDPRoute | UDP | +| kind | protocols | +| --------- | ----------- | +| GRPCRoute | HTTP, HTTPS | +| HTTPRoute | HTTP, HTTPS | +| TCPRoute | TCP | +| TLSRoute | TLS | +| UDPRoute | UDP | -* If the parent's `parentRef.port` port is specified, ignores listeners without a matching `port`. +- If the parent's `parentRef.port` port is specified, ignores listeners without a matching `port`. -* Ignores listeners which specify an `allowedRoutes` which does not allow the route. +- Ignores listeners which specify an `allowedRoutes` which does not allow the route. ## Targets -The targets of the DNS entries created from a *Route are sourced from the following places: +The targets of the DNS entries created from a \*Route are sourced from the following places: -1. If a matching parent Gateway has an `external-dns.alpha.kubernetes.io/target` annotation, uses -the values from that. +1. If a matching parent Gateway has an `external-dns.alpha.kubernetes.io/target` annotation, uses + the values from that. -2. Otherwise, iterates over that parent Gateway's `status.addresses`, -adding each address's `value`. +2. Otherwise, iterates over that parent Gateway's `status.addresses`, + adding each address's `value`. -The targets from each parent Gateway matching the *Route are then combined and de-duplicated. +The targets from each parent Gateway matching the \*Route are then combined and de-duplicated. ## Dualstack Routes Gateway resources may be served from an external-loadbalancer which may support both IPv4 and "dualstack" (both IPv4 and IPv6) interfaces. External DNS Controller uses the `external-dns.alpha.kubernetes.io/dualstack` annotation to determine this. If this annotation is -set to `true` then ExternalDNS will create two alias records (one A record +set to `true` then ExternalDNS will create two records (one A record and one AAAA record) for each hostname associated with the Route resource. Example: @@ -95,17 +95,11 @@ apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: annotations: - konghq.com/strip-path: "true" external-dns.alpha.kubernetes.io/dualstack: "true" name: echo spec: hostnames: - echoserver.example.org - parentRefs: - - group: gateway.networking.k8s.io - kind: Gateway - name: kong - namespace: kong rules: - backendRefs: - group: "" From 0100b6637a4130dabc95f1b54240f40e65b5b47f Mon Sep 17 00:00:00 2001 From: Andy Bursavich Date: Sat, 13 Jul 2024 13:04:43 -0700 Subject: [PATCH 16/78] source/gateway-api: revert v1.Gateway to v1beta1.Gateway --- source/gateway.go | 15 ++++---- source/gateway_grpcroute_test.go | 5 +-- source/gateway_httproute_test.go | 59 ++++++++++++++++---------------- source/gateway_tcproute_test.go | 5 +-- source/gateway_tlsroute_test.go | 5 +-- source/gateway_udproute_test.go | 5 +-- 6 files changed, 50 insertions(+), 44 deletions(-) diff --git a/source/gateway.go b/source/gateway.go index 8f8a624a5..33ca684af 100644 --- a/source/gateway.go +++ b/source/gateway.go @@ -34,9 +34,10 @@ import ( coreinformers "k8s.io/client-go/informers/core/v1" cache "k8s.io/client-go/tools/cache" v1 "sigs.k8s.io/gateway-api/apis/v1" + v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" gateway "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned" informers "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions" - informers_v1 "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/apis/v1" + informers_v1beta1 "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/apis/v1beta1" "sigs.k8s.io/external-dns/endpoint" ) @@ -83,7 +84,7 @@ func newGatewayInformerFactory(client gateway.Interface, namespace string, label type gatewayRouteSource struct { gwNamespace string gwLabels labels.Selector - gwInformer informers_v1.GatewayInformer + gwInformer informers_v1beta1.GatewayInformer rtKind string rtNamespace string @@ -124,8 +125,8 @@ func newGatewayRouteSource(clients ClientGenerator, config *Config, kind string, } informerFactory := newGatewayInformerFactory(client, config.GatewayNamespace, gwLabels) - gwInformer := informerFactory.Gateway().V1().Gateways() // TODO: Gateway informer should be shared across gateway sources. - gwInformer.Informer() // Register with factory before starting. + gwInformer := informerFactory.Gateway().V1beta1().Gateways() // TODO: Gateway informer should be shared across gateway sources. + gwInformer.Informer() // Register with factory before starting. rtInformerFactory := informerFactory if config.Namespace != config.GatewayNamespace || !selectorsEqual(rtLabels, gwLabels) { @@ -251,11 +252,11 @@ type gatewayRouteResolver struct { } type gatewayListeners struct { - gateway *v1.Gateway + gateway *v1beta1.Gateway listeners map[v1.SectionName][]v1.Listener } -func newGatewayRouteResolver(src *gatewayRouteSource, gateways []*v1.Gateway, namespaces []*corev1.Namespace) *gatewayRouteResolver { +func newGatewayRouteResolver(src *gatewayRouteSource, gateways []*v1beta1.Gateway, namespaces []*corev1.Namespace) *gatewayRouteResolver { // Create Gateway Listener lookup table. gws := make(map[types.NamespacedName]gatewayListeners, len(gateways)) for _, gw := range gateways { @@ -395,7 +396,7 @@ func (c *gatewayRouteResolver) hosts(rt gatewayRoute) ([]string, error) { return hostnames, nil } -func (c *gatewayRouteResolver) routeIsAllowed(gw *v1.Gateway, lis *v1.Listener, rt gatewayRoute) bool { +func (c *gatewayRouteResolver) routeIsAllowed(gw *v1beta1.Gateway, lis *v1.Listener, rt gatewayRoute) bool { meta := rt.Metadata() allow := lis.AllowedRoutes diff --git a/source/gateway_grpcroute_test.go b/source/gateway_grpcroute_test.go index cfa1c4abc..f92070eb4 100644 --- a/source/gateway_grpcroute_test.go +++ b/source/gateway_grpcroute_test.go @@ -26,6 +26,7 @@ import ( kubefake "k8s.io/client-go/kubernetes/fake" "sigs.k8s.io/external-dns/endpoint" v1 "sigs.k8s.io/gateway-api/apis/v1" + v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" gatewayfake "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/fake" ) @@ -48,7 +49,7 @@ func TestGatewayGRPCRouteSourceEndpoints(t *testing.T) { require.NoError(t, err, "failed to create Namespace") ips := []string{"10.64.0.1", "10.64.0.2"} - gw := &v1.Gateway{ + gw := &v1beta1.Gateway{ ObjectMeta: metav1.ObjectMeta{ Name: "internal", Namespace: "default", @@ -60,7 +61,7 @@ func TestGatewayGRPCRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus(ips...), } - _, err = gwClient.GatewayV1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) + _, err = gwClient.GatewayV1beta1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) require.NoError(t, err, "failed to create Gateway") rt := &v1.GRPCRoute{ diff --git a/source/gateway_httproute_test.go b/source/gateway_httproute_test.go index 8f4e2b31f..418f9bd48 100644 --- a/source/gateway_httproute_test.go +++ b/source/gateway_httproute_test.go @@ -27,6 +27,7 @@ import ( kubefake "k8s.io/client-go/kubernetes/fake" "sigs.k8s.io/external-dns/endpoint" v1 "sigs.k8s.io/gateway-api/apis/v1" + v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" gatewayfake "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/fake" ) @@ -135,7 +136,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title string config Config namespaces []*corev1.Namespace - gateways []*v1.Gateway + gateways []*v1beta1.Gateway routes []*v1.HTTPRoute endpoints []*endpoint.Endpoint }{ @@ -145,7 +146,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { GatewayNamespace: "gateway-namespace", }, namespaces: namespaces("gateway-namespace", "not-gateway-namespace", "route-namespace"), - gateways: []*v1.Gateway{ + gateways: []*v1beta1.Gateway{ { ObjectMeta: objectMeta("gateway-namespace", "test"), Spec: v1.GatewaySpec{ @@ -184,7 +185,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { Namespace: "route-namespace", }, namespaces: namespaces("gateway-namespace", "route-namespace", "not-route-namespace"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("gateway-namespace", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -220,7 +221,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { GatewayLabelFilter: "foo=bar", }, namespaces: namespaces("default"), - gateways: []*v1.Gateway{ + gateways: []*v1beta1.Gateway{ { ObjectMeta: metav1.ObjectMeta{ Name: "labels-match", @@ -264,7 +265,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { LabelFilter: mustGetLabelSelector("foo=bar"), }, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -305,7 +306,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { AnnotationFilter: "foo=bar", }, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -344,7 +345,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "SkipControllerAnnotation", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -370,7 +371,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "MultipleGateways", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{ + gateways: []*v1beta1.Gateway{ { ObjectMeta: objectMeta("default", "one"), Spec: v1.GatewaySpec{ @@ -404,7 +405,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "MultipleListeners", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "one"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{ @@ -440,7 +441,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "SectionNameMatch", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{ @@ -476,7 +477,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "PortNumberMatch", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{ @@ -520,7 +521,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "WildcardInGateway", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -547,7 +548,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "WildcardInRoute", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -574,7 +575,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "WildcardInRouteAndGateway", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -601,7 +602,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "NoRouteHostname", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -640,7 +641,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "NoHostnames", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -660,7 +661,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "HostnameAnnotation", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -707,7 +708,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { IgnoreHostnameAnnotation: true, }, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -737,7 +738,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { FQDNTemplate: "{{.Name}}.zero.internal, {{.Name}}.one.internal. , {{.Name}}.two.internal ", }, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -774,7 +775,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { CombineFQDNAndAnnotation: true, }, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -797,7 +798,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "TTL", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -837,7 +838,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "ProviderAnnotations", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{Protocol: v1.HTTPProtocolType}}, @@ -868,7 +869,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "DifferentHostnameDifferentGateway", config: Config{}, namespaces: namespaces("default"), - gateways: []*v1.Gateway{ + gateways: []*v1beta1.Gateway{ { ObjectMeta: objectMeta("default", "one"), Spec: v1.GatewaySpec{ @@ -909,7 +910,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "AllowedRoutesSameNamespace", config: Config{}, namespaces: namespaces("same-namespace", "other-namespace"), - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("same-namespace", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -965,7 +966,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, }, }, - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -1006,7 +1007,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { title: "MissingNamespace", config: Config{}, namespaces: nil, - gateways: []*v1.Gateway{{ + gateways: []*v1beta1.Gateway{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.GatewaySpec{ Listeners: []v1.Listener{{ @@ -1039,7 +1040,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { GatewayNamespace: "gateway-namespace", }, namespaces: namespaces("gateway-namespace", "route-namespace"), - gateways: []*v1.Gateway{ + gateways: []*v1beta1.Gateway{ { ObjectMeta: metav1.ObjectMeta{ Name: "overriden-gateway", @@ -1076,7 +1077,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { GatewayNamespace: "gateway-namespace", }, namespaces: namespaces("gateway-namespace", "route-namespace"), - gateways: []*v1.Gateway{ + gateways: []*v1beta1.Gateway{ { ObjectMeta: metav1.ObjectMeta{ Name: "overriden-gateway", @@ -1127,7 +1128,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { ctx := context.Background() gwClient := gatewayfake.NewSimpleClientset() for _, gw := range tt.gateways { - _, err := gwClient.GatewayV1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) + _, err := gwClient.GatewayV1beta1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) require.NoError(t, err, "failed to create Gateway") } diff --git a/source/gateway_tcproute_test.go b/source/gateway_tcproute_test.go index 52e36034b..a6039ebf1 100644 --- a/source/gateway_tcproute_test.go +++ b/source/gateway_tcproute_test.go @@ -27,6 +27,7 @@ import ( "sigs.k8s.io/external-dns/endpoint" v1 "sigs.k8s.io/gateway-api/apis/v1" "sigs.k8s.io/gateway-api/apis/v1alpha2" + v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" gatewayfake "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/fake" ) @@ -49,7 +50,7 @@ func TestGatewayTCPRouteSourceEndpoints(t *testing.T) { require.NoError(t, err, "failed to create Namespace") ips := []string{"10.64.0.1", "10.64.0.2"} - gw := &v1.Gateway{ + gw := &v1beta1.Gateway{ ObjectMeta: metav1.ObjectMeta{ Name: "internal", Namespace: "default", @@ -61,7 +62,7 @@ func TestGatewayTCPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus(ips...), } - _, err = gwClient.GatewayV1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) + _, err = gwClient.GatewayV1beta1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) require.NoError(t, err, "failed to create Gateway") rt := &v1alpha2.TCPRoute{ diff --git a/source/gateway_tlsroute_test.go b/source/gateway_tlsroute_test.go index 914c9c6a3..e6d4660e5 100644 --- a/source/gateway_tlsroute_test.go +++ b/source/gateway_tlsroute_test.go @@ -27,6 +27,7 @@ import ( "sigs.k8s.io/external-dns/endpoint" v1 "sigs.k8s.io/gateway-api/apis/v1" "sigs.k8s.io/gateway-api/apis/v1alpha2" + v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" gatewayfake "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/fake" ) @@ -49,7 +50,7 @@ func TestGatewayTLSRouteSourceEndpoints(t *testing.T) { require.NoError(t, err, "failed to create Namespace") ips := []string{"10.64.0.1", "10.64.0.2"} - gw := &v1.Gateway{ + gw := &v1beta1.Gateway{ ObjectMeta: metav1.ObjectMeta{ Name: "internal", Namespace: "default", @@ -61,7 +62,7 @@ func TestGatewayTLSRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus(ips...), } - _, err = gwClient.GatewayV1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) + _, err = gwClient.GatewayV1beta1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) require.NoError(t, err, "failed to create Gateway") rt := &v1alpha2.TLSRoute{ diff --git a/source/gateway_udproute_test.go b/source/gateway_udproute_test.go index 410832da3..570e3d10c 100644 --- a/source/gateway_udproute_test.go +++ b/source/gateway_udproute_test.go @@ -27,6 +27,7 @@ import ( "sigs.k8s.io/external-dns/endpoint" v1 "sigs.k8s.io/gateway-api/apis/v1" "sigs.k8s.io/gateway-api/apis/v1alpha2" + v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" gatewayfake "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/fake" ) @@ -49,7 +50,7 @@ func TestGatewayUDPRouteSourceEndpoints(t *testing.T) { require.NoError(t, err, "failed to create Namespace") ips := []string{"10.64.0.1", "10.64.0.2"} - gw := &v1.Gateway{ + gw := &v1beta1.Gateway{ ObjectMeta: metav1.ObjectMeta{ Name: "internal", Namespace: "default", @@ -61,7 +62,7 @@ func TestGatewayUDPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus(ips...), } - _, err = gwClient.GatewayV1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) + _, err = gwClient.GatewayV1beta1().Gateways(gw.Namespace).Create(ctx, gw, metav1.CreateOptions{}) require.NoError(t, err, "failed to create Gateway") rt := &v1alpha2.UDPRoute{ From 29f1f3a19db97548d0c355f732a642324e7db7f3 Mon Sep 17 00:00:00 2001 From: Andy Bursavich Date: Sat, 13 Jul 2024 13:19:30 -0700 Subject: [PATCH 17/78] source/gateway-api: revert v1.HTTPRoute to v1beta1.HTTPRoute --- source/gateway_httproute.go | 11 +++--- source/gateway_httproute_test.go | 60 ++++++++++++++++---------------- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/source/gateway_httproute.go b/source/gateway_httproute.go index 4e028c93f..4c063d4d7 100644 --- a/source/gateway_httproute.go +++ b/source/gateway_httproute.go @@ -20,14 +20,15 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" v1 "sigs.k8s.io/gateway-api/apis/v1" + v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1" informers "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions" - informers_v1 "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/apis/v1" + informers_v1beta1 "sigs.k8s.io/gateway-api/pkg/client/informers/externalversions/apis/v1beta1" ) // NewGatewayHTTPRouteSource creates a new Gateway HTTPRoute source with the given config. func NewGatewayHTTPRouteSource(clients ClientGenerator, config *Config) (Source, error) { return newGatewayRouteSource(clients, config, "HTTPRoute", func(factory informers.SharedInformerFactory) gatewayRouteInformer { - return &gatewayHTTPRouteInformer{factory.Gateway().V1().HTTPRoutes()} + return &gatewayHTTPRouteInformer{factory.Gateway().V1beta1().HTTPRoutes()} }) } @@ -40,7 +41,7 @@ func (rt *gatewayHTTPRoute) Protocol() v1.ProtocolType { return v1.HTTPProtoc func (rt *gatewayHTTPRoute) RouteStatus() v1.RouteStatus { return rt.route.Status.RouteStatus } type gatewayHTTPRouteInformer struct { - informers_v1.HTTPRouteInformer + informers_v1beta1.HTTPRouteInformer } func (inf gatewayHTTPRouteInformer) List(namespace string, selector labels.Selector) ([]gatewayRoute, error) { @@ -54,10 +55,10 @@ func (inf gatewayHTTPRouteInformer) List(namespace string, selector labels.Selec // We make a shallow copy since we're only interested in setting the TypeMeta. clone := *rt clone.TypeMeta = metav1.TypeMeta{ - APIVersion: v1.GroupVersion.String(), + APIVersion: v1beta1.GroupVersion.String(), Kind: "HTTPRoute", } - routes[i] = &gatewayHTTPRoute{clone} + routes[i] = &gatewayHTTPRoute{v1.HTTPRoute(clone)} } return routes, nil } diff --git a/source/gateway_httproute_test.go b/source/gateway_httproute_test.go index 418f9bd48..62143c1d1 100644 --- a/source/gateway_httproute_test.go +++ b/source/gateway_httproute_test.go @@ -137,7 +137,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { config Config namespaces []*corev1.Namespace gateways []*v1beta1.Gateway - routes []*v1.HTTPRoute + routes []*v1beta1.HTTPRoute endpoints []*endpoint.Endpoint }{ { @@ -165,7 +165,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { Status: gatewayStatus("2.3.4.5"), }, }, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("route-namespace", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("test.example.internal"), @@ -195,7 +195,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: objectMeta("route-namespace", "test"), Spec: v1.HTTPRouteSpec{ @@ -245,7 +245,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { Status: gatewayStatus("2.3.4.5"), }, }, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("test.example.internal"), @@ -272,7 +272,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: metav1.ObjectMeta{ Name: "labels-match", @@ -313,7 +313,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: metav1.ObjectMeta{ Name: "annotations-match", @@ -352,7 +352,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: metav1.ObjectMeta{ Name: "api", Namespace: "default", @@ -387,7 +387,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { Status: gatewayStatus("2.3.4.5"), }, }, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("test.example.internal"), @@ -423,7 +423,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("*.example.internal"), @@ -459,7 +459,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("*.example.internal"), @@ -503,7 +503,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("*.example.internal"), @@ -531,7 +531,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "no-hostname"), Spec: v1.HTTPRouteSpec{ Hostnames: []v1.Hostname{ @@ -558,7 +558,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "no-hostname"), Spec: v1.HTTPRouteSpec{ Hostnames: []v1.Hostname{ @@ -585,7 +585,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "no-hostname"), Spec: v1.HTTPRouteSpec{ Hostnames: []v1.Hostname{ @@ -612,7 +612,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "no-hostname"), Spec: v1.HTTPRouteSpec{ Hostnames: nil, @@ -628,7 +628,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { config: Config{}, namespaces: namespaces("default"), gateways: nil, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("example.internal"), @@ -648,7 +648,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "no-hostname"), Spec: v1.HTTPRouteSpec{ Hostnames: nil, @@ -668,7 +668,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: metav1.ObjectMeta{ Name: "without-hostame", @@ -715,7 +715,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: metav1.ObjectMeta{ Name: "with-hostame", Namespace: "default", @@ -745,7 +745,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: objectMeta("default", "fqdn-with-hostnames"), Spec: v1.HTTPRouteSpec{ @@ -782,7 +782,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "fqdn-with-hostnames"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("fqdn-with-hostnames.internal"), @@ -805,7 +805,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: metav1.ObjectMeta{ Name: "valid-ttl", @@ -845,7 +845,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: metav1.ObjectMeta{ Name: "provider-annotations", Namespace: "default", @@ -891,7 +891,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { Status: gatewayStatus("2.3.4.5"), }, }, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("test.one.internal", "test.two.internal"), @@ -924,7 +924,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: objectMeta("same-namespace", "test"), Spec: v1.HTTPRouteSpec{ @@ -983,7 +983,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{ + routes: []*v1beta1.HTTPRoute{ { ObjectMeta: objectMeta("foo", "test"), Spec: v1.HTTPRouteSpec{ @@ -1025,7 +1025,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { }, Status: gatewayStatus("1.2.3.4"), }}, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("default", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("example.internal"), @@ -1058,7 +1058,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { Status: gatewayStatus("1.2.3.4"), }, }, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("route-namespace", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("test.example.internal"), @@ -1105,7 +1105,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { Status: gatewayStatus("2.3.4.5"), }, }, - routes: []*v1.HTTPRoute{{ + routes: []*v1beta1.HTTPRoute{{ ObjectMeta: objectMeta("route-namespace", "test"), Spec: v1.HTTPRouteSpec{ Hostnames: hostnames("test.example.internal"), @@ -1133,7 +1133,7 @@ func TestGatewayHTTPRouteSourceEndpoints(t *testing.T) { } for _, rt := range tt.routes { - _, err := gwClient.GatewayV1().HTTPRoutes(rt.Namespace).Create(ctx, rt, metav1.CreateOptions{}) + _, err := gwClient.GatewayV1beta1().HTTPRoutes(rt.Namespace).Create(ctx, rt, metav1.CreateOptions{}) require.NoError(t, err, "failed to create HTTPRoute") } kubeClient := kubefake.NewSimpleClientset() From 2daa842eb7dcfce3f674f3d3adac613320b9070c Mon Sep 17 00:00:00 2001 From: Andy Bursavich Date: Sun, 14 Jul 2024 09:07:17 -0700 Subject: [PATCH 18/78] docs/gateway-api: update supported API versions --- docs/tutorials/gateway-api.md | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/docs/tutorials/gateway-api.md b/docs/tutorials/gateway-api.md index 722b637c5..647ca76fc 100644 --- a/docs/tutorials/gateway-api.md +++ b/docs/tutorials/gateway-api.md @@ -5,10 +5,25 @@ It is meant to supplement the other provider-specific setup tutorials. ## Supported API Versions -As the Gateway API is still in an experimental phase, ExternalDNS makes no backwards -compatibilty guarantees regarding its support. However, it currently supports a mixture of -v1alpha2, v1beta1, v1 APIs. Gateways and HTTPRoutes are supported using the v1 and v1beta1 API (which is converted to v1 when using the latest CRDs). -GRPCRoutes, TLSRoutes, TCPRoutes, and UDPRoutes are supported using the v1alpha2 API. +ExternalDNS currently supports a mixture of v1alpha2, v1beta1, v1 APIs. + +Gateway API has two release channels: Standard and Experimental. +The Experimental channel includes v1alpha2, v1beta2, and v1 APIs. +The Standard channel only includes v1beta2 and v1 APIs, not v1alpha2. + +TCPRoutes, TLSRoutes, and UDPRoutes only exist in v1alpha2 and continued support for +these versions is NOT guaranteed. At some time in the future, Gateway API will graduate +these Routes to v1. ExternalDNS will likely follow that upgrade and move to the v1 API, +where they will be available in the Standard release channel. This will be a breaking +change if your Experimental CRDs are not updated to include the new v1 API. + +Gateways and HTTPRoutes are available in v1alpha2, v1beta1, and v1 APIs. +However, some notable environments are behind in upgrading their CRDs to include the v1 API. +For compatibility reasons Gateways and HTTPRoutes use the v1beta1 API. + +GRPCRoutes are available in v1alpha2 and v1 APIs, not v1beta2. +Therefore, GRPCRoutes use the v1 API which is available in both release channels. +Unfortunately, this means they will not be available in environments with old CRDs. ## Hostnames From f5efad70ea0546d1757a3e71da0b6d773c79810b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 03:41:40 +0000 Subject: [PATCH 19/78] chore(deps): bump the dev-dependencies group across 1 directory with 2 updates Bumps the dev-dependencies group with 2 updates in the / directory: [actions/setup-python](https://github.com/actions/setup-python) and [action-stars/install-tool-from-github-release](https://github.com/action-stars/install-tool-from-github-release). Updates `actions/setup-python` from 5.1.0 to 5.1.1 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/82c7e631bb3cdc910f68e0081d67478d79c6982d...39cd14951b08e74b54015e9e001cdefcf80e669f) Updates `action-stars/install-tool-from-github-release` from 0.2.3 to 0.2.4 - [Release notes](https://github.com/action-stars/install-tool-from-github-release/releases) - [Changelog](https://github.com/action-stars/install-tool-from-github-release/blob/main/CHANGELOG.md) - [Commits](https://github.com/action-stars/install-tool-from-github-release/compare/243ac555111a84756285bf7dc55df821a55d32d9...ece2623611b240002e0dd73a0d685505733122f6) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: action-stars/install-tool-from-github-release dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/docs.yaml | 2 +- .github/workflows/lint-test-chart.yaml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index c7e928464..967062ca0 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0 + - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 with: python-version: "3.12" cache: "pip" diff --git a/.github/workflows/lint-test-chart.yaml b/.github/workflows/lint-test-chart.yaml index 2ef778233..8dda29b2b 100644 --- a/.github/workflows/lint-test-chart.yaml +++ b/.github/workflows/lint-test-chart.yaml @@ -19,7 +19,7 @@ jobs: fetch-depth: 0 - name: Install Helm Docs - uses: action-stars/install-tool-from-github-release@243ac555111a84756285bf7dc55df821a55d32d9 # v0.2.3 + uses: action-stars/install-tool-from-github-release@ece2623611b240002e0dd73a0d685505733122f6 # v0.2.4 with: github_token: ${{ secrets.GITHUB_TOKEN }} owner: norwoodj @@ -40,7 +40,7 @@ jobs: fi - name: Install Artifact Hub CLI - uses: action-stars/install-tool-from-github-release@243ac555111a84756285bf7dc55df821a55d32d9 # v0.2.3 + uses: action-stars/install-tool-from-github-release@ece2623611b240002e0dd73a0d685505733122f6 # v0.2.4 with: github_token: ${{ github.token }} owner: artifacthub @@ -59,7 +59,7 @@ jobs: version: latest - name: Install Python - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0 + uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 with: token: ${{ github.token }} python-version: "3.x" From 3cb1c81be8ca4736d9bb3d96a84f42d133829415 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 03:41:52 +0000 Subject: [PATCH 20/78] chore(deps): bump the dev-dependencies group across 1 directory with 37 updates Bumps the dev-dependencies group with 31 updates in the / directory: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/compute/metadata](https://github.com/googleapis/google-cloud-go) | `0.3.0` | `0.5.0` | | [github.com/Azure/azure-sdk-for-go/sdk/azcore](https://github.com/Azure/azure-sdk-for-go) | `1.12.0` | `1.13.0` | | [github.com/F5Networks/k8s-bigip-ctlr/v2](https://github.com/F5Networks/k8s-bigip-ctlr) | `2.17.0` | `2.17.1` | | [github.com/IBM-Cloud/ibm-cloud-cli-sdk](https://github.com/IBM-Cloud/ibm-cloud-cli-sdk) | `1.4.0` | `1.5.0` | | [github.com/IBM/go-sdk-core/v5](https://github.com/IBM/go-sdk-core) | `5.17.3` | `5.17.4` | | [github.com/IBM/networking-go-sdk](https://github.com/IBM/networking-go-sdk) | `0.47.1` | `0.49.0` | | [github.com/aliyun/alibaba-cloud-sdk-go](https://github.com/aliyun/alibaba-cloud-sdk-go) | `1.62.771` | `1.62.804` | | [github.com/ans-group/sdk-go](https://github.com/ans-group/sdk-go) | `1.17.0` | `1.19.0` | | [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) | `1.54.4` | `1.55.5` | | [github.com/civo/civogo](https://github.com/civo/civogo) | `0.3.70` | `0.3.73` | | [github.com/cloudflare/cloudflare-go](https://github.com/cloudflare/cloudflare-go) | `0.98.0` | `0.101.0` | | [github.com/digitalocean/godo](https://github.com/digitalocean/godo) | `1.118.0` | `1.119.0` | | [github.com/gophercloud/gophercloud](https://github.com/gophercloud/gophercloud) | `1.12.0` | `1.14.0` | | [github.com/linode/linodego](https://github.com/linode/linodego) | `1.35.0` | `1.38.0` | | [github.com/oracle/oci-go-sdk/v65](https://github.com/oracle/oci-go-sdk) | `65.67.2` | `65.70.0` | | [github.com/pluralsh/gqlclient](https://github.com/pluralsh/gqlclient) | `1.11.0` | `1.12.1` | | [github.com/projectcontour/contour](https://github.com/projectcontour/contour) | `1.29.1` | `1.30.0` | | [github.com/scaleway/scaleway-sdk-go](https://github.com/scaleway/scaleway-sdk-go) | `1.0.0-beta.28` | `1.0.0-beta.29` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.945` | `1.0.976` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.945` | `1.0.976` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.945` | `1.0.976` | | [github.com/transip/gotransip/v6](https://github.com/transip/gotransip) | `6.24.0` | `6.25.0` | | [go.etcd.io/etcd/api/v3](https://github.com/etcd-io/etcd) | `3.5.14` | `3.5.15` | | [go.etcd.io/etcd/client/v3](https://github.com/etcd-io/etcd) | `3.5.14` | `3.5.15` | | [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.21.0` | `0.22.0` | | [golang.org/x/sync](https://github.com/golang/sync) | `0.7.0` | `0.8.0` | | [golang.org/x/time](https://github.com/golang/time) | `0.5.0` | `0.6.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.185.0` | `0.190.0` | | gopkg.in/ns1/ns1-go.v2 | `2.11.0` | `2.12.0` | | [istio.io/api](https://github.com/istio/api) | `1.22.1` | `1.22.3` | | [istio.io/client-go](https://github.com/istio/client-go) | `1.22.1` | `1.22.3` | Updates `cloud.google.com/go/compute/metadata` from 0.3.0 to 0.5.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/v0.3.0...v0.5.0) Updates `github.com/Azure/azure-sdk-for-go/sdk/azcore` from 1.12.0 to 1.13.0 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.12.0...sdk/azcore/v1.13.0) Updates `github.com/Azure/azure-sdk-for-go/sdk/azidentity` from 1.6.0 to 1.7.0 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.6.0...sdk/azcore/v1.7.0) Updates `github.com/F5Networks/k8s-bigip-ctlr/v2` from 2.17.0 to 2.17.1 - [Release notes](https://github.com/F5Networks/k8s-bigip-ctlr/releases) - [Changelog](https://github.com/F5Networks/k8s-bigip-ctlr/blob/v2.17.1/docs/RELEASE-NOTES.rst) - [Commits](https://github.com/F5Networks/k8s-bigip-ctlr/compare/v2.17.0...v2.17.1) Updates `github.com/IBM-Cloud/ibm-cloud-cli-sdk` from 1.4.0 to 1.5.0 - [Release notes](https://github.com/IBM-Cloud/ibm-cloud-cli-sdk/releases) - [Commits](https://github.com/IBM-Cloud/ibm-cloud-cli-sdk/compare/v1.4.0...v1.5.0) Updates `github.com/IBM/go-sdk-core/v5` from 5.17.3 to 5.17.4 - [Release notes](https://github.com/IBM/go-sdk-core/releases) - [Changelog](https://github.com/IBM/go-sdk-core/blob/main/CHANGELOG.md) - [Commits](https://github.com/IBM/go-sdk-core/compare/v5.17.3...v5.17.4) Updates `github.com/IBM/networking-go-sdk` from 0.47.1 to 0.49.0 - [Release notes](https://github.com/IBM/networking-go-sdk/releases) - [Changelog](https://github.com/IBM/networking-go-sdk/blob/master/CHANGELOG.md) - [Commits](https://github.com/IBM/networking-go-sdk/compare/v0.47.1...v0.49.0) Updates `github.com/aliyun/alibaba-cloud-sdk-go` from 1.62.771 to 1.62.804 - [Release notes](https://github.com/aliyun/alibaba-cloud-sdk-go/releases) - [Changelog](https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/ChangeLog.txt) - [Commits](https://github.com/aliyun/alibaba-cloud-sdk-go/compare/v1.62.771...v1.62.804) Updates `github.com/ans-group/sdk-go` from 1.17.0 to 1.19.0 - [Release notes](https://github.com/ans-group/sdk-go/releases) - [Commits](https://github.com/ans-group/sdk-go/compare/v1.17.0...v1.19.0) Updates `github.com/aws/aws-sdk-go` from 1.54.4 to 1.55.5 - [Release notes](https://github.com/aws/aws-sdk-go/releases) - [Commits](https://github.com/aws/aws-sdk-go/compare/v1.54.4...v1.55.5) Updates `github.com/civo/civogo` from 0.3.70 to 0.3.73 - [Release notes](https://github.com/civo/civogo/releases) - [Changelog](https://github.com/civo/civogo/blob/master/changelog.yml) - [Commits](https://github.com/civo/civogo/compare/v0.3.70...v0.3.73) Updates `github.com/cloudflare/cloudflare-go` from 0.98.0 to 0.101.0 - [Release notes](https://github.com/cloudflare/cloudflare-go/releases) - [Changelog](https://github.com/cloudflare/cloudflare-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/cloudflare/cloudflare-go/compare/v0.98.0...v0.101.0) Updates `github.com/digitalocean/godo` from 1.118.0 to 1.119.0 - [Release notes](https://github.com/digitalocean/godo/releases) - [Changelog](https://github.com/digitalocean/godo/blob/main/CHANGELOG.md) - [Commits](https://github.com/digitalocean/godo/compare/v1.118.0...v1.119.0) Updates `github.com/gophercloud/gophercloud` from 1.12.0 to 1.14.0 - [Release notes](https://github.com/gophercloud/gophercloud/releases) - [Changelog](https://github.com/gophercloud/gophercloud/blob/v1.14.0/CHANGELOG.md) - [Commits](https://github.com/gophercloud/gophercloud/compare/v1.12.0...v1.14.0) Updates `github.com/linode/linodego` from 1.35.0 to 1.38.0 - [Release notes](https://github.com/linode/linodego/releases) - [Commits](https://github.com/linode/linodego/compare/v1.35.0...v1.38.0) Updates `github.com/oracle/oci-go-sdk/v65` from 65.67.2 to 65.70.0 - [Release notes](https://github.com/oracle/oci-go-sdk/releases) - [Changelog](https://github.com/oracle/oci-go-sdk/blob/master/CHANGELOG.md) - [Commits](https://github.com/oracle/oci-go-sdk/compare/v65.67.2...v65.70.0) Updates `github.com/pluralsh/gqlclient` from 1.11.0 to 1.12.1 - [Release notes](https://github.com/pluralsh/gqlclient/releases) - [Changelog](https://github.com/pluralsh/gqlclient/blob/main/.releaserc) - [Commits](https://github.com/pluralsh/gqlclient/compare/v1.11.0...v1.12.1) Updates `github.com/projectcontour/contour` from 1.29.1 to 1.30.0 - [Release notes](https://github.com/projectcontour/contour/releases) - [Changelog](https://github.com/projectcontour/contour/blob/main/RELEASES.md) - [Commits](https://github.com/projectcontour/contour/compare/v1.29.1...v1.30.0) Updates `github.com/scaleway/scaleway-sdk-go` from 1.0.0-beta.28 to 1.0.0-beta.29 - [Release notes](https://github.com/scaleway/scaleway-sdk-go/releases) - [Changelog](https://github.com/scaleway/scaleway-sdk-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/scaleway/scaleway-sdk-go/compare/v1.0.0-beta.28...v1.0.0-beta.29) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common` from 1.0.945 to 1.0.976 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.945...v1.0.976) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod` from 1.0.945 to 1.0.976 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.945...v1.0.976) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns` from 1.0.945 to 1.0.976 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.945...v1.0.976) Updates `github.com/transip/gotransip/v6` from 6.24.0 to 6.25.0 - [Release notes](https://github.com/transip/gotransip/releases) - [Commits](https://github.com/transip/gotransip/compare/v6.24.0...v6.25.0) Updates `go.etcd.io/etcd/api/v3` from 3.5.14 to 3.5.15 - [Release notes](https://github.com/etcd-io/etcd/releases) - [Commits](https://github.com/etcd-io/etcd/compare/v3.5.14...v3.5.15) Updates `go.etcd.io/etcd/client/v3` from 3.5.14 to 3.5.15 - [Release notes](https://github.com/etcd-io/etcd/releases) - [Commits](https://github.com/etcd-io/etcd/compare/v3.5.14...v3.5.15) Updates `golang.org/x/net` from 0.26.0 to 0.27.0 - [Commits](https://github.com/golang/net/compare/v0.26.0...v0.27.0) Updates `golang.org/x/oauth2` from 0.21.0 to 0.22.0 - [Commits](https://github.com/golang/oauth2/compare/v0.21.0...v0.22.0) Updates `golang.org/x/sync` from 0.7.0 to 0.8.0 - [Commits](https://github.com/golang/sync/compare/v0.7.0...v0.8.0) Updates `golang.org/x/time` from 0.5.0 to 0.6.0 - [Commits](https://github.com/golang/time/compare/v0.5.0...v0.6.0) Updates `google.golang.org/api` from 0.185.0 to 0.190.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.185.0...v0.190.0) Updates `gopkg.in/ns1/ns1-go.v2` from 2.11.0 to 2.12.0 Updates `istio.io/api` from 1.22.1 to 1.22.3 - [Commits](https://github.com/istio/api/compare/1.22.1...1.22.3) Updates `istio.io/client-go` from 1.22.1 to 1.22.3 - [Commits](https://github.com/istio/client-go/compare/1.22.1...1.22.3) Updates `k8s.io/api` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/api/compare/v0.30.2...v0.30.3) Updates `k8s.io/apimachinery` from 0.30.2 to 0.30.3 - [Commits](https://github.com/kubernetes/apimachinery/compare/v0.30.2...v0.30.3) Updates `k8s.io/client-go` from 0.30.2 to 0.30.3 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/kubernetes/client-go/compare/v0.30.2...v0.30.3) Updates `k8s.io/klog/v2` from 2.130.0 to 2.130.1 - [Release notes](https://github.com/kubernetes/klog/releases) - [Changelog](https://github.com/kubernetes/klog/blob/main/RELEASE.md) - [Commits](https://github.com/kubernetes/klog/compare/v2.130.0...v2.130.1) --- updated-dependencies: - dependency-name: cloud.google.com/go/compute/metadata dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/azcore dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/azidentity dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/F5Networks/k8s-bigip-ctlr/v2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/IBM-Cloud/ibm-cloud-cli-sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/IBM/go-sdk-core/v5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/IBM/networking-go-sdk dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/aliyun/alibaba-cloud-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/ans-group/sdk-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/aws/aws-sdk-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/civo/civogo dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/cloudflare/cloudflare-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/digitalocean/godo dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/gophercloud/gophercloud dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/linode/linodego dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/oracle/oci-go-sdk/v65 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/pluralsh/gqlclient dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/projectcontour/contour dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/scaleway/scaleway-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/transip/gotransip/v6 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: go.etcd.io/etcd/api/v3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: go.etcd.io/etcd/client/v3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: golang.org/x/net dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: golang.org/x/oauth2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: golang.org/x/sync dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: golang.org/x/time dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: gopkg.in/ns1/ns1-go.v2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: istio.io/api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: istio.io/client-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: k8s.io/api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: k8s.io/apimachinery dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: k8s.io/client-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: k8s.io/klog/v2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- go.mod | 116 +++++++++++++-------------- go.sum | 242 +++++++++++++++++++++++++++++---------------------------- 2 files changed, 183 insertions(+), 175 deletions(-) diff --git a/go.mod b/go.mod index 2df4a22bb..4bb661246 100644 --- a/go.mod +++ b/go.mod @@ -3,28 +3,28 @@ module sigs.k8s.io/external-dns go 1.22.4 require ( - cloud.google.com/go/compute/metadata v0.3.0 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.12.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 + cloud.google.com/go/compute/metadata v0.5.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.2.0 - github.com/F5Networks/k8s-bigip-ctlr/v2 v2.17.0 - github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.4.0 - github.com/IBM/go-sdk-core/v5 v5.17.3 - github.com/IBM/networking-go-sdk v0.47.1 + github.com/F5Networks/k8s-bigip-ctlr/v2 v2.17.1 + github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.5.0 + github.com/IBM/go-sdk-core/v5 v5.17.4 + github.com/IBM/networking-go-sdk v0.49.0 github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 github.com/alecthomas/kingpin/v2 v2.4.0 - github.com/aliyun/alibaba-cloud-sdk-go v1.62.771 - github.com/ans-group/sdk-go v1.17.0 - github.com/aws/aws-sdk-go v1.54.4 + github.com/aliyun/alibaba-cloud-sdk-go v1.62.804 + github.com/ans-group/sdk-go v1.19.0 + github.com/aws/aws-sdk-go v1.55.5 github.com/bodgit/tsig v1.2.2 github.com/cenkalti/backoff/v4 v4.3.0 - github.com/civo/civogo v0.3.70 - github.com/cloudflare/cloudflare-go v0.98.0 + github.com/civo/civogo v0.3.73 + github.com/cloudflare/cloudflare-go v0.101.0 github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381 github.com/datawire/ambassador v1.12.4 github.com/denverdino/aliyungo v0.0.0-20230411124812-ab98a9173ace - github.com/digitalocean/godo v1.118.0 + github.com/digitalocean/godo v1.119.0 github.com/dnsimple/dnsimple-go v1.7.0 github.com/exoscale/egoscale v0.102.3 github.com/ffledgling/pdns-go v0.0.0-20180219074714-524e7daccd99 @@ -32,10 +32,10 @@ require ( github.com/go-logr/logr v1.4.2 github.com/google/go-cmp v0.6.0 github.com/google/uuid v1.6.0 - github.com/gophercloud/gophercloud v1.12.0 + github.com/gophercloud/gophercloud v1.14.0 github.com/hooklift/gowsdl v0.5.0 github.com/linki/instrumented_http v0.3.0 - github.com/linode/linodego v1.35.0 + github.com/linode/linodego v1.38.0 github.com/maxatome/go-testdeep v1.14.0 github.com/miekg/dns v1.1.61 github.com/nesv/go-dynect v0.6.0 @@ -43,63 +43,64 @@ require ( github.com/onsi/ginkgo v1.16.5 github.com/openshift/api v0.0.0-20230607130528-611114dca681 github.com/openshift/client-go v0.0.0-20230607134213-3cd0021bbee3 - github.com/oracle/oci-go-sdk/v65 v65.67.2 + github.com/oracle/oci-go-sdk/v65 v65.70.0 github.com/ovh/go-ovh v1.6.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 - github.com/pluralsh/gqlclient v1.11.0 - github.com/projectcontour/contour v1.29.1 + github.com/pluralsh/gqlclient v1.12.1 + github.com/projectcontour/contour v1.30.0 github.com/prometheus/client_golang v1.19.1 - github.com/scaleway/scaleway-sdk-go v1.0.0-beta.28 + github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.945 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.945 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.945 - github.com/transip/gotransip/v6 v6.24.0 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.976 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.976 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.976 + github.com/transip/gotransip/v6 v6.25.0 github.com/ultradns/ultradns-sdk-go v1.3.7 github.com/vinyldns/go-vinyldns v0.9.16 github.com/vultr/govultr/v2 v2.17.2 - go.etcd.io/etcd/api/v3 v3.5.14 - go.etcd.io/etcd/client/v3 v3.5.14 + go.etcd.io/etcd/api/v3 v3.5.15 + go.etcd.io/etcd/client/v3 v3.5.15 go.uber.org/ratelimit v0.3.1 - golang.org/x/net v0.26.0 - golang.org/x/oauth2 v0.21.0 - golang.org/x/sync v0.7.0 - golang.org/x/time v0.5.0 - google.golang.org/api v0.185.0 - gopkg.in/ns1/ns1-go.v2 v2.11.0 + golang.org/x/net v0.27.0 + golang.org/x/oauth2 v0.22.0 + golang.org/x/sync v0.8.0 + golang.org/x/time v0.6.0 + google.golang.org/api v0.190.0 + gopkg.in/ns1/ns1-go.v2 v2.12.0 gopkg.in/yaml.v2 v2.4.0 - istio.io/api v1.22.1 - istio.io/client-go v1.22.1 - k8s.io/api v0.30.2 - k8s.io/apimachinery v0.30.2 - k8s.io/client-go v0.30.2 - k8s.io/klog/v2 v2.130.0 + istio.io/api v1.22.3 + istio.io/client-go v1.22.3 + k8s.io/api v0.30.3 + k8s.io/apimachinery v0.30.3 + k8s.io/client-go v0.30.3 + k8s.io/klog/v2 v2.130.1 sigs.k8s.io/gateway-api v1.1.0 ) require ( - cloud.google.com/go/auth v0.5.1 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect + cloud.google.com/go/auth v0.7.3 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.9.0 // indirect + github.com/99designs/gqlgen v0.17.44 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/Masterminds/semver v1.4.2 // indirect - github.com/Yamashou/gqlgenc v0.14.0 // indirect + github.com/Yamashou/gqlgenc v0.23.2 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 // indirect github.com/ans-group/go-durationstring v1.2.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deepmap/oapi-codegen v1.9.1 // indirect github.com/emicklei/go-restful/v3 v3.12.0 // indirect - github.com/evanphx/json-patch v5.7.0+incompatible // indirect + github.com/evanphx/json-patch v5.9.0+incompatible // indirect github.com/fatih/structs v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -124,9 +125,9 @@ require ( github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/s2a-go v0.1.7 // indirect + github.com/google/s2a-go v0.1.8 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.4 // indirect + github.com/googleapis/gax-go/v2 v2.13.0 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -165,8 +166,8 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.53.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/sagikazarmark/locafero v0.3.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect @@ -175,6 +176,7 @@ require ( github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect github.com/smartystreets/gunit v1.3.4 // indirect github.com/sony/gobreaker v0.5.0 // indirect + github.com/sosodev/duration v1.2.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect @@ -185,7 +187,7 @@ require ( github.com/terra-farm/udnssdk v1.3.5 // indirect github.com/vektah/gqlparser/v2 v2.5.14 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.5.14 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.15 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect @@ -195,16 +197,16 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.24.0 // indirect - golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f // indirect + golang.org/x/crypto v0.25.0 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/mod v0.18.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 // indirect golang.org/x/text v0.16.0 // indirect golang.org/x/tools v0.22.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 // indirect - google.golang.org/grpc v1.64.1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect + google.golang.org/grpc v1.65.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -212,8 +214,8 @@ require ( gopkg.in/resty.v1 v1.12.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 // indirect - k8s.io/utils v0.0.0-20240423183400-0849a56e8f22 // indirect + k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f // indirect + k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect moul.io/http2curl v1.0.0 // indirect sigs.k8s.io/controller-runtime v0.18.4 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/go.sum b/go.sum index 18f28f2c5..d4dc2635b 100644 --- a/go.sum +++ b/go.sum @@ -18,18 +18,18 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/auth v0.5.1 h1:0QNO7VThG54LUzKiQxv8C6x1YX7lUrzlAa1nVLF8CIw= -cloud.google.com/go/auth v0.5.1/go.mod h1:vbZT8GjzDf3AVqCcQmqeeM32U9HBFc32vVVAbwDsa6s= -cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= -cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= +cloud.google.com/go/auth v0.7.3 h1:98Vr+5jMaCZ5NZk6e/uBgf60phTk/XN84r8QEWB9yjY= +cloud.google.com/go/auth v0.7.3/go.mod h1:HJtWUx1P5eqjy/f6Iq5KeytNpbAcGolPhOgyop2LlzA= +cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= +cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -46,14 +46,16 @@ code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f h1:UrKzEwTg code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= git.lukeshu.com/go/libsystemd v0.5.3/go.mod h1:FfDoP0i92r4p5Vn4NCLxvjkd7rCOe6otPa4L6hZg9WM= +github.com/99designs/gqlgen v0.17.44 h1:OS2wLk/67Y+vXM75XHbwRnNYJcbuJd4OBL76RX3NQQA= +github.com/99designs/gqlgen v0.17.44/go.mod h1:UTCu3xpK2mLI5qcMNw+HKDiEL77it/1XtAjisC4sLwM= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible h1:KnPIugL51v3N3WwvaSmZbxukD1WuWXOiE9fRdu32f2I= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.12.0 h1:1nGuui+4POelzDwI7RG56yfQJHCnKvwfMoU7VsEp+Zg= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.12.0/go.mod h1:99EvauvlcJ1U06amZiksfYz/3aFGyIhWGHVyiZXtBAI= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 h1:U2rTu3Ef+7w9FHKIAXM6ZyqF3UOWJZ12zIm8zECAFfg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.9.0 h1:H+U3Gk9zY56G3u872L82bk4thcsy2Gghb9ExT4Zvm1o= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.9.0/go.mod h1:mgrmMSgaLp9hmax62XQTd0N4aAqSE5E0DulSpVYK7vc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 h1:GJHeeA2N7xrG3q30L2UXDyuWRzDM900/65j70wcM4Ww= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 h1:lpOxwrQ919lCZoNCd69rVt8u1eLZuMORrGXqy8sNf3c= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0/go.mod h1:fSvRkb8d26z9dbL40Uf/OO6Vo9iExtZK3D0ulRV+8M0= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= @@ -76,15 +78,15 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/F5Networks/k8s-bigip-ctlr/v2 v2.17.0 h1:+hZtcPmSyhVmKuIjreGSEuvHxD0jM0YAei/ABoq/G5g= -github.com/F5Networks/k8s-bigip-ctlr/v2 v2.17.0/go.mod h1:mMF9pk71U8aIzMBS+CWq8OL3gLcFCRCiy+wNpE4gDIE= +github.com/F5Networks/k8s-bigip-ctlr/v2 v2.17.1 h1:DsX6HIG2kxYg2bRM7jIVgyBb6PcJXBt9iCsTfLvFwWE= +github.com/F5Networks/k8s-bigip-ctlr/v2 v2.17.1/go.mod h1:mMF9pk71U8aIzMBS+CWq8OL3gLcFCRCiy+wNpE4gDIE= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.4.0 h1:Q+zEWnb3z9vfWOkCRlNziO5Pd7i2xwXFRMWQ5RU+CKA= -github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.4.0/go.mod h1:XxWyb5MQDU4GnRBSDZpGgIFwfbcn+GAUbPKS8CR8Bxc= -github.com/IBM/go-sdk-core/v5 v5.17.3 h1:CZSVCKzhQc/hRQZOtuEmi9dlNtWMnxJvOsPtQKP7cZ4= -github.com/IBM/go-sdk-core/v5 v5.17.3/go.mod h1:GatGZpxlo1KaxiRN6E10/rNgWtUtx1hN/GoHSCaSPKA= -github.com/IBM/networking-go-sdk v0.47.1 h1:Zqqu9CrZ86jkjMyuIJtBLLOE0D7YtirxnlFyAngEfLw= -github.com/IBM/networking-go-sdk v0.47.1/go.mod h1:yF4XStkswGgVwQVqPUk6b4YTP0dVap52q8HDYwY4gXQ= +github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.5.0 h1:+a994rHmNFwlSA609Z6SYhn9xt+lhGFF+dsgjMF75hY= +github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.5.0/go.mod h1:XxWyb5MQDU4GnRBSDZpGgIFwfbcn+GAUbPKS8CR8Bxc= +github.com/IBM/go-sdk-core/v5 v5.17.4 h1:VGb9+mRrnS2HpHZFM5hy4J6ppIWnwNrw0G+tLSgcJLc= +github.com/IBM/go-sdk-core/v5 v5.17.4/go.mod h1:KsAAI7eStAWwQa4F96MLy+whYSh39JzNjklZRbN/8ns= +github.com/IBM/networking-go-sdk v0.49.0 h1:lPS34u3C0JVrbxH+Ulua76Nwl6Frv8BEfq6LRkyvOv0= +github.com/IBM/networking-go-sdk v0.49.0/go.mod h1:G9CKbmPE8gSLjN+ABh4hIZ1bMx076enl5Eekvj6zQnA= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= @@ -109,8 +111,8 @@ github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:H github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Yamashou/gqlgenc v0.14.0 h1:KVzUuVQKfl4Phm5Cw4yeFThDAxZoIBR9XLoK/4O1O6U= -github.com/Yamashou/gqlgenc v0.14.0/go.mod h1:+z+FRCtGrNmgTxweAUiCodOmQJLTCNtnRNAqhewf1Q8= +github.com/Yamashou/gqlgenc v0.23.2 h1:WPxYPrwc6W4Z1eY4qKxoH3nb5PC4jAMWqQA0G8toQMI= +github.com/Yamashou/gqlgenc v0.23.2/go.mod h1:oMc4EQBQeDwLIODvgcvpaSp6rO+KMf47FuOhplv5D3A= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -126,15 +128,15 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAu github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 h1:P5U+E4x5OkVEKQDklVPmzs71WM56RTTRqV4OrDC//Y4= github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5/go.mod h1:976q2ETgjT2snVCf2ZaBnyBbVoPERGjUz+0sofzEfro= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.771 h1:/3CAW5lTlOLiB+4klPJg+ZXxp0M4r08iGNuwFB8e7Qs= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.771/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.804 h1:1oYNaD9kNxltffxn+W11ItkuqdZkgETo2qUrbz5opV0= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.804/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v0.0.0-20190621154722-5f990b63d2d6/go.mod h1:+lx6/Aqd1kLJ1GQfkvOnaZ1WGmLpMpbprPuIOOZX30U= github.com/ans-group/go-durationstring v1.2.0 h1:UJIuQATkp0t1rBvZsHRwki33YHV9E+Ulro+3NbMB7MM= github.com/ans-group/go-durationstring v1.2.0/go.mod h1:QGF9Mdpq9058QXaut8r55QWu6lcHX6i/GvF1PZVkV6o= -github.com/ans-group/sdk-go v1.17.0 h1:lrZyVux4642UcTykuMsMMB4LTtVI+hEtgPiXxiFZqFo= -github.com/ans-group/sdk-go v1.17.0/go.mod h1:w4tX8raa9y3j7pug6TLcF8ZW1j9G05AmNoQLBloYxEY= +github.com/ans-group/sdk-go v1.19.0 h1:MnoNZDN86ilbLQk7x6iXKEXcA6HY/izC9mv/EL232M4= +github.com/ans-group/sdk-go v1.19.0/go.mod h1:w4tX8raa9y3j7pug6TLcF8ZW1j9G05AmNoQLBloYxEY= github.com/aokoli/goutils v1.1.0/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -152,8 +154,8 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:W github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.54.4 h1:xZga3fPu7uxVgh83DIaQlb7r0cixFx1xKiiROTWAhpU= -github.com/aws/aws-sdk-go v1.54.4/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -180,18 +182,18 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/civo/civogo v0.3.70 h1:QPuFm5EmpkScbdFo5/6grcG2xcvd/lgdolOtENT04Ac= -github.com/civo/civogo v0.3.70/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM= +github.com/civo/civogo v0.3.73 h1:thkNnkziU+xh+MEOChIUwRZI1forN20+SSAPe/VFDME= +github.com/civo/civogo v0.3.73/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.98.0 h1:IjBVU1jmmG2Vm5emW1cXv/RPCT2XWpRPuB1zgaTdcZY= -github.com/cloudflare/cloudflare-go v0.98.0/go.mod h1:sQzaVM6DlkWe1yqQXaql+CRt4rA8efMfpoPjNuUE1KI= +github.com/cloudflare/cloudflare-go v0.101.0 h1:SXWNSEDkbdY84iFIZGyTdWQwDfd98ljv0/4UubpleBQ= +github.com/cloudflare/cloudflare-go v0.101.0/go.mod h1:xXQHnoXKR48JlWbFS42i2al3nVqimVhcYvKnIdXLw9g= github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381 h1:rdRS5BT13Iae9ssvcslol66gfOOXjaLYwqerEn/cl9s= github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381/go.mod h1:e5+USP2j8Le2M0Jo3qKPFnNhuo1wueU4nWHCXBOfQ14= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -255,8 +257,8 @@ github.com/denverdino/aliyungo v0.0.0-20230411124812-ab98a9173ace/go.mod h1:TK05 github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/digitalocean/godo v1.118.0 h1:lkzGFQmACrVCp7UqH1sAi4JK/PWwlc5aaxubgorKmC4= -github.com/digitalocean/godo v1.118.0/go.mod h1:Vk0vpCot2HOAJwc5WE8wljZGtJ3ZtWIc8MQ8rF38sdo= +github.com/digitalocean/godo v1.119.0 h1:dmFNQwSIAcH3z+FVovHLkazKDC2uA8oOlGvg5+H4vRw= +github.com/digitalocean/godo v1.119.0/go.mod h1:WQVH83OHUy6gC4gXpEVQKtxTd4L5oCp+5OialidkPLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= @@ -300,8 +302,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/envoyproxy/protoc-gen-validate v0.3.0-java.0.20200609174644-bd816e4522c1/go.mod h1:bjmEhrMDubXDd0uKxnWwRmgSsiEv2CkJliIHnj6ETm8= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= -github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= +github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/exoscale/egoscale v0.102.3 h1:DYqN2ipoLKpiFoprRGQkp2av/Ze7sUYYlGhi1N62tfY= github.com/exoscale/egoscale v0.102.3/go.mod h1:RPf2Gah6up+6kAEayHTQwqapzXlm93f0VQas/UEGU5c= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= @@ -552,8 +554,8 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/shlex v0.0.0-20181106134648-c34317bd91bf/go.mod h1:RpwtwJQFrIEPstU94h88MWPXP2ektJZ8cZ0YntAmXiE= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -564,16 +566,16 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg= -github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= +github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= +github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gookit/color v1.2.3/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gophercloud/gophercloud v1.12.0 h1:Jrz16vPAL93l80q16fp8NplrTCp93y7rZh2P3Q4Yq7g= -github.com/gophercloud/gophercloud v1.12.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/gophercloud/gophercloud v1.14.0 h1:Bt9zQDhPrbd4qX7EILGmy+i7GP35cc+AAL2+wIJpUE8= +github.com/gophercloud/gophercloud v1.14.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= @@ -679,8 +681,9 @@ github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHW github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= @@ -749,8 +752,8 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linki/instrumented_http v0.3.0 h1:dsN92+mXpfZtjJraartcQ99jnuw7fqsnPDjr85ma2dA= github.com/linki/instrumented_http v0.3.0/go.mod h1:pjYbItoegfuVi2GUOMhEqzvm/SJKuEL3H0tc8QRLRFk= -github.com/linode/linodego v1.35.0 h1:rIhUeCHBLEDlkoRnOTwzSGzljQ3ksXwLxacmXnrV+Do= -github.com/linode/linodego v1.35.0/go.mod h1:JxuhOEAMfSxun6RU5/MgTKH2GGTmFrhKRj3wL1NFin0= +github.com/linode/linodego v1.38.0 h1:wP3oW9OhGc6vhze8NPf2knbwH4TzSbrjzuCd9okjbTY= +github.com/linode/linodego v1.38.0/go.mod h1:L7GXKFD3PoN2xSEtFc04wIXP5WK65O10jYQx0PQISWQ= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/lyft/protoc-gen-star v0.4.10/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= @@ -862,16 +865,16 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.17.3 h1:oJcvKpIb7/8uLpDDtnQuf18xVnwKp8DTD7DQ6gTd/MU= -github.com/onsi/ginkgo/v2 v2.17.3/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= +github.com/onsi/ginkgo/v2 v2.19.1 h1:QXgq3Z8Crl5EL1WBAC98A5sEBHARrAJNzAmMxzLcRF0= +github.com/onsi/ginkgo/v2 v2.19.1/go.mod h1:O3DtEWQkPa/F7fBMgmZQKKsluAy8pd3rEQdrjkPb9zA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/onsi/gomega v1.34.0 h1:eSSPsPNp6ZpsG8X1OVmOTxig+CblTc4AxpPBykhe2Os= +github.com/onsi/gomega v1.34.0/go.mod h1:MIKI8c+f+QLWk+hxbePD4i0LMJSExPaZOVfkoex4cAo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -900,8 +903,8 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/oracle/oci-go-sdk/v65 v65.67.2 h1:ieNt3Gm9MSGNuPXEBUg6MoSRE3ByWlxj0GBKlvD/Cls= -github.com/oracle/oci-go-sdk/v65 v65.67.2/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= +github.com/oracle/oci-go-sdk/v65 v65.70.0 h1:gLa0IX/SidTm60VbHabnImrW3hyymmNLQJy6gZGrgDA= +github.com/oracle/oci-go-sdk/v65 v65.70.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI= github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2 h1:CXwSGu/LYmbjEab5aMCs5usQRVBGThelUKBNnoSOuso= @@ -932,15 +935,15 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pluralsh/gqlclient v1.11.0 h1:FfXW7FiEJLHOfTAa7NxDb8jb3aMZNIpCAcG+bg8uHYA= -github.com/pluralsh/gqlclient v1.11.0/go.mod h1:qSXKUlio1F2DRPy8el4oFYsmpKbkUYspgPB87T4it5I= +github.com/pluralsh/gqlclient v1.12.1 h1:JDOkP9jjqkPdTYdpH5hooG4F8T6FDH90XfipeXJmJFY= +github.com/pluralsh/gqlclient v1.12.1/go.mod h1:OEjN9L63x8m3A3eQBv5kVkFgiY9fp2aZ0cgOF0uII58= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/projectcontour/contour v1.29.1 h1:5xPxUCEhL5hGY/+4mXGNc0zIbRqQKy1etna7PYt0U20= -github.com/projectcontour/contour v1.29.1/go.mod h1:VOwv8X4npyTmLWNiK8OIYOvI5ue5ITBho2kl8KR3+2g= +github.com/projectcontour/contour v1.30.0 h1:VrZFHhCD3jd3+dLvLuqrK/T++uKbKvRKM5zjQelUaEM= +github.com/projectcontour/contour v1.30.0/go.mod h1:64BJdN6uIkGGt3jJ6b3OLLapysgfEUNX/6K8vsaTRIg= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= @@ -966,8 +969,8 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE= -github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -976,8 +979,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= @@ -1002,8 +1005,8 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.28 h1:2vT+ryIQGfF21HN/W5yn/CBPpsTJULuuepWfUq/geV4= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.28/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 h1:BkTk4gynLjguayxrYxZoMZjBnAOh7ntQvUkOFmkMqPU= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= github.com/schollz/progressbar/v3 v3.8.6 h1:QruMUdzZ1TbEP++S1m73OqRJk20ON11m6Wqv4EoGg8c= github.com/schollz/progressbar/v3 v3.8.6/go.mod h1:W5IEwbJecncFGBvuEh4A7HT1nZZ6WNIL2i3qbnI0WKY= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -1036,6 +1039,8 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= github.com/sony/gobreaker v0.5.0/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sosodev/duration v1.2.0 h1:pqK/FLSjsAADWY74SyWDCjOcd5l7H8GSnnOGEB9A1Us= +github.com/sosodev/duration v1.2.0/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -1087,19 +1092,19 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.945 h1:+8B+2Bit7qPgmjdZPaA5NGjkGnYTzP5DOi/sICubde8= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.945/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.945 h1:dUBda90X1TKDCr10MeVqT6Ypf04ykLPmVxXFhCeANuc= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.945/go.mod h1:owgFnmcKQ97smmADIh+OIlW4Co2Jtv0QehTxoHV+mCQ= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.945 h1:WyLy2l0A6sIbCeSNqTdPlOip6CdcPnB+4ZcpiVKrfd0= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.945/go.mod h1:QQxSXHm4oD9nDBKnUKa7zcfAgHCj0Dr7KyHu84YpXEc= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.976 h1:k49CShY+0s4vMip96eimmno/qm0RO5VzKDjwXDcyWsc= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.976/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.976 h1:xIQQ5kqUMPMPOo2GIowJpDKL9pAJrMEJf9EulEx92DY= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.976/go.mod h1:VMhts8f17GeAL5F84jxJuiXVTzfd7tz6TZfUBxgcRlA= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.976 h1:Uji7jn0Ph9BuQfi88uAsJyxBjhYTxJ2eBlZknP6QfHI= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.976/go.mod h1:as8/uZUeVzMn24bT5gPM2t6JYXvvFvxVUglbpFc13Gs= github.com/terra-farm/udnssdk v1.3.5 h1:MNR3adfuuEK/l04+jzo8WW/0fnorY+nW515qb3vEr6I= github.com/terra-farm/udnssdk v1.3.5/go.mod h1:8RnM56yZTR7mYyUIvrDgXzdRaEyFIzqdEi7+um26Sv8= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/transip/gotransip/v6 v6.24.0 h1:QaHgRT3ikpMCXr8Ntojiced/W4izd9ra9PNE/i+7qTE= -github.com/transip/gotransip/v6 v6.24.0/go.mod h1:x0/RWGRK/zob817O3tfO2xhFoP1vu8YOHORx6Jpk80s= +github.com/transip/gotransip/v6 v6.25.0 h1:/H+SjMq/9HNZ0/maE1OLhJpxLaCGHsxq0PWaMPJHxK4= +github.com/transip/gotransip/v6 v6.25.0/go.mod h1:x0/RWGRK/zob817O3tfO2xhFoP1vu8YOHORx6Jpk80s= github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= @@ -1149,12 +1154,12 @@ github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wK go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd/api/v3 v3.5.14 h1:vHObSCxyB9zlF60w7qzAdTcGaglbJOpSj1Xj9+WGxq0= -go.etcd.io/etcd/api/v3 v3.5.14/go.mod h1:BmtWcRlQvwa1h3G2jvKYwIQy4PkHlDej5t7uLMUdJUU= -go.etcd.io/etcd/client/pkg/v3 v3.5.14 h1:SaNH6Y+rVEdxfpA2Jr5wkEvN6Zykme5+YnbCkxvuWxQ= -go.etcd.io/etcd/client/pkg/v3 v3.5.14/go.mod h1:8uMgAokyG1czCtIdsq+AGyYQMvpIKnSvPjFMunkgeZI= -go.etcd.io/etcd/client/v3 v3.5.14 h1:CWfRs4FDaDoSz81giL7zPpZH2Z35tbOrAJkkjMqOupg= -go.etcd.io/etcd/client/v3 v3.5.14/go.mod h1:k3XfdV/VIHy/97rqWjoUzrj9tk7GgJGH9J8L4dNXmAk= +go.etcd.io/etcd/api/v3 v3.5.15 h1:3KpLJir1ZEBrYuV2v+Twaa/e2MdDCEZ/70H+lzEiwsk= +go.etcd.io/etcd/api/v3 v3.5.15/go.mod h1:N9EhGzXq58WuMllgH9ZvnEr7SI9pS0k0+DHZezGp7jM= +go.etcd.io/etcd/client/pkg/v3 v3.5.15 h1:fo0HpWz/KlHGMCC+YejpiCmyWDEuIpnTDzpJLB5fWlA= +go.etcd.io/etcd/client/pkg/v3 v3.5.15/go.mod h1:mXDI4NAOwEiszrHCb0aqfAYNCrZP4e9hRca3d1YK8EU= +go.etcd.io/etcd/client/v3 v3.5.15 h1:23M0eY4Fd/inNv1ZfU3AxrbbOdW79r9V9Rl62Nm6ip4= +go.etcd.io/etcd/client/v3 v3.5.15/go.mod h1:CLSJxrYjvLtHsrPKsy7LmZEE+DK2ktfd2bN4RhBMwlU= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -1226,8 +1231,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1241,8 +1246,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY= -golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1331,8 +1336,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1343,8 +1348,8 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= +golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1358,8 +1363,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180425194835-bb9c189858d9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1440,8 +1445,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1449,8 +1454,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1472,8 +1477,9 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1577,8 +1583,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.185.0 h1:ENEKk1k4jW8SmmaT6RE+ZasxmxezCrD5Vw4npvr+pAU= -google.golang.org/api v0.185.0/go.mod h1:HNfvIkJGlgrIlrbYkAm9W9IdkmKZjOTVh33YltygGbg= +google.golang.org/api v0.190.0 h1:ASM+IhLY1zljNdLu19W1jTmU6A+gMk6M46Wlur61s+Q= +google.golang.org/api v0.190.0/go.mod h1:QIr6I9iedBLnfqoD6L6Vze1UvS5Hzj5r2aUBOaZnLHo= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1625,10 +1631,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3 h1:QW9+G6Fir4VcRXVH8x3LilNAb6cxBGLa6+GM4hRwexE= -google.golang.org/genproto/googleapis/api v0.0.0-20240610135401-a8a62080eff3/go.mod h1:kdrSS/OiLkPrNUpzD4aHgCq2rVuC/YRxok32HXZ4vRE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4 h1:Di6ANFilr+S60a4S61ZM00vLdw0IrQOSMS2/6mrnOU0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240617180043-68d350f18fd4/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f h1:b1Ln/PG8orm0SsBbHZWke8dDp2lrCD4jSmfglFpTZbk= +google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf h1:liao9UHurZLtiEwBgT9LMOnKYsHze6eA6w1KQCMVN2Q= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1651,8 +1657,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= -google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1696,8 +1702,8 @@ gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/ns1/ns1-go.v2 v2.11.0 h1:T+rMHhQsQ58bSgGZwX8INxU0sjDO7cWieX9xPr/UEY4= -gopkg.in/ns1/ns1-go.v2 v2.11.0/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc= +gopkg.in/ns1/ns1-go.v2 v2.12.0 h1:cqdqQoTx17JmTusfxh5m3e2b36jfUzFAZedv89pFX18= +gopkg.in/ns1/ns1-go.v2 v2.12.0/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc= gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1729,23 +1735,23 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -istio.io/api v1.22.1 h1:dzjmBYq6PEWAF7Kn7Dy5mI+RbJd49I41DEZLjYKfdZM= -istio.io/api v1.22.1/go.mod h1:S3l8LWqNYS9yT+d4bH+jqzH2lMencPkW7SKM1Cu9EyM= -istio.io/client-go v1.22.1 h1:78BUMxytD0muwpwHdcA9qTOTJXN0jib0mXmNLdXxj0c= -istio.io/client-go v1.22.1/go.mod h1:Z2QE9uMt6tDVyrmiLfLVhutbqtfUkPJ7A5Uw/p6gNFo= +istio.io/api v1.22.3 h1:V59wgcCm2fK2r137QBsddCDHNg0efg/DauIWEB9DFz8= +istio.io/api v1.22.3/go.mod h1:S3l8LWqNYS9yT+d4bH+jqzH2lMencPkW7SKM1Cu9EyM= +istio.io/client-go v1.22.3 h1:4WocGQYVTASpfn7tj1yGE8f0sgxzbxOkg56HX1LJQ5U= +istio.io/client-go v1.22.3/go.mod h1:D/vNne1n5586423NgGXMnPgshE/99mQgnjnxK/Vw2yM= k8s.io/api v0.18.0/go.mod h1:q2HRQkfDzHMBZL9l/y9rH63PkQl4vae0xRT+8prbrK8= k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4= -k8s.io/api v0.30.2 h1:+ZhRj+28QT4UOH+BKznu4CBgPWgkXO7XAvMcMl0qKvI= -k8s.io/api v0.30.2/go.mod h1:ULg5g9JvOev2dG0u2hig4Z7tQ2hHIuS+m8MNZ+X6EmI= +k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= +k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= k8s.io/apiextensions-apiserver v0.18.0/go.mod h1:18Cwn1Xws4xnWQNC00FLq1E350b9lUF+aOdIWDOZxgo= k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio= k8s.io/apimachinery v0.18.0/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.30.2 h1:fEMcnBj6qkzzPGSVsAZtQThU62SmQ4ZymlXRC5yFSCg= -k8s.io/apimachinery v0.30.2/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= +k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= k8s.io/apiserver v0.18.0/go.mod h1:3S2O6FeBBd6XTo0njUrLxiqk8GNy6wWOftjhJcXYnjw= k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8= @@ -1754,8 +1760,8 @@ k8s.io/cli-runtime v0.18.4/go.mod h1:9/hS/Cuf7NVzWR5F/5tyS6xsnclxoPLVtwhnkJG1Y4g k8s.io/client-go v0.18.0/go.mod h1:uQSYDYs4WhVZ9i6AIoEZuwUggLVEF64HOD37boKAtF8= k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g= -k8s.io/client-go v0.30.2 h1:sBIVJdojUNPDU/jObC+18tXWcTJVcwyqS9diGdWHk50= -k8s.io/client-go v0.30.2/go.mod h1:JglKSWULm9xlJLx4KCkfLLQ7XwtlbflV6uFFSHTMgVs= +k8s.io/client-go v0.30.3 h1:bHrJu3xQZNXIi8/MoxYtZBBWQQXwy16zqJwloXXfD3k= +k8s.io/client-go v0.30.3/go.mod h1:8d4pf8vYu665/kUbsxWAQ/JDBNWqfFeZnvFiVdmx89U= k8s.io/code-generator v0.18.0/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= @@ -1769,12 +1775,12 @@ k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUc k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.130.0 h1:5nB3+3HpqKqXJIXNtJdtxcDCfaa9KL8StJgMzGJkUkM= -k8s.io/klog/v2 v2.130.0/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= -k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108 h1:Q8Z7VlGhcJgBHJHYugJ/K/7iB8a2eSxCyxdVjJp+lLY= -k8s.io/kube-openapi v0.0.0-20240423202451-8948a665c108/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f h1:0LQagt0gDpKqvIkAMPaRGcXawNMouPECM1+F9BVxEaM= +k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f/go.mod h1:S9tOR0FxgyusSNR+MboCuiDpVWkAifZvaYI1Q2ubgro= k8s.io/kubectl v0.18.0/go.mod h1:LOkWx9Z5DXMEg5KtOjHhRiC1fqJPLyCr3KtQgEolCkU= k8s.io/kubectl v0.18.4/go.mod h1:EzB+nfeUWk6fm6giXQ8P4Fayw3dsN+M7Wjy23mTRtB0= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= @@ -1782,8 +1788,8 @@ k8s.io/metrics v0.18.0/go.mod h1:8aYTW18koXqjLVKL7Ds05RPMX9ipJZI3mywYvBOxXd4= k8s.io/metrics v0.18.4/go.mod h1:luze4fyI9JG4eLDZy0kFdYEebqNfi0QrG4xNEbPkHOs= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20240423183400-0849a56e8f22 h1:ao5hUqGhsqdm+bYbjH/pRkCs0unBGe9UyDahzs9zQzQ= -k8s.io/utils v0.0.0-20240423183400-0849a56e8f22/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak= +k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= moul.io/http2curl v1.0.0 h1:6XwpyZOYsgZJrU8exnG87ncVkU1FVCcTRpwzOkTDUi8= moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From 015497e90413c4ed0e52e36d73a6a70eec492f33 Mon Sep 17 00:00:00 2001 From: Raffaele Di Fazio Date: Mon, 5 Aug 2024 21:35:07 +0200 Subject: [PATCH 21/78] fix code build Signed-off-by: Raffaele Di Fazio --- provider/plural/client.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/provider/plural/client.go b/provider/plural/client.go index 0db3659b5..b17b9594f 100644 --- a/provider/plural/client.go +++ b/provider/plural/client.go @@ -23,6 +23,7 @@ import ( "net/url" "strings" + "github.com/Yamashou/gqlgenc/clientv2" "github.com/pluralsh/gqlclient" "github.com/pluralsh/gqlclient/pkg/utils" ) @@ -76,7 +77,7 @@ func NewClient(conf *Config) (Client, error) { endpoint := base + "/gql" return &client{ ctx: context.Background(), - pluralClient: gqlclient.NewClient(&httpClient, endpoint), + pluralClient: gqlclient.NewClient(&httpClient, endpoint, &clientv2.Options{}), config: conf, }, nil } From b5e6817ba4533437162cd623ce0a83bb53458e22 Mon Sep 17 00:00:00 2001 From: Raffaele Di Fazio Date: Mon, 5 Aug 2024 21:53:37 +0200 Subject: [PATCH 22/78] project id with context Signed-off-by: Raffaele Di Fazio --- provider/google/google.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provider/google/google.go b/provider/google/google.go index 115de68aa..c3c9270f0 100644 --- a/provider/google/google.go +++ b/provider/google/google.go @@ -144,7 +144,7 @@ func NewGoogleProvider(ctx context.Context, project string, domainFilter endpoin } if project == "" { - mProject, mErr := metadata.ProjectID() + mProject, mErr := metadata.ProjectIDWithContext(ctx) if mErr != nil { return nil, fmt.Errorf("failed to auto-detect the project id: %w", mErr) } From 2007a49f1f3e75015803fa30f5297b96f9d35bc5 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Fri, 10 Feb 2023 21:52:25 +0100 Subject: [PATCH 23/78] Improve MinEventInterval compliance with docs **Description** In the command line arguments, we see `min-event-sync-interval` as "The minimum interval between two consecutive synchronizations triggered from kubernetes events" In the code, it actually acts a different way. It imposes a certain dealy between syncs. While this is compliant with the "minimum delay between 2 consecutive synchronizations", it has side-effects in case of large delays. In particular, when trying to fine-tune external-dns to match the provider rate-limits. In this case, it may be interesting to restrict the rate of reconciling actions happening by having a high `min-event-sync-interval`, while keeping a low latency for initial events. This would allow to maximise the bulk effect of high change rate while keeping fast enough reaction for isolated changes. **Checklist** - [X] Unit tests updated - [X] End user documentation updated > End user documentation matches the updated behaviour with more > accuracy Change-Id: Ibcea707974a095a2d5861a3974b4c79e5a15b00e --- controller/controller.go | 48 +++++++++++++++++++++++++++-------- controller/controller_test.go | 9 ++++++- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/controller/controller.go b/controller/controller.go index a3ef2e8b2..c8bb6ff18 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -189,8 +189,10 @@ type Controller struct { DomainFilter endpoint.DomainFilter // The nextRunAt used for throttling and batching reconciliation nextRunAt time.Time - // The nextRunAtMux is for atomic updating of nextRunAt - nextRunAtMux sync.Mutex + // The runAtMutex is for atomic updating of nextRunAt and lastRunAt + runAtMutex sync.Mutex + // The lastRunAt used for throttling and batching reconciliation + lastRunAt time.Time // MangedRecordTypes are DNS record types that will be considered for management. ManagedRecordTypes []string // ExcludeRecordTypes are DNS record types that will be excluded from management. @@ -203,6 +205,10 @@ type Controller struct { func (c *Controller) RunOnce(ctx context.Context) error { lastReconcileTimestamp.SetToCurrentTime() + c.runAtMutex.Lock() + c.lastRunAt = time.Now() + c.runAtMutex.Unlock() + records, err := c.Registry.Records(ctx) if err != nil { registryErrorsTotal.Inc() @@ -264,6 +270,24 @@ func (c *Controller) RunOnce(ctx context.Context) error { return nil } +func earliest(r time.Time, times ...time.Time) time.Time { + for _, t := range times { + if t.Before(r) { + r = t + } + } + return r +} + +func latest(r time.Time, times ...time.Time) time.Time { + for _, t := range times { + if t.After(r) { + r = t + } + } + return r +} + // Counts the intersections of A and AAAA records in endpoint and registry. func countMatchingAddressRecords(endpoints []*endpoint.Endpoint, registryRecords []*endpoint.Endpoint) (int, int) { recordsMap := make(map[string]map[string]struct{}) @@ -306,18 +330,20 @@ func countAddressRecords(endpoints []*endpoint.Endpoint) (int, int) { // ScheduleRunOnce makes sure execution happens at most once per interval. func (c *Controller) ScheduleRunOnce(now time.Time) { - c.nextRunAtMux.Lock() - defer c.nextRunAtMux.Unlock() - // schedule only if a reconciliation is not already planned - // to happen in the following c.MinEventSyncInterval - if !c.nextRunAt.Before(now.Add(c.MinEventSyncInterval)) { - c.nextRunAt = now.Add(c.MinEventSyncInterval) - } + c.runAtMutex.Lock() + defer c.runAtMutex.Unlock() + c.nextRunAt = latest( + c.lastRunAt.Add(c.MinEventSyncInterval), + earliest( + now.Add(5*time.Second), + c.nextRunAt, + ), + ) } func (c *Controller) ShouldRunOnce(now time.Time) bool { - c.nextRunAtMux.Lock() - defer c.nextRunAtMux.Unlock() + c.runAtMutex.Lock() + defer c.runAtMutex.Unlock() if now.Before(c.nextRunAt) { return false } diff --git a/controller/controller_test.go b/controller/controller_test.go index 7fa83f501..e95aa9802 100644 --- a/controller/controller_test.go +++ b/controller/controller_test.go @@ -278,15 +278,17 @@ func valueFromMetric(metric prometheus.Gauge) uint64 { } func TestShouldRunOnce(t *testing.T) { - ctrl := &Controller{Interval: 10 * time.Minute, MinEventSyncInterval: 5 * time.Second} + ctrl := &Controller{Interval: 10 * time.Minute, MinEventSyncInterval: 15 * time.Second} now := time.Now() // First run of Run loop should execute RunOnce assert.True(t, ctrl.ShouldRunOnce(now)) + assert.Equal(t, now.Add(10*time.Minute), ctrl.nextRunAt) // Second run should not assert.False(t, ctrl.ShouldRunOnce(now)) + ctrl.lastRunAt = now now = now.Add(10 * time.Second) // Changes happen in ingresses or services @@ -316,12 +318,17 @@ func TestShouldRunOnce(t *testing.T) { assert.False(t, ctrl.ShouldRunOnce(now)) // Multiple ingresses or services changes, closer than MinInterval from each other + ctrl.lastRunAt = now firstChangeTime := now secondChangeTime := firstChangeTime.Add(time.Second) // First change ctrl.ScheduleRunOnce(firstChangeTime) // Second change ctrl.ScheduleRunOnce(secondChangeTime) + + // Executions should be spaced by at least MinEventSyncInterval + assert.False(t, ctrl.ShouldRunOnce(now.Add(5*time.Second))) + // Should not postpone the reconciliation further than firstChangeTime + MinInterval now = now.Add(ctrl.MinEventSyncInterval) assert.True(t, ctrl.ShouldRunOnce(now)) From 1b5ed44e4841ae591fe1dd174916217d07c93058 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 13 Feb 2023 17:59:25 +0100 Subject: [PATCH 24/78] Improve documentation --- docs/tutorials/aws.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index d4ac65741..6bc55dd0f 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -971,8 +971,9 @@ Route53 has a [5 API requests per second per account hard quota](https://docs.aw Running several fast polling ExternalDNS instances in a given account can easily hit that limit. Some ways to reduce the request rate include: * Reduce the polling loop's synchronization interval at the possible cost of slower change propagation (but see `--events` below to reduce the impact). * `--interval=5m` (default `1m`) -* Trigger the polling loop on changes to K8s objects, rather than only at `interval`, to have responsive updates with long poll intervals +* Trigger the polling loop on changes to K8s objects, rather than only at `interval` and ensure a minimum of time between events, to have responsive updates with long poll intervals * `--events` + * `--min-event-sync-interval=5m` (default `5s`) * Limit the [sources watched](https://github.com/kubernetes-sigs/external-dns/blob/master/pkg/apis/externaldns/types.go#L364) when the `--events` flag is specified to specific types, namespaces, labels, or annotations * `--source=ingress --source=service` - specify multiple times for multiple sources * `--namespace=my-app` From 53f4465823a3957d724786ad13ce837b52c524fb Mon Sep 17 00:00:00 2001 From: Massimiliano Donini Date: Wed, 7 Aug 2024 06:53:56 +0200 Subject: [PATCH 25/78] Nit: Fix hyperlink PR #4365 changed the anchor in the readme, this change fixes few outdated links --- README.md | 2 +- docs/faq.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 055e1635a..0be50462d 100644 --- a/README.md +++ b/README.md @@ -304,7 +304,7 @@ show us what you can do! The external-dns project is currently in need of maintainers for specific DNS providers. Ideally each provider would have at least two maintainers. It would be nice if the maintainers run the provider in production, but it -is not strictly required. Provider listed [here](https://github.com/kubernetes-sigs/external-dns#status-of-providers) +is not strictly required. Provider listed [here](https://github.com/kubernetes-sigs/external-dns#status-of-in-tree-providers) that do not have a maintainer listed are in need of assistance. Read the [contributing guidelines](CONTRIBUTING.md) and have a look at [the contributing docs](docs/contributing/getting-started.md) to learn about building the project, the project structure, and the purpose of each package. diff --git a/docs/faq.md b/docs/faq.md index 2e51d4cc6..4f1fa26bc 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -28,7 +28,7 @@ ExternalDNS can solve this for you as well. ### Which DNS providers are supported? -Please check the [provider status table](https://github.com/kubernetes-sigs/external-dns#status-of-providers) for the list of supported providers and their status. +Please check the [provider status table](https://github.com/kubernetes-sigs/external-dns#status-of-in-tree-providers) for the list of supported providers and their status. As stated in the README, we are currently looking for stable maintainers for those providers, to ensure that bugfixes and new features will be available for all of those. From f7e8ca19b33607c46abbf82ff23ddc5e40e8d527 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 7 Aug 2024 08:05:06 +0300 Subject: [PATCH 26/78] azure-private-dns: Fix LoadBalancer example annotations should be inside the metadata object. --- docs/tutorials/azure-private-dns.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/tutorials/azure-private-dns.md b/docs/tutorials/azure-private-dns.md index dc588ee0a..bd1505611 100644 --- a/docs/tutorials/azure-private-dns.md +++ b/docs/tutorials/azure-private-dns.md @@ -330,12 +330,12 @@ Apply the following manifest to create a service of type `LoadBalancer`. This wi --- apiVersion: v1 kind: Service -annotations: - service.beta.kubernetes.io/azure-load-balancer-internal: "true" - external-dns.alpha.kubernetes.io/hostname: server.example.com - external-dns.alpha.kubernetes.io/internal-hostname: server-clusterip.example.com metadata: name: nginx-svc + annotations: + service.beta.kubernetes.io/azure-load-balancer-internal: "true" + external-dns.alpha.kubernetes.io/hostname: server.example.com + external-dns.alpha.kubernetes.io/internal-hostname: server-clusterip.example.com spec: ports: - port: 80 From bdbcae5a11864039ec05699d7d06754be258a6ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 03:40:12 +0000 Subject: [PATCH 27/78] chore(deps): bump the dev-dependencies group across 1 directory with 10 updates Bumps the dev-dependencies group with 10 updates in the / directory: | Package | From | To | | --- | --- | --- | | [github.com/Azure/azure-sdk-for-go/sdk/azcore](https://github.com/Azure/azure-sdk-for-go) | `1.13.0` | `1.14.0` | | [github.com/aliyun/alibaba-cloud-sdk-go](https://github.com/aliyun/alibaba-cloud-sdk-go) | `1.62.804` | `1.62.807` | | [github.com/ans-group/sdk-go](https://github.com/ans-group/sdk-go) | `1.19.0` | `1.20.0` | | [github.com/digitalocean/godo](https://github.com/digitalocean/godo) | `1.119.0` | `1.120.0` | | [github.com/oracle/oci-go-sdk/v65](https://github.com/oracle/oci-go-sdk) | `65.70.0` | `65.71.0` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.976` | `1.0.980` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.976` | `1.0.980` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.976` | `1.0.980` | | [golang.org/x/net](https://github.com/golang/net) | `0.27.0` | `0.28.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.190.0` | `0.191.0` | Updates `github.com/Azure/azure-sdk-for-go/sdk/azcore` from 1.13.0 to 1.14.0 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.13.0...sdk/azcore/v1.14.0) Updates `github.com/aliyun/alibaba-cloud-sdk-go` from 1.62.804 to 1.62.807 - [Release notes](https://github.com/aliyun/alibaba-cloud-sdk-go/releases) - [Changelog](https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/ChangeLog.txt) - [Commits](https://github.com/aliyun/alibaba-cloud-sdk-go/compare/v1.62.804...v1.62.807) Updates `github.com/ans-group/sdk-go` from 1.19.0 to 1.20.0 - [Release notes](https://github.com/ans-group/sdk-go/releases) - [Commits](https://github.com/ans-group/sdk-go/compare/v1.19.0...v1.20.0) Updates `github.com/digitalocean/godo` from 1.119.0 to 1.120.0 - [Release notes](https://github.com/digitalocean/godo/releases) - [Changelog](https://github.com/digitalocean/godo/blob/main/CHANGELOG.md) - [Commits](https://github.com/digitalocean/godo/compare/v1.119.0...v1.120.0) Updates `github.com/oracle/oci-go-sdk/v65` from 65.70.0 to 65.71.0 - [Release notes](https://github.com/oracle/oci-go-sdk/releases) - [Changelog](https://github.com/oracle/oci-go-sdk/blob/master/CHANGELOG.md) - [Commits](https://github.com/oracle/oci-go-sdk/compare/v65.70.0...v65.71.0) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common` from 1.0.976 to 1.0.980 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.976...v1.0.980) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod` from 1.0.976 to 1.0.980 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.976...v1.0.980) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns` from 1.0.976 to 1.0.980 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.976...v1.0.980) Updates `golang.org/x/net` from 0.27.0 to 0.28.0 - [Commits](https://github.com/golang/net/compare/v0.27.0...v0.28.0) Updates `google.golang.org/api` from 0.190.0 to 0.191.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.190.0...v0.191.0) --- updated-dependencies: - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/azcore dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/aliyun/alibaba-cloud-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/ans-group/sdk-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/digitalocean/godo dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/oracle/oci-go-sdk/v65 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: golang.org/x/net dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- go.mod | 30 +++++++++++++++--------------- go.sum | 56 ++++++++++++++++++++++++++++---------------------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/go.mod b/go.mod index 4bb661246..402b9a0f6 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.22.4 require ( cloud.google.com/go/compute/metadata v0.5.0 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.2.0 @@ -12,10 +12,11 @@ require ( github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.5.0 github.com/IBM/go-sdk-core/v5 v5.17.4 github.com/IBM/networking-go-sdk v0.49.0 + github.com/Yamashou/gqlgenc v0.23.2 github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 github.com/alecthomas/kingpin/v2 v2.4.0 - github.com/aliyun/alibaba-cloud-sdk-go v1.62.804 - github.com/ans-group/sdk-go v1.19.0 + github.com/aliyun/alibaba-cloud-sdk-go v1.62.807 + github.com/ans-group/sdk-go v1.20.0 github.com/aws/aws-sdk-go v1.55.5 github.com/bodgit/tsig v1.2.2 github.com/cenkalti/backoff/v4 v4.3.0 @@ -24,7 +25,7 @@ require ( github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381 github.com/datawire/ambassador v1.12.4 github.com/denverdino/aliyungo v0.0.0-20230411124812-ab98a9173ace - github.com/digitalocean/godo v1.119.0 + github.com/digitalocean/godo v1.120.0 github.com/dnsimple/dnsimple-go v1.7.0 github.com/exoscale/egoscale v0.102.3 github.com/ffledgling/pdns-go v0.0.0-20180219074714-524e7daccd99 @@ -43,7 +44,7 @@ require ( github.com/onsi/ginkgo v1.16.5 github.com/openshift/api v0.0.0-20230607130528-611114dca681 github.com/openshift/client-go v0.0.0-20230607134213-3cd0021bbee3 - github.com/oracle/oci-go-sdk/v65 v65.70.0 + github.com/oracle/oci-go-sdk/v65 v65.71.0 github.com/ovh/go-ovh v1.6.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 @@ -53,9 +54,9 @@ require ( github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.976 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.976 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.976 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.980 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.980 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.980 github.com/transip/gotransip/v6 v6.25.0 github.com/ultradns/ultradns-sdk-go v1.3.7 github.com/vinyldns/go-vinyldns v0.9.16 @@ -63,11 +64,11 @@ require ( go.etcd.io/etcd/api/v3 v3.5.15 go.etcd.io/etcd/client/v3 v3.5.15 go.uber.org/ratelimit v0.3.1 - golang.org/x/net v0.27.0 + golang.org/x/net v0.28.0 golang.org/x/oauth2 v0.22.0 golang.org/x/sync v0.8.0 golang.org/x/time v0.6.0 - google.golang.org/api v0.190.0 + google.golang.org/api v0.191.0 gopkg.in/ns1/ns1-go.v2 v2.12.0 gopkg.in/yaml.v2 v2.4.0 istio.io/api v1.22.3 @@ -87,7 +88,6 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/Masterminds/semver v1.4.2 // indirect - github.com/Yamashou/gqlgenc v0.23.2 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 // indirect github.com/ans-group/go-durationstring v1.2.0 // indirect @@ -197,12 +197,12 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect - golang.org/x/crypto v0.25.0 // indirect + golang.org/x/crypto v0.26.0 // indirect golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/mod v0.18.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/term v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sys v0.23.0 // indirect + golang.org/x/term v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect diff --git a/go.sum b/go.sum index d4dc2635b..78ec676bf 100644 --- a/go.sum +++ b/go.sum @@ -50,8 +50,8 @@ github.com/99designs/gqlgen v0.17.44 h1:OS2wLk/67Y+vXM75XHbwRnNYJcbuJd4OBL76RX3N github.com/99designs/gqlgen v0.17.44/go.mod h1:UTCu3xpK2mLI5qcMNw+HKDiEL77it/1XtAjisC4sLwM= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible h1:KnPIugL51v3N3WwvaSmZbxukD1WuWXOiE9fRdu32f2I= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0 h1:GJHeeA2N7xrG3q30L2UXDyuWRzDM900/65j70wcM4Ww= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.13.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 h1:nyQWyZvwGTvunIMxi1Y9uXkcyr+I7TeNrr/foo4Kpk8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= @@ -128,15 +128,15 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAu github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 h1:P5U+E4x5OkVEKQDklVPmzs71WM56RTTRqV4OrDC//Y4= github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5/go.mod h1:976q2ETgjT2snVCf2ZaBnyBbVoPERGjUz+0sofzEfro= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.804 h1:1oYNaD9kNxltffxn+W11ItkuqdZkgETo2qUrbz5opV0= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.804/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.807 h1:xFbDIciAT09Iv5gw8r5cSmMazenyo1eQSwtteTRO70s= +github.com/aliyun/alibaba-cloud-sdk-go v1.62.807/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v0.0.0-20190621154722-5f990b63d2d6/go.mod h1:+lx6/Aqd1kLJ1GQfkvOnaZ1WGmLpMpbprPuIOOZX30U= github.com/ans-group/go-durationstring v1.2.0 h1:UJIuQATkp0t1rBvZsHRwki33YHV9E+Ulro+3NbMB7MM= github.com/ans-group/go-durationstring v1.2.0/go.mod h1:QGF9Mdpq9058QXaut8r55QWu6lcHX6i/GvF1PZVkV6o= -github.com/ans-group/sdk-go v1.19.0 h1:MnoNZDN86ilbLQk7x6iXKEXcA6HY/izC9mv/EL232M4= -github.com/ans-group/sdk-go v1.19.0/go.mod h1:w4tX8raa9y3j7pug6TLcF8ZW1j9G05AmNoQLBloYxEY= +github.com/ans-group/sdk-go v1.20.0 h1:2bgVIO29WJR35VuDrVMbEL8msxc5z34/J5BlQT4wb/0= +github.com/ans-group/sdk-go v1.20.0/go.mod h1:w4tX8raa9y3j7pug6TLcF8ZW1j9G05AmNoQLBloYxEY= github.com/aokoli/goutils v1.1.0/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -257,8 +257,8 @@ github.com/denverdino/aliyungo v0.0.0-20230411124812-ab98a9173ace/go.mod h1:TK05 github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/digitalocean/godo v1.119.0 h1:dmFNQwSIAcH3z+FVovHLkazKDC2uA8oOlGvg5+H4vRw= -github.com/digitalocean/godo v1.119.0/go.mod h1:WQVH83OHUy6gC4gXpEVQKtxTd4L5oCp+5OialidkPLY= +github.com/digitalocean/godo v1.120.0 h1:t2DpzIitSnCDNQM7svSW4+cZd8E4Lv6+r8y33Kym0Xw= +github.com/digitalocean/godo v1.120.0/go.mod h1:WQVH83OHUy6gC4gXpEVQKtxTd4L5oCp+5OialidkPLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= @@ -903,8 +903,8 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/oracle/oci-go-sdk/v65 v65.70.0 h1:gLa0IX/SidTm60VbHabnImrW3hyymmNLQJy6gZGrgDA= -github.com/oracle/oci-go-sdk/v65 v65.70.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= +github.com/oracle/oci-go-sdk/v65 v65.71.0 h1:eEnFD/CzcoqdAA0xu+EmK32kJL3jfV0oLYNWVzoKNyo= +github.com/oracle/oci-go-sdk/v65 v65.71.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI= github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2 h1:CXwSGu/LYmbjEab5aMCs5usQRVBGThelUKBNnoSOuso= @@ -1092,12 +1092,12 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.976 h1:k49CShY+0s4vMip96eimmno/qm0RO5VzKDjwXDcyWsc= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.976/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.976 h1:xIQQ5kqUMPMPOo2GIowJpDKL9pAJrMEJf9EulEx92DY= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.976/go.mod h1:VMhts8f17GeAL5F84jxJuiXVTzfd7tz6TZfUBxgcRlA= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.976 h1:Uji7jn0Ph9BuQfi88uAsJyxBjhYTxJ2eBlZknP6QfHI= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.976/go.mod h1:as8/uZUeVzMn24bT5gPM2t6JYXvvFvxVUglbpFc13Gs= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.980 h1:84FADy21OCSkhaf4UGsWWQ77hkClh3/zJgOrezr9YAk= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.980/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.980 h1:7aP322dY98cqJ0JpGaYo9/112gO9dJt0GOfNC/HAGRQ= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.980/go.mod h1:lKNx9Oh2IjAs1KdvCSRS83RyA+Ry+H1bZfGAKQTzcBI= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.980 h1:gz4UxLZFYtZ1uNChCFCZei5hlF/lpqc+lMEFWHXndaE= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.980/go.mod h1:9WimwpntFCCokBaaqjtwpjGUrCfmlR6bHfyBMspYR1Y= github.com/terra-farm/udnssdk v1.3.5 h1:MNR3adfuuEK/l04+jzo8WW/0fnorY+nW515qb3vEr6I= github.com/terra-farm/udnssdk v1.3.5/go.mod h1:8RnM56yZTR7mYyUIvrDgXzdRaEyFIzqdEi7+um26Sv8= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -1231,8 +1231,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1336,8 +1336,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1445,8 +1445,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1454,8 +1454,8 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1469,8 +1469,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1583,8 +1583,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.190.0 h1:ASM+IhLY1zljNdLu19W1jTmU6A+gMk6M46Wlur61s+Q= -google.golang.org/api v0.190.0/go.mod h1:QIr6I9iedBLnfqoD6L6Vze1UvS5Hzj5r2aUBOaZnLHo= +google.golang.org/api v0.191.0 h1:cJcF09Z+4HAB2t5qTQM1ZtfL/PemsLFkcFG67qq2afk= +google.golang.org/api v0.191.0/go.mod h1:tD5dsFGxFza0hnQveGfVk9QQYKcfp+VzgRqyXFxE0+E= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= From 92ced0920a1126aaae923553b3574b70bb8efdb0 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Mon, 12 Aug 2024 09:11:23 +0100 Subject: [PATCH 28/78] chore(github-actions): added scorecard github action Signed-off-by: ivan katliarchuk --- .github/workflows/scorecards.yml | 69 ++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/scorecards.yml diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml new file mode 100644 index 000000000..60be0ecf7 --- /dev/null +++ b/.github/workflows/scorecards.yml @@ -0,0 +1,69 @@ +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '25 7 * * 0' + push: + branches: [ "main" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: "Checkout code" + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecard on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@97a0fba1372883ab732affbe8f94b823f91727db # v3.pre.node20 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard (optional). + # Commenting out will disable upload of results to your repo's Code Scanning dashboard + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: results.sarif From 828f68f09f619f2c40c3aa7f3a41608e9cf9434f Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Mon, 12 Aug 2024 09:14:56 +0100 Subject: [PATCH 29/78] chore(github-actions): added scorecard github action Signed-off-by: ivan katliarchuk --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 60be0ecf7..6dc19d2e0 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -8,7 +8,7 @@ on: schedule: - cron: '25 7 * * 0' push: - branches: [ "main" ] + branches: [ "main" , "issue-4673"] # Declare default permissions as read only. permissions: read-all From 4b0954ca6bbbd4ea27357f5e572e938e0c654ae4 Mon Sep 17 00:00:00 2001 From: ivan katliarchuk Date: Mon, 12 Aug 2024 09:25:59 +0100 Subject: [PATCH 30/78] chore(github-actions): test with workflow dispatch Signed-off-by: ivan katliarchuk --- .github/workflows/scorecards.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 6dc19d2e0..bd7890cad 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -9,6 +9,7 @@ on: - cron: '25 7 * * 0' push: branches: [ "main" , "issue-4673"] + workflow_dispatch: # Declare default permissions as read only. permissions: read-all From 089744c6ff136d80e1ddc07ac0a985b40fee9b5e Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 8 Jul 2024 09:19:12 +0200 Subject: [PATCH 31/78] Add cache at provider level **Description** In the current implementation, DNS providers are called to list all records on every loop. This is expensive in terms of number of requests to the provider and may result in being rate limited, as reported in 1293 and 3397. In our case, we have approximately 20,000 records in our AWS Hosted Zone. The ListResourceRecordSets API call allows a maximum of 300 items per call. That requires 67 API calls per external-dns deployment during every sync period With this, we introduce an optional generic caching mechanism at the provider level, that re-uses the latest known list of records for a given time. This prevents from expensive Provider calls to list all records for each object modification that does not change the actual record (annotations, statuses, ingress routing, ...) This introduces 2 trade-offs: 1. Any changes or corruption directly on the provider side will be longer to detect and to resolve, up to the cache time 2. Any conflicting records in the DNS provider (such as a different external-dns instance) injected during the cache validity will cause the first iteration of the next reconcile loop to fail, and hence add a delay until the next retry **Checklist** - [X] Unit tests updated - [X] End user documentation updated Change-Id: I0bdcfa994ac1b76acedb05d458a97c080284c5aa --- docs/tutorials/aws.md | 2 + main.go | 7 ++ pkg/apis/externaldns/types.go | 3 + provider/cached_provider.go | 73 ++++++++++++++ provider/cached_provider_test.go | 164 +++++++++++++++++++++++++++++++ 5 files changed, 249 insertions(+) create mode 100644 provider/cached_provider.go create mode 100644 provider/cached_provider_test.go diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 214fa4ca9..532dd45e3 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -912,6 +912,8 @@ Route53 has a [5 API requests per second per account hard quota](https://docs.aw Running several fast polling ExternalDNS instances in a given account can easily hit that limit. Some ways to reduce the request rate include: * Reduce the polling loop's synchronization interval at the possible cost of slower change propagation (but see `--events` below to reduce the impact). * `--interval=5m` (default `1m`) +* Cache the results of the zone at the possible cost of slower propagation when the zone gets modified from other sources + * `--provider-cache-time=15m` (default `0m`) * Trigger the polling loop on changes to K8s objects, rather than only at `interval` and ensure a minimum of time between events, to have responsive updates with long poll intervals * `--events` * `--min-event-sync-interval=5m` (default `5s`) diff --git a/main.go b/main.go index f05c46906..05765845f 100644 --- a/main.go +++ b/main.go @@ -401,6 +401,13 @@ func main() { os.Exit(0) } + if cfg.ProviderCacheTime > 0 { + p = &provider.CachedProvider{ + Provider: p, + RefreshDelay: cfg.ProviderCacheTime, + } + } + var r registry.Registry switch cfg.Registry { case "dynamodb": diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index 822993d09..05ba1f2e1 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -67,6 +67,7 @@ type Config struct { AlwaysPublishNotReadyAddresses bool ConnectorSourceServer string Provider string + ProviderCacheTime int GoogleProject string GoogleBatchChangeSize int GoogleBatchChangeInterval time.Duration @@ -239,6 +240,7 @@ var defaultConfig = &Config{ PublishHostIP: false, ConnectorSourceServer: "localhost:8080", Provider: "", + ProviderCacheTime: 0, GoogleProject: "", GoogleBatchChangeSize: 1000, GoogleBatchChangeInterval: time.Second, @@ -456,6 +458,7 @@ func (cfg *Config) ParseFlags(args []string) error { // Flags related to providers providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "bluecat", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "dyn", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rcodezero", "rdns", "rfc2136", "safedns", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "vinyldns", "vultr", "webhook"} app.Flag("provider", "The DNS provider where the DNS records will be created (required, options: "+strings.Join(providers, ", ")+")").Required().PlaceHolder("provider").EnumVar(&cfg.Provider, providers...) + app.Flag("provider-cache-time", "The time to cache the DNS provider record list requests.").Default(defaultConfig.ProviderCacheTime.String()).DurationVar(&cfg.ProviderCacheTime) app.Flag("domain-filter", "Limit possible target zones by a domain suffix; specify multiple times for multiple domains (optional)").Default("").StringsVar(&cfg.DomainFilter) app.Flag("exclude-domains", "Exclude subdomains (optional)").Default("").StringsVar(&cfg.ExcludeDomains) app.Flag("regex-domain-filter", "Limit possible domains and target zones by a Regex filter; Overrides domain-filter (optional)").Default(defaultConfig.RegexDomainFilter.String()).RegexpVar(&cfg.RegexDomainFilter) diff --git a/provider/cached_provider.go b/provider/cached_provider.go new file mode 100644 index 000000000..e4b365266 --- /dev/null +++ b/provider/cached_provider.go @@ -0,0 +1,73 @@ +package provider + +import ( + "context" + "time" + + "github.com/prometheus/client_golang/prometheus" + "sigs.k8s.io/external-dns/endpoint" + "sigs.k8s.io/external-dns/plan" +) + +var ( + cachedRecordsCallsTotal = prometheus.NewCounterVec( + prometheus.CounterOpts{ + Namespace: "external_dns", + Subsystem: "provider", + Name: "cache_records_calls", + Help: "Number of calls to the provider cache Records list.", + }, + []string{ + "from_cache", + }, + ) + cachedApplyChangesCallsTotal = prometheus.NewCounter( + prometheus.CounterOpts{ + Namespace: "external_dns", + Subsystem: "provider", + Name: "cache_apply_changes_calls", + Help: "Number of calls to the provider cache ApplyChanges.", + }, + ) +) + +type CachedProvider struct { + Provider + RefreshDelay time.Duration + err error + lastRead time.Time + cache []*endpoint.Endpoint +} + +func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { + if c.needRefresh() { + c.cache, c.err = c.Provider.Records(ctx) + c.lastRead = time.Now() + cachedRecordsCallsTotal.WithLabelValues("false").Inc() + } else { + cachedRecordsCallsTotal.WithLabelValues("true").Inc() + } + return c.cache, c.err +} +func (c *CachedProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { + c.Reset() + cachedApplyChangesCallsTotal.Inc() + return c.Provider.ApplyChanges(ctx, changes) +} + +func (c *CachedProvider) Reset() { + c.err = nil + c.cache = nil + c.lastRead = time.Time{} +} + +func (c *CachedProvider) needRefresh() bool { + if c.cache == nil || c.err != nil { + return true + } + return time.Now().After(c.lastRead.Add(c.RefreshDelay)) +} + +func init() { + prometheus.MustRegister(cachedRecordsCallsTotal) +} diff --git a/provider/cached_provider_test.go b/provider/cached_provider_test.go new file mode 100644 index 000000000..653e8f8b5 --- /dev/null +++ b/provider/cached_provider_test.go @@ -0,0 +1,164 @@ +package provider + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "sigs.k8s.io/external-dns/endpoint" + "sigs.k8s.io/external-dns/plan" +) + +type testProviderFunc struct { + records func(ctx context.Context) ([]*endpoint.Endpoint, error) + applyChanges func(ctx context.Context, changes *plan.Changes) error + propertyValuesEqual func(name string, previous string, current string) bool + adjustEndpoints func(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint + getDomainFilter func() endpoint.DomainFilterInterface +} + +func (p *testProviderFunc) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { + return p.records(ctx) +} + +func (p *testProviderFunc) ApplyChanges(ctx context.Context, changes *plan.Changes) error { + return p.applyChanges(ctx, changes) +} + +func (p *testProviderFunc) PropertyValuesEqual(name string, previous string, current string) bool { + return p.propertyValuesEqual(name, previous, current) +} + +func (p *testProviderFunc) AdjustEndpoints(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint { + return p.adjustEndpoints(endpoints) +} + +func (p *testProviderFunc) GetDomainFilter() endpoint.DomainFilterInterface { + return p.getDomainFilter() +} + +func recordsNotCalled(t *testing.T) func(ctx context.Context) ([]*endpoint.Endpoint, error) { + return func(ctx context.Context) ([]*endpoint.Endpoint, error) { + t.Errorf("unexpected call to Records") + return nil, nil + } +} + +func applyChangesNotCalled(t *testing.T) func(ctx context.Context, changes *plan.Changes) error { + return func(ctx context.Context, changes *plan.Changes) error { + t.Errorf("unexpected call to ApplyChanges") + return nil + } +} + +func propertyValuesEqualNotCalled(t *testing.T) func(name string, previous string, current string) bool { + return func(name string, previous string, current string) bool { + t.Errorf("unexpected call to PropertyValuesEqual") + return false + } +} + +func adjustEndpointsNotCalled(t *testing.T) func(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint { + return func(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint { + t.Errorf("unexpected call to AdjustEndpoints") + return endpoints + } +} + +func newTestProviderFunc(t *testing.T) *testProviderFunc { + return &testProviderFunc{ + records: recordsNotCalled(t), + applyChanges: applyChangesNotCalled(t), + propertyValuesEqual: propertyValuesEqualNotCalled(t), + adjustEndpoints: adjustEndpointsNotCalled(t), + } +} + +func TestCachedProviderCallsProviderOnFirstCall(t *testing.T) { + testProvider := newTestProviderFunc(t) + testProvider.records = func(ctx context.Context) ([]*endpoint.Endpoint, error) { + return []*endpoint.Endpoint{{DNSName: "domain.fqdn"}}, nil + } + provider := CachedProvider{ + Provider: testProvider, + } + endpoints, err := provider.Records(context.Background()) + assert.NoError(t, err) + require.NotNil(t, endpoints) + require.Len(t, endpoints, 1) + require.NotNil(t, endpoints[0]) + assert.Equal(t, "domain.fqdn", endpoints[0].DNSName) +} + +func TestCachedProviderUsesCacheWhileValid(t *testing.T) { + testProvider := newTestProviderFunc(t) + testProvider.records = func(ctx context.Context) ([]*endpoint.Endpoint, error) { + return []*endpoint.Endpoint{{DNSName: "domain.fqdn"}}, nil + } + provider := CachedProvider{ + RefreshDelay: 30 * time.Second, + Provider: testProvider, + } + _, err := provider.Records(context.Background()) + require.NoError(t, err) + + t.Run("With consecutive calls within the caching time frame", func(t *testing.T) { + testProvider.records = recordsNotCalled(t) + endpoints, err := provider.Records(context.Background()) + assert.NoError(t, err) + require.NotNil(t, endpoints) + require.Len(t, endpoints, 1) + require.NotNil(t, endpoints[0]) + assert.Equal(t, "domain.fqdn", endpoints[0].DNSName) + }) + + t.Run("When the caching time frame is exceeded", func(t *testing.T) { + testProvider.records = func(ctx context.Context) ([]*endpoint.Endpoint, error) { + return []*endpoint.Endpoint{{DNSName: "new.domain.fqdn"}}, nil + } + provider.lastRead = time.Now().Add(-20 * time.Minute) + endpoints, err := provider.Records(context.Background()) + assert.NoError(t, err) + require.NotNil(t, endpoints) + require.Len(t, endpoints, 1) + require.NotNil(t, endpoints[0]) + assert.Equal(t, "new.domain.fqdn", endpoints[0].DNSName) + }) +} + +func TestCachedProviderForcesCacheRefreshOnUpdate(t *testing.T) { + testProvider := newTestProviderFunc(t) + testProvider.records = func(ctx context.Context) ([]*endpoint.Endpoint, error) { + return []*endpoint.Endpoint{{DNSName: "domain.fqdn"}}, nil + } + provider := CachedProvider{ + RefreshDelay: 30 * time.Second, + Provider: testProvider, + } + _, err := provider.Records(context.Background()) + require.NoError(t, err) + + t.Run("When the caching time frame is exceeded", func(t *testing.T) { + testProvider.records = recordsNotCalled(t) + testProvider.applyChanges = func(ctx context.Context, changes *plan.Changes) error { + return nil + } + err := provider.ApplyChanges(context.Background(), &plan.Changes{}) + assert.NoError(t, err) + t.Run("Next call to Records is not cached", func(t *testing.T) { + testProvider.applyChanges = applyChangesNotCalled(t) + testProvider.records = func(ctx context.Context) ([]*endpoint.Endpoint, error) { + return []*endpoint.Endpoint{{DNSName: "new.domain.fqdn"}}, nil + } + endpoints, err := provider.Records(context.Background()) + + assert.NoError(t, err) + require.NotNil(t, endpoints) + require.Len(t, endpoints, 1) + require.NotNil(t, endpoints[0]) + assert.Equal(t, "new.domain.fqdn", endpoints[0].DNSName) + }) + }) +} From 29191e23622568d1f4a4350aec192bf0b0e2539e Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 13 Feb 2023 19:31:06 +0100 Subject: [PATCH 32/78] Skip apply empty changes in the cache provider Change-Id: Icaf1ffe34e75c320d4efbb428f831deb8784cd11 --- main.go | 2 +- provider/cached_provider.go | 11 +++++++++++ provider/cached_provider_test.go | 28 +++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 05765845f..955bca868 100644 --- a/main.go +++ b/main.go @@ -421,7 +421,7 @@ func main() { case "txt": r, err = registry.NewTXTRegistry(p, cfg.TXTPrefix, cfg.TXTSuffix, cfg.TXTOwnerID, cfg.TXTCacheInterval, cfg.TXTWildcardReplacement, cfg.ManagedDNSRecordTypes, cfg.ExcludeDNSRecordTypes, cfg.TXTEncryptEnabled, []byte(cfg.TXTEncryptAESKey)) case "aws-sd": - r, err = registry.NewAWSSDRegistry(p.(*awssd.AWSSDProvider), cfg.TXTOwnerID) + r, err = registry.NewAWSSDRegistry(p, cfg.TXTOwnerID) default: log.Fatalf("unknown registry: %s", cfg.Registry) } diff --git a/provider/cached_provider.go b/provider/cached_provider.go index e4b365266..0b646306f 100644 --- a/provider/cached_provider.go +++ b/provider/cached_provider.go @@ -5,6 +5,7 @@ import ( "time" "github.com/prometheus/client_golang/prometheus" + log "github.com/sirupsen/logrus" "sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/plan" ) @@ -41,15 +42,23 @@ type CachedProvider struct { func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { if c.needRefresh() { + log.Info("Records cache provider: refreshing records list cache") c.cache, c.err = c.Provider.Records(ctx) + if c.err != nil { + log.Errorf("Records cache provider: list records failed: %v", c.err) + } c.lastRead = time.Now() cachedRecordsCallsTotal.WithLabelValues("false").Inc() } else { + log.Info("Records cache provider: using records list from cache") cachedRecordsCallsTotal.WithLabelValues("true").Inc() } return c.cache, c.err } func (c *CachedProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { + if !changes.HasChanges() { + return nil + } c.Reset() cachedApplyChangesCallsTotal.Inc() return c.Provider.ApplyChanges(ctx, changes) @@ -63,8 +72,10 @@ func (c *CachedProvider) Reset() { func (c *CachedProvider) needRefresh() bool { if c.cache == nil || c.err != nil { + log.Debug("Records cache provider is not initialized") return true } + log.Debug("Records cache last Read: ", c.lastRead, "expiration: ", c.RefreshDelay, " provider expiration:", c.lastRead.Add(c.RefreshDelay), "expired: ", time.Now().After(c.lastRead.Add(c.RefreshDelay))) return time.Now().After(c.lastRead.Add(c.RefreshDelay)) } diff --git a/provider/cached_provider_test.go b/provider/cached_provider_test.go index 653e8f8b5..201e9aa66 100644 --- a/provider/cached_provider_test.go +++ b/provider/cached_provider_test.go @@ -140,13 +140,39 @@ func TestCachedProviderForcesCacheRefreshOnUpdate(t *testing.T) { _, err := provider.Records(context.Background()) require.NoError(t, err) - t.Run("When the caching time frame is exceeded", func(t *testing.T) { + t.Run("When empty changes are applied", func(t *testing.T) { testProvider.records = recordsNotCalled(t) testProvider.applyChanges = func(ctx context.Context, changes *plan.Changes) error { return nil } err := provider.ApplyChanges(context.Background(), &plan.Changes{}) assert.NoError(t, err) + t.Run("Next call to Records is cached", func(t *testing.T) { + testProvider.applyChanges = applyChangesNotCalled(t) + testProvider.records = func(ctx context.Context) ([]*endpoint.Endpoint, error) { + return []*endpoint.Endpoint{{DNSName: "new.domain.fqdn"}}, nil + } + endpoints, err := provider.Records(context.Background()) + + assert.NoError(t, err) + require.NotNil(t, endpoints) + require.Len(t, endpoints, 1) + require.NotNil(t, endpoints[0]) + assert.Equal(t, "domain.fqdn", endpoints[0].DNSName) + }) + }) + + t.Run("When changes are applied", func(t *testing.T) { + testProvider.records = recordsNotCalled(t) + testProvider.applyChanges = func(ctx context.Context, changes *plan.Changes) error { + return nil + } + err := provider.ApplyChanges(context.Background(), &plan.Changes{ + Create: []*endpoint.Endpoint{ + {DNSName: "hello.world"}, + }, + }) + assert.NoError(t, err) t.Run("Next call to Records is not cached", func(t *testing.T) { testProvider.applyChanges = applyChangesNotCalled(t) testProvider.records = func(ctx context.Context) ([]*endpoint.Endpoint, error) { From eb07eb990587d992189433662e30046d9b8e0908 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 13 Feb 2023 20:16:09 +0100 Subject: [PATCH 33/78] Add licence headers Change-Id: I3f4646cabd66216fd028fbae3adf68129a8a2cbf --- provider/cached_provider.go | 15 +++++++++++++++ provider/cached_provider_test.go | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/provider/cached_provider.go b/provider/cached_provider.go index 0b646306f..4c59087db 100644 --- a/provider/cached_provider.go +++ b/provider/cached_provider.go @@ -1,3 +1,18 @@ +/* +Copyright 2017 The Kubernetes Authors. + +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 provider import ( diff --git a/provider/cached_provider_test.go b/provider/cached_provider_test.go index 201e9aa66..2c7eec95a 100644 --- a/provider/cached_provider_test.go +++ b/provider/cached_provider_test.go @@ -1,3 +1,18 @@ +/* +Copyright 2017 The Kubernetes Authors. + +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 provider import ( From 82c6983fa3c9b932591c1e7f7419d0fb4c4188be Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 13 Feb 2023 21:37:08 +0100 Subject: [PATCH 34/78] Add a log line when no changes on cache provider Change-Id: I13da2aa28eef3e2c8e81b502321c4dc137087b2d --- provider/cached_provider.go | 1 + 1 file changed, 1 insertion(+) diff --git a/provider/cached_provider.go b/provider/cached_provider.go index 4c59087db..c8d2da9de 100644 --- a/provider/cached_provider.go +++ b/provider/cached_provider.go @@ -72,6 +72,7 @@ func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, err } func (c *CachedProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { if !changes.HasChanges() { + log.Info("Records cache provider: no changes to be applied") return nil } c.Reset() From b2ff1619f5dfb50187fc75cb64733978d3a0d880 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Fri, 8 Sep 2023 16:21:54 +0300 Subject: [PATCH 35/78] Add Domain filter interface --- controller/controller.go | 4 ++-- controller/controller_test.go | 2 +- endpoint/domain_filter.go | 8 +++++++- pkg/apis/externaldns/types.go | 2 +- provider/aws/aws.go | 2 +- provider/aws/aws_test.go | 4 ++-- provider/cached_provider.go | 16 ++++++++-------- provider/inmemory/inmemory.go | 2 +- provider/provider.go | 4 ++-- registry/aws_sd_registry.go | 2 +- registry/dynamodb.go | 2 +- registry/noop.go | 2 +- registry/registry.go | 2 +- registry/txt.go | 2 +- 14 files changed, 30 insertions(+), 24 deletions(-) diff --git a/controller/controller.go b/controller/controller.go index c8bb6ff18..2521b4436 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -186,7 +186,7 @@ type Controller struct { // The interval between individual synchronizations Interval time.Duration // The DomainFilter defines which DNS records to keep or exclude - DomainFilter endpoint.DomainFilter + DomainFilter endpoint.DomainFilterInterface // The nextRunAt used for throttling and batching reconciliation nextRunAt time.Time // The runAtMutex is for atomic updating of nextRunAt and lastRunAt @@ -245,7 +245,7 @@ func (c *Controller) RunOnce(ctx context.Context) error { Policies: []plan.Policy{c.Policy}, Current: records, Desired: endpoints, - DomainFilter: endpoint.MatchAllDomainFilters{&c.DomainFilter, ®istryFilter}, + DomainFilter: endpoint.MatchAllDomainFilters{c.DomainFilter, registryFilter}, ManagedRecords: c.ManagedRecordTypes, ExcludeRecords: c.ExcludeRecordTypes, OwnerID: c.Registry.OwnerID(), diff --git a/controller/controller_test.go b/controller/controller_test.go index e95aa9802..c6074f833 100644 --- a/controller/controller_test.go +++ b/controller/controller_test.go @@ -57,7 +57,7 @@ type errorMockProvider struct { mockProvider } -func (p *filteredMockProvider) GetDomainFilter() endpoint.DomainFilter { +func (p *filteredMockProvider) GetDomainFilter() endpoint.DomainFilterInterface { return p.domainFilter } diff --git a/endpoint/domain_filter.go b/endpoint/domain_filter.go index 308599d80..3acfbcd93 100644 --- a/endpoint/domain_filter.go +++ b/endpoint/domain_filter.go @@ -25,7 +25,7 @@ import ( "strings" ) -type MatchAllDomainFilters []*DomainFilter +type MatchAllDomainFilters []DomainFilterInterface func (f MatchAllDomainFilters) Match(domain string) bool { for _, filter := range f { @@ -39,6 +39,10 @@ func (f MatchAllDomainFilters) Match(domain string) bool { return true } +type DomainFilterInterface interface { + Match(domain string) bool +} + // DomainFilter holds a lists of valid domain names type DomainFilter struct { // Filters define what domains to match @@ -51,6 +55,8 @@ type DomainFilter struct { regexExclusion *regexp.Regexp } +var _ DomainFilterInterface = &DomainFilter{} + // domainFilterSerde is a helper type for serializing and deserializing DomainFilter. type domainFilterSerde struct { Include []string `json:"include,omitempty"` diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index 05ba1f2e1..423229a8b 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -67,7 +67,7 @@ type Config struct { AlwaysPublishNotReadyAddresses bool ConnectorSourceServer string Provider string - ProviderCacheTime int + ProviderCacheTime time.Duration GoogleProject string GoogleBatchChangeSize int GoogleBatchChangeInterval time.Duration diff --git a/provider/aws/aws.go b/provider/aws/aws.go index 8e13d290f..1955efb16 100644 --- a/provider/aws/aws.go +++ b/provider/aws/aws.go @@ -567,7 +567,7 @@ func (p *AWSProvider) createUpdateChanges(newEndpoints, oldEndpoints []*endpoint } // GetDomainFilter generates a filter to exclude any domain that is not controlled by the provider -func (p *AWSProvider) GetDomainFilter() endpoint.DomainFilter { +func (p *AWSProvider) GetDomainFilter() endpoint.DomainFilterInterface { zones, err := p.Zones(context.Background()) if err != nil { log.Errorf("failed to list zones: %v", err) diff --git a/provider/aws/aws_test.go b/provider/aws/aws_test.go index 418e05d09..6968e7c76 100644 --- a/provider/aws/aws_test.go +++ b/provider/aws/aws_test.go @@ -319,10 +319,10 @@ func TestAWSZones(t *testing.T) { func TestAWSRecordsFilter(t *testing.T) { provider, _ := newAWSProvider(t, endpoint.DomainFilter{}, provider.ZoneIDFilter{}, provider.ZoneTypeFilter{}, false, false, nil) domainFilter := provider.GetDomainFilter() - assert.NotNil(t, domainFilter) + require.NotNil(t, domainFilter) require.IsType(t, endpoint.DomainFilter{}, domainFilter) count := 0 - filters := domainFilter.Filters + filters := domainFilter.(endpoint.DomainFilter).Filters for _, tld := range []string{ "zone-4.ext-dns-test-3.teapot.zalan.do", ".zone-4.ext-dns-test-3.teapot.zalan.do", diff --git a/provider/cached_provider.go b/provider/cached_provider.go index c8d2da9de..3ea1fd516 100644 --- a/provider/cached_provider.go +++ b/provider/cached_provider.go @@ -50,7 +50,6 @@ var ( type CachedProvider struct { Provider RefreshDelay time.Duration - err error lastRead time.Time cache []*endpoint.Endpoint } @@ -58,17 +57,19 @@ type CachedProvider struct { func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { if c.needRefresh() { log.Info("Records cache provider: refreshing records list cache") - c.cache, c.err = c.Provider.Records(ctx) - if c.err != nil { - log.Errorf("Records cache provider: list records failed: %v", c.err) + records, err := c.Provider.Records(ctx) + if err != nil { + c.cache = nil + return nil, err } + c.cache = records c.lastRead = time.Now() cachedRecordsCallsTotal.WithLabelValues("false").Inc() } else { - log.Info("Records cache provider: using records list from cache") + log.Debug("Records cache provider: using records list from cache") cachedRecordsCallsTotal.WithLabelValues("true").Inc() } - return c.cache, c.err + return c.cache, nil } func (c *CachedProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { if !changes.HasChanges() { @@ -81,13 +82,12 @@ func (c *CachedProvider) ApplyChanges(ctx context.Context, changes *plan.Changes } func (c *CachedProvider) Reset() { - c.err = nil c.cache = nil c.lastRead = time.Time{} } func (c *CachedProvider) needRefresh() bool { - if c.cache == nil || c.err != nil { + if c.cache == nil { log.Debug("Records cache provider is not initialized") return true } diff --git a/provider/inmemory/inmemory.go b/provider/inmemory/inmemory.go index eab515a67..1f636dfda 100644 --- a/provider/inmemory/inmemory.go +++ b/provider/inmemory/inmemory.go @@ -46,7 +46,7 @@ var ( // initialized as dns provider with no records type InMemoryProvider struct { provider.BaseProvider - domain endpoint.DomainFilter + domain endpoint.DomainFilterInterface client *inMemoryClient filter *filter OnApplyChanges func(ctx context.Context, changes *plan.Changes) diff --git a/provider/provider.go b/provider/provider.go index 6a9c591e1..2bbfac161 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -48,7 +48,7 @@ type Provider interface { // unnecessary (potentially failing) changes. It may also modify other fields, add, or remove // Endpoints. It is permitted to modify the supplied endpoints. AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error) - GetDomainFilter() endpoint.DomainFilter + GetDomainFilter() endpoint.DomainFilterInterface } type BaseProvider struct{} @@ -57,7 +57,7 @@ func (b BaseProvider) AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoi return endpoints, nil } -func (b BaseProvider) GetDomainFilter() endpoint.DomainFilter { +func (b BaseProvider) GetDomainFilter() endpoint.DomainFilterInterface { return endpoint.DomainFilter{} } diff --git a/registry/aws_sd_registry.go b/registry/aws_sd_registry.go index 8a2b023c4..a1e2103f5 100644 --- a/registry/aws_sd_registry.go +++ b/registry/aws_sd_registry.go @@ -42,7 +42,7 @@ func NewAWSSDRegistry(provider provider.Provider, ownerID string) (*AWSSDRegistr }, nil } -func (sdr *AWSSDRegistry) GetDomainFilter() endpoint.DomainFilter { +func (sdr *AWSSDRegistry) GetDomainFilter() endpoint.DomainFilterInterface { return sdr.provider.GetDomainFilter() } diff --git a/registry/dynamodb.go b/registry/dynamodb.go index aeb38d9a9..b13d55ce9 100644 --- a/registry/dynamodb.go +++ b/registry/dynamodb.go @@ -105,7 +105,7 @@ func NewDynamoDBRegistry(provider provider.Provider, ownerID string, dynamodbAPI }, nil } -func (im *DynamoDBRegistry) GetDomainFilter() endpoint.DomainFilter { +func (im *DynamoDBRegistry) GetDomainFilter() endpoint.DomainFilterInterface { return im.provider.GetDomainFilter() } diff --git a/registry/noop.go b/registry/noop.go index 9e06bbb92..daf29cb01 100644 --- a/registry/noop.go +++ b/registry/noop.go @@ -36,7 +36,7 @@ func NewNoopRegistry(provider provider.Provider) (*NoopRegistry, error) { }, nil } -func (im *NoopRegistry) GetDomainFilter() endpoint.DomainFilter { +func (im *NoopRegistry) GetDomainFilter() endpoint.DomainFilterInterface { return im.provider.GetDomainFilter() } diff --git a/registry/registry.go b/registry/registry.go index d2955365d..3117c4205 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -31,6 +31,6 @@ type Registry interface { Records(ctx context.Context) ([]*endpoint.Endpoint, error) ApplyChanges(ctx context.Context, changes *plan.Changes) error AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error) - GetDomainFilter() endpoint.DomainFilter + GetDomainFilter() endpoint.DomainFilterInterface OwnerID() string } diff --git a/registry/txt.go b/registry/txt.go index 8e7b6f096..12445bcb1 100644 --- a/registry/txt.go +++ b/registry/txt.go @@ -95,7 +95,7 @@ func getSupportedTypes() []string { return []string{endpoint.RecordTypeA, endpoint.RecordTypeAAAA, endpoint.RecordTypeCNAME, endpoint.RecordTypeNS} } -func (im *TXTRegistry) GetDomainFilter() endpoint.DomainFilter { +func (im *TXTRegistry) GetDomainFilter() endpoint.DomainFilterInterface { return im.provider.GetDomainFilter() } From b2d678f7d0f073f06280a69c2d2fed0ce9477623 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Fri, 8 Sep 2023 17:12:18 +0300 Subject: [PATCH 36/78] Run go imports -local sigs.k8s.io/external-dns --- provider/cached_provider.go | 1 + 1 file changed, 1 insertion(+) diff --git a/provider/cached_provider.go b/provider/cached_provider.go index 3ea1fd516..42f327e07 100644 --- a/provider/cached_provider.go +++ b/provider/cached_provider.go @@ -21,6 +21,7 @@ import ( "github.com/prometheus/client_golang/prometheus" log "github.com/sirupsen/logrus" + "sigs.k8s.io/external-dns/endpoint" "sigs.k8s.io/external-dns/plan" ) From 9b759f09339a840e051ebf020c0892f71fac7084 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 8 Jul 2024 09:02:20 +0200 Subject: [PATCH 37/78] Update changes to match latest state of external-dns code --- provider/cached_provider_test.go | 11 ++++++----- provider/webhook/api/httpapi_test.go | 2 +- provider/webhook/webhook.go | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/provider/cached_provider_test.go b/provider/cached_provider_test.go index 2c7eec95a..4e358066f 100644 --- a/provider/cached_provider_test.go +++ b/provider/cached_provider_test.go @@ -17,6 +17,7 @@ package provider import ( "context" + "errors" "testing" "time" @@ -30,7 +31,7 @@ type testProviderFunc struct { records func(ctx context.Context) ([]*endpoint.Endpoint, error) applyChanges func(ctx context.Context, changes *plan.Changes) error propertyValuesEqual func(name string, previous string, current string) bool - adjustEndpoints func(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint + adjustEndpoints func(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error) getDomainFilter func() endpoint.DomainFilterInterface } @@ -46,7 +47,7 @@ func (p *testProviderFunc) PropertyValuesEqual(name string, previous string, cur return p.propertyValuesEqual(name, previous, current) } -func (p *testProviderFunc) AdjustEndpoints(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint { +func (p *testProviderFunc) AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error) { return p.adjustEndpoints(endpoints) } @@ -75,10 +76,10 @@ func propertyValuesEqualNotCalled(t *testing.T) func(name string, previous strin } } -func adjustEndpointsNotCalled(t *testing.T) func(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint { - return func(endpoints []*endpoint.Endpoint) []*endpoint.Endpoint { +func adjustEndpointsNotCalled(t *testing.T) func(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error) { + return func(endpoints []*endpoint.Endpoint) ([]*endpoint.Endpoint, error) { t.Errorf("unexpected call to AdjustEndpoints") - return endpoints + return endpoints, errors.New("unexpected call to AdjustEndpoints") } } diff --git a/provider/webhook/api/httpapi_test.go b/provider/webhook/api/httpapi_test.go index 48685dc9d..a15efec47 100644 --- a/provider/webhook/api/httpapi_test.go +++ b/provider/webhook/api/httpapi_test.go @@ -62,7 +62,7 @@ func (p FakeWebhookProvider) AdjustEndpoints(endpoints []*endpoint.Endpoint) ([] return endpoints, nil } -func (p FakeWebhookProvider) GetDomainFilter() endpoint.DomainFilter { +func (p FakeWebhookProvider) GetDomainFilter() endpoint.DomainFilterInterface { return p.domainFilter } diff --git a/provider/webhook/webhook.go b/provider/webhook/webhook.go index d50484290..8cae0850e 100644 --- a/provider/webhook/webhook.go +++ b/provider/webhook/webhook.go @@ -296,7 +296,7 @@ func (p WebhookProvider) AdjustEndpoints(e []*endpoint.Endpoint) ([]*endpoint.En } // GetDomainFilter make calls to get the serialized version of the domain filter -func (p WebhookProvider) GetDomainFilter() endpoint.DomainFilter { +func (p WebhookProvider) GetDomainFilter() endpoint.DomainFilterInterface { return p.DomainFilter } From 2955e5d4568b492db5cea2e8444655c9ee0526ee Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 5 Aug 2024 16:59:28 +0200 Subject: [PATCH 38/78] Apply suggestions from code review Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/tutorials/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 532dd45e3..ad6d3921f 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -912,7 +912,7 @@ Route53 has a [5 API requests per second per account hard quota](https://docs.aw Running several fast polling ExternalDNS instances in a given account can easily hit that limit. Some ways to reduce the request rate include: * Reduce the polling loop's synchronization interval at the possible cost of slower change propagation (but see `--events` below to reduce the impact). * `--interval=5m` (default `1m`) -* Cache the results of the zone at the possible cost of slower propagation when the zone gets modified from other sources +* Enable a Cache to store the zone records list. It comes with a cost: slower propagation when the zone gets modified from other sources. * `--provider-cache-time=15m` (default `0m`) * Trigger the polling loop on changes to K8s objects, rather than only at `interval` and ensure a minimum of time between events, to have responsive updates with long poll intervals * `--events` From 309f34f4f56c7d7cd4fad2bd4cab933b17c7d585 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Mon, 5 Aug 2024 17:47:46 +0200 Subject: [PATCH 39/78] Add an advanced topic about rate limits --- docs/rate-limits.md | 76 +++++++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 77 insertions(+) create mode 100644 docs/rate-limits.md diff --git a/docs/rate-limits.md b/docs/rate-limits.md new file mode 100644 index 000000000..4de076301 --- /dev/null +++ b/docs/rate-limits.md @@ -0,0 +1,76 @@ +DNS provider API rate limits considerations +=========================================== + +## Introduction + +By design, external-dns refreshes all the records of a zone using API calls. +This refresh may happen peridically and upon any changed object if the flag `--events` is enabled. + +Depending on the size of the zone and the infrastructure deployment, this may lead to having external-dns +hitting the DNS provider's rate-limits more easily. + +In particular, it has been found that, with 200k records in an AWS Route53 zone, each refresh triggers around +70 API calls to retrieve all the records, making it more likely to hit the AWS Route53 API rate limits. + +To prevent this problem from happening, external-dns has implemented a cache to reduce the pressure on the DNS +provider APIs. + +This cache is optional and systematically invalidated when DNS records have been changed in the cluster +(new or deleted domains or changed target). + +## Trade-offs + +The major trade-off of this setting relies in the ability to recover from a deleted record on the DNS provider side. +As the DNS records are cached in memory, external-dns will not be made aware of the missing records and will hence +take a longer time to restore the deleted or modified record on the provider side. + +This option is enabled using the `--provider-cache-time=15m` command line argument, and disabled when `--provider-cache-time=0m` + +## Monitoring + +You can evaluate the behaviour of the cache thanks to the built-in metrics + +* `external_dns_provider_cache_records_calls` + The number of calls to the provider cache Records list. + The label `from_cache=true` indicates that the records were retrieved from memory and the DNS provider was not reached + The label `from_cache=false` indicates that the cache was not used and the records were retrieved from the provider +* `external_dns_provider_cache_apply_changes_calls` + The number of calls to the provider cache ApplyChanges. + Each ApplyChange systematically invalidates the cache and makes subsequent Records list to be retrieved from the provider without cache. + +## Related options + +This global option is available for all providers and can be used in pair with other global +or provider-specific options to fine-tune the behaviour of external-dns +to match the specific needs of your deployments, with the goal to reduce the number of API calls to your DNS provider. + +* Google + `--google-batch-change-interval=1s` When using the Google provider, set the interval between batch changes. ($EXTERNAL_DNS_GOOGLE_BATCH_CHANGE_INTERVAL) + `--google-batch-change-size=1000` When using the Google provider, set the maximum number of changes that will be applied in each batch. +* AWS + `--aws-batch-change-interval=1s` When using the AWS provider, set the interval between batch changes. + `--aws-batch-change-size=1000` When using the AWS provider, set the maximum number of changes that will be applied in each batch. + `--aws-batch-change-size-bytes=32000` When using the AWS provider, set the maximum byte size that will be applied in each batch. + `--aws-batch-change-size-values=1000` When using the AWS provider, set the maximum total record values that will be applied in each batch. + `--aws-zones-cache-duration=0s` When using the AWS provider, set the zones list cache TTL (0s to disable). + `--[no-]aws-zone-match-parent` Expand limit possible target by sub-domains +* Cloudflare + `--cloudflare-dns-records-per-page=100` When using the Cloudflare provider, specify how many DNS records listed per page, max possible 5,000 (default: 100) +* OVH + `--ovh-api-rate-limit=20` When using the OVH provider, specify the API request rate limit, X operations by seconds (default: 20) + +* Global + `--registry=txt` The registry implementation to use to keep track of DNS record ownership (default: txt, options: txt, noop, dynamodb, aws-sd) + `--txt-cache-interval=0s` The interval between cache synchronizations in duration format (default: disabled) + `--interval=1m0s` The interval between two consecutive synchronizations in duration format (default: 1m) + `--min-event-sync-interval=5s` The minimum interval between two consecutive synchronizations triggered from kubernetes events in duration format (default: 5s) + `--[no-]events` When enabled, in addition to running every interval, the reconciliation loop will get triggered when supported sources change (default: disabled) + +A general recommendation is to enable `--events` and keep `--min-event-sync-interval` relatively low to have a better responsiveness when records are +created or updated inside the cluster. +This should represent an acceptable propagation time between the creation of your k8s resources and the time they become registered in your DNS server. + +On a general manner, the higher the `--provider-cache-time`, the lower the impact on the rate limits, but also, the slower the recovery in case of a deletion. +The `--provider-cache-time` value should hence be set to an acceptable time to automatically recover restore deleted records. + +✍️ Note that caching is done within the external-dns controller memory. You can invalidate the cache at any point in time by restarting it (for example doing a rolling update). diff --git a/mkdocs.yml b/mkdocs.yml index 82d55858c..c2d43fd0c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -32,6 +32,7 @@ nav: - Initial Design: docs/initial-design.md - TTL: docs/ttl.md - MultiTarget: docs/proposal/multi-target.md + - ProviderCache: docs/rate-limits.md - Contributing: - Kubernetes Contributions: CONTRIBUTING.md - Release: docs/release.md From 173604854d98a1effd05c4d9bad7e87e9277939d Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Tue, 6 Aug 2024 08:44:08 +0200 Subject: [PATCH 40/78] Rename Advanced topics title to match the content --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index c2d43fd0c..0b4bbe54a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -32,7 +32,7 @@ nav: - Initial Design: docs/initial-design.md - TTL: docs/ttl.md - MultiTarget: docs/proposal/multi-target.md - - ProviderCache: docs/rate-limits.md + - Rate Limits: docs/rate-limits.md - Contributing: - Kubernetes Contributions: CONTRIBUTING.md - Release: docs/release.md From ef0dd29cf51d9b44192b767ac015be9cd0d13bb2 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Tue, 13 Aug 2024 11:16:28 +0200 Subject: [PATCH 41/78] Apply suggestions from code review Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/rate-limits.md | 46 ++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/rate-limits.md b/docs/rate-limits.md index 4de076301..f0c769884 100644 --- a/docs/rate-limits.md +++ b/docs/rate-limits.md @@ -6,10 +6,10 @@ DNS provider API rate limits considerations By design, external-dns refreshes all the records of a zone using API calls. This refresh may happen peridically and upon any changed object if the flag `--events` is enabled. -Depending on the size of the zone and the infrastructure deployment, this may lead to having external-dns +Depending on the size of the zone and the infrastructure deployment, this may lead to external-dns hitting the DNS provider's rate-limits more easily. -In particular, it has been found that, with 200k records in an AWS Route53 zone, each refresh triggers around +In particular, it has been found that with 200k records in an AWS Route53 zone, each refresh triggers around 70 API calls to retrieve all the records, making it more likely to hit the AWS Route53 API rate limits. To prevent this problem from happening, external-dns has implemented a cache to reduce the pressure on the DNS @@ -24,19 +24,19 @@ The major trade-off of this setting relies in the ability to recover from a dele As the DNS records are cached in memory, external-dns will not be made aware of the missing records and will hence take a longer time to restore the deleted or modified record on the provider side. -This option is enabled using the `--provider-cache-time=15m` command line argument, and disabled when `--provider-cache-time=0m` +This option is enabled using the `--provider-cache-time=15m` command line argument, and turned off when `--provider-cache-time=0m` ## Monitoring You can evaluate the behaviour of the cache thanks to the built-in metrics * `external_dns_provider_cache_records_calls` - The number of calls to the provider cache Records list. - The label `from_cache=true` indicates that the records were retrieved from memory and the DNS provider was not reached - The label `from_cache=false` indicates that the cache was not used and the records were retrieved from the provider + * The number of calls to the provider cache Records list. + * The label `from_cache=true` indicates that the records were retrieved from memory and the DNS provider was not reached + * The label `from_cache=false` indicates that the cache was not used and the records were retrieved from the provider * `external_dns_provider_cache_apply_changes_calls` - The number of calls to the provider cache ApplyChanges. - Each ApplyChange systematically invalidates the cache and makes subsequent Records list to be retrieved from the provider without cache. + * The number of calls to the provider cache ApplyChanges. + * Each ApplyChange systematically invalidates the cache and makes subsequent Records list to be retrieved from the provider without cache. ## Related options @@ -45,26 +45,26 @@ or provider-specific options to fine-tune the behaviour of external-dns to match the specific needs of your deployments, with the goal to reduce the number of API calls to your DNS provider. * Google - `--google-batch-change-interval=1s` When using the Google provider, set the interval between batch changes. ($EXTERNAL_DNS_GOOGLE_BATCH_CHANGE_INTERVAL) - `--google-batch-change-size=1000` When using the Google provider, set the maximum number of changes that will be applied in each batch. + * `--google-batch-change-interval=1s` When using the Google provider, set the interval between batch changes. ($EXTERNAL_DNS_GOOGLE_BATCH_CHANGE_INTERVAL) + * `--google-batch-change-size=1000` When using the Google provider, set the maximum number of changes that will be applied in each batch. * AWS - `--aws-batch-change-interval=1s` When using the AWS provider, set the interval between batch changes. - `--aws-batch-change-size=1000` When using the AWS provider, set the maximum number of changes that will be applied in each batch. - `--aws-batch-change-size-bytes=32000` When using the AWS provider, set the maximum byte size that will be applied in each batch. - `--aws-batch-change-size-values=1000` When using the AWS provider, set the maximum total record values that will be applied in each batch. - `--aws-zones-cache-duration=0s` When using the AWS provider, set the zones list cache TTL (0s to disable). - `--[no-]aws-zone-match-parent` Expand limit possible target by sub-domains + * `--aws-batch-change-interval=1s` When using the AWS provider, set the interval between batch changes. + * `--aws-batch-change-size=1000` When using the AWS provider, set the maximum number of changes that will be applied in each batch. + * `--aws-batch-change-size-bytes=32000` When using the AWS provider, set the maximum byte size that will be applied in each batch. + * `--aws-batch-change-size-values=1000` When using the AWS provider, set the maximum total record values that will be applied in each batch. + * `--aws-zones-cache-duration=0s` When using the AWS provider, set the zones list cache TTL (0s to disable). + * `--[no-]aws-zone-match-parent` Expand limit possible target by sub-domains * Cloudflare - `--cloudflare-dns-records-per-page=100` When using the Cloudflare provider, specify how many DNS records listed per page, max possible 5,000 (default: 100) + * `--cloudflare-dns-records-per-page=100` When using the Cloudflare provider, specify how many DNS records listed per page, max possible 5,000 (default: 100) * OVH - `--ovh-api-rate-limit=20` When using the OVH provider, specify the API request rate limit, X operations by seconds (default: 20) + * `--ovh-api-rate-limit=20` When using the OVH provider, specify the API request rate limit, X operations by seconds (default: 20) * Global - `--registry=txt` The registry implementation to use to keep track of DNS record ownership (default: txt, options: txt, noop, dynamodb, aws-sd) - `--txt-cache-interval=0s` The interval between cache synchronizations in duration format (default: disabled) - `--interval=1m0s` The interval between two consecutive synchronizations in duration format (default: 1m) - `--min-event-sync-interval=5s` The minimum interval between two consecutive synchronizations triggered from kubernetes events in duration format (default: 5s) - `--[no-]events` When enabled, in addition to running every interval, the reconciliation loop will get triggered when supported sources change (default: disabled) + * `--registry=txt` The registry implementation to use to keep track of DNS record ownership (default: txt, options: txt, noop, dynamodb, aws-sd) + * `--txt-cache-interval=0s` The interval between cache synchronizations in duration format (default: disabled) + * `--interval=1m0s` The interval between two consecutive synchronizations in duration format (default: 1m) + * `--min-event-sync-interval=5s` The minimum interval between two consecutive synchronizations triggered from kubernetes events in duration format (default: 5s) + * `--[no-]events` When enabled, in addition to running every interval, the reconciliation loop will get triggered when supported sources change (default: disabled) A general recommendation is to enable `--events` and keep `--min-event-sync-interval` relatively low to have a better responsiveness when records are created or updated inside the cluster. From 6c5faafbfe2d5633d4c5adab334c1c136b2cbfd2 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Tue, 13 Aug 2024 11:24:34 +0200 Subject: [PATCH 42/78] Dynamically register cache provider metrics --- main.go | 8 ++++---- provider/cached_provider.go | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index 955bca868..7fabfd219 100644 --- a/main.go +++ b/main.go @@ -402,10 +402,10 @@ func main() { } if cfg.ProviderCacheTime > 0 { - p = &provider.CachedProvider{ - Provider: p, - RefreshDelay: cfg.ProviderCacheTime, - } + p = provider.NewCachedProvider( + p, + cfg.ProviderCacheTime, + ) } var r registry.Registry diff --git a/provider/cached_provider.go b/provider/cached_provider.go index 42f327e07..dcea510f0 100644 --- a/provider/cached_provider.go +++ b/provider/cached_provider.go @@ -17,6 +17,7 @@ package provider import ( "context" + "sync" "time" "github.com/prometheus/client_golang/prometheus" @@ -46,6 +47,8 @@ var ( Help: "Number of calls to the provider cache ApplyChanges.", }, ) + + registerCacheProviderMetrics = sync.Once{} ) type CachedProvider struct { @@ -55,6 +58,16 @@ type CachedProvider struct { cache []*endpoint.Endpoint } +func NewCachedProvider(provider Provider, refreshDelay time.Duration) *CachedProvider { + registerMetrics.Do(func() { + prometheus.MustRegister(cachedRecordsCallsTotal) + }) + return &CachedProvider{ + Provider: provider, + RefreshDelay: refreshDelay, + } +} + func (c *CachedProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { if c.needRefresh() { log.Info("Records cache provider: refreshing records list cache") @@ -95,7 +108,3 @@ func (c *CachedProvider) needRefresh() bool { log.Debug("Records cache last Read: ", c.lastRead, "expiration: ", c.RefreshDelay, " provider expiration:", c.lastRead.Add(c.RefreshDelay), "expired: ", time.Now().After(c.lastRead.Add(c.RefreshDelay))) return time.Now().After(c.lastRead.Add(c.RefreshDelay)) } - -func init() { - prometheus.MustRegister(cachedRecordsCallsTotal) -} From 8d2f1c0aea39288988bae1aede96242993c541ba Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Tue, 13 Aug 2024 12:58:05 +0200 Subject: [PATCH 43/78] Fix invalid private variable reference --- provider/cached_provider.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provider/cached_provider.go b/provider/cached_provider.go index dcea510f0..6009c77d7 100644 --- a/provider/cached_provider.go +++ b/provider/cached_provider.go @@ -59,7 +59,7 @@ type CachedProvider struct { } func NewCachedProvider(provider Provider, refreshDelay time.Duration) *CachedProvider { - registerMetrics.Do(func() { + registerCacheProviderMetrics.Do(func() { prometheus.MustRegister(cachedRecordsCallsTotal) }) return &CachedProvider{ From a6ab2badce411919ae9de301d75b39a0f27ab717 Mon Sep 17 00:00:00 2001 From: Thibault Jamet Date: Wed, 14 Aug 2024 11:36:47 +0200 Subject: [PATCH 44/78] Update docs/tutorials/aws.md --- docs/tutorials/aws.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index ad6d3921f..e836e6739 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -912,7 +912,7 @@ Route53 has a [5 API requests per second per account hard quota](https://docs.aw Running several fast polling ExternalDNS instances in a given account can easily hit that limit. Some ways to reduce the request rate include: * Reduce the polling loop's synchronization interval at the possible cost of slower change propagation (but see `--events` below to reduce the impact). * `--interval=5m` (default `1m`) -* Enable a Cache to store the zone records list. It comes with a cost: slower propagation when the zone gets modified from other sources. +* Enable a Cache to store the zone records list. It comes with a cost: slower propagation when the zone gets modified from other sources such as the AWS console, terraform, cloudformation or anything similar. * `--provider-cache-time=15m` (default `0m`) * Trigger the polling loop on changes to K8s objects, rather than only at `interval` and ensure a minimum of time between events, to have responsive updates with long poll intervals * `--events` From d8ba72254e426c9554cf27269eda57d97bae41f9 Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Wed, 14 Aug 2024 13:32:17 +0200 Subject: [PATCH 45/78] chore: update maintainers --- OWNERS | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/OWNERS b/OWNERS index 161ae4adc..19f754c0b 100644 --- a/OWNERS +++ b/OWNERS @@ -6,19 +6,18 @@ # https://github.com/kubernetes/k8s.io/blob/master/registry.k8s.io/images/k8s-staging-external-dns/OWNERS approvers: - - johngmyers - mloiseleur - raffo - szuecs reviewers: - - johngmyers - mloiseleur - raffo - szuecs emeritus_approvers: - hjacobs + - johngmyers - linki - njuettner - seanmalloy From 1b5c9d3d3bd2b50020839866645746c4f7ddad62 Mon Sep 17 00:00:00 2001 From: Curtis John Date: Thu, 15 Aug 2024 08:27:18 -0400 Subject: [PATCH 46/78] fix(helm): make use of resource values for webhook (#4560) * fix(helm): make use of resource values for webhook previously these values were omitted due to an omission in the deployment template, now they should be accurately templated when provided to the chart * chore(chart): add provider.webhook.resources fix to changelog --- charts/external-dns/CHANGELOG.md | 6 +++++- charts/external-dns/templates/deployment.yaml | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/charts/external-dns/CHANGELOG.md b/charts/external-dns/CHANGELOG.md index 999ad8652..db5b2aaa7 100644 --- a/charts/external-dns/CHANGELOG.md +++ b/charts/external-dns/CHANGELOG.md @@ -18,6 +18,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [UNRELEASED] +### Fixed + +- Fixed `provider.webhook.resources` behavior to correctly leverage resource limits ([#4560](https://github.com/kubernetes-sigs/external-dns/pull/4560)) + ## [v1.14.5] - 2023-06-10 ### Added @@ -58,7 +62,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Restore template support in `.Values.provider` and `.Values.provider.name` +- Restore template support in `.Values.provider` and `.Values.provider.name` ## [v1.14.1] - 2024-01-11 diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index 71b00937f..cc4e3fe47 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -173,6 +173,10 @@ spec: {{- toYaml . | nindent 12 }} {{- end }} {{- end }} + {{- with .resources }} + resources: + {{- toYaml . | nindent 12 }} + {{- end }} {{- with .securityContext }} securityContext: {{- toYaml . | nindent 12 }} From 4595e0d5ef9c681ec8e9184d2f67dcdd5fc369b5 Mon Sep 17 00:00:00 2001 From: Michael Shen Date: Thu, 15 Aug 2024 22:37:10 -0400 Subject: [PATCH 47/78] Annotation key/value pairs must be strings As-is, following the docs results in the following error: ``` json: cannot unmarshal number into Go struct field ObjectMeta.metadata.annotations of type string ``` Signed-off-by: Michael Shen --- docs/tutorials/aws-sd.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorials/aws-sd.md b/docs/tutorials/aws-sd.md index 5f0eb76c1..9741b5f9d 100644 --- a/docs/tutorials/aws-sd.md +++ b/docs/tutorials/aws-sd.md @@ -221,7 +221,7 @@ metadata: name: nginx annotations: external-dns.alpha.kubernetes.io/hostname: nginx.external-dns-test.my-org.com - external-dns.alpha.kubernetes.io/ttl: 60 + external-dns.alpha.kubernetes.io/ttl: "60" spec: ... ``` From 940c8bd77d5a62731ae7a8e653b942321d7aacfb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 03:43:55 +0000 Subject: [PATCH 48/78] chore(deps): bump the dev-dependencies group across 1 directory with 16 updates Bumps the dev-dependencies group with 16 updates in the / directory: | Package | From | To | | --- | --- | --- | | [github.com/Yamashou/gqlgenc](https://github.com/Yamashou/gqlgenc) | `0.23.2` | `0.24.0` | | [github.com/aliyun/alibaba-cloud-sdk-go](https://github.com/aliyun/alibaba-cloud-sdk-go) | `1.62.807` | `1.63.0` | | [github.com/cloudflare/cloudflare-go](https://github.com/cloudflare/cloudflare-go) | `0.101.0` | `0.102.0` | | [github.com/linode/linodego](https://github.com/linode/linodego) | `1.38.0` | `1.39.0` | | [github.com/miekg/dns](https://github.com/miekg/dns) | `1.1.61` | `1.1.62` | | [github.com/oracle/oci-go-sdk/v65](https://github.com/oracle/oci-go-sdk) | `65.71.0` | `65.71.1` | | [github.com/pluralsh/gqlclient](https://github.com/pluralsh/gqlclient) | `1.12.1` | `1.12.2` | | [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) | `1.19.1` | `1.20.0` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.980` | `1.0.984` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.980` | `1.0.984` | | [github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns](https://github.com/tencentcloud/tencentcloud-sdk-go) | `1.0.980` | `1.0.984` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.191.0` | `0.192.0` | | [istio.io/api](https://github.com/istio/api) | `1.22.3` | `1.23.0` | | [istio.io/client-go](https://github.com/istio/client-go) | `1.22.3` | `1.23.0` | | [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.30.3` | `0.31.0` | | [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.30.3` | `0.31.0` | Updates `github.com/Yamashou/gqlgenc` from 0.23.2 to 0.24.0 - [Release notes](https://github.com/Yamashou/gqlgenc/releases) - [Commits](https://github.com/Yamashou/gqlgenc/compare/v0.23.2...v0.24.0) Updates `github.com/aliyun/alibaba-cloud-sdk-go` from 1.62.807 to 1.63.0 - [Release notes](https://github.com/aliyun/alibaba-cloud-sdk-go/releases) - [Changelog](https://github.com/aliyun/alibaba-cloud-sdk-go/blob/master/ChangeLog.txt) - [Commits](https://github.com/aliyun/alibaba-cloud-sdk-go/compare/v1.62.807...v1.63.0) Updates `github.com/cloudflare/cloudflare-go` from 0.101.0 to 0.102.0 - [Release notes](https://github.com/cloudflare/cloudflare-go/releases) - [Changelog](https://github.com/cloudflare/cloudflare-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/cloudflare/cloudflare-go/compare/v0.101.0...v0.102.0) Updates `github.com/linode/linodego` from 1.38.0 to 1.39.0 - [Release notes](https://github.com/linode/linodego/releases) - [Commits](https://github.com/linode/linodego/compare/v1.38.0...v1.39.0) Updates `github.com/miekg/dns` from 1.1.61 to 1.1.62 - [Changelog](https://github.com/miekg/dns/blob/master/Makefile.release) - [Commits](https://github.com/miekg/dns/compare/v1.1.61...v1.1.62) Updates `github.com/oracle/oci-go-sdk/v65` from 65.71.0 to 65.71.1 - [Release notes](https://github.com/oracle/oci-go-sdk/releases) - [Changelog](https://github.com/oracle/oci-go-sdk/blob/master/CHANGELOG.md) - [Commits](https://github.com/oracle/oci-go-sdk/compare/v65.71.0...v65.71.1) Updates `github.com/pluralsh/gqlclient` from 1.12.1 to 1.12.2 - [Release notes](https://github.com/pluralsh/gqlclient/releases) - [Changelog](https://github.com/pluralsh/gqlclient/blob/main/.releaserc) - [Commits](https://github.com/pluralsh/gqlclient/compare/v1.12.1...v1.12.2) Updates `github.com/prometheus/client_golang` from 1.19.1 to 1.20.0 - [Release notes](https://github.com/prometheus/client_golang/releases) - [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_golang/compare/v1.19.1...v1.20.0) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common` from 1.0.980 to 1.0.984 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.980...v1.0.984) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod` from 1.0.980 to 1.0.984 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.980...v1.0.984) Updates `github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns` from 1.0.980 to 1.0.984 - [Commits](https://github.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.980...v1.0.984) Updates `google.golang.org/api` from 0.191.0 to 0.192.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.191.0...v0.192.0) Updates `istio.io/api` from 1.22.3 to 1.23.0 - [Commits](https://github.com/istio/api/compare/1.22.3...1.23.0) Updates `istio.io/client-go` from 1.22.3 to 1.23.0 - [Commits](https://github.com/istio/client-go/compare/1.22.3...1.23.0) Updates `k8s.io/apimachinery` from 0.30.3 to 0.31.0 - [Commits](https://github.com/kubernetes/apimachinery/compare/v0.30.3...v0.31.0) Updates `k8s.io/client-go` from 0.30.3 to 0.31.0 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/kubernetes/client-go/compare/v0.30.3...v0.31.0) --- updated-dependencies: - dependency-name: github.com/Yamashou/gqlgenc dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/aliyun/alibaba-cloud-sdk-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/cloudflare/cloudflare-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/linode/linodego dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/miekg/dns dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/oracle/oci-go-sdk/v65 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/pluralsh/gqlclient dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/prometheus/client_golang dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies - dependency-name: google.golang.org/api dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: istio.io/api dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: istio.io/client-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: k8s.io/apimachinery dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies - dependency-name: k8s.io/client-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- go.mod | 43 +++++++++++++++------------- go.sum | 90 +++++++++++++++++++++++++++++++--------------------------- 2 files changed, 71 insertions(+), 62 deletions(-) diff --git a/go.mod b/go.mod index 402b9a0f6..e4fe1a4c3 100644 --- a/go.mod +++ b/go.mod @@ -12,16 +12,16 @@ require ( github.com/IBM-Cloud/ibm-cloud-cli-sdk v1.5.0 github.com/IBM/go-sdk-core/v5 v5.17.4 github.com/IBM/networking-go-sdk v0.49.0 - github.com/Yamashou/gqlgenc v0.23.2 + github.com/Yamashou/gqlgenc v0.24.0 github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 github.com/alecthomas/kingpin/v2 v2.4.0 - github.com/aliyun/alibaba-cloud-sdk-go v1.62.807 + github.com/aliyun/alibaba-cloud-sdk-go v1.63.0 github.com/ans-group/sdk-go v1.20.0 github.com/aws/aws-sdk-go v1.55.5 github.com/bodgit/tsig v1.2.2 github.com/cenkalti/backoff/v4 v4.3.0 github.com/civo/civogo v0.3.73 - github.com/cloudflare/cloudflare-go v0.101.0 + github.com/cloudflare/cloudflare-go v0.102.0 github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381 github.com/datawire/ambassador v1.12.4 github.com/denverdino/aliyungo v0.0.0-20230411124812-ab98a9173ace @@ -36,27 +36,27 @@ require ( github.com/gophercloud/gophercloud v1.14.0 github.com/hooklift/gowsdl v0.5.0 github.com/linki/instrumented_http v0.3.0 - github.com/linode/linodego v1.38.0 + github.com/linode/linodego v1.39.0 github.com/maxatome/go-testdeep v1.14.0 - github.com/miekg/dns v1.1.61 + github.com/miekg/dns v1.1.62 github.com/nesv/go-dynect v0.6.0 github.com/nic-at/rc0go v1.1.1 github.com/onsi/ginkgo v1.16.5 github.com/openshift/api v0.0.0-20230607130528-611114dca681 github.com/openshift/client-go v0.0.0-20230607134213-3cd0021bbee3 - github.com/oracle/oci-go-sdk/v65 v65.71.0 + github.com/oracle/oci-go-sdk/v65 v65.71.1 github.com/ovh/go-ovh v1.6.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 - github.com/pluralsh/gqlclient v1.12.1 + github.com/pluralsh/gqlclient v1.12.2 github.com/projectcontour/contour v1.30.0 - github.com/prometheus/client_golang v1.19.1 + github.com/prometheus/client_golang v1.20.0 github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.980 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.980 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.980 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.984 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.984 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.984 github.com/transip/gotransip/v6 v6.25.0 github.com/ultradns/ultradns-sdk-go v1.3.7 github.com/vinyldns/go-vinyldns v0.9.16 @@ -68,20 +68,20 @@ require ( golang.org/x/oauth2 v0.22.0 golang.org/x/sync v0.8.0 golang.org/x/time v0.6.0 - google.golang.org/api v0.191.0 + google.golang.org/api v0.192.0 gopkg.in/ns1/ns1-go.v2 v2.12.0 gopkg.in/yaml.v2 v2.4.0 - istio.io/api v1.22.3 - istio.io/client-go v1.22.3 - k8s.io/api v0.30.3 - k8s.io/apimachinery v0.30.3 - k8s.io/client-go v0.30.3 + istio.io/api v1.23.0 + istio.io/client-go v1.23.0 + k8s.io/api v0.31.0 + k8s.io/apimachinery v0.31.0 + k8s.io/client-go v0.31.0 k8s.io/klog/v2 v2.130.1 sigs.k8s.io/gateway-api v1.1.0 ) require ( - cloud.google.com/go/auth v0.7.3 // indirect + cloud.google.com/go/auth v0.8.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f // indirect github.com/99designs/gqlgen v0.17.44 // indirect @@ -100,10 +100,10 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deepmap/oapi-codegen v1.9.1 // indirect github.com/emicklei/go-restful/v3 v3.12.0 // indirect - github.com/evanphx/json-patch v5.9.0+incompatible // indirect github.com/fatih/structs v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/errors v0.21.0 // indirect @@ -146,6 +146,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -186,6 +187,7 @@ require ( github.com/subosito/gotenv v1.6.0 // indirect github.com/terra-farm/udnssdk v1.3.5 // indirect github.com/vektah/gqlparser/v2 v2.5.14 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.15 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect @@ -208,6 +210,7 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect google.golang.org/grpc v1.65.0 // indirect google.golang.org/protobuf v1.34.2 // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/go-playground/validator.v9 v9.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect @@ -215,7 +218,7 @@ require ( gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f // indirect - k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect moul.io/http2curl v1.0.0 // indirect sigs.k8s.io/controller-runtime v0.18.4 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/go.sum b/go.sum index 78ec676bf..d5659ebc6 100644 --- a/go.sum +++ b/go.sum @@ -18,8 +18,8 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go/auth v0.7.3 h1:98Vr+5jMaCZ5NZk6e/uBgf60phTk/XN84r8QEWB9yjY= -cloud.google.com/go/auth v0.7.3/go.mod h1:HJtWUx1P5eqjy/f6Iq5KeytNpbAcGolPhOgyop2LlzA= +cloud.google.com/go/auth v0.8.1 h1:QZW9FjC5lZzN864p13YxvAtGUlQ+KgRL+8Sg45Z6vxo= +cloud.google.com/go/auth v0.8.1/go.mod h1:qGVp/Y3kDRSDZ5gFD/XPUfYQ9xW1iI7q8RIRoCyBbJc= cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -111,8 +111,8 @@ github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:H github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Yamashou/gqlgenc v0.23.2 h1:WPxYPrwc6W4Z1eY4qKxoH3nb5PC4jAMWqQA0G8toQMI= -github.com/Yamashou/gqlgenc v0.23.2/go.mod h1:oMc4EQBQeDwLIODvgcvpaSp6rO+KMf47FuOhplv5D3A= +github.com/Yamashou/gqlgenc v0.24.0 h1:Aeufjb2zF0XxkeSTAVQ+DfiHL+ney/M2ovShZozBmHw= +github.com/Yamashou/gqlgenc v0.24.0/go.mod h1:3QQD8ZoeEyVXuzqcMDsl8OfCCCTk+ulaxkvFFQDupIA= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -128,8 +128,8 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAu github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 h1:P5U+E4x5OkVEKQDklVPmzs71WM56RTTRqV4OrDC//Y4= github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5/go.mod h1:976q2ETgjT2snVCf2ZaBnyBbVoPERGjUz+0sofzEfro= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.807 h1:xFbDIciAT09Iv5gw8r5cSmMazenyo1eQSwtteTRO70s= -github.com/aliyun/alibaba-cloud-sdk-go v1.62.807/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= +github.com/aliyun/alibaba-cloud-sdk-go v1.63.0 h1:GIwkDPfeF/IBh5lZ5Mig50r1LXomNXR7t/oKGSMJWns= +github.com/aliyun/alibaba-cloud-sdk-go v1.63.0/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v0.0.0-20190621154722-5f990b63d2d6/go.mod h1:+lx6/Aqd1kLJ1GQfkvOnaZ1WGmLpMpbprPuIOOZX30U= @@ -192,8 +192,8 @@ github.com/civo/civogo v0.3.73 h1:thkNnkziU+xh+MEOChIUwRZI1forN20+SSAPe/VFDME= github.com/civo/civogo v0.3.73/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.101.0 h1:SXWNSEDkbdY84iFIZGyTdWQwDfd98ljv0/4UubpleBQ= -github.com/cloudflare/cloudflare-go v0.101.0/go.mod h1:xXQHnoXKR48JlWbFS42i2al3nVqimVhcYvKnIdXLw9g= +github.com/cloudflare/cloudflare-go v0.102.0 h1:+0MGbkirM/yzVLOYpWMgW7CDdKzesSbdwA2Y+rABrWI= +github.com/cloudflare/cloudflare-go v0.102.0/go.mod h1:BOB41tXf31ti/qtBO9paYhyapotQbGRDbQoLOAF7pSg= github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381 h1:rdRS5BT13Iae9ssvcslol66gfOOXjaLYwqerEn/cl9s= github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381/go.mod h1:e5+USP2j8Le2M0Jo3qKPFnNhuo1wueU4nWHCXBOfQ14= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -302,8 +302,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/envoyproxy/protoc-gen-validate v0.3.0-java.0.20200609174644-bd816e4522c1/go.mod h1:bjmEhrMDubXDd0uKxnWwRmgSsiEv2CkJliIHnj6ETm8= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= -github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/exoscale/egoscale v0.102.3 h1:DYqN2ipoLKpiFoprRGQkp2av/Ze7sUYYlGhi1N62tfY= github.com/exoscale/egoscale v0.102.3/go.mod h1:RPf2Gah6up+6kAEayHTQwqapzXlm93f0VQas/UEGU5c= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= @@ -326,6 +324,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= @@ -551,8 +551,8 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= -github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= @@ -709,6 +709,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -752,8 +754,8 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linki/instrumented_http v0.3.0 h1:dsN92+mXpfZtjJraartcQ99jnuw7fqsnPDjr85ma2dA= github.com/linki/instrumented_http v0.3.0/go.mod h1:pjYbItoegfuVi2GUOMhEqzvm/SJKuEL3H0tc8QRLRFk= -github.com/linode/linodego v1.38.0 h1:wP3oW9OhGc6vhze8NPf2knbwH4TzSbrjzuCd9okjbTY= -github.com/linode/linodego v1.38.0/go.mod h1:L7GXKFD3PoN2xSEtFc04wIXP5WK65O10jYQx0PQISWQ= +github.com/linode/linodego v1.39.0 h1:gRsj2PXX+HTO3eYQaXEuQGsLeeLFDSBDontC5JL3Nn8= +github.com/linode/linodego v1.39.0/go.mod h1:da8KzAQKSm5obwa06yXk5CZSDFMP9Wb08GA/O+aR9W0= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/lyft/protoc-gen-star v0.4.10/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgocG1206xAFPcs94= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= @@ -800,8 +802,8 @@ github.com/mholt/archiver/v3 v3.3.0/go.mod h1:YnQtqsp+94Rwd0D/rk5cnLrxusUBUXg+08 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.6/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/miekg/dns v1.1.61 h1:nLxbwF3XxhwVSm8g9Dghm9MHPaUZuqhPiGL+675ZmEs= -github.com/miekg/dns v1.1.61/go.mod h1:mnAarhS3nWaW+NVP2wTkYVIZyHNJ098SJZUki3eykwQ= +github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= +github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= @@ -903,8 +905,8 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/oracle/oci-go-sdk/v65 v65.71.0 h1:eEnFD/CzcoqdAA0xu+EmK32kJL3jfV0oLYNWVzoKNyo= -github.com/oracle/oci-go-sdk/v65 v65.71.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= +github.com/oracle/oci-go-sdk/v65 v65.71.1 h1:t1GpyLYaD/x2OrUoSyxNwBQaDaQP4F084FX8LQMXA/s= +github.com/oracle/oci-go-sdk/v65 v65.71.1/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0= github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI= github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2 h1:CXwSGu/LYmbjEab5aMCs5usQRVBGThelUKBNnoSOuso= @@ -935,8 +937,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pluralsh/gqlclient v1.12.1 h1:JDOkP9jjqkPdTYdpH5hooG4F8T6FDH90XfipeXJmJFY= -github.com/pluralsh/gqlclient v1.12.1/go.mod h1:OEjN9L63x8m3A3eQBv5kVkFgiY9fp2aZ0cgOF0uII58= +github.com/pluralsh/gqlclient v1.12.2 h1:BrEFAASktf4quFw57CIaLAd+NZUTLhG08fe6tnhBQN4= +github.com/pluralsh/gqlclient v1.12.2/go.mod h1:OEjN9L63x8m3A3eQBv5kVkFgiY9fp2aZ0cgOF0uII58= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -951,8 +953,8 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_golang v1.20.0 h1:jBzTZ7B099Rg24tny+qngoynol8LtVYlA2bqx3vEloI= +github.com/prometheus/client_golang v1.20.0/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1092,12 +1094,12 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.980 h1:84FADy21OCSkhaf4UGsWWQ77hkClh3/zJgOrezr9YAk= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.980/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.980 h1:7aP322dY98cqJ0JpGaYo9/112gO9dJt0GOfNC/HAGRQ= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.980/go.mod h1:lKNx9Oh2IjAs1KdvCSRS83RyA+Ry+H1bZfGAKQTzcBI= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.980 h1:gz4UxLZFYtZ1uNChCFCZei5hlF/lpqc+lMEFWHXndaE= -github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.980/go.mod h1:9WimwpntFCCokBaaqjtwpjGUrCfmlR6bHfyBMspYR1Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.984 h1:QLSx+ibsV68NXKgzofPuo1gxFwYSWk2++rvxZxNjbVo= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.984/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.984 h1:ABZeSsOOkkBn+gToVp8KkMt4E69hQkBMEFegCD4w15Q= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.984/go.mod h1:r++X8dKvTZWltr4J83TIwqGlyvG5fKaVh7RGC2+BryI= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.984 h1:dD0pLtMCJyRNMTystzaZ9WAK+UBb2ymGcdbkhtAub+8= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.984/go.mod h1:hWQvbAt8kqN3JLfVpgxsn2YNxDBLaiUaXZFtF4ymRjU= github.com/terra-farm/udnssdk v1.3.5 h1:MNR3adfuuEK/l04+jzo8WW/0fnorY+nW515qb3vEr6I= github.com/terra-farm/udnssdk v1.3.5/go.mod h1:8RnM56yZTR7mYyUIvrDgXzdRaEyFIzqdEi7+um26Sv8= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -1130,6 +1132,8 @@ github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4 github.com/vinyldns/go-vinyldns v0.9.16/go.mod h1:5qIJOdmzAnatKjurI+Tl4uTus7GJKJxb+zitufjHs3Q= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= @@ -1583,8 +1587,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.191.0 h1:cJcF09Z+4HAB2t5qTQM1ZtfL/PemsLFkcFG67qq2afk= -google.golang.org/api v0.191.0/go.mod h1:tD5dsFGxFza0hnQveGfVk9QQYKcfp+VzgRqyXFxE0+E= +google.golang.org/api v0.192.0 h1:PljqpNAfZaaSpS+TnANfnNAXKdzHM/B9bKhwRlo7JP0= +google.golang.org/api v0.192.0/go.mod h1:9VcphjvAxPKLmSxVSzPlSRXy/5ARMEw5bf58WoVXafQ= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1685,6 +1689,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= @@ -1735,23 +1741,23 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -istio.io/api v1.22.3 h1:V59wgcCm2fK2r137QBsddCDHNg0efg/DauIWEB9DFz8= -istio.io/api v1.22.3/go.mod h1:S3l8LWqNYS9yT+d4bH+jqzH2lMencPkW7SKM1Cu9EyM= -istio.io/client-go v1.22.3 h1:4WocGQYVTASpfn7tj1yGE8f0sgxzbxOkg56HX1LJQ5U= -istio.io/client-go v1.22.3/go.mod h1:D/vNne1n5586423NgGXMnPgshE/99mQgnjnxK/Vw2yM= +istio.io/api v1.23.0 h1:yqv3lNW6XSYS5XkbEkxsmFROXIQznp4lFWqj7xKEqCA= +istio.io/api v1.23.0/go.mod h1:QPSTGXuIQdnZFEm3myf9NZ5uBMwCdJWUvfj9ZZ+2oBM= +istio.io/client-go v1.23.0 h1://xojbifr84q29WE3eMx74p36hD4lvcejX1KxE3iJvY= +istio.io/client-go v1.23.0/go.mod h1:3qX/KBS5aR47QV4JhphcZl5ysnZ53x78TBjNQLM2TC4= k8s.io/api v0.18.0/go.mod h1:q2HRQkfDzHMBZL9l/y9rH63PkQl4vae0xRT+8prbrK8= k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4= -k8s.io/api v0.30.3 h1:ImHwK9DCsPA9uoU3rVh4QHAHHK5dTSv1nxJUapx8hoQ= -k8s.io/api v0.30.3/go.mod h1:GPc8jlzoe5JG3pb0KJCSLX5oAFIW3/qNJITlDj8BH04= +k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo= +k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE= k8s.io/apiextensions-apiserver v0.18.0/go.mod h1:18Cwn1Xws4xnWQNC00FLq1E350b9lUF+aOdIWDOZxgo= k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio= k8s.io/apimachinery v0.18.0/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.30.3 h1:q1laaWCmrszyQuSQCfNB8cFgCuDAoPszKY4ucAjDwHc= -k8s.io/apimachinery v0.30.3/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc= +k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= +k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/apiserver v0.18.0/go.mod h1:3S2O6FeBBd6XTo0njUrLxiqk8GNy6wWOftjhJcXYnjw= k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8= @@ -1760,8 +1766,8 @@ k8s.io/cli-runtime v0.18.4/go.mod h1:9/hS/Cuf7NVzWR5F/5tyS6xsnclxoPLVtwhnkJG1Y4g k8s.io/client-go v0.18.0/go.mod h1:uQSYDYs4WhVZ9i6AIoEZuwUggLVEF64HOD37boKAtF8= k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g= -k8s.io/client-go v0.30.3 h1:bHrJu3xQZNXIi8/MoxYtZBBWQQXwy16zqJwloXXfD3k= -k8s.io/client-go v0.30.3/go.mod h1:8d4pf8vYu665/kUbsxWAQ/JDBNWqfFeZnvFiVdmx89U= +k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= +k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= k8s.io/code-generator v0.18.0/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= @@ -1788,8 +1794,8 @@ k8s.io/metrics v0.18.0/go.mod h1:8aYTW18koXqjLVKL7Ds05RPMX9ipJZI3mywYvBOxXd4= k8s.io/metrics v0.18.4/go.mod h1:luze4fyI9JG4eLDZy0kFdYEebqNfi0QrG4xNEbPkHOs= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= moul.io/http2curl v1.0.0 h1:6XwpyZOYsgZJrU8exnG87ncVkU1FVCcTRpwzOkTDUi8= moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From b506f1a38a826814a2904bb423cb19d8c4afa8b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 03:53:53 +0000 Subject: [PATCH 49/78] chore(deps): bump GrantBirki/json-yaml-validate Bumps the dev-dependencies group with 1 update: [GrantBirki/json-yaml-validate](https://github.com/grantbirki/json-yaml-validate). Updates `GrantBirki/json-yaml-validate` from 3.0.0 to 3.1.0 - [Release notes](https://github.com/grantbirki/json-yaml-validate/releases) - [Commits](https://github.com/grantbirki/json-yaml-validate/compare/v3.0.0...v3.1.0) --- updated-dependencies: - dependency-name: GrantBirki/json-yaml-validate dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/json-yaml-validate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/json-yaml-validate.yml b/.github/workflows/json-yaml-validate.yml index 9d8733f58..254f86c5f 100644 --- a/.github/workflows/json-yaml-validate.yml +++ b/.github/workflows/json-yaml-validate.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: json-yaml-validate - uses: GrantBirki/json-yaml-validate@v3.0.0 + uses: GrantBirki/json-yaml-validate@v3.1.0 with: comment: "true" # enable comment mode yaml_exclude_regex: "(charts/external-dns/templates.*|mkdocs.yml)" From fea4f939bfd1b732ac1e241b3871b742c8f6b43a Mon Sep 17 00:00:00 2001 From: Kim Sondrup Date: Mon, 29 Jul 2024 16:15:52 +0200 Subject: [PATCH 50/78] Webhook provider helm chart fixes - Add webhook metrics port to service - Correct webhook metric port in servicemonitor - Use correct imagePullPolicy value for webhook container --- charts/external-dns/CHANGELOG.md | 2 ++ charts/external-dns/README.md | 1 + charts/external-dns/templates/deployment.yaml | 2 +- charts/external-dns/templates/service.yaml | 9 +++++++++ charts/external-dns/templates/servicemonitor.yaml | 2 +- charts/external-dns/values.yaml | 3 +++ 6 files changed, 17 insertions(+), 2 deletions(-) diff --git a/charts/external-dns/CHANGELOG.md b/charts/external-dns/CHANGELOG.md index db5b2aaa7..d477a55d0 100644 --- a/charts/external-dns/CHANGELOG.md +++ b/charts/external-dns/CHANGELOG.md @@ -21,6 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed `provider.webhook.resources` behavior to correctly leverage resource limits ([#4560](https://github.com/kubernetes-sigs/external-dns/pull/4560)) +- Fixed `provider.webhook.imagePullPolicy` behavior to correctly leverage pull policy ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ +- Add correct webhook metric port to `Service` and `ServiceMonitor` ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ ## [v1.14.5] - 2023-06-10 diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 8291bd1be..6af6463ad 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -134,6 +134,7 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | provider.webhook.readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container. | | provider.webhook.resources | object | `{}` | [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container. | | provider.webhook.securityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. | +| provider.webhook.service.metricsPort | int | `8080` | Webhook metrics port for the service. | | provider.webhook.serviceMonitor | object | See _values.yaml_ | Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. | | rbac.additionalPermissions | list | `[]` | Additional rules to add to the `ClusterRole`. | | rbac.create | bool | `true` | If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. | diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index cc4e3fe47..d127d8d37 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -147,7 +147,7 @@ spec: {{- with .Values.provider.webhook }} - name: webhook image: {{ include "external-dns.webhookImage" . }} - imagePullPolicy: {{ $.Values.image.pullPolicy }} + imagePullPolicy: {{ .image.pullPolicy }} {{- with .env }} env: {{- toYaml . | nindent 12 }} diff --git a/charts/external-dns/templates/service.yaml b/charts/external-dns/templates/service.yaml index d3cc1941d..dada90bfd 100644 --- a/charts/external-dns/templates/service.yaml +++ b/charts/external-dns/templates/service.yaml @@ -1,3 +1,4 @@ +{{- $providerName := include "external-dns.providerName" . }} apiVersion: v1 kind: Service metadata: @@ -25,3 +26,11 @@ spec: port: {{ .Values.service.port }} targetPort: http protocol: TCP + {{- if eq $providerName "webhook" }} + {{- with .Values.provider.webhook.service }} + - name: http-wh-metrics + port: {{ .metricsPort }} + targetPort: http-wh-metrics + protocol: TCP + {{- end }} + {{- end }} diff --git a/charts/external-dns/templates/servicemonitor.yaml b/charts/external-dns/templates/servicemonitor.yaml index 95ff2f0fa..98fbcc008 100644 --- a/charts/external-dns/templates/servicemonitor.yaml +++ b/charts/external-dns/templates/servicemonitor.yaml @@ -51,7 +51,7 @@ spec: {{- end }} {{- if eq $providerName "webhook" }} {{- with .Values.provider.webhook.serviceMonitor }} - - port: webhook-metrics + - port: http-wh-metrics path: /metrics {{- with .interval }} interval: {{ . }} diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index 060dd1ffe..a2f0d0785 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -269,6 +269,9 @@ provider: timeoutSeconds: 5 failureThreshold: 6 successThreshold: 1 + service: + # -- Webhook metrics port for the service. + metricsPort: 8080 # -- Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. # @default -- See _values.yaml_ serviceMonitor: From b8e018caaf2046c2dc8e3f5596f98989b2cc92ba Mon Sep 17 00:00:00 2001 From: Johann Wagner Date: Fri, 5 Jul 2024 08:24:00 +0200 Subject: [PATCH 51/78] Introduced NAT64 prefix rewriting --- main.go | 1 + pkg/apis/externaldns/types.go | 3 + source/nat64source.go | 112 ++++++++++++++++++++++++++++++++++ source/nat64source_test.go | 90 +++++++++++++++++++++++++++ 4 files changed, 206 insertions(+) create mode 100644 source/nat64source.go create mode 100644 source/nat64source_test.go diff --git a/main.go b/main.go index f05c46906..4bfbe49c4 100644 --- a/main.go +++ b/main.go @@ -179,6 +179,7 @@ func main() { // Combine multiple sources into a single, deduplicated source. endpointsSource := source.NewDedupSource(source.NewMultiSource(sources, sourceCfg.DefaultTargets)) + endpointsSource = source.NewNAT64Source(endpointsSource, cfg.NAT64Networks) endpointsSource = source.NewTargetFilterSource(endpointsSource, targetFilter) // RegexDomainFilter overrides DomainFilter diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index 822993d09..ddb99c573 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -213,6 +213,7 @@ type Config struct { WebhookServer bool TraefikDisableLegacy bool TraefikDisableNew bool + NAT64Networks []string } var defaultConfig = &Config{ @@ -363,6 +364,7 @@ var defaultConfig = &Config{ WebhookServer: false, TraefikDisableLegacy: false, TraefikDisableNew: false, + NAT64Networks: []string{}, } // NewConfig returns new Config object @@ -452,6 +454,7 @@ func (cfg *Config) ParseFlags(args []string) error { app.Flag("exclude-target-net", "Exclude target nets (optional)").StringsVar(&cfg.ExcludeTargetNets) app.Flag("traefik-disable-legacy", "Disable listeners on Resources under the traefik.containo.us API Group").Default(strconv.FormatBool(defaultConfig.TraefikDisableLegacy)).BoolVar(&cfg.TraefikDisableLegacy) app.Flag("traefik-disable-new", "Disable listeners on Resources under the traefik.io API Group").Default(strconv.FormatBool(defaultConfig.TraefikDisableNew)).BoolVar(&cfg.TraefikDisableNew) + app.Flag("nat64-networks", "Adding an A record for each AAAA record in NAT64-enabled networks; specify multiple times for multiple possible nets (optional)").StringsVar(&cfg.NAT64Networks) // Flags related to providers providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "bluecat", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "dyn", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rcodezero", "rdns", "rfc2136", "safedns", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "vinyldns", "vultr", "webhook"} diff --git a/source/nat64source.go b/source/nat64source.go new file mode 100644 index 000000000..dec879bd2 --- /dev/null +++ b/source/nat64source.go @@ -0,0 +1,112 @@ +/* +Copyright 2024 The Kubernetes Authors. + +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 source + +import ( + "context" + "fmt" + "net/netip" + + "sigs.k8s.io/external-dns/endpoint" +) + +// nat64Source is a Source that adds A endpoints for AAAA records including an NAT64 address. +type nat64Source struct { + source Source + nat64Prefixes []string +} + +// NewNAT64Source creates a new nat64Source wrapping the provided Source. +func NewNAT64Source(source Source, nat64Prefixes []string) Source { + return &nat64Source{source: source, nat64Prefixes: nat64Prefixes} +} + +// Endpoints collects endpoints from its wrapped source and returns them without duplicates. +func (s *nat64Source) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, error) { + parsedNAT64Prefixes := make([]netip.Prefix, 0) + for _, prefix := range s.nat64Prefixes { + pPrefix, err := netip.ParsePrefix(prefix) + if err != nil { + return nil, err + } + + if pPrefix.Bits() != 96 { + return nil, fmt.Errorf("NAT64 prefixes need to be /96 prefixes.") + } + parsedNAT64Prefixes = append(parsedNAT64Prefixes, pPrefix) + } + + additionalEndpoints := []*endpoint.Endpoint{} + + endpoints, err := s.source.Endpoints(ctx) + if err != nil { + return nil, err + } + + for _, ep := range endpoints { + if ep.RecordType != endpoint.RecordTypeAAAA { + continue + } + + v4Targets := make([]string, 0) + + for _, target := range ep.Targets { + ip, err := netip.ParseAddr(target) + if err != nil { + return nil, err + } + + var sPrefix *netip.Prefix + + for _, cPrefix := range parsedNAT64Prefixes { + if cPrefix.Contains(ip) { + sPrefix = &cPrefix + } + } + + // If we do not have a NAT64 prefix, we skip this record. + if sPrefix == nil { + continue + } + + ipBytes := ip.As16() + v4AddrBytes := ipBytes[12:16] + + v4Addr, isOk := netip.AddrFromSlice(v4AddrBytes) + if !isOk { + return nil, fmt.Errorf("Could not parse %v to IPv4 address", v4AddrBytes) + } + + v4Targets = append(v4Targets, v4Addr.String()) + } + + if len(v4Targets) == 0 { + continue + } + + v4EP := ep.DeepCopy() + v4EP.Targets = v4Targets + v4EP.RecordType = endpoint.RecordTypeA + + additionalEndpoints = append(additionalEndpoints, v4EP) + } + return append(endpoints, additionalEndpoints...), nil +} + +func (s *nat64Source) AddEventHandler(ctx context.Context, handler func()) { + s.source.AddEventHandler(ctx, handler) +} diff --git a/source/nat64source_test.go b/source/nat64source_test.go new file mode 100644 index 000000000..d7a6a0a33 --- /dev/null +++ b/source/nat64source_test.go @@ -0,0 +1,90 @@ +/* +Copyright 2024 The Kubernetes Authors. + +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 source + +import ( + "context" + "testing" + + "sigs.k8s.io/external-dns/endpoint" + "sigs.k8s.io/external-dns/internal/testutils" +) + +// Validates that dedupSource is a Source +var _ Source = &nat64Source{} + +func TestNAT64Source(t *testing.T) { + t.Run("Endpoints", testNat64Source) +} + +// testDedupEndpoints tests that duplicates from the wrapped source are removed. +func testNat64Source(t *testing.T) { + for _, tc := range []struct { + title string + endpoints []*endpoint.Endpoint + expected []*endpoint.Endpoint + }{ + { + "single non-nat64 ipv6 endpoint returns one ipv6 endpoint", + []*endpoint.Endpoint{ + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeAAAA, Targets: endpoint.Targets{"2001:db8:1::1"}}, + }, + []*endpoint.Endpoint{ + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeAAAA, Targets: endpoint.Targets{"2001:db8:1::1"}}, + }, + }, + { + "single nat64 ipv6 endpoint returns one ipv4 endpoint and one ipv6 endpoint", + []*endpoint.Endpoint{ + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeAAAA, Targets: endpoint.Targets{"2001:db8::192.0.2.42"}}, + }, + []*endpoint.Endpoint{ + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeAAAA, Targets: endpoint.Targets{"2001:db8::192.0.2.42"}}, + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeA, Targets: endpoint.Targets{"192.0.2.42"}}, + }, + }, + { + "single nat64 ipv6 endpoint returns one ipv4 endpoint and one ipv6 endpoint", + []*endpoint.Endpoint{ + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeAAAA, Targets: endpoint.Targets{"2001:db8::c000:22a"}}, + }, + []*endpoint.Endpoint{ + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeAAAA, Targets: endpoint.Targets{"2001:db8::c000:22a"}}, + {DNSName: "foo.example.org", RecordType: endpoint.RecordTypeA, Targets: endpoint.Targets{"192.0.2.42"}}, + }, + }, + } { + t.Run(tc.title, func(t *testing.T) { + mockSource := new(testutils.MockSource) + mockSource.On("Endpoints").Return(tc.endpoints, nil) + + // Create our object under test and get the endpoints. + source := NewNAT64Source(mockSource, []string{"2001:DB8::/96"}) + + endpoints, err := source.Endpoints(context.Background()) + if err != nil { + t.Fatal(err) + } + + // Validate returned endpoints against desired endpoints. + validateEndpoints(t, endpoints, tc.expected) + + // Validate that the mock source was called. + mockSource.AssertExpectations(t) + }) + } +} From 1b4843aa0256c99ebb01dbb22d02deb37ce2e70f Mon Sep 17 00:00:00 2001 From: Johann Wagner Date: Mon, 12 Aug 2024 18:10:39 +0200 Subject: [PATCH 52/78] Added documentation for NAT64 prefix rewriting --- docs/nat64.md | 21 +++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 22 insertions(+) create mode 100644 docs/nat64.md diff --git a/docs/nat64.md b/docs/nat64.md new file mode 100644 index 000000000..9edd4afbb --- /dev/null +++ b/docs/nat64.md @@ -0,0 +1,21 @@ +Configure NAT64 DNS Records +======================================= + +Some NAT64 configurations are entirely handled outside the Kubernetes cluster, therefore Kubernetes does not know anything about the associated IPv4 addresses. ExternalDNS should also be able to create A records for those cases. +Therefore, we can configure `nat64-networks`, which **must** be a /96 network. You can also specify multiple `nat64-networks` for more complex setups. +This creates an additional A record with a NAT64-translated IPv4 address for each AAAA record pointing to an IPv6 address within the given `nat64-networks`. + +This can be configured with the following flag passed to the operator binary. You can also pass multiple `nat64-networks` by using a comma as seperator. +```sh +--nat64-networks="2001:db8:96::/96" +``` + + +## Setup Example + +We use an external NAT64 resolver and SIIT (Stateless IP/ICMP Translation). Therefore, our nodes only have IPv6 IP adresses but can reach IPv4 addresses *and* can be reached via IPv4. +Outgoing connections are a classic NAT64 setup, where all IPv6 addresses gets translated to a small pool of IPv4 addresses. +Incoming connnections are mapped on a different IPv4 pool, e.g. `198.51.100.0/24`, which can get translated one-to-one to IPv6 addresses. We dedicate a `/96` network for this, for example `2001:db8:96::/96`, so `198.51.100.0/24` can translated to `2001:db8:96::c633:6400/120`. Note: `/120` IPv6 network has exactly as many IP addresses as `/24` IPv4 network. + +Therefore, the `/96` network can be configured as `nat64-networks`. This means, that `2001:0DB8:96::198.51.100.10` or `2001:db8:96::c633:640a` can be translated to `198.51.100.10`. +Any source can point a record to an IPv6 address within the given `nat64-networks`, for example `2001:db8:96::c633:640a`. This creates by default an AAAA record and - if `nat64-networks` is configured - also an A record with `198.51.100.10` as target. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index 82d55858c..8a022c8d2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -31,6 +31,7 @@ nav: - Advanced Topics: - Initial Design: docs/initial-design.md - TTL: docs/ttl.md + - NAT64: docs/nat64.md - MultiTarget: docs/proposal/multi-target.md - Contributing: - Kubernetes Contributions: CONTRIBUTING.md From cc4439f6245deec8e2153af588ee5d1d6a133bcf Mon Sep 17 00:00:00 2001 From: Kim Sondrup Date: Mon, 19 Aug 2024 23:47:16 +0200 Subject: [PATCH 53/78] doc: Update webhook-provider API to fix K8s probe --- docs/tutorials/webhook-provider.md | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/docs/tutorials/webhook-provider.md b/docs/tutorials/webhook-provider.md index 684ab1acc..e3e52f06b 100644 --- a/docs/tutorials/webhook-provider.md +++ b/docs/tutorials/webhook-provider.md @@ -16,24 +16,32 @@ Providers implementing the HTTP API have to keep in sync with changes to the JSO The following table represents the methods to implement mapped to their HTTP method and route. -| Provider method | HTTP Method | Route | -| --- | --- | --- | -| Records | GET | /records | -| AdjustEndpoints | POST | /adjustendpoints | -| ApplyChanges | POST | /records | -| K8s probe | GET | /healthz | + +### Provider endpoints + +| Provider method | HTTP Method | Route | Description | +| --------------- | ----------- | ---------------- | ---------------------------------------- | +| Negotiate | GET | / | Negotiate `DomainFilter` | +| Records | GET | /records | Get records | +| AdjustEndpoints | POST | /adjustendpoints | Provider specific adjustments of records | +| ApplyChanges | POST | /records | Apply record | ExternalDNS will also make requests to the `/` endpoint for negotiation and for deserialization of the `DomainFilter`. The server needs to respond to those requests by reading the `Accept` header and responding with a corresponding `Content-Type` header specifying the supported media type format and version. -The default recommended port is 8888, and should listen only on localhost (ie: only accessible for k8s probes and external-dns). +The default recommended port for the provider endpoints is `8888`, and should listen only on `localhost` (ie: only accessible for external-dns). **NOTE**: only `5xx` responses will be retried and only `20x` will be considered as successful. All status codes different from those will be considered a failure on ExternalDNS's side. -## Metrics support +### Exposed endpoints -The metrics should listen ":8080" on `/metrics` following [Open Metrics](https://github.com/OpenObservability/OpenMetrics) format. +| Provider method | HTTP Method | Route | Description | +| --------------- | ----------- | -------- | -------------------------------------------------------------------------------------------- | +| K8s probe | GET | /healthz | Used by `livenessProbe` and `readinessProbe` | +| Open Metrics | GET | /metrics | Optional endpoint to expose [Open Metrics](https://github.com/OpenObservability/OpenMetrics) | + +The default recommended port for the exposed endpoints is `8080`, and it should be bound to all interfaces (`0.0.0.0`) ## Custom Annotations From b43ad1c432df09afc047efc40d8f609662c448e2 Mon Sep 17 00:00:00 2001 From: Michael Shen Date: Fri, 16 Aug 2024 18:37:34 -0400 Subject: [PATCH 54/78] Add tutorial to DynamoDB registry docs The existing docs described how to configure the DynamoDB registry, but didn't have a tutorial for someone to walk through. Signed-off-by: Michael Shen Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/registry/dynamodb.md | 150 ++++++++++++++++++++++++++++++++++---- docs/tutorials/aws.md | 4 + 2 files changed, 139 insertions(+), 15 deletions(-) diff --git a/docs/registry/dynamodb.md b/docs/registry/dynamodb.md index 8f5cc4b43..cc565b9b5 100644 --- a/docs/registry/dynamodb.md +++ b/docs/registry/dynamodb.md @@ -1,19 +1,11 @@ # The DynamoDB registry -The DynamoDB registry stores DNS record metadata in an AWS DynamoDB table. - -## The DynamoDB Table - -By default, the DynamoDB registry stores data in the table named `external-dns`. -A different table may be specified using the `--dynamodb-table` flag. -A different region may be specified using the `--dynamodb-region` flag. - -The table must have a partition (hash) key named `k` and string type. -The table must not have a sort (range) key. +As opposed to the default TXT registry, the DynamoDB registry stores DNS record metadata in an AWS DynamoDB table instead of in TXT records in a hosted zone. +This following tutorial extends [Setting up ExternalDNS for Services on AWS](../tutorials/aws.md) to use the DynamoDB registry instead. ## IAM permissions -The ExternalDNS Role must be granted the following permissions: +The ExternalDNS [IAM Policy](../tutorials/aws.md#iam-policy) must additionally be granted the following permissions: ```json { @@ -31,12 +23,140 @@ The ExternalDNS Role must be granted the following permissions: } ``` -The region and account ID may be specified explicitly specified instead of using wildcards. +The region and account ID may be specified explicitly specified instead of using wildcards. + +## Create a DynamoDB Table + +By default, the DynamoDB registry stores data in the table named `external-dns` and it needs to exist before configuring ExternalDNS to use the DynamoDB registry. +If the DynamoDB table has a different name, it may be specified using the `--dynamodb-table` flag. +If the DynamoDB table is in a different region, it may be specified using the `--dynamodb-region` flag. + +The following command creates a DynamoDB table with the name: `external-dns`: + +> The table must have a partition (HASH) key named `k` of type string (`S`) and the table must NOT have a sort (RANGE) key. + +```bash +aws dynamodb create-table \ + --table-name external-dns \ + --attribute-definitions \ + AttributeName=k,AttributeType=S \ + --key-schema \ + AttributeName=k,KeyType=HASH \ + --provisioned-throughput \ + ReadCapacityUnits=5,WriteCapacityUnits=5 \ + --table-class STANDARD +``` + +## Set up a hosted zone + +Follow [Set up a hosted zone](../tutorials/aws.md#set-up-a-hosted-zone) + +## Modify ExternalDNS deployment + +The ExternalDNS deployment from [Deploy ExternalDNS](../tutorials/aws.md#deploy-externaldns) needs the following modifications: + +* `--registry=txt` should be changed to `--registry=dynamodb` +* Add `--dynamodb-table=external-dns` to specify the name of the DynamoDB table, its value defaults to `external-dns` +* Add `--dynamodb-region=us-east-1` to specify the region of the DynamoDB table + +For example: + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: external-dns + labels: + app.kubernetes.io/name: external-dns +spec: + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: external-dns + template: + metadata: + labels: + app.kubernetes.io/name: external-dns + spec: + containers: + - name: external-dns + image: registry.k8s.io/external-dns/external-dns:v0.14.1 + args: + - --source=service + - --source=ingress + - --domain-filter=example.com # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones + - --provider=aws + - --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization + - --aws-zone-type=public # only look at public hosted zones (valid values are public, private or no value for both) + - --registry=dynamodb # previously, --registry=txt + - --dynamodb-table=external-dns # defaults to external-dns + - --dynamodb-region=us-east-1 # set to the region the DynamoDB table in + - --txt-owner-id=my-hostedzone-identifier + env: + - name: AWS_DEFAULT_REGION + value: us-east-1 # change to region where EKS is installed + # # Uncomment below if using static credentials + # - name: AWS_SHARED_CREDENTIALS_FILE + # value: /.aws/credentials + # volumeMounts: + # - name: aws-credentials + # mountPath: /.aws + # readOnly: true + # volumes: + # - name: aws-credentials + # secret: + # secretName: external-dns +``` + +## Validate ExternalDNS works + +Create either a [Service](../tutorials/aws.md#verify-externaldns-works-service-example) or an [Ingress](../tutorials/aws.md#verify-externaldns-works-ingress-example) and + +After roughly two minutes, check that the corresponding entry was created in the DynamoDB table: + +```bash +aws dynamodb scan --table-name external-dns +``` + +This will show something like: +``` +{ + "Items": [ + { + "k": { + "S": "nginx.example.com#A#" + }, + "o": { + "S": "my-identifier" + }, + "l": { + "M": { + "resource": { + "S": "service/default/nginx" + } + } + } + } + ], + "Count": 1, + "ScannedCount": 1, + "ConsumedCapacity": null +} +``` + +## Clean up + +In addition to the clean up steps in [Setting up ExternalDNS for Services on AWS](../tutorials/aws.md#clean-up), delete the DynamoDB table that was used as a registry. + +```bash +aws dynamodb delete-table \ + --table-name external-dns +``` ## Caching -The DynamoDB registry can optionally cache DNS records read from the provider. This can mitigate -rate limits imposed by the provider. +The DynamoDB registry can optionally cache DNS records read from the provider. This can mitigate rate limits imposed by the provider. Caching is enabled by specifying a cache duration with the `--txt-cache-interval` flag. @@ -48,4 +168,4 @@ the metadata therein to the DynamoDB table. If any such TXT records exist, any p must be supplied. If TXT records are in the set of managed record types specified by `--managed-record-types`, -it will then delete the ownership TXT records on a subsequent reconciliation. \ No newline at end of file +it will then delete the ownership TXT records on a subsequent reconciliation. diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index e836e6739..98826dd55 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -856,6 +856,10 @@ env: key: {{ YOUR_SECRET_KEY }} ``` +## DynamoDB Registry + +The DynamoDB Registry can be used to store dns records metadata. See the [DynamoDB Registry Tutorial](../registry/dynamodb.md) for more information. + ## Clean up Make sure to delete all Service objects before terminating the cluster so all load balancers get cleaned up correctly. From 3ee7771195850cc0837feac5cb0f6a711b1b9d96 Mon Sep 17 00:00:00 2001 From: Michael Shen Date: Wed, 21 Aug 2024 19:36:08 -0400 Subject: [PATCH 55/78] Emphasize the dynamodb registry in the rate limits doc Signed-off-by: Michael Shen --- docs/rate-limits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rate-limits.md b/docs/rate-limits.md index f0c769884..e50e7e95b 100644 --- a/docs/rate-limits.md +++ b/docs/rate-limits.md @@ -60,7 +60,7 @@ to match the specific needs of your deployments, with the goal to reduce the num * `--ovh-api-rate-limit=20` When using the OVH provider, specify the API request rate limit, X operations by seconds (default: 20) * Global - * `--registry=txt` The registry implementation to use to keep track of DNS record ownership (default: txt, options: txt, noop, dynamodb, aws-sd) + * `--registry=txt` The registry implementation to use to keep track of DNS record ownership. Other registry options such as dynamodb can help mitigate rate limits by storing the registry outside of the DNS hosted zone (default: txt, options: txt, noop, dynamodb, aws-sd) * `--txt-cache-interval=0s` The interval between cache synchronizations in duration format (default: disabled) * `--interval=1m0s` The interval between two consecutive synchronizations in duration format (default: 1m) * `--min-event-sync-interval=5s` The minimum interval between two consecutive synchronizations triggered from kubernetes events in duration format (default: 5s) From 50672d66b949f037e5d4a7a1656487d0008ca4bf Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Thu, 22 Aug 2024 09:10:10 +0200 Subject: [PATCH 56/78] chore: upgrade ExternalDNS to go 1.23 --- .github/workflows/ci.yaml | 2 +- .github/workflows/codeql-analysis.yaml | 2 +- .github/workflows/docs.yaml | 4 ---- .github/workflows/lint.yaml | 4 ++-- .github/workflows/staging-image-tester.yaml | 2 +- Makefile | 2 +- cloudbuild.yaml | 2 +- docs/contributing/getting-started.md | 2 +- go.mod | 2 +- 9 files changed, 9 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0645e1baf..7e3bef4b9 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -23,7 +23,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v5 with: - go-version: '1.22.4' + go-version-file: go.mod id: go - name: Check out code into the Go module directory diff --git a/.github/workflows/codeql-analysis.yaml b/.github/workflows/codeql-analysis.yaml index 29eceecca..0db3d20ff 100644 --- a/.github/workflows/codeql-analysis.yaml +++ b/.github/workflows/codeql-analysis.yaml @@ -30,7 +30,7 @@ jobs: - name: Install go version uses: actions/setup-go@v5 with: - go-version: '^1.22.4' + go-version-file: go.mod # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 967062ca0..213b82d36 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -25,10 +25,6 @@ jobs: cache: "pip" cache-dependency-path: "./docs/scripts/requirements.txt" - - uses: actions/setup-go@0c52d547c9bc32b1aa3301fd7a9cb496313a4491 # v5.0.0 - with: - go-version-file: 'go.mod' - - run: | pip install -r docs/scripts/requirements.txt diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 1e3cebf94..c5cfdcdb2 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -23,7 +23,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v5 with: - go-version: '1.22.4' + go-version-file: go.mod id: go - name: Check out code into the Go module directory @@ -31,5 +31,5 @@ jobs: - name: Lint run: | - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.57.2 + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.60.1 make lint diff --git a/.github/workflows/staging-image-tester.yaml b/.github/workflows/staging-image-tester.yaml index e8e6277d3..30493a803 100644 --- a/.github/workflows/staging-image-tester.yaml +++ b/.github/workflows/staging-image-tester.yaml @@ -23,7 +23,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v5 with: - go-version: '1.22.4' + go-version-file: go.mod id: go - name: Check out code into the Go module directory diff --git a/Makefile b/Makefile index be24ff476..5db43d867 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ CONTROLLER_GEN=$(shell which controller-gen) endif golangci-lint: - @command -v golangci-lint > /dev/null || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.57.2 + @command -v golangci-lint > /dev/null || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.60.1 # Run the golangci-lint tool .PHONY: go-lint diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 63f96d076..5f5ecb08d 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -4,7 +4,7 @@ options: substitution_option: ALLOW_LOOSE machineType: 'N1_HIGHCPU_8' steps: - - name: 'docker.io/library/golang:1.22.4-bookworm' + - name: 'docker.io/library/golang:1.23-bookworm' entrypoint: make env: - VERSION=$_GIT_TAG diff --git a/docs/contributing/getting-started.md b/docs/contributing/getting-started.md index 3f09c927f..d656d6516 100644 --- a/docs/contributing/getting-started.md +++ b/docs/contributing/getting-started.md @@ -1,7 +1,7 @@ # Quick Start - [Git](https://git-scm.com/downloads) -- [Go 1.22+](https://golang.org/dl/) +- [Go 1.23+](https://golang.org/dl/) - [Go modules](https://github.com/golang/go/wiki/Modules) - [golangci-lint](https://github.com/golangci/golangci-lint) - [ko](https://ko.build/) diff --git a/go.mod b/go.mod index e4fe1a4c3..c75b7d536 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module sigs.k8s.io/external-dns -go 1.22.4 +go 1.23 require ( cloud.google.com/go/compute/metadata v0.5.0 From 4a48a0a3556a0a4f335c49e30caabb50f6d60d4e Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Thu, 22 Aug 2024 15:23:01 +0200 Subject: [PATCH 57/78] fix linter --- provider/tencentcloud/cloudapi/mockapi.go | 2 +- provider/tencentcloud/cloudapi/tencentapi.go | 6 +++--- provider/tencentcloud/dnspod.go | 4 ++-- provider/tencentcloud/privatedns.go | 4 ++-- provider/vinyldns/vinyldns.go | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/provider/tencentcloud/cloudapi/mockapi.go b/provider/tencentcloud/cloudapi/mockapi.go index 3484ddc12..df5e64b46 100644 --- a/provider/tencentcloud/cloudapi/mockapi.go +++ b/provider/tencentcloud/cloudapi/mockapi.go @@ -71,7 +71,7 @@ func (api *mockAPIService) DeletePrivateZoneRecord(request *privatedns.DeletePri } for _, privateZoneRecord := range api.privateZoneRecords[*request.ZoneId] { deleteflag := false - if request.RecordIdSet != nil && len(request.RecordIdSet) != 0 { + if len(request.RecordIdSet) != 0 { for _, recordId := range request.RecordIdSet { if *privateZoneRecord.RecordId == *recordId { deleteflag = true diff --git a/provider/tencentcloud/cloudapi/tencentapi.go b/provider/tencentcloud/cloudapi/tencentapi.go index 5997cb67f..1c8338e07 100644 --- a/provider/tencentcloud/cloudapi/tencentapi.go +++ b/provider/tencentcloud/cloudapi/tencentapi.go @@ -258,16 +258,16 @@ func dealWithError(action Action, request string, err error) bool { } func APIErrorRecord(apiAction Action, request string, response string, err error) { - log.Infof(fmt.Sprintf("APIError API: %s/%s Request: %s, Response: %s, Error: %s", apiAction.Service, apiAction.Name, request, response, err.Error())) + log.Infof("APIError API: %s/%s Request: %s, Response: %s, Error: %s", apiAction.Service, apiAction.Name, request, response, err.Error()) } func APIRecord(apiAction Action, request string, response string) { message := fmt.Sprintf("APIRecord API: %s/%s Request: %s, Response: %s", apiAction.Service, apiAction.Name, request, response) if apiAction.ReadOnly { - // log.Infof(message) + // log.Info(message) } else { - log.Infof(message) + log.Info(message) } } diff --git a/provider/tencentcloud/dnspod.go b/provider/tencentcloud/dnspod.go index f2e714cf8..30fb81ac0 100644 --- a/provider/tencentcloud/dnspod.go +++ b/provider/tencentcloud/dnspod.go @@ -89,7 +89,7 @@ func (p *TencentCloudProvider) getDomainList() ([]*dnspod.DomainListItem, error) if err != nil { return nil, err } - if response.Response.DomainList != nil && len(response.Response.DomainList) > 0 { + if len(response.Response.DomainList) > 0 { if !p.domainFilter.IsConfigured() { domainList = append(domainList, response.Response.DomainList...) } else { @@ -119,7 +119,7 @@ func (p *TencentCloudProvider) getDomainRecordList(domain string) ([]*dnspod.Rec if err != nil { return nil, err } - if response.Response.RecordList != nil && len(response.Response.RecordList) > 0 { + if len(response.Response.RecordList) > 0 { for _, record := range response.Response.RecordList { if *record.Name == "@" && *record.Type == "NS" { // Special Record, Skip it. continue diff --git a/provider/tencentcloud/privatedns.go b/provider/tencentcloud/privatedns.go index 7bfc9d326..e209f535f 100644 --- a/provider/tencentcloud/privatedns.go +++ b/provider/tencentcloud/privatedns.go @@ -110,7 +110,7 @@ func (p *TencentCloudProvider) getPrivateZones() ([]*privatedns.PrivateZone, err if err != nil { return nil, err } - if response.Response.PrivateZoneSet != nil && len(response.Response.PrivateZoneSet) > 0 { + if len(response.Response.PrivateZoneSet) > 0 { privateZones = append(privateZones, response.Response.PrivateZoneSet...) } totalCount = *response.Response.TotalCount @@ -140,7 +140,7 @@ func (p *TencentCloudProvider) getPrivateZoneRecords(zoneId string) ([]*privated if err != nil { return nil, err } - if response.Response.RecordSet != nil && len(response.Response.RecordSet) > 0 { + if len(response.Response.RecordSet) > 0 { privateZoneRecords = append(privateZoneRecords, response.Response.RecordSet...) } totalCount = *response.Response.TotalCount diff --git a/provider/vinyldns/vinyldns.go b/provider/vinyldns/vinyldns.go index 7dc98c2d7..fefc56e6e 100644 --- a/provider/vinyldns/vinyldns.go +++ b/provider/vinyldns/vinyldns.go @@ -92,7 +92,7 @@ func (p *vinyldnsProvider) Records(ctx context.Context) (endpoints []*endpoint.E continue } - log.Infof(fmt.Sprintf("Zone: [%s:%s]", zone.ID, zone.Name)) + log.Infof("Zone: [%s:%s]", zone.ID, zone.Name) records, err := p.client.RecordSets(zone.ID) if err != nil { return nil, err @@ -101,7 +101,7 @@ func (p *vinyldnsProvider) Records(ctx context.Context) (endpoints []*endpoint.E for _, r := range records { if provider.SupportedRecordType(r.Type) { recordsCount := len(r.Records) - log.Debugf(fmt.Sprintf("%s.%s.%d.%s", r.Name, r.Type, recordsCount, zone.Name)) + log.Debugf("%s.%s.%d.%s", r.Name, r.Type, recordsCount, zone.Name) // TODO: AAAA Records if len(r.Records) > 0 { From b5f026b36d51999fc74fde4554baa6257a2e5d61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 03:53:56 +0000 Subject: [PATCH 58/78] chore(deps): bump GrantBirki/json-yaml-validate Bumps the dev-dependencies group with 1 update: [GrantBirki/json-yaml-validate](https://github.com/grantbirki/json-yaml-validate). Updates `GrantBirki/json-yaml-validate` from 3.1.0 to 3.2.0 - [Release notes](https://github.com/grantbirki/json-yaml-validate/releases) - [Commits](https://github.com/grantbirki/json-yaml-validate/compare/v3.1.0...v3.2.0) --- updated-dependencies: - dependency-name: GrantBirki/json-yaml-validate dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/json-yaml-validate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/json-yaml-validate.yml b/.github/workflows/json-yaml-validate.yml index 254f86c5f..75a1eba35 100644 --- a/.github/workflows/json-yaml-validate.yml +++ b/.github/workflows/json-yaml-validate.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: json-yaml-validate - uses: GrantBirki/json-yaml-validate@v3.1.0 + uses: GrantBirki/json-yaml-validate@v3.2.0 with: comment: "true" # enable comment mode yaml_exclude_regex: "(charts/external-dns/templates.*|mkdocs.yml)" From 35cb2494d5947a18f04d09f6538a3c2fb2c8dced Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Fri, 23 Aug 2024 09:11:03 +0200 Subject: [PATCH 59/78] fix ordering --- .github/workflows/ci.yaml | 6 +++--- .github/workflows/lint.yaml | 13 +++++++------ .github/workflows/staging-image-tester.yaml | 6 +++--- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 7e3bef4b9..48fc93b06 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,15 +20,15 @@ jobs: runs-on: ubuntu-latest steps: + - name: Check out code into the Go module directory + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - name: Set up Go 1.x uses: actions/setup-go@v5 with: go-version-file: go.mod id: go - - name: Check out code into the Go module directory - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - name: Install CI run: | go get -v -t -d ./... diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index c5cfdcdb2..72aa83d63 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -8,6 +8,7 @@ on: permissions: contents: read # to fetch code (actions/checkout) + checks: write jobs: @@ -20,16 +21,16 @@ jobs: runs-on: ubuntu-latest steps: + - name: Check out code into the Go module directory + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - name: Set up Go 1.x uses: actions/setup-go@v5 with: go-version-file: go.mod id: go - - name: Check out code into the Go module directory - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - name: Lint - run: | - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.60.1 - make lint + uses: golangci/golangci-lint-action@v6 + with: + version: v1.60 diff --git a/.github/workflows/staging-image-tester.yaml b/.github/workflows/staging-image-tester.yaml index 30493a803..dd3d5e450 100644 --- a/.github/workflows/staging-image-tester.yaml +++ b/.github/workflows/staging-image-tester.yaml @@ -20,15 +20,15 @@ jobs: runs-on: ubuntu-latest steps: + - name: Check out code into the Go module directory + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - name: Set up Go 1.x uses: actions/setup-go@v5 with: go-version-file: go.mod id: go - - name: Check out code into the Go module directory - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - - name: Install CI run: | go get -v -t -d ./... From 0ec66ee66922715e094c5de114b22388d4cbd3e8 Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Fri, 23 Aug 2024 09:24:28 +0200 Subject: [PATCH 60/78] fix linter --- .github/workflows/lint.yaml | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 72aa83d63..b547756b2 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -28,9 +28,9 @@ jobs: uses: actions/setup-go@v5 with: go-version-file: go.mod - id: go - name: Lint uses: golangci/golangci-lint-action@v6 with: + args: --timeout=30m version: v1.60 diff --git a/Makefile b/Makefile index 5db43d867..5ffdfd0fc 100644 --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ CONTROLLER_GEN=$(shell which controller-gen) endif golangci-lint: - @command -v golangci-lint > /dev/null || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.60.1 + @command -v golangci-lint > /dev/null || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.60.3 # Run the golangci-lint tool .PHONY: go-lint From 78344d953cd74549fe81a847933a975bdebafe76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 03:36:48 +0000 Subject: [PATCH 61/78] chore(deps): bump GrantBirki/json-yaml-validate Bumps the dev-dependencies group with 1 update: [GrantBirki/json-yaml-validate](https://github.com/grantbirki/json-yaml-validate). Updates `GrantBirki/json-yaml-validate` from 3.2.0 to 3.2.1 - [Release notes](https://github.com/grantbirki/json-yaml-validate/releases) - [Commits](https://github.com/grantbirki/json-yaml-validate/compare/v3.2.0...v3.2.1) --- updated-dependencies: - dependency-name: GrantBirki/json-yaml-validate dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/json-yaml-validate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/json-yaml-validate.yml b/.github/workflows/json-yaml-validate.yml index 75a1eba35..cca01ea11 100644 --- a/.github/workflows/json-yaml-validate.yml +++ b/.github/workflows/json-yaml-validate.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: json-yaml-validate - uses: GrantBirki/json-yaml-validate@v3.2.0 + uses: GrantBirki/json-yaml-validate@v3.2.1 with: comment: "true" # enable comment mode yaml_exclude_regex: "(charts/external-dns/templates.*|mkdocs.yml)" From 38178940a3af2c30531d73e8cec4f0aab4a75337 Mon Sep 17 00:00:00 2001 From: Kyle Date: Thu, 29 Aug 2024 03:02:57 +1000 Subject: [PATCH 62/78] feat: add annotation and label filters to Ambassador Host Source (#2633) * Add annotation filter to Ambassador Host Source This change makes the Ambassador Host source respect the External-DNS annotationFilter allowing for an Ambassador Host resource to specify what External-DNS deployment to use when there are multiple External-DNS deployments within the same cluster. Before this change if you had two External-DNS deployments within the cluster and used the Ambassador Host source the first External-DNS to process the resource will create the record and not the one that was specified in the filter annotation. I added the `filterByAnnotations` function so that it matched the same way the other sources have implemented annotation filtering. I didn't add the controller check only because I wanted to keep this change to implementing the annotationFilter. Example: Create two External-DNS deployments 1 public and 1 private and set the Ambassador Host to use the public External-DNS using the annotation filter. ``` --- apiVersion: apps/v1 kind: Deployment metadata: name: external-dns-private spec: strategy: type: Recreate selector: matchLabels: app: external-dns-private template: metadata: labels: app: external-dns-private annotations: iam.amazonaws.com/role: {ARN} # AWS ARN role spec: serviceAccountName: external-dns containers: - name: external-dns image: k8s.gcr.io/external-dns/external-dns:latest args: - --source=ambassador-host - --domain-filter=example.net # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones - --provider=aws - --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization - --aws-zone-type=private # only look at public hosted zones (valid values are public, private or no value for both) - --registry=txt - --txt-owner-id= {Hosted Zone ID} # Insert Route53 Hosted Zone ID here - --annotation-filter=kubernetes.io/ingress.class in (private) --- apiVersion: apps/v1 kind: Deployment metadata: name: external-dns-public spec: strategy: type: Recreate selector: matchLabels: app: external-dns-public template: metadata: labels: app: external-dns-public annotations: iam.amazonaws.com/role: {ARN} # AWS ARN role spec: serviceAccountName: external-dns containers: - name: external-dns image: k8s.gcr.io/external-dns/external-dns:latest args: - --source=ambassador-host - --domain-filter=example.net # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones - --provider=aws - --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization - --aws-zone-type= # only look at public hosted zones (valid values are public, private or no value for both) - --registry=txt - --txt-owner-id= {Hosted Zone ID} # Insert Route53 Hosted Zone ID here - --annotation-filter=kubernetes.io/ingress.class in (public) --- apiVersion: getambassador.io/v3alpha1 kind: Host metadata: name: your-hostname annotations: external-dns.ambassador-service: emissary-ingress/emissary kubernetes.io/ingress.class: public spec: acmeProvider: authority: none hostname: your-hostname.example.com ``` Fixes kubernetes-sigs/external-dns#2632 * Add Label filltering for Ambassador Host source Currently the `--label-filter` flag can only be used to filter CRDs, Ingress, Service and Openshift Route objects which match the label selector passed through that flag. This change extends the functionality to the Ambassador Host type object. When the flag is not specified the default value is `labels.Everything()` which is an empty string, the same as before. An annotation based filter is inefficient because the filtering has to be done in the controller instead of the API server like with label filtering. The Annotation based filtering has been left in for legacy reasons so the Ambassador Host source can be used inconjunction with the other sources that don't yet support label filltering. It is possible to use label based filltering with annotation based filltering so you can initially filter by label then filter the returned hosts by annotation. This is not recomended * Update Ambassador Host source docs Add that the Ambassador Host source now supports both annotation and label filltering. --- docs/sources/sources.md | 2 +- pkg/apis/externaldns/types.go | 2 +- source/ambassador_host.go | 55 +++++- source/ambassador_host_test.go | 349 +++++++++++++++++++++++++++++++-- source/store.go | 2 +- 5 files changed, 392 insertions(+), 18 deletions(-) diff --git a/docs/sources/sources.md b/docs/sources/sources.md index b15662491..5f262bb40 100644 --- a/docs/sources/sources.md +++ b/docs/sources/sources.md @@ -2,7 +2,7 @@ | Source | Resources | annotation-filter | label-filter | |---------------------------------|-------------------------------------------------------------------------------|-------------------|--------------| -| ambassador-host | Host.getambassador.io | | | +| ambassador-host | Host.getambassador.io | Yes | Yes | | connector | | | | | contour-httpproxy | HttpProxy.projectcontour.io | Yes | | | cloudfoundry | | | | diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index 423229a8b..0687521b7 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -430,7 +430,7 @@ func (cfg *Config) ParseFlags(args []string) error { app.Flag("openshift-router-name", "if source is openshift-route then you can pass the ingress controller name. Based on this name external-dns will select the respective router from the route status and map that routerCanonicalHostname to the route host while creating a CNAME record.").StringVar(&cfg.OCPRouterName) app.Flag("namespace", "Limit resources queried for endpoints to a specific namespace (default: all namespaces)").Default(defaultConfig.Namespace).StringVar(&cfg.Namespace) app.Flag("annotation-filter", "Filter resources queried for endpoints by annotation, using label selector semantics").Default(defaultConfig.AnnotationFilter).StringVar(&cfg.AnnotationFilter) - app.Flag("label-filter", "Filter resources queried for endpoints by label selector; currently supported by source types crd, gateway-httproute, gateway-grpcroute, gateway-tlsroute, gateway-tcproute, gateway-udproute, ingress, node, openshift-route, and service").Default(defaultConfig.LabelFilter).StringVar(&cfg.LabelFilter) + app.Flag("label-filter", "Filter resources queried for endpoints by label selector; currently supported by source types crd, gateway-httproute, gateway-grpcroute, gateway-tlsroute, gateway-tcproute, gateway-udproute, ingress, node, openshift-route, service and ambassador-host").Default(defaultConfig.LabelFilter).StringVar(&cfg.LabelFilter) app.Flag("ingress-class", "Require an Ingress to have this class name (defaults to any class; specify multiple times to allow more than one class)").StringsVar(&cfg.IngressClassNames) app.Flag("fqdn-template", "A templated string that's used to generate DNS names from sources that don't define a hostname themselves, or to add a hostname suffix when paired with the fake source (optional). Accepts comma separated list for multiple global FQDN.").Default(defaultConfig.FQDNTemplate).StringVar(&cfg.FQDNTemplate) app.Flag("combine-fqdn-annotation", "Combine FQDN template and Annotations instead of overwriting").BoolVar(&cfg.CombineFQDNAndAnnotation) diff --git a/source/ambassador_host.go b/source/ambassador_host.go index 5d8b9e56e..cb0501210 100644 --- a/source/ambassador_host.go +++ b/source/ambassador_host.go @@ -57,8 +57,10 @@ type ambassadorHostSource struct { dynamicKubeClient dynamic.Interface kubeClient kubernetes.Interface namespace string + annotationFilter string ambassadorHostInformer informers.GenericInformer unstructuredConverter *unstructuredConverter + labelSelector labels.Selector } // NewAmbassadorHostSource creates a new ambassadorHostSource with the given config. @@ -67,6 +69,8 @@ func NewAmbassadorHostSource( dynamicKubeClient dynamic.Interface, kubeClient kubernetes.Interface, namespace string, + annotationFilter string, + labelSelector labels.Selector, ) (Source, error) { var err error @@ -85,6 +89,7 @@ func NewAmbassadorHostSource( informerFactory.Start(ctx.Done()) + // wait for the local cache to be populated. if err := waitForDynamicCacheSync(context.Background(), informerFactory); err != nil { return nil, err } @@ -98,20 +103,23 @@ func NewAmbassadorHostSource( dynamicKubeClient: dynamicKubeClient, kubeClient: kubeClient, namespace: namespace, + annotationFilter: annotationFilter, ambassadorHostInformer: ambassadorHostInformer, unstructuredConverter: uc, + labelSelector: labelSelector, }, nil } // Endpoints returns endpoint objects for each host-target combination that should be processed. // Retrieves all Hosts in the source's namespace(s). func (sc *ambassadorHostSource) Endpoints(ctx context.Context) ([]*endpoint.Endpoint, error) { - hosts, err := sc.ambassadorHostInformer.Lister().ByNamespace(sc.namespace).List(labels.Everything()) + hosts, err := sc.ambassadorHostInformer.Lister().ByNamespace(sc.namespace).List(sc.labelSelector) if err != nil { return nil, err } - endpoints := []*endpoint.Endpoint{} + // Get a list of Ambassador Host resources + ambassadorHosts := []*ambassador.Host{} for _, hostObj := range hosts { unstructuredHost, ok := hostObj.(*unstructured.Unstructured) if !ok { @@ -123,7 +131,18 @@ func (sc *ambassadorHostSource) Endpoints(ctx context.Context) ([]*endpoint.Endp if err != nil { return nil, err } + ambassadorHosts = append(ambassadorHosts, host) + } + // Filter Ambassador Hosts + ambassadorHosts, err = sc.filterByAnnotations(ambassadorHosts) + if err != nil { + return nil, errors.Wrap(err, "failed to filter Ambassador Hosts by annotation") + } + + endpoints := []*endpoint.Endpoint{} + + for _, host := range ambassadorHosts { fullname := fmt.Sprintf("%s/%s", host.Namespace, host.Name) // look for the "exernal-dns.ambassador-service" annotation. If it is not there then just ignore this `Host` @@ -269,3 +288,35 @@ func newUnstructuredConverter() (*unstructuredConverter, error) { return uc, nil } + +// Filter a list of Ambassador Host Resources to only return the ones that +// contain the required External-DNS annotation filter +func (sc *ambassadorHostSource) filterByAnnotations(ambassadorHosts []*ambassador.Host) ([]*ambassador.Host, error) { + // External-DNS Annotation Filter + labelSelector, err := metav1.ParseToLabelSelector(sc.annotationFilter) + if err != nil { + return nil, err + } + + selector, err := metav1.LabelSelectorAsSelector(labelSelector) + if err != nil { + return nil, err + } + + // empty filter returns original list of Ambassador Hosts + if selector.Empty() { + return ambassadorHosts, nil + } + + // Return a filtered list of Ambassador Hosts + filteredList := []*ambassador.Host{} + for _, host := range ambassadorHosts { + annotations := labels.Set(host.Annotations) + // include Ambassador Host if its annotations match the annotation filter + if selector.Matches(annotations) { + filteredList = append(filteredList, host) + } + } + + return filteredList, nil +} diff --git a/source/ambassador_host_test.go b/source/ambassador_host_test.go index 1f0091146..970bb2a19 100644 --- a/source/ambassador_host_test.go +++ b/source/ambassador_host_test.go @@ -17,6 +17,7 @@ limitations under the License. package source import ( + "context" "fmt" "testing" @@ -24,10 +25,10 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "golang.org/x/net/context" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" fakeDynamic "k8s.io/client-go/dynamic/fake" fakeKube "k8s.io/client-go/kubernetes/fake" @@ -37,6 +38,9 @@ import ( const defaultAmbassadorNamespace = "ambassador" const defaultAmbassadorServiceName = "ambassador" +// This is a compile-time validation that ambassadorHostSource is a Source. +var _ Source = &ambassadorHostSource{} + type AmbassadorSuite struct { suite.Suite } @@ -57,13 +61,16 @@ func TestAmbassadorHostSource(t *testing.T) { hostAnnotation := fmt.Sprintf("%s/%s", defaultAmbassadorNamespace, defaultAmbassadorServiceName) for _, ti := range []struct { - title string - host ambassador.Host - service v1.Service - expected []*endpoint.Endpoint + title string + annotationFilter string + labelSelector labels.Selector + host ambassador.Host + service v1.Service + expected []*endpoint.Endpoint }{ { - title: "Simple host", + title: "Simple host", + labelSelector: labels.Everything(), host: ambassador.Host{ ObjectMeta: metav1.ObjectMeta{ Name: "basic-host", @@ -95,7 +102,8 @@ func TestAmbassadorHostSource(t *testing.T) { }, }, }, { - title: "Service with load balancer hostname", + title: "Service with load balancer hostname", + labelSelector: labels.Everything(), host: ambassador.Host{ ObjectMeta: metav1.ObjectMeta{ Name: "basic-host", @@ -127,7 +135,8 @@ func TestAmbassadorHostSource(t *testing.T) { }, }, }, { - title: "Service with external IP", + title: "Service with external IP", + labelSelector: labels.Everything(), host: ambassador.Host{ ObjectMeta: metav1.ObjectMeta{ Name: "service-external-ip", @@ -162,7 +171,8 @@ func TestAmbassadorHostSource(t *testing.T) { }, }, }, { - title: "Host with target annotation", + title: "Host with target annotation", + labelSelector: labels.Everything(), host: ambassador.Host{ ObjectMeta: metav1.ObjectMeta{ Name: "basic-host", @@ -195,7 +205,8 @@ func TestAmbassadorHostSource(t *testing.T) { }, }, }, { - title: "Host with TTL annotation", + title: "Host with TTL annotation", + labelSelector: labels.Everything(), host: ambassador.Host{ ObjectMeta: metav1.ObjectMeta{ Name: "basic-host", @@ -229,7 +240,8 @@ func TestAmbassadorHostSource(t *testing.T) { }, }, }, { - title: "Host with provider specific annotation", + title: "Host with provider specific annotation", + labelSelector: labels.Everything(), host: ambassador.Host{ ObjectMeta: metav1.ObjectMeta{ Name: "basic-host", @@ -266,7 +278,8 @@ func TestAmbassadorHostSource(t *testing.T) { }, }, }, { - title: "Host with missing Ambassador annotation", + title: "Host with missing Ambassador annotation", + labelSelector: labels.Everything(), host: ambassador.Host{ ObjectMeta: metav1.ObjectMeta{ Name: "basic-host", @@ -288,6 +301,316 @@ func TestAmbassadorHostSource(t *testing.T) { }, }, expected: []*endpoint.Endpoint{}, + }, { + title: "valid matching annotation filter expression", + annotationFilter: "kubernetes.io/ingress.class in (external-ingress)", + labelSelector: labels.Everything(), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "external-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{ + { + DNSName: "www.example.org", + RecordType: endpoint.RecordTypeA, + Targets: endpoint.Targets{"1.1.1.1"}, + }, + }, + }, { + title: "valid non-matching annotation filter expression", + annotationFilter: "kubernetes.io/ingress.class in (external-ingress)", + labelSelector: labels.Everything(), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "internal-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{}, + }, { + title: "invalid annotation filter expression", + annotationFilter: "kubernetes.io/ingress.class in (invalid-ingress)", + labelSelector: labels.Everything(), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "external-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{}, + }, { + title: "valid non-matching annotation filter label", + annotationFilter: "kubernetes.io/ingress.class=external-ingress", + labelSelector: labels.Everything(), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "internal-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{}, + }, + { + title: "valid non-matching label filter expression", + labelSelector: labels.SelectorFromSet(labels.Set{"kubernetes.io/ingress.class": "external-ingress"}), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "internal-ingress", + }, + Labels: map[string]string{ + "kubernetes.io/ingress.class": "internal-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{}, + }, + { + title: "valid matching label filter expression for single host", + labelSelector: labels.SelectorFromSet(labels.Set{"kubernetes.io/ingress.class": "external-ingress"}), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + }, + Labels: map[string]string{ + "kubernetes.io/ingress.class": "external-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + Hostname: "dns.google", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{ + { + DNSName: "www.example.org", + RecordType: endpoint.RecordTypeA, + Targets: endpoint.Targets{"1.1.1.1"}, + }, + { + DNSName: "www.example.org", + RecordType: endpoint.RecordTypeCNAME, + Targets: endpoint.Targets{"dns.google"}, + }, + }, + }, + { + title: "valid matching label filter expression and matching annotation filter", + annotationFilter: "kubernetes.io/ingress.class in (external-ingress)", + labelSelector: labels.SelectorFromSet(labels.Set{"kubernetes.io/ingress.class": "external-ingress"}), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "external-ingress", + }, + Labels: map[string]string{ + "kubernetes.io/ingress.class": "external-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + Hostname: "dns.google", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{ + { + DNSName: "www.example.org", + RecordType: endpoint.RecordTypeA, + Targets: endpoint.Targets{"1.1.1.1"}, + }, + { + DNSName: "www.example.org", + RecordType: endpoint.RecordTypeCNAME, + Targets: endpoint.Targets{"dns.google"}, + }, + }, + }, + { + title: "valid non matching label filter expression and valid matching annotation filter", + annotationFilter: "kubernetes.io/ingress.class in (external-ingress)", + labelSelector: labels.SelectorFromSet(labels.Set{"kubernetes.io/ingress.class": "external-ingress"}), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "external-ingress", + }, + Labels: map[string]string{ + "kubernetes.io/ingress.class": "internal-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + Hostname: "dns.google", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{}, + }, + { + title: "valid matching label filter expression and non matching annotation filter", + annotationFilter: "kubernetes.io/ingress.class in (external-ingress)", + labelSelector: labels.SelectorFromSet(labels.Set{"kubernetes.io/ingress.class": "external-ingress"}), + host: ambassador.Host{ + ObjectMeta: metav1.ObjectMeta{ + Name: "basic-host", + Annotations: map[string]string{ + ambHostAnnotation: hostAnnotation, + "kubernetes.io/ingress.class": "internal-ingress", + }, + Labels: map[string]string{ + "kubernetes.io/ingress.class": "external-ingress", + }, + }, + Spec: &ambassador.HostSpec{ + Hostname: "www.example.org", + }, + }, + service: v1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: defaultAmbassadorServiceName, + }, + Status: v1.ServiceStatus{ + LoadBalancer: v1.LoadBalancerStatus{ + Ingress: []v1.LoadBalancerIngress{{ + IP: "1.1.1.1", + Hostname: "dns.google", + }}, + }, + }, + }, + expected: []*endpoint.Endpoint{}, }, } { ti := ti @@ -312,7 +635,7 @@ func TestAmbassadorHostSource(t *testing.T) { _, err = fakeDynamicClient.Resource(ambHostGVR).Namespace(namespace).Create(context.Background(), host, metav1.CreateOptions{}) assert.NoError(t, err) - source, err := NewAmbassadorHostSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, namespace) + source, err := NewAmbassadorHostSource(context.TODO(), fakeDynamicClient, fakeKubernetesClient, namespace, ti.annotationFilter, ti.labelSelector) assert.NoError(t, err) assert.NotNil(t, source) diff --git a/source/store.go b/source/store.go index cdb993b6b..f67091d31 100644 --- a/source/store.go +++ b/source/store.go @@ -276,7 +276,7 @@ func BuildWithConfig(ctx context.Context, source string, p ClientGenerator, cfg if err != nil { return nil, err } - return NewAmbassadorHostSource(ctx, dynamicClient, kubernetesClient, cfg.Namespace) + return NewAmbassadorHostSource(ctx, dynamicClient, kubernetesClient, cfg.Namespace, cfg.AnnotationFilter, cfg.LabelFilter) case "contour-httpproxy": dynamicClient, err := p.DynamicKubernetesClient() if err != nil { From 2583b64fb84b0e6739fc38bce1f74ff02b289d73 Mon Sep 17 00:00:00 2001 From: Ben Fiola Date: Sat, 31 Aug 2024 00:53:42 -0700 Subject: [PATCH 63/78] Add RouterOS provider to README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0be50462d..2ca2f17a5 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ Known providers using webhooks: | IONOS | https://github.com/ionos-cloud/external-dns-ionos-webhook | | Infoblox | https://github.com/AbsaOSS/external-dns-infoblox-webhook | | Netcup | https://github.com/mrueg/external-dns-netcup-webhook | +| RouterOS | https://github.com/benfiola/external-dns-routeros-provider | | STACKIT | https://github.com/stackitcloud/external-dns-stackit-webhook | | Unifi | https://github.com/kashalls/external-dns-unifi-webhook | From f642c598aaba334bf29dd102cb47d89de327250b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Sep 2024 03:57:59 +0000 Subject: [PATCH 64/78] chore(deps): bump actions/setup-python in the dev-dependencies group Bumps the dev-dependencies group with 1 update: [actions/setup-python](https://github.com/actions/setup-python). Updates `actions/setup-python` from 5.1.1 to 5.2.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/39cd14951b08e74b54015e9e001cdefcf80e669f...f677139bbe7f9c59b41e40162b753c062f5d49a3) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dev-dependencies ... Signed-off-by: dependabot[bot] --- .github/workflows/docs.yaml | 2 +- .github/workflows/lint-test-chart.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 213b82d36..9aef40d53 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -19,7 +19,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 with: python-version: "3.12" cache: "pip" diff --git a/.github/workflows/lint-test-chart.yaml b/.github/workflows/lint-test-chart.yaml index 8dda29b2b..b153ab136 100644 --- a/.github/workflows/lint-test-chart.yaml +++ b/.github/workflows/lint-test-chart.yaml @@ -59,7 +59,7 @@ jobs: version: latest - name: Install Python - uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 + uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 # v5.2.0 with: token: ${{ github.token }} python-version: "3.x" From 74a8cdad85eab59694b199ccb5df1bcbf20e31f2 Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Tue, 3 Sep 2024 08:53:23 +0200 Subject: [PATCH 65/78] chore: remove unmaintained providers --- README.md | 12 - docs/tutorials/ANS_Group_SafeDNS.md | 210 - docs/tutorials/bluecat.md | 152 - docs/tutorials/dyn.md | 149 - docs/tutorials/rcodezero.md | 206 - go.mod | 22 - go.sum | 299 - main.go | 29 - pkg/apis/externaldns/types.go | 33 +- pkg/apis/externaldns/types_test.go | 38 - pkg/apis/externaldns/validation/validation.go | 13 - .../externaldns/validation/validation_test.go | 47 - provider/bluecat/OWNERS | 6 - provider/bluecat/bluecat.go | 511 - provider/bluecat/bluecat_test.go | 465 - provider/bluecat/gateway/api.go | 583 - provider/bluecat/gateway/api_test.go | 228 - provider/dyn/dyn.go | 702 - provider/dyn/dyn_test.go | 294 - provider/dyn/soap/client.go | 44 - provider/dyn/soap/services.go | 32865 ---------------- provider/rcode0/rcode0.go | 313 - provider/rcode0/rcode0_test.go | 394 - provider/safedns/safedns.go | 242 - provider/safedns/safedns_test.go | 366 - provider/vinyldns/vinyldns.go | 272 - provider/vinyldns/vinyldns_test.go | 225 - provider/vultr/vultr.go | 304 - provider/vultr/vultr_test.go | 213 - 29 files changed, 1 insertion(+), 39236 deletions(-) delete mode 100644 docs/tutorials/ANS_Group_SafeDNS.md delete mode 100644 docs/tutorials/bluecat.md delete mode 100644 docs/tutorials/dyn.md delete mode 100644 docs/tutorials/rcodezero.md delete mode 100644 provider/bluecat/OWNERS delete mode 100644 provider/bluecat/bluecat.go delete mode 100644 provider/bluecat/bluecat_test.go delete mode 100644 provider/bluecat/gateway/api.go delete mode 100644 provider/bluecat/gateway/api_test.go delete mode 100644 provider/dyn/dyn.go delete mode 100644 provider/dyn/dyn_test.go delete mode 100644 provider/dyn/soap/client.go delete mode 100644 provider/dyn/soap/services.go delete mode 100644 provider/rcode0/rcode0.go delete mode 100644 provider/rcode0/rcode0_test.go delete mode 100644 provider/safedns/safedns.go delete mode 100644 provider/safedns/safedns_test.go delete mode 100644 provider/vinyldns/vinyldns.go delete mode 100644 provider/vinyldns/vinyldns_test.go delete mode 100644 provider/vultr/vultr.go delete mode 100644 provider/vultr/vultr_test.go diff --git a/README.md b/README.md index 2ca2f17a5..31ca79865 100644 --- a/README.md +++ b/README.md @@ -36,13 +36,10 @@ ExternalDNS allows you to keep selected zones (via `--domain-filter`) synchroniz * [AWS Route 53](https://aws.amazon.com/route53/) * [AWS Cloud Map](https://docs.aws.amazon.com/cloud-map/) * [AzureDNS](https://azure.microsoft.com/en-us/services/dns) -* [BlueCat](https://bluecatnetworks.com) * [Civo](https://www.civo.com) * [CloudFlare](https://www.cloudflare.com/dns) -* [RcodeZero](https://www.rcodezero.at/) * [DigitalOcean](https://www.digitalocean.com/products/networking) * [DNSimple](https://dnsimple.com/) -* [Dyn](https://dyn.com/dns/) * [OpenStack Designate](https://docs.openstack.org/designate/latest/) * [PowerDNS](https://www.powerdns.com/) * [CoreDNS](https://coredns.io/) @@ -59,7 +56,6 @@ ExternalDNS allows you to keep selected zones (via `--domain-filter`) synchroniz * [Akamai Edge DNS](https://learn.akamai.com/en-us/products/cloud_security/edge_dns.html) * [GoDaddy](https://www.godaddy.com) * [Gandi](https://www.gandi.net) -* [ANS Group SafeDNS](https://portal.ans.co.uk/safedns/) * [IBM Cloud DNS](https://www.ibm.com/cloud/dns) * [TencentCloud PrivateDNS](https://cloud.tencent.com/product/privatedns) * [TencentCloud DNSPod](https://cloud.tencent.com/product/cns) @@ -116,13 +112,10 @@ The following table clarifies the current status of the providers according to t | AWS Cloud Map | Beta | | | Akamai Edge DNS | Beta | | | AzureDNS | Stable | | -| BlueCat | Alpha | @seanmalloy @vinny-sabatini | | Civo | Alpha | @alejandrojnm | | CloudFlare | Beta | | -| RcodeZero | Alpha | | | DigitalOcean | Alpha | | | DNSimple | Alpha | | -| Dyn | Alpha | | | OpenStack Designate | Alpha | | | PowerDNS | Alpha | | | CoreDNS | Alpha | | @@ -140,7 +133,6 @@ The following table clarifies the current status of the providers according to t | UltraDNS | Alpha | | | GoDaddy | Alpha | | | Gandi | Alpha | @packi | -| SafeDNS | Alpha | @assureddt | | IBMCloud | Alpha | @hughhuangzh | | TencentCloud | Alpha | @Hyzhou | | Plural | Alpha | @michaeljguarino | @@ -179,11 +171,9 @@ The following tutorials are provided: * [Azure Private DNS](docs/tutorials/azure-private-dns.md) * [Civo](docs/tutorials/civo.md) * [Cloudflare](docs/tutorials/cloudflare.md) -* [BlueCat](docs/tutorials/bluecat.md) * [CoreDNS](docs/tutorials/coredns.md) * [DigitalOcean](docs/tutorials/digitalocean.md) * [DNSimple](docs/tutorials/dnsimple.md) -* [Dyn](docs/tutorials/dyn.md) * [Exoscale](docs/tutorials/exoscale.md) * [ExternalName Services](docs/tutorials/externalname.md) * Google Kubernetes Engine @@ -200,7 +190,6 @@ The following tutorials are provided: * [OpenStack Designate](docs/tutorials/designate.md) * [Oracle Cloud Infrastructure (OCI) DNS](docs/tutorials/oracle.md) * [PowerDNS](docs/tutorials/pdns.md) -* [RcodeZero](docs/tutorials/rcodezero.md) * [RancherDNS (RDNS)](docs/tutorials/rdns.md) * [RFC2136](docs/tutorials/rfc2136.md) * [TransIP](docs/tutorials/transip.md) @@ -211,7 +200,6 @@ The following tutorials are provided: * [UltraDNS](docs/tutorials/ultradns.md) * [GoDaddy](docs/tutorials/godaddy.md) * [Gandi](docs/tutorials/gandi.md) -* [SafeDNS](docs/tutorials/ANS_Group_SafeDNS.md) * [IBM Cloud](docs/tutorials/ibmcloud.md) * [Nodes as source](docs/tutorials/nodes.md) * [TencentCloud](docs/tutorials/tencentcloud.md) diff --git a/docs/tutorials/ANS_Group_SafeDNS.md b/docs/tutorials/ANS_Group_SafeDNS.md deleted file mode 100644 index b0241c39f..000000000 --- a/docs/tutorials/ANS_Group_SafeDNS.md +++ /dev/null @@ -1,210 +0,0 @@ -# Setting up ExternalDNS for Services on ANS Group's SafeDNS - -This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using SafeDNS. - -Make sure to use **>=0.11.0** version of ExternalDNS for this tutorial. - -## Managing DNS with SafeDNS - -If you want to learn about how to use the SafeDNS service read the following tutorials: -To learn more about the use of SafeDNS in general, see the following page: - -[ANS Group's SafeDNS documentation](https://docs.ukfast.co.uk/domains/safedns/index.html). - -## Creating SafeDNS credentials - -Generate a fresh API token for use with ExternalDNS, following the instructions -at the ANS Group developer [Getting-Started](https://developers.ukfast.io/getting-started) -page. You will need to grant read/write access to the SafeDNS API. No access to -any other ANS Group service is required. - -The environment variable `SAFEDNS_TOKEN` must have a value of this token to run -ExternalDNS with SafeDNS integration. - -## Deploy ExternalDNS - -Connect your `kubectl` client to the cluster you want to test ExternalDNS with. -Then apply one of the following manifests file to deploy ExternalDNS. - -### Manifest (for clusters without RBAC enabled) - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - # You will need to check what the latest version is yourself: - # https://github.com/kubernetes-sigs/external-dns/releases - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - # (optional) limit to only example.com domains; change to match the - # zone created above. - - --domain-filter=example.com - - --provider=safedns - env: - - name: SAFEDNS_TOKEN - value: "SAFEDNSTOKENSAFEDNSTOKEN" -``` - -### Manifest (for clusters with RBAC enabled) - -```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns -rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: -- kind: ServiceAccount - name: external-dns - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - # (optional) limit to only example.com domains; change to match the - # zone created above. - - --domain-filter=example.com - - --provider=safedns - env: - - name: SAFEDNS_TOKEN - value: "SAFEDNSTOKENSAFEDNSTOKEN" -``` - -## Deploying an Nginx Service - -Create a service file called 'nginx.yaml' with the following contents: - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx -spec: - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - image: nginx - name: nginx - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx - annotations: - external-dns.alpha.kubernetes.io/hostname: my-app.example.com -spec: - selector: - app: nginx - type: LoadBalancer - ports: - - protocol: TCP - port: 80 - targetPort: 80 -``` - -Note the annotation on the service; use a hostname that matches the domain -filter specified above. - -ExternalDNS uses this annotation to determine what services should be registered -with DNS. Removing the annotation will cause ExternalDNS to remove the -corresponding DNS records. - -Create the deployment and service: - -```console -$ kubectl create -f nginx.yaml -``` - -Depending where you run your service it can take a little while for your cloud -provider to create an external IP for the service. - -Once the service has an external IP assigned, ExternalDNS will notice the new -service IP address and synchronize the SafeDNS records. - -## Verifying SafeDNS records - -Check your [SafeDNS UI](https://my.ukfast.co.uk/safedns/index.php) and select -the appropriate domain to view the records for your SafeDNS zone. - -This should show the external IP address of the service as the A record for your -domain. - -Alternatively, you can perform a DNS lookup for the hostname specified: -```console -$ dig +short my-app.example.com -an.ip.addr.ess -``` - -## Cleanup - -Now that we have verified that ExternalDNS will automatically manage SafeDNS -records, we can delete the tutorial's example: - -``` -$ kubectl delete service -f nginx.yaml -$ kubectl delete service -f externaldns.yaml -``` diff --git a/docs/tutorials/bluecat.md b/docs/tutorials/bluecat.md deleted file mode 100644 index 4bcda2597..000000000 --- a/docs/tutorials/bluecat.md +++ /dev/null @@ -1,152 +0,0 @@ -# Setting up external-dns for BlueCat - -The first external-dns release with with BlueCat provider support is v0.8.0. - -## Prerequisites -Install the BlueCat Gateway product and deploy the [community gateway workflows](https://github.com/bluecatlabs/gateway-workflows). - -## Configuration Options - -There are two ways to pass configuration options to the Bluecat Provider JSON configuration file and command line flags. Currently if a valid configuration file is used all -BlueCat provider configurations will be taken from the configuration file. If a configuraiton file is not provided or cannot be read then all BlueCat provider configurations will -be taken from the command line flags. In the future an enhancement will be made to merge configuration options from the configuration file and command line flags if both are provided. - -BlueCat provider supports getting the proxy URL from the environment variables. The format is the one specified by golang's [http.ProxyFromEnvironment](https://pkg.go.dev/net/http#ProxyFromEnvironment). - -### Using CLI Flags -When using CLI flags to configure the Bluecat Provider the BlueCat Gateway credentials are passed in using environment variables `BLUECAT_USERNAME` and `BLUECAT_PASSWORD`. - -#### Deploy -Setup up namespace, deployment, and service account: -``` -kubectl create namespace bluecat-example -kubectl create secret generic bluecat-credentials --from-literal=username=bluecatuser --from-literal=password=bluecatpassword -n bluecat-example -cat << EOF > ~/bluecat.yml ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - selector: - matchLabels: - app: external-dns - strategy: - type: Recreate - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --log-level=debug - - --source=service - - --provider=bluecat - - --txt-owner-id=bluecat-example - - --bluecat-dns-configuration=Example - - --bluecat-dns-view=Internal - - --bluecat-gateway-host=https://bluecatgw.example.com - - --bluecat-root-zone=example.com - env: - - name: BLUECAT_USERNAME - valueFrom: - secretKeyRef: - name: bluecat-credentials - key: username - - name: BLUECAT_PASSWORD - valueFrom: - secretKeyRef: - name: bluecat-credentials - key: password -EOF -kubectl apply -f ~/bluecat.yml -n bluecat-example -``` - - -### Using JSON Configuration File -The options for configuring the Bluecat Provider are available through the JSON file provided to External-DNS via the flag `--bluecat-config-file`. - -| Key | Required | -| ----------------- | ------------------ | -| gatewayHost | Yes | -| gatewayUsername | No | -| gatewayPassword | No | -| dnsConfiguration | Yes | -| dnsView | Yes | -| rootZone | Yes | -| dnsServerName | No | -| dnsDeployType | No | -| skipTLSVerify | No (default false) | - -#### Deploy -Setup configuration file as k8s `Secret`. -``` -cat << EOF > ~/bluecat.json -{ - "gatewayHost": "https://bluecatgw.example.com", - "gatewayUsername": "user", - "gatewayPassword": "pass", - "dnsConfiguration": "Example", - "dnsView": "Internal", - "rootZone": "example.com", - "skipTLSVerify": false -} -EOF -kubectl create secret generic bluecatconfig --from-file ~/bluecat.json -n bluecat-example -``` - -Setup up namespace, deployment, and service account: -``` -kubectl create namespace bluecat-example -cat << EOF > ~/bluecat.yml ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - selector: - matchLabels: - app: external-dns - strategy: - type: Recreate - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - volumes: - - name: bluecatconfig - secret: - secretName: bluecatconfig - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - volumeMounts: - - name: bluecatconfig - mountPath: "/etc/external-dns/" - readOnly: true - args: - - --log-level=debug - - --source=service - - --provider=bluecat - - --txt-owner-id=bluecat-example - - --bluecat-config-file=/etc/external-dns/bluecat.json -EOF -kubectl apply -f ~/bluecat.yml -n bluecat-example -``` diff --git a/docs/tutorials/dyn.md b/docs/tutorials/dyn.md deleted file mode 100644 index d4d9a0f07..000000000 --- a/docs/tutorials/dyn.md +++ /dev/null @@ -1,149 +0,0 @@ -# Setting up ExternalDNS for Dyn - -## Creating a Dyn Configuration Secret - -For ExternalDNS to access the Dyn API, create a Kubernetes secret. - -To create the secret: - -``` -$ kubectl create secret generic external-dns \ - --from-literal=EXTERNAL_DNS_DYN_CUSTOMER_NAME=${DYN_CUSTOMER_NAME} \ - --from-literal=EXTERNAL_DNS_DYN_USERNAME=${DYN_USERNAME} \ - --from-literal=EXTERNAL_DNS_DYN_PASSWORD=${DYN_PASSWORD} -``` - -The credentials are the same ones created during account registration. As best practise, you are advised to -create an API-only user that is entitled to only the zones intended to be changed by ExternalDNS - -## Deploy ExternalDNS -The rest of this tutorial assumes you own `example.com` domain and your DNS provider is Dyn. Change `example.com` -with a domain/zone that you really own. - -In case of the dyn provider, the flag `--zone-id-filter` is mandatory as it specifies which zones to scan for records. Without it - - -Create a deployment file called `externaldns.yaml` with the following contents: - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=ingress - - --txt-prefix=_d - - --namespace=example - - --zone-id-filter=example.com - - --domain-filter=example.com - - --provider=dyn - env: - - name: EXTERNAL_DNS_DYN_CUSTOMER_NAME - valueFrom: - secretKeyRef: - name: external-dns - key: EXTERNAL_DNS_DYN_CUSTOMER_NAME - - name: EXTERNAL_DNS_DYN_USERNAME - valueFrom: - secretKeyRef: - name: external-dns - key: EXTERNAL_DNS_DYN_USERNAME - - name: EXTERNAL_DNS_DYN_PASSWORD - valueFrom: - secretKeyRef: - name: external-dns - key: EXTERNAL_DNS_DYN_PASSWORD -EOF -``` - -As we'll be creating an Ingress resource, you need `--txt-prefix=_d` as a CNAME cannot coexist with a TXT record. You can change the prefix to -any valid start of a FQDN. - -Create the deployment for ExternalDNS: - -``` -$ kubectl create -f externaldns.yaml -``` - -## Running a locally build version -If you just want to test ExternalDNS in dry-run mode locally without doing the above deployment you can also do it. -Make sure your kubectl is configured correctly . Assuming you have the sources, build and run it like so: - -```bash -make -# output skipped - -./build/external-dns \ - --provider=dyn \ - --dyn-customer-name=${DYN_CUSTOMER_NAME} \ - --dyn-username=${DYN_USERNAME} \ - --dyn-password=${DYN_PASSWORD} \ - --domain-filter=example.com \ - --zone-id-filter=example.com \ - --namespace=example \ - --log-level=debug \ - --txt-prefix=_ \ - --dry-run=true -INFO[0000] running in dry-run mode. No changes to DNS records will be made. -INFO[0000] Connected to cluster at https://some-k8s-cluster.example.com -INFO[0001] Zones: [example.com] -# output skipped -``` - -Having `--dry-run=true` and `--log-level=debug` is a great way to see _exactly_ what DynamicDNS is doing or is about to do. - -## Deploying an Ingress Resource - -Create a file called 'test-ingress.yaml' with the following contents: - -```yaml -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: test-ingress - namespace: example -spec: - rules: - - host: test-ingress.example.com - http: - paths: - - backend: - service: - name: my-awesome-service - port: - number: 8080 - pathType: Prefix -``` - -As the DNS name `test-ingress.example.com` matches the filter, external-dns will create two records: -a CNAME for test-ingress.example.com and TXT for _dtest-ingress.example.com. - -Create the Ingress: - -``` -$ kubectl create -f test-ingress.yaml -``` - -By default external-dns scans for changes every minute so give it some time to catch up with the -## Verifying Dyn DNS records - -Login to the console at https://portal.dynect.net/login/ and verify records are created - -## Clean up - -Login to the console at https://portal.dynect.net/login/ and delete the records created. Alternatively, just delete the sample -Ingress resources and external-dns will delete the records. diff --git a/docs/tutorials/rcodezero.md b/docs/tutorials/rcodezero.md deleted file mode 100644 index c8dae9009..000000000 --- a/docs/tutorials/rcodezero.md +++ /dev/null @@ -1,206 +0,0 @@ -# Setting up ExternalDNS for Services on RcodeZero - -This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using [RcodeZero Anycast DNS](https://www.rcodezero.at). Make sure to use **>=0.5.0** version of ExternalDNS for this tutorial. - -The following steps are required to use RcodeZero with ExternalDNS: - -1. Sign up for an RcodeZero account (or use an existing account). -2. Add your zone to the RcodeZero DNS -3. Enable the RcodeZero API, and generate an API key. -4. Deploy ExternalDNS to use the RcodeZero provider. -5. Verify the setup bey deploying a test services (optional) - -## Creating a RcodeZero DNS zone - -Before records can be added to your domain name automatically, you need to add your domain name to the set of zones managed by RcodeZero. In order to add the zone, perform the following steps: - -1. Log in to the RcodeZero Dashboard, and move to the [Add Zone](https://my.rcodezero.at/domain/create) page. -2. Select "MASTER" as domain type, and add your domain name there. Use this domain name instead of "example.com" throughout the rest of this tutorial. - -Note that "SECONDARY" domains cannot be managed by ExternalDNS, because this would not allow modification of records in the zone. - -## Enable the API, and create Credentials - -> The RcodeZero Anycast-Network is provisioned via web interface or REST-API. - -Enable the RcodeZero API to generate an API key on [RcodeZero API](https://my.rcodezero.at/enableapi). The API key will be added to the environment variable 'RC0_API_KEY' via one of the Manifest templates (as described below). - -## Deploy ExternalDNS - -Connect your `kubectl` client to the cluster you want to test ExternalDNS with. Choose a Manifest from below, depending on whether or not you have RBAC enabled. Before applying it, modify the Manifest as follows: - -- Replace "example.com" with the domain name you added to RcodeZero. -- Replace YOUR_RCODEZERO_API_KEY with the API key created above. -- Replace YOUR_ENCRYPTION_KEY_STRING with a string to encrypt the TXT records - -### Manifest (for clusters without RBAC enabled) - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --provider=rcodezero - - --rc0-enc-txt # (optional) encrypt TXT records; encryption key has to be provided with RC0_ENC_KEY env var. - env: - - name: RC0_API_KEY - value: "YOUR_RCODEZERO_API_KEY" - - name: RC0_ENC_VAR - value: "YOUR_ENCRYPTION_KEY_STRING" -``` - -### Manifest (for clusters with RBAC enabled) - -```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns -rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: -- kind: ServiceAccount - name: external-dns - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --provider=rcodezero - - --rc0-enc-txt # (optional) encrypt TXT records; encryption key has to be provided with RC0_ENC_KEY env var. - env: - - name: RC0_API_KEY - value: "YOUR_RCODEZERO_API_KEY" - - name: RC0_ENC_VAR - value: "YOUR_ENCRYPTION_KEY_STRING" -``` - -## Deploying an Nginx Service - -After you have deployed ExternalDNS with RcodeZero, you can deploy a simple service based on Nginx to test the setup. This is optional, though highly recommended before using ExternalDNS in production. - -Create a service file called 'nginx.yaml' with the following contents: - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx -spec: - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - image: nginx - name: nginx - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx - annotations: - external-dns.alpha.kubernetes.io/hostname: example.com - external-dns.alpha.kubernetes.io/ttl: "120" #optional -spec: - selector: - app: nginx - type: LoadBalancer - ports: - - protocol: TCP - port: 80 - targetPort: 80 -``` - -Change the file as follows: - -- Replace the annotation of the service; use the same hostname as the RcodeZero DNS zone created above. The annotation may also be a subdomain -of the DNS zone (e.g. 'www.example.com'). -- Set the TTL annotation of the service. A valid TTL of 120 or above must be given. This annotation is optional, and defaults to "300" if no value is given. - -These annotations will be used to determine what services should be registered with DNS. Removing these annotations will cause ExternalDNS to remove the corresponding DNS records. - -Create the Deployment and Service: - -```bash -$ kubectl create -f nginx.yaml -``` - -Depending on your cloud provider, it might take a while to create an external IP for the service. Once an external IP address is assigned to the service, ExternalDNS will notice the new address and synchronize the RcodeZero DNS records accordingly. - -## Verifying RcodeZero DNS records - -Check your [RcodeZero Configured Zones](https://my.rcodezero.at/domain) and select the respective zone name. The zone should now contain the external IP address of the service as an A record. - -## Cleanup - -Once you have verified that ExternalDNS successfully manages RcodeZero DNS records for external services, you can delete the tutorial example as follows: - -```bash -$ kubectl delete -f nginx.yaml -$ kubectl delete -f externaldns.yaml -``` diff --git a/go.mod b/go.mod index c75b7d536..da536da00 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,6 @@ require ( github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 github.com/alecthomas/kingpin/v2 v2.4.0 github.com/aliyun/alibaba-cloud-sdk-go v1.63.0 - github.com/ans-group/sdk-go v1.20.0 github.com/aws/aws-sdk-go v1.55.5 github.com/bodgit/tsig v1.2.2 github.com/cenkalti/backoff/v4 v4.3.0 @@ -34,13 +33,10 @@ require ( github.com/google/go-cmp v0.6.0 github.com/google/uuid v1.6.0 github.com/gophercloud/gophercloud v1.14.0 - github.com/hooklift/gowsdl v0.5.0 github.com/linki/instrumented_http v0.3.0 github.com/linode/linodego v1.39.0 github.com/maxatome/go-testdeep v1.14.0 github.com/miekg/dns v1.1.62 - github.com/nesv/go-dynect v0.6.0 - github.com/nic-at/rc0go v1.1.1 github.com/onsi/ginkgo v1.16.5 github.com/openshift/api v0.0.0-20230607130528-611114dca681 github.com/openshift/client-go v0.0.0-20230607134213-3cd0021bbee3 @@ -59,8 +55,6 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/privatedns v1.0.984 github.com/transip/gotransip/v6 v6.25.0 github.com/ultradns/ultradns-sdk-go v1.3.7 - github.com/vinyldns/go-vinyldns v0.9.16 - github.com/vultr/govultr/v2 v2.17.2 go.etcd.io/etcd/api/v3 v3.5.15 go.etcd.io/etcd/client/v3 v3.5.15 go.uber.org/ratelimit v0.3.1 @@ -90,7 +84,6 @@ require ( github.com/Masterminds/semver v1.4.2 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 // indirect - github.com/ans-group/go-durationstring v1.2.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -134,7 +127,6 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect - github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/jcmturner/aescts/v2 v2.0.0 // indirect github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect @@ -149,7 +141,6 @@ require ( github.com/klauspost/compress v1.17.9 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect @@ -162,7 +153,6 @@ require ( github.com/oklog/ulid v1.3.1 // indirect github.com/openshift/gssapi v0.0.0-20161010215902-5fb4217df13b // indirect github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect - github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/peterhellberg/link v1.1.0 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -170,21 +160,12 @@ require ( github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/sagikazarmark/locafero v0.3.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/schollz/progressbar/v3 v3.8.6 // indirect github.com/shopspring/decimal v1.3.1 // indirect - github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 // indirect - github.com/smartystreets/gunit v1.3.4 // indirect github.com/sony/gobreaker v0.5.0 // indirect github.com/sosodev/duration v1.2.0 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.10.0 // indirect - github.com/spf13/cast v1.5.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.17.0 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/subosito/gotenv v1.6.0 // indirect github.com/terra-farm/udnssdk v1.3.5 // indirect github.com/vektah/gqlparser/v2 v2.5.14 // indirect github.com/x448/float16 v0.8.4 // indirect @@ -200,7 +181,6 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect golang.org/x/crypto v0.26.0 // indirect - golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect golang.org/x/mod v0.18.0 // indirect golang.org/x/sys v0.23.0 // indirect golang.org/x/term v0.23.0 // indirect @@ -211,10 +191,8 @@ require ( google.golang.org/grpc v1.65.0 // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect - gopkg.in/go-playground/validator.v9 v9.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/resty.v1 v1.12.0 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/kube-openapi v0.0.0-20240430033511-f0e62f92d13f // indirect diff --git a/go.sum b/go.sum index d5659ebc6..1e7d64fc8 100644 --- a/go.sum +++ b/go.sum @@ -2,46 +2,12 @@ bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxo cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go/auth v0.8.1 h1:QZW9FjC5lZzN864p13YxvAtGUlQ+KgRL+8Sg45Z6vxo= cloud.google.com/go/auth v0.8.1/go.mod h1:qGVp/Y3kDRSDZ5gFD/XPUfYQ9xW1iI7q8RIRoCyBbJc= cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f h1:UrKzEwTgeiff9vxdrfdqxibzpWjxLnuXDI5m6z3GJAk= code.cloudfoundry.org/gofileutils v0.0.0-20170111115228-4d0c80011a0f/go.mod h1:sk5LnIjB/nIEU7yP5sDQExVm62wu0pBh3yrElngUisI= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -133,10 +99,6 @@ github.com/aliyun/alibaba-cloud-sdk-go v1.63.0/go.mod h1:SOSDHfe1kX91v3W5QiBsWSL github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v0.0.0-20190621154722-5f990b63d2d6/go.mod h1:+lx6/Aqd1kLJ1GQfkvOnaZ1WGmLpMpbprPuIOOZX30U= -github.com/ans-group/go-durationstring v1.2.0 h1:UJIuQATkp0t1rBvZsHRwki33YHV9E+Ulro+3NbMB7MM= -github.com/ans-group/go-durationstring v1.2.0/go.mod h1:QGF9Mdpq9058QXaut8r55QWu6lcHX6i/GvF1PZVkV6o= -github.com/ans-group/sdk-go v1.20.0 h1:2bgVIO29WJR35VuDrVMbEL8msxc5z34/J5BlQT4wb/0= -github.com/ans-group/sdk-go v1.20.0/go.mod h1:w4tX8raa9y3j7pug6TLcF8ZW1j9G05AmNoQLBloYxEY= github.com/aokoli/goutils v1.1.0/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -185,9 +147,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/civo/civogo v0.3.73 h1:thkNnkziU+xh+MEOChIUwRZI1forN20+SSAPe/VFDME= github.com/civo/civogo v0.3.73/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= @@ -198,7 +157,6 @@ github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381 github.com/cloudfoundry-community/go-cfclient v0.0.0-20190201205600-f136f9222381/go.mod h1:e5+USP2j8Le2M0Jo3qKPFnNhuo1wueU4nWHCXBOfQ14= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q= @@ -260,8 +218,6 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/digitalocean/godo v1.120.0 h1:t2DpzIitSnCDNQM7svSW4+cZd8E4Lv6+r8y33Kym0Xw= github.com/digitalocean/godo v1.120.0/go.mod h1:WQVH83OHUy6gC4gXpEVQKtxTd4L5oCp+5OialidkPLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/dnsimple/dnsimple-go v1.7.0 h1:JKu9xJtZ3SqOC+BuYgAWeab7+EEx0sz422vu8j611ZY= github.com/dnsimple/dnsimple-go v1.7.0/go.mod h1:EKpuihlWizqYafSnQHGCd/gyvy3HkEQJ7ODB4KdV8T8= github.com/docker/cli v0.0.0-20200130152716-5d0cf8839492/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -296,8 +252,6 @@ github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4s github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.3.0-java.0.20200609174644-bd816e4522c1/go.mod h1:bjmEhrMDubXDd0uKxnWwRmgSsiEv2CkJliIHnj6ETm8= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -318,8 +272,6 @@ github.com/ffledgling/pdns-go v0.0.0-20180219074714-524e7daccd99/go.mod h1:4mP9w github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= @@ -340,8 +292,6 @@ github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJ github.com/go-gandi/go-gandi v0.7.0 h1:gsP33dUspsN1M+ZW9HEgHchK9HiaSkYnltO73RHhSZA= github.com/go-gandi/go-gandi v0.7.0/go.mod h1:9NoYyfWCjFosClPiWjkbbRK5UViaZ4ctpT8/pKSSFlw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -437,8 +387,6 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78 github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/gobs/pretty v0.0.0-20180724170744-09732c25a95b h1:/vQ+oYKu+JoyaMPDsv5FzwuL2wwWBgBbtj/YLCi4LuA= -github.com/gobs/pretty v0.0.0-20180724170744-09732c25a95b/go.mod h1:Xo4aNUOrJnVruqWQJBtW6+bTBDTniY8yZum5rF3b5jw= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= @@ -475,26 +423,16 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -521,9 +459,7 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -539,18 +475,7 @@ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM= github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= @@ -565,13 +490,11 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gookit/color v1.2.3/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v1.14.0 h1:Bt9zQDhPrbd4qX7EILGmy+i7GP35cc+AAL2+wIJpUE8= @@ -585,7 +508,6 @@ github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= @@ -636,20 +558,14 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= -github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hooklift/gowsdl v0.5.0 h1:DE8RevqhGPLchumV/V7OwbCzfJ8lcozFg1uWC/ESCBQ= -github.com/hooklift/gowsdl v0.5.0/go.mod h1:9kRc402w9Ci/Mek5a1DNgTmU14yPY8fMumxNVvxhis4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/iancoleman/strcase v0.0.0-20180726023541-3605ed457bf7/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -695,7 +611,6 @@ github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= @@ -716,7 +631,6 @@ github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -761,8 +675,6 @@ github.com/lyft/protoc-gen-star v0.4.10/go.mod h1:mE8fbna26u7aEA2QCVvvfBU/ZrPgoc github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -843,10 +755,6 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/nesv/go-dynect v0.6.0 h1:Ow/DiSm4LAISwnFku/FITSQHnU6pBvhQMsUE5Gu6Oq4= -github.com/nesv/go-dynect v0.6.0/go.mod h1:GHRBRKzTwjAMhosHJQq/KrZaFkXIFyJ5zRE7thGXXrs= -github.com/nic-at/rc0go v1.1.1 h1:bf2gTwYecJEh7qmnOEuarXKueZn4A8N08U1Uop3K8+s= -github.com/nic-at/rc0go v1.1.1/go.mod h1:KEa3H5fmDNXCaXSqOeAZxkKnG/8ggr1OHIG25Ve7fjU= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -917,8 +825,6 @@ github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaR github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= -github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterhellberg/link v1.1.0 h1:s2+RH8EGuI/mI4QwrWGSYQCRz7uNgip9BaM04HKu5kc= @@ -936,7 +842,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pluralsh/gqlclient v1.12.2 h1:BrEFAASktf4quFw57CIaLAd+NZUTLhG08fe6tnhBQN4= github.com/pluralsh/gqlclient v1.12.2/go.mod h1:OEjN9L63x8m3A3eQBv5kVkFgiY9fp2aZ0cgOF0uII58= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1001,10 +906,6 @@ github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351/go.mod h1:DCgfY github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= -github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.29 h1:BkTk4gynLjguayxrYxZoMZjBnAOh7ntQvUkOFmkMqPU= @@ -1028,32 +929,22 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs github.com/smartystreets/assertions v0.0.0-20180725160413-e900ae048470/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q= -github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= -github.com/smartystreets/gunit v1.3.4 h1:iHc8Rfhb/uCOc9a3KGuD3ut22L+hLIVaqR1o5fS6zC4= -github.com/smartystreets/gunit v1.3.4/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sony/gobreaker v0.5.0 h1:dRCvqm0P490vZPmy7ppEk2qCnCieBooFJ+YoXGYB+yg= github.com/sony/gobreaker v0.5.0/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sosodev/duration v1.2.0 h1:pqK/FLSjsAADWY74SyWDCjOcd5l7H8GSnnOGEB9A1Us= github.com/sosodev/duration v1.2.0/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= -github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= @@ -1067,8 +958,6 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= -github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1091,8 +980,6 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.984 h1:QLSx+ibsV68NXKgzofPuo1gxFwYSWk2++rvxZxNjbVo= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.984/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= @@ -1128,10 +1015,6 @@ github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+ github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vektah/gqlparser/v2 v2.5.14 h1:dzLq75BJe03jjQm6n56PdH1oweB8ana42wj7E4jRy70= github.com/vektah/gqlparser/v2 v2.5.14/go.mod h1:WQQjFc+I1YIzoPvZBhUQX7waZgg3pMLi0r8KymvAE2w= -github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4ulRMcQ= -github.com/vinyldns/go-vinyldns v0.9.16/go.mod h1:5qIJOdmzAnatKjurI+Tl4uTus7GJKJxb+zitufjHs3Q= -github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= -github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1145,9 +1028,7 @@ github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMx github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -1174,9 +1055,6 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= @@ -1215,7 +1093,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1226,7 +1103,6 @@ golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201217014255-9d1352758620/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -1242,16 +1118,7 @@ golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= -golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1259,22 +1126,14 @@ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTk golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -1297,37 +1156,20 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= @@ -1346,12 +1188,6 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1360,10 +1196,8 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1388,52 +1222,28 @@ golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1461,12 +1271,10 @@ golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= @@ -1495,63 +1303,26 @@ golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200918232735-d647fc253266/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= @@ -1569,72 +1340,22 @@ gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZ google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.192.0 h1:PljqpNAfZaaSpS+TnANfnNAXKdzHM/B9bKhwRlo7JP0= google.golang.org/api v0.192.0/go.mod h1:9VcphjvAxPKLmSxVSzPlSRXy/5ARMEw5bf58WoVXafQ= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f h1:b1Ln/PG8orm0SsBbHZWke8dDp2lrCD4jSmfglFpTZbk= google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf h1:liao9UHurZLtiEwBgT9LMOnKYsHze6eA6w1KQCMVN2Q= @@ -1645,22 +1366,14 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1671,7 +1384,6 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= @@ -1694,10 +1406,6 @@ gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWM gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v9 v9.31.0 h1:bmXmP2RSNtFES+bn4uYuHT7iJFJv7Vj+an+ZQdDaD1M= -gopkg.in/go-playground/validator.v9 v9.31.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY= @@ -1710,7 +1418,6 @@ gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/ns1/ns1-go.v2 v2.12.0 h1:cqdqQoTx17JmTusfxh5m3e2b36jfUzFAZedv89pFX18= gopkg.in/ns1/ns1-go.v2 v2.12.0/go.mod h1:pfaU0vECVP7DIOr453z03HXS6dFJpXdNRwOyRzwmPSc= -gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -1736,11 +1443,8 @@ helm.sh/helm/v3 v3.2.4/go.mod h1:ZaXz/vzktgwjyGGFbUWtIQkscfE7WYoRGP2szqAFHR0= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= istio.io/api v1.23.0 h1:yqv3lNW6XSYS5XkbEkxsmFROXIQznp4lFWqj7xKEqCA= istio.io/api v1.23.0/go.mod h1:QPSTGXuIQdnZFEm3myf9NZ5uBMwCdJWUvfj9ZZ+2oBM= istio.io/client-go v1.23.0 h1://xojbifr84q29WE3eMx74p36hD4lvcejX1KxE3iJvY= @@ -1798,11 +1502,8 @@ k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1 k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= moul.io/http2curl v1.0.0 h1:6XwpyZOYsgZJrU8exnG87ncVkU1FVCcTRpwzOkTDUi8= moul.io/http2curl v1.0.0/go.mod h1:f6cULg+e4Md/oW1cYmwW4IWQOVl2lGbmCNGOHvzX2kE= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A= sigs.k8s.io/controller-runtime v0.18.4 h1:87+guW1zhvuPLh1PHybKdYFLU0YJp4FhJRmiHvm5BZw= diff --git a/main.go b/main.go index 7fabfd219..ae2e63e4d 100644 --- a/main.go +++ b/main.go @@ -47,14 +47,12 @@ import ( "sigs.k8s.io/external-dns/provider/aws" "sigs.k8s.io/external-dns/provider/awssd" "sigs.k8s.io/external-dns/provider/azure" - "sigs.k8s.io/external-dns/provider/bluecat" "sigs.k8s.io/external-dns/provider/civo" "sigs.k8s.io/external-dns/provider/cloudflare" "sigs.k8s.io/external-dns/provider/coredns" "sigs.k8s.io/external-dns/provider/designate" "sigs.k8s.io/external-dns/provider/digitalocean" "sigs.k8s.io/external-dns/provider/dnsimple" - "sigs.k8s.io/external-dns/provider/dyn" "sigs.k8s.io/external-dns/provider/exoscale" "sigs.k8s.io/external-dns/provider/gandi" "sigs.k8s.io/external-dns/provider/godaddy" @@ -68,16 +66,12 @@ import ( "sigs.k8s.io/external-dns/provider/pdns" "sigs.k8s.io/external-dns/provider/pihole" "sigs.k8s.io/external-dns/provider/plural" - "sigs.k8s.io/external-dns/provider/rcode0" "sigs.k8s.io/external-dns/provider/rdns" "sigs.k8s.io/external-dns/provider/rfc2136" - "sigs.k8s.io/external-dns/provider/safedns" "sigs.k8s.io/external-dns/provider/scaleway" "sigs.k8s.io/external-dns/provider/tencentcloud" "sigs.k8s.io/external-dns/provider/transip" "sigs.k8s.io/external-dns/provider/ultradns" - "sigs.k8s.io/external-dns/provider/vinyldns" - "sigs.k8s.io/external-dns/provider/vultr" "sigs.k8s.io/external-dns/provider/webhook" webhookapi "sigs.k8s.io/external-dns/provider/webhook/api" "sigs.k8s.io/external-dns/registry" @@ -246,20 +240,12 @@ func main() { p, err = azure.NewAzureProvider(cfg.AzureConfigFile, domainFilter, zoneNameFilter, zoneIDFilter, cfg.AzureSubscriptionID, cfg.AzureResourceGroup, cfg.AzureUserAssignedIdentityClientID, cfg.AzureActiveDirectoryAuthorityHost, cfg.DryRun) case "azure-private-dns": p, err = azure.NewAzurePrivateDNSProvider(cfg.AzureConfigFile, domainFilter, zoneNameFilter, zoneIDFilter, cfg.AzureSubscriptionID, cfg.AzureResourceGroup, cfg.AzureUserAssignedIdentityClientID, cfg.AzureActiveDirectoryAuthorityHost, cfg.DryRun) - case "bluecat": - p, err = bluecat.NewBluecatProvider(cfg.BluecatConfigFile, cfg.BluecatDNSConfiguration, cfg.BluecatDNSServerName, cfg.BluecatDNSDeployType, cfg.BluecatDNSView, cfg.BluecatGatewayHost, cfg.BluecatRootZone, cfg.TXTPrefix, cfg.TXTSuffix, domainFilter, zoneIDFilter, cfg.DryRun, cfg.BluecatSkipTLSVerify) - case "vinyldns": - p, err = vinyldns.NewVinylDNSProvider(domainFilter, zoneIDFilter, cfg.DryRun) - case "vultr": - p, err = vultr.NewVultrProvider(ctx, domainFilter, cfg.DryRun) case "ultradns": p, err = ultradns.NewUltraDNSProvider(domainFilter, cfg.DryRun) case "civo": p, err = civo.NewCivoProvider(domainFilter, cfg.DryRun) case "cloudflare": p, err = cloudflare.NewCloudFlareProvider(domainFilter, zoneIDFilter, cfg.CloudflareProxied, cfg.DryRun, cfg.CloudflareDNSRecordsPerPage) - case "rcodezero": - p, err = rcode0.NewRcodeZeroProvider(domainFilter, cfg.DryRun, cfg.RcodezeroTXTEncrypt) case "google": p, err = google.NewGoogleProvider(ctx, cfg.GoogleProject, domainFilter, zoneIDFilter, cfg.GoogleBatchChangeSize, cfg.GoogleBatchChangeInterval, cfg.GoogleZoneVisibility, cfg.DryRun) case "digitalocean": @@ -270,19 +256,6 @@ func main() { p, err = linode.NewLinodeProvider(domainFilter, cfg.DryRun, externaldns.Version) case "dnsimple": p, err = dnsimple.NewDnsimpleProvider(domainFilter, zoneIDFilter, cfg.DryRun) - case "dyn": - p, err = dyn.NewDynProvider( - dyn.DynConfig{ - DomainFilter: domainFilter, - ZoneIDFilter: zoneIDFilter, - DryRun: cfg.DryRun, - CustomerName: cfg.DynCustomerName, - Username: cfg.DynUsername, - Password: cfg.DynPassword, - MinTTLSeconds: cfg.DynMinTTLSeconds, - AppVersion: externaldns.Version, - }, - ) case "coredns", "skydns": p, err = coredns.NewCoreDNSProvider(domainFilter, cfg.CoreDNSPrefix, cfg.DryRun) case "rdns": @@ -381,8 +354,6 @@ func main() { ) case "ibmcloud": p, err = ibmcloud.NewIBMCloudProvider(cfg.IBMCloudConfigFile, domainFilter, zoneIDFilter, endpointsSource, cfg.IBMCloudProxied, cfg.DryRun) - case "safedns": - p, err = safedns.NewSafeDNSProvider(domainFilter, cfg.DryRun) case "plural": p, err = plural.NewPluralProvider(cfg.PluralCluster, cfg.PluralProvider) case "tencentcloud": diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index 0687521b7..97a939a88 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -104,28 +104,15 @@ type Config struct { AzureSubscriptionID string AzureUserAssignedIdentityClientID string AzureActiveDirectoryAuthorityHost string - BluecatDNSConfiguration string - BluecatConfigFile string - BluecatDNSView string - BluecatGatewayHost string - BluecatRootZone string - BluecatDNSServerName string - BluecatDNSDeployType string - BluecatSkipTLSVerify bool CloudflareProxied bool CloudflareDNSRecordsPerPage int CoreDNSPrefix string - RcodezeroTXTEncrypt bool AkamaiServiceConsumerDomain string AkamaiClientToken string AkamaiClientSecret string AkamaiAccessToken string AkamaiEdgercPath string AkamaiEdgercSection string - DynCustomerName string - DynUsername string - DynPassword string `secure:"yes"` - DynMinTTLSeconds int OCIConfigFile string OCICompartmentOCID string OCIAuthInstancePrincipal bool @@ -272,12 +259,9 @@ var defaultConfig = &Config{ AzureConfigFile: "/etc/kubernetes/azure.json", AzureResourceGroup: "", AzureSubscriptionID: "", - BluecatConfigFile: "/etc/kubernetes/bluecat.json", - BluecatDNSDeployType: "no-deploy", CloudflareProxied: false, CloudflareDNSRecordsPerPage: 100, CoreDNSPrefix: "/skydns/", - RcodezeroTXTEncrypt: false, AkamaiServiceConsumerDomain: "", AkamaiClientToken: "", AkamaiClientSecret: "", @@ -456,7 +440,7 @@ func (cfg *Config) ParseFlags(args []string) error { app.Flag("traefik-disable-new", "Disable listeners on Resources under the traefik.io API Group").Default(strconv.FormatBool(defaultConfig.TraefikDisableNew)).BoolVar(&cfg.TraefikDisableNew) // Flags related to providers - providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "bluecat", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "dyn", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rcodezero", "rdns", "rfc2136", "safedns", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "vinyldns", "vultr", "webhook"} + providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rdns", "rfc2136", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "vinyldns", "vultr", "webhook"} app.Flag("provider", "The DNS provider where the DNS records will be created (required, options: "+strings.Join(providers, ", ")+")").Required().PlaceHolder("provider").EnumVar(&cfg.Provider, providers...) app.Flag("provider-cache-time", "The time to cache the DNS provider record list requests.").Default(defaultConfig.ProviderCacheTime.String()).DurationVar(&cfg.ProviderCacheTime) app.Flag("domain-filter", "Limit possible target zones by a domain suffix; specify multiple times for multiple domains (optional)").Default("").StringsVar(&cfg.DomainFilter) @@ -493,16 +477,6 @@ func (cfg *Config) ParseFlags(args []string) error { app.Flag("tencent-cloud-config-file", "When using the Tencent Cloud provider, specify the Tencent Cloud configuration file (required when --provider=tencentcloud)").Default(defaultConfig.TencentCloudConfigFile).StringVar(&cfg.TencentCloudConfigFile) app.Flag("tencent-cloud-zone-type", "When using the Tencent Cloud provider, filter for zones with visibility (optional, options: public, private)").Default(defaultConfig.TencentCloudZoneType).EnumVar(&cfg.TencentCloudZoneType, "", "public", "private") - // Flags related to BlueCat provider - app.Flag("bluecat-dns-configuration", "When using the Bluecat provider, specify the Bluecat DNS configuration string (optional when --provider=bluecat)").Default("").StringVar(&cfg.BluecatDNSConfiguration) - app.Flag("bluecat-config-file", "When using the Bluecat provider, specify the Bluecat configuration file (optional when --provider=bluecat)").Default(defaultConfig.BluecatConfigFile).StringVar(&cfg.BluecatConfigFile) - app.Flag("bluecat-dns-view", "When using the Bluecat provider, specify the Bluecat DNS view string (optional when --provider=bluecat)").Default("").StringVar(&cfg.BluecatDNSView) - app.Flag("bluecat-gateway-host", "When using the Bluecat provider, specify the Bluecat Gateway Host (optional when --provider=bluecat)").Default("").StringVar(&cfg.BluecatGatewayHost) - app.Flag("bluecat-root-zone", "When using the Bluecat provider, specify the Bluecat root zone (optional when --provider=bluecat)").Default("").StringVar(&cfg.BluecatRootZone) - app.Flag("bluecat-skip-tls-verify", "When using the Bluecat provider, specify to skip TLS verification (optional when --provider=bluecat) (default: false)").BoolVar(&cfg.BluecatSkipTLSVerify) - app.Flag("bluecat-dns-server-name", "When using the Bluecat provider, specify the Bluecat DNS Server to initiate deploys against. This is only used if --bluecat-dns-deploy-type is not 'no-deploy' (optional when --provider=bluecat)").Default("").StringVar(&cfg.BluecatDNSServerName) - app.Flag("bluecat-dns-deploy-type", "When using the Bluecat provider, specify the type of DNS deployment to initiate after records are updated. Valid options are 'full-deploy' and 'no-deploy'. Deploy will only execute if --bluecat-dns-server-name is set (optional when --provider=bluecat)").Default(defaultConfig.BluecatDNSDeployType).StringVar(&cfg.BluecatDNSDeployType) - app.Flag("cloudflare-proxied", "When using the Cloudflare provider, specify if the proxy mode must be enabled (default: disabled)").BoolVar(&cfg.CloudflareProxied) app.Flag("cloudflare-dns-records-per-page", "When using the Cloudflare provider, specify how many DNS records listed per page, max possible 5,000 (default: 100)").Default(strconv.Itoa(defaultConfig.CloudflareDNSRecordsPerPage)).IntVar(&cfg.CloudflareDNSRecordsPerPage) app.Flag("coredns-prefix", "When using the CoreDNS provider, specify the prefix name").Default(defaultConfig.CoreDNSPrefix).StringVar(&cfg.CoreDNSPrefix) @@ -512,16 +486,11 @@ func (cfg *Config) ParseFlags(args []string) error { app.Flag("akamai-access-token", "When using the Akamai provider, specify the access token (required when --provider=akamai and edgerc-path not specified)").Default(defaultConfig.AkamaiAccessToken).StringVar(&cfg.AkamaiAccessToken) app.Flag("akamai-edgerc-path", "When using the Akamai provider, specify the .edgerc file path. Path must be reachable form invocation environment. (required when --provider=akamai and *-token, secret serviceconsumerdomain not specified)").Default(defaultConfig.AkamaiEdgercPath).StringVar(&cfg.AkamaiEdgercPath) app.Flag("akamai-edgerc-section", "When using the Akamai provider, specify the .edgerc file path (Optional when edgerc-path is specified)").Default(defaultConfig.AkamaiEdgercSection).StringVar(&cfg.AkamaiEdgercSection) - app.Flag("dyn-customer-name", "When using the Dyn provider, specify the Customer Name").Default("").StringVar(&cfg.DynCustomerName) - app.Flag("dyn-username", "When using the Dyn provider, specify the Username").Default("").StringVar(&cfg.DynUsername) - app.Flag("dyn-password", "When using the Dyn provider, specify the password").Default("").StringVar(&cfg.DynPassword) - app.Flag("dyn-min-ttl", "Minimal TTL (in seconds) for records. This value will be used if the provided TTL for a service/ingress is lower than this.").IntVar(&cfg.DynMinTTLSeconds) app.Flag("oci-config-file", "When using the OCI provider, specify the OCI configuration file (required when --provider=oci").Default(defaultConfig.OCIConfigFile).StringVar(&cfg.OCIConfigFile) app.Flag("oci-compartment-ocid", "When using the OCI provider, specify the OCID of the OCI compartment containing all managed zones and records. Required when using OCI IAM instance principal authentication.").StringVar(&cfg.OCICompartmentOCID) app.Flag("oci-zone-scope", "When using OCI provider, filter for zones with this scope (optional, options: GLOBAL, PRIVATE). Defaults to GLOBAL, setting to empty value will target both.").Default(defaultConfig.OCIZoneScope).EnumVar(&cfg.OCIZoneScope, "", "GLOBAL", "PRIVATE") app.Flag("oci-auth-instance-principal", "When using the OCI provider, specify whether OCI IAM instance principal authentication should be used (instead of key-based auth via the OCI config file).").Default(strconv.FormatBool(defaultConfig.OCIAuthInstancePrincipal)).BoolVar(&cfg.OCIAuthInstancePrincipal) app.Flag("oci-zones-cache-duration", "When using the OCI provider, set the zones list cache TTL (0s to disable).").Default(defaultConfig.OCIZoneCacheDuration.String()).DurationVar(&cfg.OCIZoneCacheDuration) - app.Flag("rcodezero-txt-encrypt", "When using the Rcodezero provider with txt registry option, set if TXT rrs are encrypted (default: false)").Default(strconv.FormatBool(defaultConfig.RcodezeroTXTEncrypt)).BoolVar(&cfg.RcodezeroTXTEncrypt) app.Flag("inmemory-zone", "Provide a list of pre-configured zones for the inmemory provider; specify multiple times for multiple zones (optional)").Default("").StringsVar(&cfg.InMemoryZones) app.Flag("ovh-endpoint", "When using the OVH provider, specify the endpoint (default: ovh-eu)").Default(defaultConfig.OVHEndpoint).StringVar(&cfg.OVHEndpoint) app.Flag("ovh-api-rate-limit", "When using the OVH provider, specify the API request rate limit, X operations by seconds (default: 20)").Default(strconv.Itoa(defaultConfig.OVHApiRateLimit)).IntVar(&cfg.OVHApiRateLimit) diff --git a/pkg/apis/externaldns/types_test.go b/pkg/apis/externaldns/types_test.go index ea52b2f78..e52f87f49 100644 --- a/pkg/apis/externaldns/types_test.go +++ b/pkg/apis/externaldns/types_test.go @@ -72,14 +72,6 @@ var ( AzureConfigFile: "/etc/kubernetes/azure.json", AzureResourceGroup: "", AzureSubscriptionID: "", - BluecatDNSConfiguration: "", - BluecatDNSServerName: "", - BluecatConfigFile: "/etc/kubernetes/bluecat.json", - BluecatDNSView: "", - BluecatGatewayHost: "", - BluecatRootZone: "", - BluecatDNSDeployType: defaultConfig.BluecatDNSDeployType, - BluecatSkipTLSVerify: false, CloudflareProxied: false, CloudflareDNSRecordsPerPage: 100, CoreDNSPrefix: "/skydns/", @@ -117,7 +109,6 @@ var ( ExoscaleAPISecret: "", CRDSourceAPIVersion: "externaldns.k8s.io/v1alpha1", CRDSourceKind: "DNSEndpoint", - RcodezeroTXTEncrypt: false, TransIPAccountName: "", TransIPPrivateKeyFile: "", DigitalOceanAPIPageSize: 50, @@ -179,14 +170,6 @@ var ( AzureConfigFile: "azure.json", AzureResourceGroup: "arg", AzureSubscriptionID: "arg", - BluecatDNSConfiguration: "arg", - BluecatDNSServerName: "arg", - BluecatConfigFile: "bluecat.json", - BluecatDNSView: "arg", - BluecatGatewayHost: "arg", - BluecatRootZone: "arg", - BluecatDNSDeployType: "full-deploy", - BluecatSkipTLSVerify: true, CloudflareProxied: true, CloudflareDNSRecordsPerPage: 5000, CoreDNSPrefix: "/coredns/", @@ -228,7 +211,6 @@ var ( ExoscaleAPISecret: "2", CRDSourceAPIVersion: "test.k8s.io/v1alpha1", CRDSourceKind: "Endpoint", - RcodezeroTXTEncrypt: true, NS1Endpoint: "https://api.example.com/v1", NS1IgnoreSSL: true, TransIPAccountName: "transip", @@ -289,14 +271,6 @@ func TestParseFlags(t *testing.T) { "--azure-config-file=azure.json", "--azure-resource-group=arg", "--azure-subscription-id=arg", - "--bluecat-dns-configuration=arg", - "--bluecat-config-file=bluecat.json", - "--bluecat-dns-view=arg", - "--bluecat-dns-server-name=arg", - "--bluecat-gateway-host=arg", - "--bluecat-root-zone=arg", - "--bluecat-dns-deploy-type=full-deploy", - "--bluecat-skip-tls-verify", "--cloudflare-proxied", "--cloudflare-dns-records-per-page=5000", "--coredns-prefix=/coredns/", @@ -370,7 +344,6 @@ func TestParseFlags(t *testing.T) { "--exoscale-apisecret=2", "--crd-source-apiversion=test.k8s.io/v1alpha1", "--crd-source-kind=Endpoint", - "--rcodezero-txt-encrypt", "--ns1-endpoint=https://api.example.com/v1", "--ns1-ignoressl", "--transip-account=transip", @@ -414,14 +387,6 @@ func TestParseFlags(t *testing.T) { "EXTERNAL_DNS_AZURE_CONFIG_FILE": "azure.json", "EXTERNAL_DNS_AZURE_RESOURCE_GROUP": "arg", "EXTERNAL_DNS_AZURE_SUBSCRIPTION_ID": "arg", - "EXTERNAL_DNS_BLUECAT_DNS_CONFIGURATION": "arg", - "EXTERNAL_DNS_BLUECAT_DNS_SERVER_NAME": "arg", - "EXTERNAL_DNS_BLUECAT_DNS_DEPLOY_TYPE": "full-deploy", - "EXTERNAL_DNS_BLUECAT_CONFIG_FILE": "bluecat.json", - "EXTERNAL_DNS_BLUECAT_DNS_VIEW": "arg", - "EXTERNAL_DNS_BLUECAT_GATEWAY_HOST": "arg", - "EXTERNAL_DNS_BLUECAT_ROOT_ZONE": "arg", - "EXTERNAL_DNS_BLUECAT_SKIP_TLS_VERIFY": "1", "EXTERNAL_DNS_CLOUDFLARE_PROXIED": "1", "EXTERNAL_DNS_CLOUDFLARE_DNS_RECORDS_PER_PAGE": "5000", "EXTERNAL_DNS_COREDNS_PREFIX": "/coredns/", @@ -488,7 +453,6 @@ func TestParseFlags(t *testing.T) { "EXTERNAL_DNS_EXOSCALE_APISECRET": "2", "EXTERNAL_DNS_CRD_SOURCE_APIVERSION": "test.k8s.io/v1alpha1", "EXTERNAL_DNS_CRD_SOURCE_KIND": "Endpoint", - "EXTERNAL_DNS_RCODEZERO_TXT_ENCRYPT": "1", "EXTERNAL_DNS_NS1_ENDPOINT": "https://api.example.com/v1", "EXTERNAL_DNS_NS1_IGNORESSL": "1", "EXTERNAL_DNS_TRANSIP_ACCOUNT": "transip", @@ -536,14 +500,12 @@ func restoreEnv(t *testing.T, originalEnv map[string]string) { func TestPasswordsNotLogged(t *testing.T) { cfg := Config{ - DynPassword: "dyn-pass", PDNSAPIKey: "pdns-api-key", RFC2136TSIGSecret: "tsig-secret", } s := cfg.String() - assert.False(t, strings.Contains(s, "dyn-pass")) assert.False(t, strings.Contains(s, "pdns-api-key")) assert.False(t, strings.Contains(s, "tsig-secret")) } diff --git a/pkg/apis/externaldns/validation/validation.go b/pkg/apis/externaldns/validation/validation.go index 6af44ab12..a5d06fa9b 100644 --- a/pkg/apis/externaldns/validation/validation.go +++ b/pkg/apis/externaldns/validation/validation.go @@ -61,19 +61,6 @@ func ValidateConfig(cfg *externaldns.Config) error { } } - if cfg.Provider == "dyn" { - if cfg.DynUsername == "" { - return errors.New("no Dyn username specified") - } - if cfg.DynCustomerName == "" { - return errors.New("no Dyn customer name specified") - } - - if cfg.DynMinTTLSeconds < 0 { - return errors.New("TTL specified for Dyn is negative") - } - } - if cfg.Provider == "rfc2136" { if cfg.RFC2136MinTTL < 0 { return errors.New("TTL specified for rfc2136 is negative") diff --git a/pkg/apis/externaldns/validation/validation_test.go b/pkg/apis/externaldns/validation/validation_test.go index b0efbf7d6..03ae42df7 100644 --- a/pkg/apis/externaldns/validation/validation_test.go +++ b/pkg/apis/externaldns/validation/validation_test.go @@ -70,53 +70,6 @@ func addRequiredFieldsForDyn(cfg *externaldns.Config) { cfg.Provider = "dyn" } -func TestValidateBadDynConfig(t *testing.T) { - badConfigs := []*externaldns.Config{ - {}, - { - // only username - DynUsername: "test", - }, - { - // only customer name - DynCustomerName: "test", - }, - { - // negative timeout - DynUsername: "test", - DynCustomerName: "test", - DynMinTTLSeconds: -1, - }, - } - - for _, cfg := range badConfigs { - addRequiredFieldsForDyn(cfg) - err := ValidateConfig(cfg) - assert.NotNil(t, err, "Configuration %+v should NOT have passed validation", cfg) - } -} - -func TestValidateGoodDynConfig(t *testing.T) { - goodConfigs := []*externaldns.Config{ - { - DynUsername: "test", - DynCustomerName: "test", - DynMinTTLSeconds: 600, - }, - { - DynUsername: "test", - DynCustomerName: "test", - DynMinTTLSeconds: 0, - }, - } - - for _, cfg := range goodConfigs { - addRequiredFieldsForDyn(cfg) - err := ValidateConfig(cfg) - assert.Nil(t, err, "Configuration should be valid, got this error instead", err) - } -} - func TestValidateBadIgnoreHostnameAnnotationsConfig(t *testing.T) { cfg := externaldns.NewConfig() cfg.IgnoreHostnameAnnotation = true diff --git a/provider/bluecat/OWNERS b/provider/bluecat/OWNERS deleted file mode 100644 index 58a6b3a17..000000000 --- a/provider/bluecat/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -approvers: -- seanmalloy -- vinny-sabatini -reviewers: -- seanmalloy -- vinny-sabatini diff --git a/provider/bluecat/bluecat.go b/provider/bluecat/bluecat.go deleted file mode 100644 index 2205ba3ed..000000000 --- a/provider/bluecat/bluecat.go +++ /dev/null @@ -1,511 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -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. -*/ - -// TODO: Ensure we have proper error handling/logging for API calls to Bluecat. getBluecatGatewayToken has a good example of this -// TODO: Remove studdering -// TODO: Make API calls more consistent (eg error handling on HTTP response codes) -// TODO: zone-id-filter does not seem to work with our provider - -package bluecat - -import ( - "context" - "encoding/json" - "os" - "regexp" - "strconv" - "strings" - - "github.com/pkg/errors" - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" - api "sigs.k8s.io/external-dns/provider/bluecat/gateway" -) - -// BluecatProvider implements the DNS provider for Bluecat DNS -type BluecatProvider struct { - provider.BaseProvider - domainFilter endpoint.DomainFilter - zoneIDFilter provider.ZoneIDFilter - dryRun bool - RootZone string - DNSConfiguration string - DNSServerName string - DNSDeployType string - View string - gatewayClient api.GatewayClient - TxtPrefix string - TxtSuffix string -} - -type bluecatRecordSet struct { - obj interface{} - res interface{} -} - -// NewBluecatProvider creates a new Bluecat provider. -// -// Returns a pointer to the provider or an error if a provider could not be created. -func NewBluecatProvider(configFile, dnsConfiguration, dnsServerName, dnsDeployType, dnsView, gatewayHost, rootZone, txtPrefix, txtSuffix string, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, dryRun, skipTLSVerify bool) (*BluecatProvider, error) { - cfg := api.BluecatConfig{} - contents, err := os.ReadFile(configFile) - if err != nil { - if errors.Is(err, os.ErrNotExist) { - cfg = api.BluecatConfig{ - GatewayHost: gatewayHost, - DNSConfiguration: dnsConfiguration, - DNSServerName: dnsServerName, - DNSDeployType: dnsDeployType, - View: dnsView, - RootZone: rootZone, - SkipTLSVerify: skipTLSVerify, - GatewayUsername: "", - GatewayPassword: "", - } - } else { - return nil, errors.Wrapf(err, "failed to read Bluecat config file %v", configFile) - } - } else { - err = json.Unmarshal(contents, &cfg) - if err != nil { - return nil, errors.Wrapf(err, "failed to parse Bluecat JSON config file %v", configFile) - } - } - - if !api.IsValidDNSDeployType(cfg.DNSDeployType) { - return nil, errors.Errorf("%v is not a valid deployment type", cfg.DNSDeployType) - } - - token, cookie, err := api.GetBluecatGatewayToken(cfg) - if err != nil { - return nil, errors.Wrap(err, "failed to get API token from Bluecat Gateway") - } - gatewayClient := api.NewGatewayClientConfig(cookie, token, cfg.GatewayHost, cfg.DNSConfiguration, cfg.View, cfg.RootZone, cfg.DNSServerName, cfg.SkipTLSVerify) - - provider := &BluecatProvider{ - domainFilter: domainFilter, - zoneIDFilter: zoneIDFilter, - dryRun: dryRun, - gatewayClient: gatewayClient, - DNSConfiguration: cfg.DNSConfiguration, - DNSServerName: cfg.DNSServerName, - DNSDeployType: cfg.DNSDeployType, - View: cfg.View, - RootZone: cfg.RootZone, - TxtPrefix: txtPrefix, - TxtSuffix: txtSuffix, - } - return provider, nil -} - -// Records fetches Host, CNAME, and TXT records from bluecat gateway -func (p *BluecatProvider) Records(ctx context.Context) (endpoints []*endpoint.Endpoint, err error) { - zones, err := p.zones() - if err != nil { - return nil, errors.Wrap(err, "could not fetch zones") - } - - // Parsing Text records first, so we can get the owner from them. - for _, zone := range zones { - log.Debugf("fetching records from zone '%s'", zone) - - var resT []api.BluecatTXTRecord - err = p.gatewayClient.GetTXTRecords(zone, &resT) - if err != nil { - return nil, errors.Wrapf(err, "could not fetch TXT records for zone: %v", zone) - } - for _, rec := range resT { - tempEndpoint := endpoint.NewEndpoint(rec.Name, endpoint.RecordTypeTXT, rec.Properties) - tempEndpoint.Labels[endpoint.OwnerLabelKey], err = extractOwnerfromTXTRecord(rec.Properties) - if err != nil { - log.Debugf("External DNS Owner %s", err) - } - endpoints = append(endpoints, tempEndpoint) - } - - var resH []api.BluecatHostRecord - err = p.gatewayClient.GetHostRecords(zone, &resH) - if err != nil { - return nil, errors.Wrapf(err, "could not fetch host records for zone: %v", zone) - } - var ep *endpoint.Endpoint - for _, rec := range resH { - propMap := api.SplitProperties(rec.Properties) - ips := strings.Split(propMap["addresses"], ",") - for _, ip := range ips { - if _, ok := propMap["ttl"]; ok { - ttl, err := strconv.Atoi(propMap["ttl"]) - if err != nil { - return nil, errors.Wrapf(err, "could not parse ttl '%d' as int for host record %v", ttl, rec.Name) - } - ep = endpoint.NewEndpointWithTTL(propMap["absoluteName"], endpoint.RecordTypeA, endpoint.TTL(ttl), ip) - } else { - ep = endpoint.NewEndpoint(propMap["absoluteName"], endpoint.RecordTypeA, ip) - } - for _, txtRec := range resT { - if strings.Compare(p.TxtPrefix+rec.Name+p.TxtSuffix, txtRec.Name) == 0 { - ep.Labels[endpoint.OwnerLabelKey], err = extractOwnerfromTXTRecord(txtRec.Properties) - if err != nil { - log.Debugf("External DNS Owner %s", err) - } - } - } - endpoints = append(endpoints, ep) - } - } - - var resC []api.BluecatCNAMERecord - err = p.gatewayClient.GetCNAMERecords(zone, &resC) - if err != nil { - return nil, errors.Wrapf(err, "could not fetch CNAME records for zone: %v", zone) - } - - for _, rec := range resC { - propMap := api.SplitProperties(rec.Properties) - if _, ok := propMap["ttl"]; ok { - ttl, err := strconv.Atoi(propMap["ttl"]) - if err != nil { - return nil, errors.Wrapf(err, "could not parse ttl '%d' as int for CNAME record %v", ttl, rec.Name) - } - ep = endpoint.NewEndpointWithTTL(propMap["absoluteName"], endpoint.RecordTypeCNAME, endpoint.TTL(ttl), propMap["linkedRecordName"]) - } else { - ep = endpoint.NewEndpoint(propMap["absoluteName"], endpoint.RecordTypeCNAME, propMap["linkedRecordName"]) - } - for _, txtRec := range resT { - if strings.Compare(p.TxtPrefix+rec.Name+p.TxtSuffix, txtRec.Name) == 0 { - ep.Labels[endpoint.OwnerLabelKey], err = extractOwnerfromTXTRecord(txtRec.Properties) - if err != nil { - log.Debugf("External DNS Owner %s", err) - } - } - } - endpoints = append(endpoints, ep) - } - } - - log.Debugf("fetched %d records from Bluecat", len(endpoints)) - return endpoints, nil -} - -// ApplyChanges updates necessary zones and replaces old records with new ones -// -// Returns nil upon success and err is there is an error -func (p *BluecatProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { - zones, err := p.zones() - if err != nil { - return err - } - log.Infof("zones is: %+v\n", zones) - log.Infof("changes: %+v\n", changes) - created, deleted := p.mapChanges(zones, changes) - log.Infof("created: %+v\n", created) - log.Infof("deleted: %+v\n", deleted) - p.deleteRecords(deleted) - p.createRecords(created) - - if p.DNSServerName != "" { - if p.dryRun { - log.Debug("Not executing deploy because this is running in dry-run mode") - } else { - switch p.DNSDeployType { - case "full-deploy": - err := p.gatewayClient.ServerFullDeploy() - if err != nil { - return err - } - case "no-deploy": - log.Debug("Not executing deploy because DNSDeployType is set to 'no-deploy'") - } - } - } else { - log.Debug("Not executing deploy because server name was not provided") - } - - return nil -} - -type bluecatChangeMap map[string][]*endpoint.Endpoint - -func (p *BluecatProvider) mapChanges(zones []string, changes *plan.Changes) (bluecatChangeMap, bluecatChangeMap) { - created := bluecatChangeMap{} - deleted := bluecatChangeMap{} - - mapChange := func(changeMap bluecatChangeMap, change *endpoint.Endpoint) { - zone := p.findZone(zones, change.DNSName) - if zone == "" { - log.Debugf("ignoring changes to '%s' because a suitable Bluecat DNS zone was not found", change.DNSName) - return - } - changeMap[zone] = append(changeMap[zone], change) - } - - for _, change := range changes.Delete { - mapChange(deleted, change) - } - for _, change := range changes.UpdateOld { - mapChange(deleted, change) - } - for _, change := range changes.Create { - mapChange(created, change) - } - for _, change := range changes.UpdateNew { - mapChange(created, change) - } - - return created, deleted -} - -// findZone finds the most specific matching zone for a given record 'name' from a list of all zones -func (p *BluecatProvider) findZone(zones []string, name string) string { - var result string - - for _, zone := range zones { - if strings.HasSuffix(name, "."+zone) { - if result == "" || len(zone) > len(result) { - result = zone - } - } else if strings.EqualFold(name, zone) { - if result == "" || len(zone) > len(result) { - result = zone - } - } - } - - return result -} - -func (p *BluecatProvider) zones() ([]string, error) { - log.Debugf("retrieving Bluecat zones for configuration: %s, view: %s", p.DNSConfiguration, p.View) - var zones []string - - zonelist, err := p.gatewayClient.GetBluecatZones(p.RootZone) - if err != nil { - return nil, err - } - - for _, zone := range zonelist { - if !p.domainFilter.Match(zone.Name) { - continue - } - - // TODO: match to absoluteName(string) not Id(int) - if !p.zoneIDFilter.Match(strconv.Itoa(zone.ID)) { - continue - } - - zoneProps := api.SplitProperties(zone.Properties) - - zones = append(zones, zoneProps["absoluteName"]) - } - log.Debugf("found %d zones", len(zones)) - return zones, nil -} - -func (p *BluecatProvider) createRecords(created bluecatChangeMap) { - for zone, endpoints := range created { - for _, ep := range endpoints { - if p.dryRun { - log.Infof("would create %s record named '%s' to '%s' for Bluecat DNS zone '%s'.", - ep.RecordType, - ep.DNSName, - ep.Targets, - zone, - ) - continue - } - - log.Infof("creating %s record named '%s' to '%s' for Bluecat DNS zone '%s'.", - ep.RecordType, - ep.DNSName, - ep.Targets, - zone, - ) - - recordSet, err := p.recordSet(ep, false) - if err != nil { - log.Errorf( - "Failed to retrieve %s record named '%s' to '%s' for Bluecat DNS zone '%s': %v", - ep.RecordType, - ep.DNSName, - ep.Targets, - zone, - err, - ) - continue - } - var response interface{} - switch ep.RecordType { - case endpoint.RecordTypeA: - err = p.gatewayClient.CreateHostRecord(zone, recordSet.obj.(*api.BluecatCreateHostRecordRequest)) - case endpoint.RecordTypeCNAME: - err = p.gatewayClient.CreateCNAMERecord(zone, recordSet.obj.(*api.BluecatCreateCNAMERecordRequest)) - case endpoint.RecordTypeTXT: - err = p.gatewayClient.CreateTXTRecord(zone, recordSet.obj.(*api.BluecatCreateTXTRecordRequest)) - } - log.Debugf("Response from create: %v", response) - if err != nil { - log.Errorf( - "Failed to create %s record named '%s' to '%s' for Bluecat DNS zone '%s': %v", - ep.RecordType, - ep.DNSName, - ep.Targets, - zone, - err, - ) - } - } - } -} - -func (p *BluecatProvider) deleteRecords(deleted bluecatChangeMap) { - // run deletions first - for zone, endpoints := range deleted { - for _, ep := range endpoints { - if p.dryRun { - log.Infof("would delete %s record named '%s' for Bluecat DNS zone '%s'.", - ep.RecordType, - ep.DNSName, - zone, - ) - continue - } else { - log.Infof("deleting %s record named '%s' for Bluecat DNS zone '%s'.", - ep.RecordType, - ep.DNSName, - zone, - ) - - recordSet, err := p.recordSet(ep, true) - if err != nil { - log.Errorf( - "Failed to retrieve %s record named '%s' to '%s' for Bluecat DNS zone '%s': %v", - ep.RecordType, - ep.DNSName, - ep.Targets, - zone, - err, - ) - continue - } - - switch ep.RecordType { - case endpoint.RecordTypeA: - for _, record := range *recordSet.res.(*[]api.BluecatHostRecord) { - err = p.gatewayClient.DeleteHostRecord(record.Name, zone) - } - case endpoint.RecordTypeCNAME: - for _, record := range *recordSet.res.(*[]api.BluecatCNAMERecord) { - err = p.gatewayClient.DeleteCNAMERecord(record.Name, zone) - } - case endpoint.RecordTypeTXT: - for _, record := range *recordSet.res.(*[]api.BluecatTXTRecord) { - err = p.gatewayClient.DeleteTXTRecord(record.Name, zone) - } - } - if err != nil { - log.Errorf("Failed to delete %s record named '%s' for Bluecat DNS zone '%s': %v", - ep.RecordType, - ep.DNSName, - zone, - err) - } - } - } - } -} - -func (p *BluecatProvider) recordSet(ep *endpoint.Endpoint, getObject bool) (bluecatRecordSet, error) { - recordSet := bluecatRecordSet{} - switch ep.RecordType { - case endpoint.RecordTypeA: - var res []api.BluecatHostRecord - obj := api.BluecatCreateHostRecordRequest{ - AbsoluteName: ep.DNSName, - IP4Address: ep.Targets[0], - TTL: int(ep.RecordTTL), - Properties: "", - } - if getObject { - var record api.BluecatHostRecord - err := p.gatewayClient.GetHostRecord(ep.DNSName, &record) - if err != nil { - return bluecatRecordSet{}, err - } - res = append(res, record) - } - recordSet = bluecatRecordSet{ - obj: &obj, - res: &res, - } - case endpoint.RecordTypeCNAME: - var res []api.BluecatCNAMERecord - obj := api.BluecatCreateCNAMERecordRequest{ - AbsoluteName: ep.DNSName, - LinkedRecord: ep.Targets[0], - TTL: int(ep.RecordTTL), - Properties: "", - } - if getObject { - var record api.BluecatCNAMERecord - err := p.gatewayClient.GetCNAMERecord(ep.DNSName, &record) - if err != nil { - return bluecatRecordSet{}, err - } - res = append(res, record) - } - recordSet = bluecatRecordSet{ - obj: &obj, - res: &res, - } - case endpoint.RecordTypeTXT: - var res []api.BluecatTXTRecord - // TODO: Allow setting TTL - // This is not implemented in the Bluecat Gateway - obj := api.BluecatCreateTXTRecordRequest{ - AbsoluteName: ep.DNSName, - Text: ep.Targets[0], - } - if getObject { - var record api.BluecatTXTRecord - err := p.gatewayClient.GetTXTRecord(ep.DNSName, &record) - if err != nil { - return bluecatRecordSet{}, err - } - res = append(res, record) - } - recordSet = bluecatRecordSet{ - obj: &obj, - res: &res, - } - } - return recordSet, nil -} - -// extractOwnerFromTXTRecord takes a single text property string and returns the owner after parsing the owner string. -func extractOwnerfromTXTRecord(propString string) (string, error) { - if len(propString) == 0 { - return "", errors.Errorf("External-DNS Owner not found") - } - re := regexp.MustCompile(`external-dns/owner=[^,]+`) - match := re.FindStringSubmatch(propString) - if len(match) == 0 { - return "", errors.Errorf("External-DNS Owner not found, %s", propString) - } - return strings.Split(match[0], "=")[1], nil -} diff --git a/provider/bluecat/bluecat_test.go b/provider/bluecat/bluecat_test.go deleted file mode 100644 index ed7c0de04..000000000 --- a/provider/bluecat/bluecat_test.go +++ /dev/null @@ -1,465 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. -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 bluecat - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/internal/testutils" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" - api "sigs.k8s.io/external-dns/provider/bluecat/gateway" -) - -type mockGatewayClient struct { - mockBluecatZones *[]api.BluecatZone - mockBluecatHosts *[]api.BluecatHostRecord - mockBluecatCNAMEs *[]api.BluecatCNAMERecord - mockBluecatTXTs *[]api.BluecatTXTRecord -} - -type Changes struct { - // Records that need to be created - Create []*endpoint.Endpoint - // Records that need to be updated (current data) - UpdateOld []*endpoint.Endpoint - // Records that need to be updated (desired data) - UpdateNew []*endpoint.Endpoint - // Records that need to be deleted - Delete []*endpoint.Endpoint -} - -func (g mockGatewayClient) GetBluecatZones(zoneName string) ([]api.BluecatZone, error) { - return *g.mockBluecatZones, nil -} - -func (g mockGatewayClient) GetHostRecords(zone string, records *[]api.BluecatHostRecord) error { - *records = *g.mockBluecatHosts - return nil -} - -func (g mockGatewayClient) GetCNAMERecords(zone string, records *[]api.BluecatCNAMERecord) error { - *records = *g.mockBluecatCNAMEs - return nil -} - -func (g mockGatewayClient) GetHostRecord(name string, record *api.BluecatHostRecord) error { - for _, currentRecord := range *g.mockBluecatHosts { - if currentRecord.Name == strings.Split(name, ".")[0] { - *record = currentRecord - return nil - } - } - return nil -} - -func (g mockGatewayClient) GetCNAMERecord(name string, record *api.BluecatCNAMERecord) error { - for _, currentRecord := range *g.mockBluecatCNAMEs { - if currentRecord.Name == strings.Split(name, ".")[0] { - *record = currentRecord - return nil - } - } - return nil -} - -func (g mockGatewayClient) CreateHostRecord(zone string, req *api.BluecatCreateHostRecordRequest) (err error) { - return nil -} - -func (g mockGatewayClient) CreateCNAMERecord(zone string, req *api.BluecatCreateCNAMERecordRequest) (err error) { - return nil -} - -func (g mockGatewayClient) DeleteHostRecord(name string, zone string) (err error) { - *g.mockBluecatHosts = nil - return nil -} - -func (g mockGatewayClient) DeleteCNAMERecord(name string, zone string) (err error) { - *g.mockBluecatCNAMEs = nil - return nil -} - -func (g mockGatewayClient) GetTXTRecords(zone string, records *[]api.BluecatTXTRecord) error { - *records = *g.mockBluecatTXTs - return nil -} - -func (g mockGatewayClient) GetTXTRecord(name string, record *api.BluecatTXTRecord) error { - for _, currentRecord := range *g.mockBluecatTXTs { - if currentRecord.Name == name { - *record = currentRecord - return nil - } - } - return nil -} - -func (g mockGatewayClient) CreateTXTRecord(zone string, req *api.BluecatCreateTXTRecordRequest) error { - return nil -} - -func (g mockGatewayClient) DeleteTXTRecord(name string, zone string) error { - *g.mockBluecatTXTs = nil - return nil -} - -func (g mockGatewayClient) ServerFullDeploy() error { - return nil -} - -func createMockBluecatZone(fqdn string) api.BluecatZone { - props := "absoluteName=" + fqdn - return api.BluecatZone{ - Properties: props, - Name: fqdn, - ID: 3, - } -} - -func createMockBluecatHostRecord(fqdn, target string, ttl int) api.BluecatHostRecord { - props := "absoluteName=" + fqdn + "|addresses=" + target + "|ttl=" + fmt.Sprint(ttl) + "|" - nameParts := strings.Split(fqdn, ".") - return api.BluecatHostRecord{ - Name: nameParts[0], - Properties: props, - ID: 3, - } -} - -func createMockBluecatCNAME(alias, target string, ttl int) api.BluecatCNAMERecord { - props := "absoluteName=" + alias + "|linkedRecordName=" + target + "|ttl=" + fmt.Sprint(ttl) + "|" - nameParts := strings.Split(alias, ".") - return api.BluecatCNAMERecord{ - Name: nameParts[0], - Properties: props, - } -} - -func createMockBluecatTXT(fqdn, txt string) api.BluecatTXTRecord { - return api.BluecatTXTRecord{ - Name: fqdn, - Properties: txt, - } -} - -func newBluecatProvider(domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, dryRun bool, client mockGatewayClient) *BluecatProvider { - return &BluecatProvider{ - domainFilter: domainFilter, - zoneIDFilter: zoneIDFilter, - dryRun: dryRun, - gatewayClient: client, - } -} - -type bluecatTestData []struct { - TestDescription string - Endpoints []*endpoint.Endpoint -} - -var tests = bluecatTestData{ - { - "first test case", // TODO: better test description - []*endpoint.Endpoint{ - { - DNSName: "example.com", - RecordType: endpoint.RecordTypeA, - Targets: endpoint.Targets{"123.123.123.122"}, - RecordTTL: endpoint.TTL(30), - }, - { - DNSName: "nginx.example.com", - RecordType: endpoint.RecordTypeA, - Targets: endpoint.Targets{"123.123.123.123"}, - RecordTTL: endpoint.TTL(30), - }, - { - DNSName: "whitespace.example.com", - RecordType: endpoint.RecordTypeA, - Targets: endpoint.Targets{"123.123.123.124"}, - RecordTTL: endpoint.TTL(30), - }, - { - DNSName: "hack.example.com", - RecordType: endpoint.RecordTypeCNAME, - Targets: endpoint.Targets{"bluecatnetworks.com"}, - RecordTTL: endpoint.TTL(30), - }, - { - DNSName: "wack.example.com", - RecordType: endpoint.RecordTypeTXT, - Targets: endpoint.Targets{"hello"}, - Labels: endpoint.Labels{"owner": ""}, - }, - { - DNSName: "sack.example.com", - RecordType: endpoint.RecordTypeTXT, - Targets: endpoint.Targets{""}, - Labels: endpoint.Labels{"owner": ""}, - }, - { - DNSName: "kdb.example.com", - RecordType: endpoint.RecordTypeTXT, - Targets: endpoint.Targets{"heritage=external-dns,external-dns/owner=default,external-dns/resource=service/openshift-ingress/router-default"}, - Labels: endpoint.Labels{"owner": "default"}, - }, - }, - }, -} - -func TestBluecatRecords(t *testing.T) { - client := mockGatewayClient{ - mockBluecatZones: &[]api.BluecatZone{ - createMockBluecatZone("example.com"), - }, - mockBluecatTXTs: &[]api.BluecatTXTRecord{ - createMockBluecatTXT("kdb.example.com", "heritage=external-dns,external-dns/owner=default,external-dns/resource=service/openshift-ingress/router-default"), - createMockBluecatTXT("wack.example.com", "hello"), - createMockBluecatTXT("sack.example.com", ""), - }, - mockBluecatHosts: &[]api.BluecatHostRecord{ - createMockBluecatHostRecord("example.com", "123.123.123.122", 30), - createMockBluecatHostRecord("nginx.example.com", "123.123.123.123", 30), - createMockBluecatHostRecord("whitespace.example.com", "123.123.123.124", 30), - }, - mockBluecatCNAMEs: &[]api.BluecatCNAMERecord{ - createMockBluecatCNAME("hack.example.com", "bluecatnetworks.com", 30), - }, - } - - provider := newBluecatProvider( - endpoint.NewDomainFilter([]string{"example.com"}), - provider.NewZoneIDFilter([]string{""}), false, client) - - for _, ti := range tests { - actual, err := provider.Records(context.Background()) - if err != nil { - t.Fatal(err) - } - validateEndpoints(t, actual, ti.Endpoints) - } -} - -func TestBluecatApplyChangesCreate(t *testing.T) { - client := mockGatewayClient{ - mockBluecatZones: &[]api.BluecatZone{ - createMockBluecatZone("example.com"), - }, - mockBluecatHosts: &[]api.BluecatHostRecord{}, - mockBluecatCNAMEs: &[]api.BluecatCNAMERecord{}, - mockBluecatTXTs: &[]api.BluecatTXTRecord{}, - } - - provider := newBluecatProvider( - endpoint.NewDomainFilter([]string{"example.com"}), - provider.NewZoneIDFilter([]string{""}), false, client) - - for _, ti := range tests { - err := provider.ApplyChanges(context.Background(), &plan.Changes{Create: ti.Endpoints}) - if err != nil { - t.Fatal(err) - } - - actual, err := provider.Records(context.Background()) - if err != nil { - t.Fatal(err) - } - validateEndpoints(t, actual, []*endpoint.Endpoint{}) - } -} - -func TestBluecatApplyChangesDelete(t *testing.T) { - client := mockGatewayClient{ - mockBluecatZones: &[]api.BluecatZone{ - createMockBluecatZone("example.com"), - }, - mockBluecatHosts: &[]api.BluecatHostRecord{ - createMockBluecatHostRecord("example.com", "123.123.123.122", 30), - createMockBluecatHostRecord("nginx.example.com", "123.123.123.123", 30), - createMockBluecatHostRecord("whitespace.example.com", "123.123.123.124", 30), - }, - mockBluecatCNAMEs: &[]api.BluecatCNAMERecord{ - createMockBluecatCNAME("hack.example.com", "bluecatnetworks.com", 30), - }, - mockBluecatTXTs: &[]api.BluecatTXTRecord{ - createMockBluecatTXT("kdb.example.com", "heritage=external-dns,external-dns/owner=default,external-dns/resource=service/openshift-ingress/router-default"), - createMockBluecatTXT("wack.example.com", "hello"), - createMockBluecatTXT("sack.example.com", ""), - }, - } - - provider := newBluecatProvider( - endpoint.NewDomainFilter([]string{"example.com"}), - provider.NewZoneIDFilter([]string{""}), false, client) - - for _, ti := range tests { - err := provider.ApplyChanges(context.Background(), &plan.Changes{Delete: ti.Endpoints}) - if err != nil { - t.Fatal(err) - } - - actual, err := provider.Records(context.Background()) - if err != nil { - t.Fatal(err) - } - validateEndpoints(t, actual, []*endpoint.Endpoint{}) - } -} - -func TestBluecatApplyChangesDeleteWithOwner(t *testing.T) { - client := mockGatewayClient{ - mockBluecatZones: &[]api.BluecatZone{ - createMockBluecatZone("example.com"), - }, - mockBluecatHosts: &[]api.BluecatHostRecord{ - createMockBluecatHostRecord("example.com", "123.123.123.122", 30), - createMockBluecatHostRecord("nginx.example.com", "123.123.123.123", 30), - createMockBluecatHostRecord("whitespace.example.com", "123.123.123.124", 30), - }, - mockBluecatCNAMEs: &[]api.BluecatCNAMERecord{ - createMockBluecatCNAME("hack.example.com", "bluecatnetworks.com", 30), - }, - mockBluecatTXTs: &[]api.BluecatTXTRecord{ - createMockBluecatTXT("kdb.example.com", "heritage=external-dns,external-dns/owner=default,external-dns/resource=service/openshift-ingress/router-default"), - createMockBluecatTXT("wack.example.com", "hello"), - createMockBluecatTXT("sack.example.com", ""), - }, - } - - provider := newBluecatProvider( - endpoint.NewDomainFilter([]string{"example.com"}), - provider.NewZoneIDFilter([]string{""}), false, client) - - for _, ti := range tests { - for _, ep := range ti.Endpoints { - if strings.Contains(ep.Targets.String(), "external-dns") { - owner, err := extractOwnerfromTXTRecord(ep.Targets.String()) - if err != nil { - t.Logf("%v", err) - } else { - t.Logf("Owner %s", owner) - } - } - } - err := provider.ApplyChanges(context.Background(), &plan.Changes{Delete: ti.Endpoints}) - if err != nil { - t.Fatal(err) - } - actual, err := provider.Records(context.Background()) - if err != nil { - t.Fatal(err) - } - validateEndpoints(t, actual, []*endpoint.Endpoint{}) - } -} - -// TODO: ensure findZone method is tested -// TODO: ensure zones method is tested -// TODO: ensure createRecords method is tested -// TODO: ensure deleteRecords method is tested -// TODO: ensure recordSet method is tested - -// TODO: Figure out why recordSet.res is not being set properly -func TestBluecatRecordset(t *testing.T) { - client := mockGatewayClient{ - mockBluecatZones: &[]api.BluecatZone{ - createMockBluecatZone("example.com"), - }, - mockBluecatHosts: &[]api.BluecatHostRecord{ - createMockBluecatHostRecord("example.com", "123.123.123.122", 30), - createMockBluecatHostRecord("nginx.example.com", "123.123.123.123", 30), - createMockBluecatHostRecord("whitespace.example.com", "123.123.123.124", 30), - }, - mockBluecatCNAMEs: &[]api.BluecatCNAMERecord{ - createMockBluecatCNAME("hack.example.com", "bluecatnetworks.com", 30), - }, - mockBluecatTXTs: &[]api.BluecatTXTRecord{ - createMockBluecatTXT("abc.example.com", "hello"), - }, - } - - provider := newBluecatProvider( - endpoint.NewDomainFilter([]string{"example.com"}), - provider.NewZoneIDFilter([]string{""}), false, client) - - // Test txt records for recordSet function - testTxtEndpoint := endpoint.NewEndpoint("abc.example.com", endpoint.RecordTypeTXT, "hello") - txtObj := api.BluecatCreateTXTRecordRequest{ - AbsoluteName: testTxtEndpoint.DNSName, - Text: testTxtEndpoint.Targets[0], - } - txtRecords := []api.BluecatTXTRecord{ - createMockBluecatTXT("abc.example.com", "hello"), - } - expected := bluecatRecordSet{ - obj: &txtObj, - res: &txtRecords, - } - actual, err := provider.recordSet(testTxtEndpoint, true) - if err != nil { - t.Fatal(err) - } - assert.Equal(t, actual.obj, expected.obj) - assert.Equal(t, actual.res, expected.res) - - // Test a records for recordSet function - testHostEndpoint := endpoint.NewEndpoint("whitespace.example.com", endpoint.RecordTypeA, "123.123.123.124") - hostObj := api.BluecatCreateHostRecordRequest{ - AbsoluteName: testHostEndpoint.DNSName, - IP4Address: testHostEndpoint.Targets[0], - } - hostRecords := []api.BluecatHostRecord{ - createMockBluecatHostRecord("whitespace.example.com", "123.123.123.124", 30), - } - hostExpected := bluecatRecordSet{ - obj: &hostObj, - res: &hostRecords, - } - hostActual, err := provider.recordSet(testHostEndpoint, true) - if err != nil { - t.Fatal(err) - } - assert.Equal(t, hostActual.obj, hostExpected.obj) - assert.Equal(t, hostActual.res, hostExpected.res) - - // Test CName records for recordSet function - testCnameEndpoint := endpoint.NewEndpoint("hack.example.com", endpoint.RecordTypeCNAME, "bluecatnetworks.com") - cnameObj := api.BluecatCreateCNAMERecordRequest{ - AbsoluteName: testCnameEndpoint.DNSName, - LinkedRecord: testCnameEndpoint.Targets[0], - } - cnameRecords := []api.BluecatCNAMERecord{ - createMockBluecatCNAME("hack.example.com", "bluecatnetworks.com", 30), - } - cnameExpected := bluecatRecordSet{ - obj: &cnameObj, - res: &cnameRecords, - } - cnameActual, err := provider.recordSet(testCnameEndpoint, true) - if err != nil { - t.Fatal(err) - } - assert.Equal(t, cnameActual.obj, cnameExpected.obj) - assert.Equal(t, cnameActual.res, cnameExpected.res) -} - -func validateEndpoints(t *testing.T, actual, expected []*endpoint.Endpoint) { - assert.True(t, testutils.SameEndpoints(actual, expected), "actual and expected endpoints don't match. %s:%s", actual, expected) -} diff --git a/provider/bluecat/gateway/api.go b/provider/bluecat/gateway/api.go deleted file mode 100644 index d0d8dc560..000000000 --- a/provider/bluecat/gateway/api.go +++ /dev/null @@ -1,583 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -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. -*/ -// TODO: add logging -// TODO: add timeouts -package api - -import ( - "bytes" - "crypto/tls" - "encoding/json" - "io" - "net/http" - "os" - "strings" - - "github.com/pkg/errors" - log "github.com/sirupsen/logrus" -) - -// TODO: Ensure DNS Deploy Type Defaults to no-deploy instead of "" -type BluecatConfig struct { - GatewayHost string `json:"gatewayHost"` - GatewayUsername string `json:"gatewayUsername,omitempty"` - GatewayPassword string `json:"gatewayPassword,omitempty"` - DNSConfiguration string `json:"dnsConfiguration"` - DNSServerName string `json:"dnsServerName"` - DNSDeployType string `json:"dnsDeployType"` - View string `json:"dnsView"` - RootZone string `json:"rootZone"` - SkipTLSVerify bool `json:"skipTLSVerify"` -} - -type GatewayClient interface { - GetBluecatZones(zoneName string) ([]BluecatZone, error) - GetHostRecords(zone string, records *[]BluecatHostRecord) error - GetCNAMERecords(zone string, records *[]BluecatCNAMERecord) error - GetHostRecord(name string, record *BluecatHostRecord) error - GetCNAMERecord(name string, record *BluecatCNAMERecord) error - CreateHostRecord(zone string, req *BluecatCreateHostRecordRequest) error - CreateCNAMERecord(zone string, req *BluecatCreateCNAMERecordRequest) error - DeleteHostRecord(name string, zone string) (err error) - DeleteCNAMERecord(name string, zone string) (err error) - GetTXTRecords(zone string, records *[]BluecatTXTRecord) error - GetTXTRecord(name string, record *BluecatTXTRecord) error - CreateTXTRecord(zone string, req *BluecatCreateTXTRecordRequest) error - DeleteTXTRecord(name string, zone string) error - ServerFullDeploy() error -} - -// GatewayClientConfig defines the configuration for a Bluecat Gateway Client -type GatewayClientConfig struct { - Cookie http.Cookie - Token string - Host string - DNSConfiguration string - View string - RootZone string - DNSServerName string - SkipTLSVerify bool -} - -// BluecatZone defines a zone to hold records -type BluecatZone struct { - ID int `json:"id"` - Name string `json:"name"` - Properties string `json:"properties"` - Type string `json:"type"` -} - -// BluecatHostRecord defines dns Host record -type BluecatHostRecord struct { - ID int `json:"id"` - Name string `json:"name"` - Properties string `json:"properties"` - Type string `json:"type"` -} - -// BluecatCNAMERecord defines dns CNAME record -type BluecatCNAMERecord struct { - ID int `json:"id"` - Name string `json:"name"` - Properties string `json:"properties"` - Type string `json:"type"` -} - -// BluecatTXTRecord defines dns TXT record -type BluecatTXTRecord struct { - ID int `json:"id"` - Name string `json:"name"` - Properties string `json:"properties"` -} - -type BluecatCreateHostRecordRequest struct { - AbsoluteName string `json:"absolute_name"` - IP4Address string `json:"ip4_address"` - TTL int `json:"ttl"` - Properties string `json:"properties"` -} - -type BluecatCreateCNAMERecordRequest struct { - AbsoluteName string `json:"absolute_name"` - LinkedRecord string `json:"linked_record"` - TTL int `json:"ttl"` - Properties string `json:"properties"` -} - -type BluecatCreateTXTRecordRequest struct { - AbsoluteName string `json:"absolute_name"` - Text string `json:"txt"` -} - -type BluecatServerFullDeployRequest struct { - ServerName string `json:"server_name"` -} - -// NewGatewayClient creates and returns a new Bluecat gateway client -func NewGatewayClientConfig(cookie http.Cookie, token, gatewayHost, dnsConfiguration, view, rootZone, dnsServerName string, skipTLSVerify bool) GatewayClientConfig { - // TODO: do not handle defaulting here - // - // Right now the Bluecat gateway doesn't seem to have a way to get the root zone from the API. If the user - // doesn't provide one via the config file we'll assume it's 'com' - if rootZone == "" { - rootZone = "com" - } - return GatewayClientConfig{ - Cookie: cookie, - Token: token, - Host: gatewayHost, - DNSConfiguration: dnsConfiguration, - DNSServerName: dnsServerName, - View: view, - RootZone: rootZone, - SkipTLSVerify: skipTLSVerify, - } -} - -// GetBluecatGatewayToken retrieves a Bluecat Gateway API token. -func GetBluecatGatewayToken(cfg BluecatConfig) (string, http.Cookie, error) { - var username string - if cfg.GatewayUsername != "" { - username = cfg.GatewayUsername - } - if v, ok := os.LookupEnv("BLUECAT_USERNAME"); ok { - username = v - } - - var password string - if cfg.GatewayPassword != "" { - password = cfg.GatewayPassword - } - if v, ok := os.LookupEnv("BLUECAT_PASSWORD"); ok { - password = v - } - - body, err := json.Marshal(map[string]string{ - "username": username, - "password": password, - }) - if err != nil { - return "", http.Cookie{}, errors.Wrap(err, "could not unmarshal credentials for bluecat gateway config") - } - url := cfg.GatewayHost + "/rest_login" - - response, err := executeHTTPRequest(cfg.SkipTLSVerify, http.MethodPost, url, "", bytes.NewBuffer(body), http.Cookie{}) - if err != nil { - return "", http.Cookie{}, errors.Wrap(err, "error obtaining API token from bluecat gateway") - } - defer response.Body.Close() - - responseBody, err := io.ReadAll(response.Body) - if err != nil { - return "", http.Cookie{}, errors.Wrap(err, "failed to read login response from bluecat gateway") - } - - if response.StatusCode != http.StatusOK { - return "", http.Cookie{}, errors.Errorf("got HTTP response code %v, detailed message: %v", response.StatusCode, string(responseBody)) - } - - jsonResponse := map[string]string{} - err = json.Unmarshal(responseBody, &jsonResponse) - if err != nil { - return "", http.Cookie{}, errors.Wrap(err, "error unmarshaling json response (auth) from bluecat gateway") - } - - // Example response: {"access_token": "BAMAuthToken: abc123"} - // We only care about the actual token string - i.e. abc123 - // The gateway also creates a cookie as part of the response. This seems to be the actual auth mechanism, at least - // for now. - return strings.Split(jsonResponse["access_token"], " ")[1], *response.Cookies()[0], nil -} - -func (c GatewayClientConfig) GetBluecatZones(zoneName string) ([]BluecatZone, error) { - zonePath := expandZone(zoneName) - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/views/" + c.View + "/" + zonePath - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodGet, url, c.Token, nil, c.Cookie) - if err != nil { - return nil, errors.Wrapf(err, "error requesting zones from gateway: %v, %v", url, zoneName) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - return nil, errors.Errorf("received http %v requesting zones from gateway in zone %v", response.StatusCode, zoneName) - } - - zones := []BluecatZone{} - json.NewDecoder(response.Body).Decode(&zones) - - // Bluecat Gateway only returns subzones one level deeper than the provided zone - // so this recursion is needed to traverse subzones until none are returned - for _, zone := range zones { - zoneProps := SplitProperties(zone.Properties) - subZones, err := c.GetBluecatZones(zoneProps["absoluteName"]) - if err != nil { - return nil, errors.Wrapf(err, "error retrieving subzones from gateway: %v", zoneName) - } - zones = append(zones, subZones...) - } - - return zones, nil -} - -func (c GatewayClientConfig) GetHostRecords(zone string, records *[]BluecatHostRecord) error { - zonePath := expandZone(zone) - // Remove the trailing 'zones/' - zonePath = strings.TrimSuffix(zonePath, "zones/") - - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/views/" + c.View + "/" + zonePath + "host_records/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodGet, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error requesting host records from gateway in zone %v", zone) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - return errors.Errorf("received http %v requesting host records from gateway in zone %v", response.StatusCode, zone) - } - - json.NewDecoder(response.Body).Decode(records) - log.Debugf("Get Host Records Response: %v", records) - - return nil -} - -func (c GatewayClientConfig) GetCNAMERecords(zone string, records *[]BluecatCNAMERecord) error { - zonePath := expandZone(zone) - // Remove the trailing 'zones/' - zonePath = strings.TrimSuffix(zonePath, "zones/") - - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/views/" + c.View + "/" + zonePath + "cname_records/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodGet, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error retrieving cname records from gateway in zone %v", zone) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - return errors.Errorf("received http %v requesting cname records from gateway in zone %v", response.StatusCode, zone) - } - - json.NewDecoder(response.Body).Decode(records) - log.Debugf("Get CName Records Response: %v", records) - - return nil -} - -func (c GatewayClientConfig) GetTXTRecords(zone string, records *[]BluecatTXTRecord) error { - zonePath := expandZone(zone) - // Remove the trailing 'zones/' - zonePath = strings.TrimSuffix(zonePath, "zones/") - - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/views/" + c.View + "/" + zonePath + "text_records/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodGet, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error retrieving txt records from gateway in zone %v", zone) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - return errors.Errorf("received http %v requesting txt records from gateway in zone %v", response.StatusCode, zone) - } - - log.Debugf("Get Txt Records response: %v", response) - json.NewDecoder(response.Body).Decode(records) - log.Debugf("Get TXT Records Body: %v", records) - - return nil -} - -func (c GatewayClientConfig) GetHostRecord(name string, record *BluecatHostRecord) error { - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + - "/views/" + c.View + "/" + - "host_records/" + name + "/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodGet, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error retrieving host record %v from gateway", name) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - return errors.Errorf("received http %v while retrieving host record %v from gateway", response.StatusCode, name) - } - - json.NewDecoder(response.Body).Decode(record) - log.Debugf("Get Host Record Response: %v", record) - return nil -} - -func (c GatewayClientConfig) GetCNAMERecord(name string, record *BluecatCNAMERecord) error { - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + - "/views/" + c.View + "/" + - "cname_records/" + name + "/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodGet, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error retrieving cname record %v from gateway", name) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - return errors.Errorf("received http %v while retrieving cname record %v from gateway", response.StatusCode, name) - } - - json.NewDecoder(response.Body).Decode(record) - log.Debugf("Get CName Record Response: %v", record) - return nil -} - -func (c GatewayClientConfig) GetTXTRecord(name string, record *BluecatTXTRecord) error { - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + - "/views/" + c.View + "/" + - "text_records/" + name + "/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodGet, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error retrieving record %v from gateway", name) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusOK { - return errors.Errorf("received http %v while retrieving txt record %v from gateway", response.StatusCode, name) - } - - json.NewDecoder(response.Body).Decode(record) - log.Debugf("Get TXT Record Response: %v", record) - - return nil -} - -func (c GatewayClientConfig) CreateHostRecord(zone string, req *BluecatCreateHostRecordRequest) error { - zonePath := expandZone(zone) - // Remove the trailing 'zones/' - zonePath = strings.TrimSuffix(zonePath, "zones/") - - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/views/" + c.View + "/" + zonePath + "host_records/" - body, err := json.Marshal(req) - if err != nil { - return errors.Wrap(err, "could not marshal body for create host record") - } - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodPost, url, c.Token, bytes.NewBuffer(body), c.Cookie) - if err != nil { - return errors.Wrapf(err, "error creating host record %v in gateway", req.AbsoluteName) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusCreated { - return errors.Errorf("received http %v while creating host record %v in gateway", response.StatusCode, req.AbsoluteName) - } - - return nil -} - -func (c GatewayClientConfig) CreateCNAMERecord(zone string, req *BluecatCreateCNAMERecordRequest) error { - zonePath := expandZone(zone) - // Remove the trailing 'zones/' - zonePath = strings.TrimSuffix(zonePath, "zones/") - - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/views/" + c.View + "/" + zonePath + "cname_records/" - body, err := json.Marshal(req) - if err != nil { - return errors.Wrap(err, "could not marshal body for create cname record") - } - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodPost, url, c.Token, bytes.NewBuffer(body), c.Cookie) - if err != nil { - return errors.Wrapf(err, "error creating cname record %v in gateway", req.AbsoluteName) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusCreated { - return errors.Errorf("received http %v while creating cname record %v to alias %v in gateway", response.StatusCode, req.AbsoluteName, req.LinkedRecord) - } - - return nil -} - -func (c GatewayClientConfig) CreateTXTRecord(zone string, req *BluecatCreateTXTRecordRequest) error { - zonePath := expandZone(zone) - // Remove the trailing 'zones/' - zonePath = strings.TrimSuffix(zonePath, "zones/") - - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/views/" + c.View + "/" + zonePath + "text_records/" - body, err := json.Marshal(req) - if err != nil { - return errors.Wrap(err, "could not marshal body for create txt record") - } - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodPost, url, c.Token, bytes.NewBuffer(body), c.Cookie) - if err != nil { - return errors.Wrapf(err, "error creating txt record %v in gateway", req.AbsoluteName) - } - defer response.Body.Close() - - if response.StatusCode != http.StatusCreated { - return errors.Errorf("received http %v while creating txt record %v in gateway", response.StatusCode, req.AbsoluteName) - } - - return nil -} - -func (c GatewayClientConfig) DeleteHostRecord(name string, zone string) (err error) { - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + - "/views/" + c.View + "/" + - "host_records/" + name + "." + zone + "/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodDelete, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error deleting host record %v from gateway", name) - } - - if response.StatusCode != http.StatusNoContent { - return errors.Errorf("received http %v while deleting host record %v from gateway", response.StatusCode, name) - } - - return nil -} - -func (c GatewayClientConfig) DeleteCNAMERecord(name string, zone string) (err error) { - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + - "/views/" + c.View + "/" + - "cname_records/" + name + "." + zone + "/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodDelete, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error deleting cname record %v from gateway", name) - } - if response.StatusCode != http.StatusNoContent { - return errors.Errorf("received http %v while deleting cname record %v from gateway", response.StatusCode, name) - } - - return nil -} - -func (c GatewayClientConfig) DeleteTXTRecord(name string, zone string) error { - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + - "/views/" + c.View + "/" + - "text_records/" + name + "." + zone + "/" - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodDelete, url, c.Token, nil, c.Cookie) - if err != nil { - return errors.Wrapf(err, "error deleting txt record %v from gateway", name) - } - if response.StatusCode != http.StatusNoContent { - return errors.Errorf("received http %v while deleting txt record %v from gateway", response.StatusCode, name) - } - - return nil -} - -func (c GatewayClientConfig) ServerFullDeploy() error { - log.Infof("Executing full deploy on server %s", c.DNSServerName) - url := c.Host + "/api/v1/configurations/" + c.DNSConfiguration + "/server/full_deploy/" - requestBody := BluecatServerFullDeployRequest{ - ServerName: c.DNSServerName, - } - - body, err := json.Marshal(requestBody) - if err != nil { - return errors.Wrap(err, "could not marshal body for server full deploy") - } - - response, err := executeHTTPRequest(c.SkipTLSVerify, http.MethodPost, url, c.Token, bytes.NewBuffer(body), c.Cookie) - if err != nil { - return errors.Wrap(err, "error executing full deploy") - } - - if response.StatusCode != http.StatusCreated { - responseBody, err := io.ReadAll(response.Body) - if err != nil { - return errors.Wrap(err, "failed to read full deploy response body") - } - return errors.Errorf("got HTTP response code %v, detailed message: %v", response.StatusCode, string(responseBody)) - } - - return nil -} - -// SplitProperties is a helper function to break a '|' separated string into key/value pairs -// i.e. "foo=bar|baz=mop" -func SplitProperties(props string) map[string]string { - propMap := make(map[string]string) - // remove trailing | character before we split - props = strings.TrimSuffix(props, "|") - - splits := strings.Split(props, "|") - for _, pair := range splits { - items := strings.Split(pair, "=") - propMap[items[0]] = items[1] - } - - return propMap -} - -// IsValidDNSDeployType validates the deployment type provided by a users configuration is supported by the Bluecat Provider. -func IsValidDNSDeployType(deployType string) bool { - validDNSDeployTypes := []string{"no-deploy", "full-deploy"} - for _, t := range validDNSDeployTypes { - if t == deployType { - return true - } - } - return false -} - -// expandZone takes an absolute domain name such as 'example.com' and returns a zone hierarchy used by Bluecat Gateway, -// such as '/zones/com/zones/example/zones/' -func expandZone(zone string) string { - ze := "zones/" - parts := strings.Split(zone, ".") - if len(parts) > 1 { - last := len(parts) - 1 - for i := range parts { - ze = ze + parts[last-i] + "/zones/" - } - } else { - ze = ze + zone + "/zones/" - } - return ze -} - -func executeHTTPRequest(skipTLSVerify bool, method, url, token string, body io.Reader, cookie http.Cookie) (*http.Response, error) { - httpClient := &http.Client{ - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - TLSClientConfig: &tls.Config{ - InsecureSkipVerify: skipTLSVerify, - }, - }, - } - request, err := http.NewRequest(method, url, body) - if err != nil { - return nil, err - } - if request.Method == http.MethodPost { - request.Header.Add("Content-Type", "application/json") - } - request.Header.Add("Accept", "application/json") - - if token != "" { - request.Header.Add("Authorization", "Basic "+token) - } - request.AddCookie(&cookie) - - return httpClient.Do(request) -} diff --git a/provider/bluecat/gateway/api_test.go b/provider/bluecat/gateway/api_test.go deleted file mode 100644 index 10ebd51b5..000000000 --- a/provider/bluecat/gateway/api_test.go +++ /dev/null @@ -1,228 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. -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 api - -import ( - "encoding/json" - "io" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/google/go-cmp/cmp" -) - -func TestBluecatNewGatewayClient(t *testing.T) { - testCookie := http.Cookie{Name: "testCookie", Value: "exampleCookie"} - testToken := "exampleToken" - testgateWayHost := "exampleHost" - testDNSConfiguration := "exampleDNSConfiguration" - testDNSServer := "exampleServer" - testView := "testView" - testZone := "example.com" - testVerify := true - - client := NewGatewayClientConfig(testCookie, testToken, testgateWayHost, testDNSConfiguration, testView, testZone, testDNSServer, testVerify) - - if client.Cookie.Value != testCookie.Value || client.Cookie.Name != testCookie.Name || client.Token != testToken || client.Host != testgateWayHost || client.DNSConfiguration != testDNSConfiguration || client.View != testView || client.RootZone != testZone || client.SkipTLSVerify != testVerify { - t.Fatal("Client values dont match") - } -} - -func TestBluecatExpandZones(t *testing.T) { - tests := map[string]struct { - input string - want string - }{ - "with subdomain": {input: "example.com", want: "zones/com/zones/example/zones/"}, - "only top level domain": {input: "com", want: "zones/com/zones/"}, - } - - for name, tc := range tests { - t.Run(name, func(t *testing.T) { - got := expandZone(tc.input) - diff := cmp.Diff(tc.want, got) - if diff != "" { - t.Fatalf(diff) - } - }) - } -} - -func TestBluecatValidDeployTypes(t *testing.T) { - validTypes := []string{"no-deploy", "full-deploy"} - invalidTypes := []string{"anything-else"} - for _, i := range validTypes { - if !IsValidDNSDeployType(i) { - t.Fatalf("%s should be a valid deploy type", i) - } - } - for _, i := range invalidTypes { - if IsValidDNSDeployType(i) { - t.Fatalf("%s should be a invalid deploy type", i) - } - } -} - -// TODO: Add error checking in case "properties" are not properly formatted -// Example test case... "invalid": {input: "abcde", want: map[string]string{}, err: InvalidProperty}, -func TestBluecatSplitProperties(t *testing.T) { - tests := map[string]struct { - input string - want map[string]string - }{ - "simple": {input: "ab=cd|ef=gh", want: map[string]string{"ab": "cd", "ef": "gh"}}, - } - - for name, tc := range tests { - t.Run(name, func(t *testing.T) { - got := SplitProperties(tc.input) - diff := cmp.Diff(tc.want, got) - if diff != "" { - t.Fatalf(diff) - } - }) - } -} - -func TestCreateTXTRecord(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - req := BluecatCreateTXTRecordRequest{} - requestBodyBytes, _ := io.ReadAll(r.Body) - err := json.Unmarshal(requestBodyBytes, &req) - if err != nil { - t.Fatalf("failed to unmarshal body for server full deploy") - } - if req.AbsoluteName == "alreadyexists.test.com" { - w.WriteHeader(http.StatusInternalServerError) - } else { - w.WriteHeader(http.StatusCreated) - } - })) - defer server.Close() - - tests := map[string]struct { - config GatewayClientConfig - zone string - record BluecatCreateTXTRecordRequest - expectError bool - }{ - "simple-success": {GatewayClientConfig{Host: server.URL}, "test.com", BluecatCreateTXTRecordRequest{AbsoluteName: "my.test.com", Text: "here is my text"}, false}, - "simple-failure": {GatewayClientConfig{Host: server.URL}, "test.com", BluecatCreateTXTRecordRequest{AbsoluteName: "alreadyexists.test.com", Text: "here is my text"}, true}, - } - - for name, tc := range tests { - t.Run(name, func(t *testing.T) { - got := tc.config.CreateTXTRecord(tc.zone, &tc.record) - if got != nil && !tc.expectError { - t.Fatalf("expected error %v, received error %v", tc.expectError, got) - } - }) - } -} - -func TestGetTXTRecord(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if strings.Contains(r.RequestURI, "doesnotexist") { - w.WriteHeader(http.StatusNotFound) - } else { - w.WriteHeader(http.StatusOK) - } - })) - defer server.Close() - - tests := map[string]struct { - config GatewayClientConfig - name string - expectError bool - }{ - "simple-success": {GatewayClientConfig{Host: server.URL}, "mytxtrecord", false}, - "simple-failure": {GatewayClientConfig{Host: server.URL}, "doesnotexist", true}, - } - - for name, tc := range tests { - t.Run(name, func(t *testing.T) { - record := BluecatTXTRecord{} - got := tc.config.GetTXTRecord(tc.name, &record) - if got != nil && !tc.expectError { - t.Fatalf("expected error %v, received error %v", tc.expectError, got) - } - }) - } -} - -func TestDeleteTXTRecord(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if strings.Contains(r.RequestURI, "doesnotexist") { - w.WriteHeader(http.StatusBadRequest) - } else { - w.WriteHeader(http.StatusNoContent) - } - })) - defer server.Close() - - tests := map[string]struct { - config GatewayClientConfig - name string - zone string - expectError bool - }{ - "simple-success": {GatewayClientConfig{Host: server.URL}, "todelete", "test.com", false}, - "simple-failure": {GatewayClientConfig{Host: server.URL}, "doesnotexist", "test.com", true}, - } - - for name, tc := range tests { - t.Run(name, func(t *testing.T) { - got := tc.config.DeleteTXTRecord(tc.name, tc.zone) - if got != nil && !tc.expectError { - t.Fatalf("expected error %v, received error %v", tc.expectError, got) - } - }) - } -} - -func TestServerFullDeploy(t *testing.T) { - server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - req := BluecatServerFullDeployRequest{} - requestBodyBytes, _ := io.ReadAll(r.Body) - err := json.Unmarshal(requestBodyBytes, &req) - if err != nil { - t.Fatalf("failed to unmarshal body for server full deploy") - } - if req.ServerName == "serverdoesnotexist" { - w.WriteHeader(http.StatusNotFound) - } else { - w.WriteHeader(http.StatusCreated) - } - })) - defer server.Close() - - tests := map[string]struct { - config GatewayClientConfig - expectError bool - }{ - "simple-success": {GatewayClientConfig{Host: server.URL, DNSServerName: "myserver"}, false}, - "simple-failure": {GatewayClientConfig{Host: server.URL, DNSServerName: "serverdoesnotexist"}, true}, - } - - for name, tc := range tests { - t.Run(name, func(t *testing.T) { - got := tc.config.ServerFullDeploy() - if got != nil && !tc.expectError { - t.Fatalf("expected error %v, received error %v", tc.expectError, got) - } - }) - } -} diff --git a/provider/dyn/dyn.go b/provider/dyn/dyn.go deleted file mode 100644 index 4b5725392..000000000 --- a/provider/dyn/dyn.go +++ /dev/null @@ -1,702 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -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 dyn - -import ( - "context" - "fmt" - "os" - "strconv" - "strings" - "time" - - log "github.com/sirupsen/logrus" - - "github.com/nesv/go-dynect/dynect" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" - dynsoap "sigs.k8s.io/external-dns/provider/dyn/soap" -) - -const ( - // 10 minutes default timeout if not configured using flags - dynDefaultTTL = 600 - - // when rate limit is hit retry up to 5 times after sleep 1m between retries - dynMaxRetriesOnErrRateLimited = 5 - - // two consecutive bad logins happen at least this many seconds apart - // While it is easy to get the username right, misconfiguring the password - // can get account blocked. Exit(1) is not a good solution - // as k8s will restart the pod and another login attempt will be made - badLoginMinIntervalSeconds = 30 * 60 - - // this prefix must be stripped from resource links before feeding them to dynect.Client.Do() - restAPIPrefix = "/REST/" -) - -func unixNow() int64 { - return time.Now().Unix() -} - -// DynConfig hold connection parameters to dyn.com and internal state -type DynConfig struct { - DomainFilter endpoint.DomainFilter - ZoneIDFilter provider.ZoneIDFilter - DryRun bool - CustomerName string - Username string - Password string - MinTTLSeconds int - AppVersion string - DynVersion string -} - -// ZoneSnapshot stores a single recordset for a zone for a single serial -type ZoneSnapshot struct { - serials map[string]int - endpoints map[string][]*endpoint.Endpoint -} - -// GetRecordsForSerial retrieves from memory the last known recordset for the (zone, serial) tuple -func (snap *ZoneSnapshot) GetRecordsForSerial(zone string, serial int) []*endpoint.Endpoint { - lastSerial, ok := snap.serials[zone] - if !ok { - // no mapping - return nil - } - - if lastSerial != serial { - // outdated mapping - return nil - } - - endpoints, ok := snap.endpoints[zone] - if !ok { - // probably a bug - return nil - } - - return endpoints -} - -// StoreRecordsForSerial associates a result set with a (zone, serial) -func (snap *ZoneSnapshot) StoreRecordsForSerial(zone string, serial int, records []*endpoint.Endpoint) { - snap.serials[zone] = serial - snap.endpoints[zone] = records -} - -// DynProvider is the actual interface impl. -type dynProviderState struct { - provider.BaseProvider - DynConfig - LastLoginErrorTime int64 - - ZoneSnapshot *ZoneSnapshot -} - -// ZoneChange is missing from dynect: https://help.dyn.com/get-zone-changeset-api/ -type ZoneChange struct { - ID int `json:"id"` - UserID int `json:"user_id"` - Zone string `json:"zone"` - FQDN string `json:"FQDN"` - Serial int `json:"serial"` - TTL int `json:"ttl"` - Type string `json:"rdata_type"` - RData dynect.DataBlock `json:"rdata"` -} - -// ZoneChangesResponse is missing from dynect: https://help.dyn.com/get-zone-changeset-api/ -type ZoneChangesResponse struct { - dynect.ResponseBlock - Data []ZoneChange `json:"data"` -} - -// ZonePublishRequest is missing from dynect but the notes field is a nice place to let -// external-dns report some internal info during commit -type ZonePublishRequest struct { - Publish bool `json:"publish"` - Notes string `json:"notes"` -} - -// ZonePublishResponse holds the status after publish -type ZonePublishResponse struct { - dynect.ResponseBlock - Data map[string]interface{} `json:"data"` -} - -// NewDynProvider initializes a new Dyn Provider. -func NewDynProvider(config DynConfig) (provider.Provider, error) { - return &dynProviderState{ - DynConfig: config, - ZoneSnapshot: &ZoneSnapshot{ - endpoints: map[string][]*endpoint.Endpoint{}, - serials: map[string]int{}, - }, - }, nil -} - -// filterAndFixLinks removes from `links` all the records we don't care about -// and strops the /REST/ prefix -func filterAndFixLinks(links []string, filter endpoint.DomainFilter) []string { - var result []string - for _, link := range links { - // link looks like /REST/CNAMERecord/acme.com/exchange.acme.com/349386875 - - // strip /REST/ - link = strings.TrimPrefix(link, restAPIPrefix) - - // simply ignore all record types we don't care about - if !strings.HasPrefix(link, endpoint.RecordTypeA) && - !strings.HasPrefix(link, endpoint.RecordTypeCNAME) && - !strings.HasPrefix(link, endpoint.RecordTypeTXT) { - continue - } - - // strip ID suffix - domain := link[0:strings.LastIndexByte(link, '/')] - // strip zone prefix - domain = domain[strings.LastIndexByte(domain, '/')+1:] - if filter.Match(domain) { - result = append(result, link) - } - } - - return result -} - -func fixMissingTTL(ttl endpoint.TTL, minTTLSeconds int) string { - i := dynDefaultTTL - if ttl.IsConfigured() { - if int(ttl) < minTTLSeconds { - i = minTTLSeconds - } else { - i = int(ttl) - } - } - - return strconv.Itoa(i) -} - -// merge produces a single list of records that can be used as a replacement. -// Dyn allows to replace all records with a single call -// Invariant: the result contains only elements from the updateNew parameter -func merge(updateOld, updateNew []*endpoint.Endpoint) []*endpoint.Endpoint { - findMatch := func(template *endpoint.Endpoint) *endpoint.Endpoint { - for _, new := range updateNew { - if template.DNSName == new.DNSName && - template.RecordType == new.RecordType { - return new - } - } - return nil - } - - var result []*endpoint.Endpoint - for _, old := range updateOld { - matchingNew := findMatch(old) - if matchingNew == nil { - // no match, shouldn't happen - continue - } - - if !matchingNew.Targets.Same(old.Targets) { - // new target: always update, TTL will be overwritten too if necessary - result = append(result, matchingNew) - continue - } - - if matchingNew.RecordTTL != 0 && matchingNew.RecordTTL != old.RecordTTL { - // same target, but new non-zero TTL set in k8s, must update - // probably would happen only if there is a bug in the code calling the provider - result = append(result, matchingNew) - } - } - - return result -} - -func apiRetryLoop(f func() error) error { - var err error - for i := 0; i < dynMaxRetriesOnErrRateLimited; i++ { - err = f() - if err == nil || err != dynect.ErrRateLimited { - // success or not retryable error - return err - } - - // https://help.dyn.com/managed-dns-api-rate-limit/ - log.Debugf("Rate limit has been hit, sleeping for 1m (%d/%d)", i, dynMaxRetriesOnErrRateLimited) - time.Sleep(1 * time.Minute) - } - - return err -} - -func (d *dynProviderState) allRecordsToEndpoints(records *dynsoap.GetAllRecordsResponseType) []*endpoint.Endpoint { - result := []*endpoint.Endpoint{} - // Convert each record to an endpoint - - // Process A Records - for _, rec := range records.Data.A_records { - ep := &endpoint.Endpoint{ - DNSName: rec.Fqdn, - RecordTTL: endpoint.TTL(rec.Ttl), - RecordType: rec.Record_type, - Targets: endpoint.Targets{rec.Rdata.Address}, - } - log.Debugf("A record: %v", *ep) - result = append(result, ep) - } - - // Process CNAME Records - for _, rec := range records.Data.Cname_records { - ep := &endpoint.Endpoint{ - DNSName: rec.Fqdn, - RecordTTL: endpoint.TTL(rec.Ttl), - RecordType: rec.Record_type, - Targets: endpoint.Targets{strings.TrimSuffix(rec.Rdata.Cname, ".")}, - } - log.Debugf("CNAME record: %v", *ep) - result = append(result, ep) - } - - // Process TXT Records - for _, rec := range records.Data.Txt_records { - ep := &endpoint.Endpoint{ - DNSName: rec.Fqdn, - RecordTTL: endpoint.TTL(rec.Ttl), - RecordType: rec.Record_type, - Targets: endpoint.Targets{rec.Rdata.Txtdata}, - } - log.Debugf("TXT record: %v", *ep) - result = append(result, ep) - } - - return result -} - -func errorOrValue(err error, value interface{}) interface{} { - if err == nil { - return value - } - - return err -} - -// endpointToRecord puts the Target of an Endpoint in the correct field of DataBlock. -// See DataBlock comments for more info -func endpointToRecord(ep *endpoint.Endpoint) *dynect.DataBlock { - result := dynect.DataBlock{} - - if ep.RecordType == endpoint.RecordTypeA { - result.Address = ep.Targets[0] - } else if ep.RecordType == endpoint.RecordTypeCNAME { - result.CName = ep.Targets[0] - } else if ep.RecordType == endpoint.RecordTypeTXT { - result.TxtData = ep.Targets[0] - } - - return &result -} - -func (d *dynProviderState) fetchZoneSerial(client *dynect.Client, zone string) (int, error) { - var resp dynect.ZoneResponse - - err := client.Do("GET", fmt.Sprintf("Zone/%s", zone), nil, &resp) - if err != nil { - return 0, err - } - - return resp.Data.Serial, nil -} - -// Use SOAP to fetch all records with a single call -func (d *dynProviderState) fetchAllRecordsInZone(zone string) (*dynsoap.GetAllRecordsResponseType, error) { - var err error - - service := dynsoap.NewDynectClient("https://api2.dynect.net/SOAP/") - - sessionRequest := dynsoap.SessionLoginRequestType{ - Customer_name: d.CustomerName, - User_name: d.Username, - Password: d.Password, - Fault_incompat: 0, - } - - var resp *dynsoap.SessionLoginResponseType - - err = apiRetryLoop(func() error { - resp, err = service.SessionLogin(&sessionRequest) - return err - }) - - if err != nil { - return nil, err - } - - token := resp.Data.Token - - logoutRequest := &dynsoap.SessionLogoutRequestType{ - Token: token, - Fault_incompat: 0, - } - - defer service.SessionLogout(logoutRequest) - - req := dynsoap.GetAllRecordsRequestType{ - Token: token, - Zone: zone, - Fault_incompat: 0, - } - - records := &dynsoap.GetAllRecordsResponseType{} - - err = apiRetryLoop(func() error { - records, err = service.GetAllRecords(&req) - return err - }) - - if err != nil { - return nil, err - } - - log.Debugf("Got all Records, status is %s", records.Status) - - if strings.ToLower(records.Status) == "incomplete" { - jobRequest := dynsoap.GetJobRequestType{ - Token: token, - Job_id: records.Job_id, - Fault_incompat: 0, - } - - jobResults := dynsoap.GetJobResponseType{} - err = apiRetryLoop(func() error { - jobResults, err := service.GetJob(&jobRequest) - if strings.ToLower(jobResults.Status) == "incomplete" { - return fmt.Errorf("job is incomplete") - } - return err - }) - - if err != nil { - return nil, err - } - - return jobResults.Data.(*dynsoap.GetAllRecordsResponseType), nil - } - - return records, nil -} - -// buildLinkToRecord build a resource link. The symmetry of the dyn API is used to save -// switch-case boilerplate. -// Empty response means the endpoint is not mappable to a records link: either because the fqdn -// is not matched by the domainFilter or it is in the wrong zone -func (d *dynProviderState) buildLinkToRecord(ep *endpoint.Endpoint) string { - if ep == nil { - return "" - } - matchingZone := "" - for _, zone := range d.ZoneIDFilter.ZoneIDs { - if strings.HasSuffix(ep.DNSName, zone) { - matchingZone = zone - break - } - } - - if matchingZone == "" { - // no matching zone, ignore - return "" - } - - if !d.DomainFilter.Match(ep.DNSName) { - // no matching domain, ignore - return "" - } - - return fmt.Sprintf("%sRecord/%s/%s/", ep.RecordType, matchingZone, ep.DNSName) -} - -// create a dynect client and performs login. You need to clean it up. -// This method also stores the DynAPI version. -// Don't user the dynect.Client.Login() -func (d *dynProviderState) login() (*dynect.Client, error) { - if d.LastLoginErrorTime != 0 { - secondsSinceLastError := unixNow() - d.LastLoginErrorTime - if secondsSinceLastError < badLoginMinIntervalSeconds { - return nil, fmt.Errorf("will not attempt an API call as the last login failure occurred just %ds ago", secondsSinceLastError) - } - } - client := dynect.NewClient(d.CustomerName) - - req := dynect.LoginBlock{ - Username: d.Username, - Password: d.Password, - CustomerName: d.CustomerName, - } - - var resp dynect.LoginResponse - - err := client.Do("POST", "Session", req, &resp) - if err != nil { - d.LastLoginErrorTime = unixNow() - return nil, err - } - - d.LastLoginErrorTime = 0 - client.Token = resp.Data.Token - - // this is the only change from the original - d.DynVersion = resp.Data.Version - return client, nil -} - -// the zones we are allowed to touch. Currently only exact matches are considered, not all -// zones with the given suffix -func (d *dynProviderState) zones(client *dynect.Client) []string { - return d.ZoneIDFilter.ZoneIDs -} - -func (d *dynProviderState) buildRecordRequest(ep *endpoint.Endpoint) (string, *dynect.RecordRequest) { - link := d.buildLinkToRecord(ep) - if link == "" { - return "", nil - } - - record := dynect.RecordRequest{ - TTL: fixMissingTTL(ep.RecordTTL, d.MinTTLSeconds), - RData: *endpointToRecord(ep), - } - return link, &record -} - -// deleteRecord deletes all existing records (CNAME, TXT, A) for the given Endpoint.DNSName with 1 API call -func (d *dynProviderState) deleteRecord(client *dynect.Client, ep *endpoint.Endpoint) error { - link := d.buildLinkToRecord(ep) - if link == "" { - return nil - } - - response := dynect.RecordResponse{} - - err := apiRetryLoop(func() error { - return client.Do("DELETE", link, nil, &response) - }) - - log.Debugf("Deleting record %s: %+v,", link, errorOrValue(err, &response)) - return err -} - -// replaceRecord replaces all existing records pf the given type for the Endpoint.DNSName with 1 API call -func (d *dynProviderState) replaceRecord(client *dynect.Client, ep *endpoint.Endpoint) error { - link, record := d.buildRecordRequest(ep) - if link == "" { - return nil - } - - response := dynect.RecordResponse{} - err := apiRetryLoop(func() error { - return client.Do("PUT", link, record, &response) - }) - - log.Debugf("Replacing record %s: %+v,", link, errorOrValue(err, &response)) - return err -} - -// createRecord creates a single record with 1 API call -func (d *dynProviderState) createRecord(client *dynect.Client, ep *endpoint.Endpoint) error { - link, record := d.buildRecordRequest(ep) - if link == "" { - return nil - } - - response := dynect.RecordResponse{} - err := apiRetryLoop(func() error { - return client.Do("POST", link, record, &response) - }) - - log.Debugf("Creating record %s: %+v,", link, errorOrValue(err, &response)) - return err -} - -// commit commits all pending changes. It will always attempt to commit, if there are no -func (d *dynProviderState) commit(client *dynect.Client) error { - errs := []error{} - - for _, zone := range d.zones(client) { - // extra call if in debug mode to fetch pending changes - if log.GetLevel() >= log.DebugLevel { - response := ZoneChangesResponse{} - err := client.Do("GET", fmt.Sprintf("ZoneChanges/%s/", zone), nil, &response) - log.Debugf("Pending changes for zone %s: %+v", zone, errorOrValue(err, &response)) - } - - h, err := os.Hostname() - if err != nil { - h = "unknown-host" - } - notes := fmt.Sprintf("Change by external-dns@%s, DynAPI@%s, %s on %s", - d.AppVersion, - d.DynVersion, - time.Now().Format(time.RFC3339), - h, - ) - - zonePublish := ZonePublishRequest{ - Publish: true, - Notes: notes, - } - - response := ZonePublishResponse{} - - // always retry the commit: don't waste the good work so far - err = apiRetryLoop(func() error { - return client.Do("PUT", fmt.Sprintf("Zone/%s/", zone), &zonePublish, &response) - }) - log.Infof("Committing changes for zone %s: %+v", zone, errorOrValue(err, &response)) - } - - switch len(errs) { - case 0: - return nil - case 1: - return errs[0] - default: - return fmt.Errorf("multiple errors committing: %+v", errs) - } -} - -// Records makes on average C + 2*Z requests (Z = number of zones): 1 login + 1 fetchAllRecords -// A cache is used to avoid querying for every single record found. C is proportional to the number -// of expired/changed records -func (d *dynProviderState) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { - client, err := d.login() - if err != nil { - return nil, err - } - defer client.Logout() - - log.Debugf("Using DynAPI@%s", d.DynVersion) - - var result []*endpoint.Endpoint - - zones := d.zones(client) - log.Infof("Configured zones: %+v", zones) - for _, zone := range zones { - serial, err := d.fetchZoneSerial(client, zone) - if err != nil { - if strings.Contains(err.Error(), "404 Not Found") { - log.Infof("Ignore zone %s as it does not exist", zone) - continue - } - - return nil, err - } - - relevantRecords := d.ZoneSnapshot.GetRecordsForSerial(zone, serial) - if relevantRecords != nil { - log.Infof("Using %d cached records for zone %s@%d", len(relevantRecords), zone, serial) - result = append(result, relevantRecords...) - continue - } - - // Fetch All Records - records, err := d.fetchAllRecordsInZone(zone) - if err != nil { - return nil, err - } - relevantRecords = d.allRecordsToEndpoints(records) - - log.Debugf("Relevant records %+v", relevantRecords) - - d.ZoneSnapshot.StoreRecordsForSerial(zone, serial, relevantRecords) - log.Infof("Stored %d records for %s@%d", len(relevantRecords), zone, serial) - result = append(result, relevantRecords...) - } - - return result, nil -} - -// this method does C + 2*Z requests: C=total number of changes, Z = number of -// affected zones (1 login + 1 commit) -func (d *dynProviderState) ApplyChanges(ctx context.Context, changes *plan.Changes) error { - log.Debugf("Processing changes: %+v", changes) - - if d.DryRun { - log.Infof("Will NOT delete these records: %+v", changes.Delete) - log.Infof("Will NOT create these records: %+v", changes.Create) - log.Infof("Will NOT update these records: %+v", merge(changes.UpdateOld, changes.UpdateNew)) - return nil - } - - client, err := d.login() - if err != nil { - return err - } - defer client.Logout() - - var errs []error - - needsCommit := false - - for _, ep := range changes.Delete { - err := d.deleteRecord(client, ep) - if err != nil { - errs = append(errs, err) - } else { - needsCommit = true - } - } - - for _, ep := range changes.Create { - err := d.createRecord(client, ep) - if err != nil { - errs = append(errs, err) - } else { - needsCommit = true - } - } - - updates := merge(changes.UpdateOld, changes.UpdateNew) - log.Debugf("Updates after merging: %+v", updates) - for _, ep := range updates { - err := d.replaceRecord(client, ep) - if err != nil { - errs = append(errs, err) - } else { - needsCommit = true - } - } - - switch len(errs) { - case 0: - case 1: - return errs[0] - default: - return fmt.Errorf("multiple errors committing: %+v", errs) - } - - if needsCommit { - return d.commit(client) - } - - return nil -} diff --git a/provider/dyn/dyn_test.go b/provider/dyn/dyn_test.go deleted file mode 100644 index 296052178..000000000 --- a/provider/dyn/dyn_test.go +++ /dev/null @@ -1,294 +0,0 @@ -/* -Copyright 2018 The Kubernetes Authors. - -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 dyn - -import ( - "errors" - "fmt" - "testing" - - "github.com/nesv/go-dynect/dynect" - "github.com/stretchr/testify/assert" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/provider" -) - -func TestDynMerge_NoUpdateOnTTL0Changes(t *testing.T) { - updateOld := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1"}, - RecordTTL: endpoint.TTL(1), - RecordType: endpoint.RecordTypeA, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(1), - RecordType: endpoint.RecordTypeA, - }, - } - - updateNew := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1"}, - RecordTTL: endpoint.TTL(0), - RecordType: endpoint.RecordTypeCNAME, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(0), - RecordType: endpoint.RecordTypeCNAME, - }, - } - - assert.Equal(t, 0, len(merge(updateOld, updateNew))) -} - -func TestDynMerge_UpdateOnTTLChanges(t *testing.T) { - updateOld := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1"}, - RecordTTL: endpoint.TTL(1), - RecordType: endpoint.RecordTypeCNAME, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(1), - RecordType: endpoint.RecordTypeCNAME, - }, - } - - updateNew := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1"}, - RecordTTL: endpoint.TTL(77), - RecordType: endpoint.RecordTypeCNAME, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(10), - RecordType: endpoint.RecordTypeCNAME, - }, - } - - merged := merge(updateOld, updateNew) - assert.Equal(t, 2, len(merged)) - assert.Equal(t, "name1", merged[0].DNSName) -} - -func TestDynMerge_AlwaysUpdateTarget(t *testing.T) { - updateOld := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1"}, - RecordTTL: endpoint.TTL(1), - RecordType: endpoint.RecordTypeCNAME, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(1), - RecordType: endpoint.RecordTypeCNAME, - }, - } - - updateNew := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1-changed"}, - RecordTTL: endpoint.TTL(0), - RecordType: endpoint.RecordTypeCNAME, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(0), - RecordType: endpoint.RecordTypeCNAME, - }, - } - - merged := merge(updateOld, updateNew) - assert.Equal(t, 1, len(merged)) - assert.Equal(t, "target1-changed", merged[0].Targets[0]) -} - -func TestDynMerge_NoUpdateIfTTLUnchanged(t *testing.T) { - updateOld := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1"}, - RecordTTL: endpoint.TTL(55), - RecordType: endpoint.RecordTypeCNAME, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(55), - RecordType: endpoint.RecordTypeCNAME, - }, - } - - updateNew := []*endpoint.Endpoint{ - { - DNSName: "name1", - Targets: endpoint.Targets{"target1"}, - RecordTTL: endpoint.TTL(55), - RecordType: endpoint.RecordTypeCNAME, - }, - { - DNSName: "name2", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(55), - RecordType: endpoint.RecordTypeCNAME, - }, - } - - merged := merge(updateOld, updateNew) - assert.Equal(t, 0, len(merged)) -} - -func TestDyn_endpointToRecord(t *testing.T) { - tests := []struct { - ep *endpoint.Endpoint - extractor func(*dynect.DataBlock) string - }{ - {endpoint.NewEndpoint("address", "A", "the-target"), func(b *dynect.DataBlock) string { return b.Address }}, - {endpoint.NewEndpoint("cname", "CNAME", "the-target"), func(b *dynect.DataBlock) string { return b.CName }}, - {endpoint.NewEndpoint("text", "TXT", "the-target"), func(b *dynect.DataBlock) string { return b.TxtData }}, - } - - for _, tc := range tests { - block := endpointToRecord(tc.ep) - assert.Equal(t, "the-target", tc.extractor(block)) - } -} - -func TestDyn_buildLinkToRecord(t *testing.T) { - provider := &dynProviderState{ - DynConfig: DynConfig{ - ZoneIDFilter: provider.NewZoneIDFilter([]string{"example.com"}), - DomainFilter: endpoint.NewDomainFilter([]string{"the-target.example.com"}), - }, - } - - tests := []struct { - ep *endpoint.Endpoint - link string - }{ - {endpoint.NewEndpoint("sub.the-target.example.com", "A", "address"), "ARecord/example.com/sub.the-target.example.com/"}, - {endpoint.NewEndpoint("the-target.example.com", "CNAME", "cname"), "CNAMERecord/example.com/the-target.example.com/"}, - {endpoint.NewEndpoint("the-target.example.com", "TXT", "text"), "TXTRecord/example.com/the-target.example.com/"}, - {endpoint.NewEndpoint("the-target.google.com", "TXT", "text"), ""}, - {endpoint.NewEndpoint("mail.example.com", "TXT", "text"), ""}, - {nil, ""}, - } - - for _, tc := range tests { - assert.Equal(t, tc.link, provider.buildLinkToRecord(tc.ep)) - } -} - -func TestDyn_errorOrValue(t *testing.T) { - e := errors.New("an error") - val := "value" - assert.Equal(t, e, errorOrValue(e, val)) - assert.Equal(t, val, errorOrValue(nil, val)) -} - -func TestDyn_filterAndFixLinks(t *testing.T) { - links := []string{ - "/REST/ARecord/example.com/the-target.example.com/", - "/REST/ARecord/example.com/the-target.google.com/", - "/REST/TXTRecord/example.com/the-target.example.com/", - "/REST/TXTRecord/example.com/the-target.google.com/", - "/REST/CNAMERecord/example.com/the-target.google.com/", - "/REST/CNAMERecord/example.com/the-target.example.com/", - "/REST/NSRecord/example.com/the-target.google.com/", - "/REST/NSRecord/example.com/the-target.example.com/", - } - filter := endpoint.NewDomainFilter([]string{"example.com"}) - result := filterAndFixLinks(links, filter) - - // should skip non-example.com records and NS records too - assert.Equal(t, 3, len(result)) - assert.Equal(t, "ARecord/example.com/the-target.example.com/", result[0]) - assert.Equal(t, "TXTRecord/example.com/the-target.example.com/", result[1]) - assert.Equal(t, "CNAMERecord/example.com/the-target.example.com/", result[2]) -} - -func TestDyn_fixMissingTTL(t *testing.T) { - assert.Equal(t, fmt.Sprintf("%v", dynDefaultTTL), fixMissingTTL(endpoint.TTL(0), 0)) - - // nothing to fix - assert.Equal(t, "111", fixMissingTTL(endpoint.TTL(111), 25)) - - // apply min TTL - assert.Equal(t, "1992", fixMissingTTL(endpoint.TTL(111), 1992)) -} - -func TestDyn_Snapshot(t *testing.T) { - snap := ZoneSnapshot{ - serials: map[string]int{}, - endpoints: map[string][]*endpoint.Endpoint{}, - } - - recs := []*endpoint.Endpoint{ - { - DNSName: "name", - Targets: endpoint.Targets{"target"}, - RecordTTL: endpoint.TTL(10000), - RecordType: "A", - }, - } - - snap.StoreRecordsForSerial("test", 12, recs) - - cached := snap.GetRecordsForSerial("test", 12) - assert.Equal(t, recs, cached) - - cached = snap.GetRecordsForSerial("test", 999) - assert.Nil(t, cached) - - cached = snap.GetRecordsForSerial("sfas", 12) - assert.Nil(t, cached) - - recs2 := []*endpoint.Endpoint{ - { - DNSName: "name", - Targets: endpoint.Targets{"target2"}, - RecordTTL: endpoint.TTL(100), - RecordType: "CNAME", - }, - } - - // update zone with different records and newer serial - snap.StoreRecordsForSerial("test", 13, recs2) - - cached = snap.GetRecordsForSerial("test", 13) - assert.Equal(t, recs2, cached) - - cached = snap.GetRecordsForSerial("test", 12) - assert.Nil(t, cached) -} diff --git a/provider/dyn/soap/client.go b/provider/dyn/soap/client.go deleted file mode 100644 index 23186dfb2..000000000 --- a/provider/dyn/soap/client.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -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 dynsoap - -import ( - "net/http" - "time" - - "github.com/hooklift/gowsdl/soap" -) - -// NewDynectClient returns a client with a configured http.Client -// The default settings for the http.client are a timeout of -// 10 seconds and reading proxy variables from http.ProxyFromEnvironment -func NewDynectClient(url string) Dynect { - client := &http.Client{ - Timeout: time.Second * 10, - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - }, - } - soapClient := soap.NewClient(url, soap.WithHTTPClient(client)) - return NewDynect(soapClient) -} - -// NewCustomDynectClient returns a client without a configured http.Client -func NewCustomDynectClient(url string, client http.Client) Dynect { - soapClient := soap.NewClient(url, soap.WithHTTPClient(&client)) - return NewDynect(soapClient) -} diff --git a/provider/dyn/soap/services.go b/provider/dyn/soap/services.go deleted file mode 100644 index bb570e972..000000000 --- a/provider/dyn/soap/services.go +++ /dev/null @@ -1,32865 +0,0 @@ -// Code generated by gowsdl DO NOT EDIT. - -package dynsoap - -import ( - "context" - "encoding/xml" - "github.com/hooklift/gowsdl/soap" - "time" -) - -// against "unused imports" -var _ time.Time -var _ xml.Name - -type AnyType struct { - InnerXML string `xml:",innerxml"` -} - -type AnyURI string - -type NCName string - -type ErrorResponse ErrorResponseType - -type GetJobRequest GetJobRequestType - -type GetJobResponse GetJobResponseType - -type SessionLoginRequest SessionLoginRequestType - -type SessionLoginResponse SessionLoginResponseType - -type SessionLogoutRequest SessionLogoutRequestType - -type SessionLogoutResponse SessionLogoutResponseType - -type SessionIsAliveRequest SessionIsAliveRequestType - -type SessionIsAliveResponse SessionIsAliveResponseType - -type SessionKeepAliveRequest SessionKeepAliveRequestType - -type SessionKeepAliveResponse SessionKeepAliveResponseType - -type ScopeInRequest ScopeInRequestType - -type ScopeInResponse ScopeInResponseType - -type ScopeAsRequest ScopeAsRequestType - -type ScopeAsResponse ScopeAsResponseType - -type UnscopeRequest UnscopeRequestType - -type UnscopeResponse UnscopeResponseType - -type GetQueryStatsRequest GetQueryStatsRequestType - -type GetQueryStatsResponse GetQueryStatsResponseType - -type CreateGeoRequest CreateGeoRequestType - -type CreateGeoResponse CreateGeoResponseType - -type UpdateGeoRequest UpdateGeoRequestType - -type UpdateGeoResponse UpdateGeoResponseType - -type GetGeosRequest GetGeosRequestType - -type GetGeosResponse GetGeosResponseType - -type GetOneGeoRequest GetOneGeoRequestType - -type GetOneGeoResponse GetOneGeoResponseType - -type DeleteOneGeoRequest DeleteOneGeoRequestType - -type DeleteOneGeoResponse DeleteOneGeoResponseType - -type ActivateGeoRequest ActivateGeoRequestType - -type ActivateGeoResponse ActivateGeoResponseType - -type DeactivateGeoRequest DeactivateGeoRequestType - -type DeactivateGeoResponse DeactivateGeoResponseType - -type CreateGeoRegionGroupRequest CreateGeoRegionGroupRequestType - -type CreateGeoRegionGroupResponse CreateGeoRegionGroupResponseType - -type UpdateGeoRegionGroupRequest UpdateGeoRegionGroupRequestType - -type UpdateGeoRegionGroupResponse UpdateGeoRegionGroupResponseType - -type DeleteOneGeoRegionGroupRequest DeleteOneGeoRegionGroupRequestType - -type DeleteOneGeoRegionGroupResponse DeleteOneGeoRegionGroupResponseType - -type GetGeoRegionGroupsRequest GetGeoRegionGroupsRequestType - -type GetGeoRegionGroupsResponse GetGeoRegionGroupsResponseType - -type GetOneGeoRegionGroupRequest GetOneGeoRegionGroupRequestType - -type GetOneGeoRegionGroupResponse GetOneGeoRegionGroupResponseType - -type CreateGeoNodeRequest CreateGeoNodeRequestType - -type CreateGeoNodeResponse CreateGeoNodeResponseType - -type DeleteOneGeoNodeRequest DeleteOneGeoNodeRequestType - -type DeleteOneGeoNodeResponse DeleteOneGeoNodeResponseType - -type GetGeoNodesRequest GetGeoNodesRequestType - -type GetGeoNodesResponse GetGeoNodesResponseType - -type CreateDSFRequest CreateDSFRequestType - -type CreateDSFResponse CreateDSFResponseType - -type UpdateDSFRequest UpdateDSFRequestType - -type UpdateDSFResponse UpdateDSFResponseType - -type GetDSFsRequest GetDSFsRequestType - -type GetDSFsResponse GetDSFsResponseType - -type GetDSFNotifiersRequest GetDSFNotifiersRequestType - -type GetDSFNotifiersResponse GetDSFNotifiersResponseType - -type DeleteOneDSFRequest DeleteOneDSFRequestType - -type DeleteOneDSFResponse DeleteOneDSFResponseType - -type GetOneDSFRequest GetOneDSFRequestType - -type GetOneDSFResponse GetOneDSFResponseType - -type RevertDSFRequest RevertDSFRequestType - -type RevertDSFResponse RevertDSFResponseType - -type PublishDSFRequest PublishDSFRequestType - -type PublishDSFResponse PublishDSFResponseType - -type AddDSFNotifierRequest AddDSFNotifierRequestType - -type AddDSFNotifierResponse AddDSFNotifierResponseType - -type RemoveDSFNotifierRequest RemoveDSFNotifierRequestType - -type RemoveDSFNotifierResponse RemoveDSFNotifierResponseType - -type CreateDSFRulesetRequest CreateDSFRulesetRequestType - -type CreateDSFRulesetResponse CreateDSFRulesetResponseType - -type UpdateDSFRulesetRequest UpdateDSFRulesetRequestType - -type UpdateDSFRulesetResponse UpdateDSFRulesetResponseType - -type GetDSFRulesetsRequest GetDSFRulesetsRequestType - -type GetDSFRulesetsResponse GetDSFRulesetsResponseType - -type GetOneDSFRulesetRequest GetOneDSFRulesetRequestType - -type GetOneDSFRulesetResponse GetOneDSFRulesetResponseType - -type DeleteOneDSFRulesetRequest DeleteOneDSFRulesetRequestType - -type DeleteOneDSFRulesetResponse DeleteOneDSFRulesetResponseType - -type CreateDSFResponsePoolRequest CreateDSFResponsePoolRequestType - -type CreateDSFResponsePoolResponse CreateDSFResponsePoolResponseType - -type UpdateDSFResponsePoolRequest UpdateDSFResponsePoolRequestType - -type UpdateDSFResponsePoolResponse UpdateDSFResponsePoolResponseType - -type GetDSFResponsePoolsRequest GetDSFResponsePoolsRequestType - -type GetDSFResponsePoolsResponse GetDSFResponsePoolsResponseType - -type GetOneDSFResponsePoolRequest GetOneDSFResponsePoolRequestType - -type GetOneDSFResponsePoolResponse GetOneDSFResponsePoolResponseType - -type DeleteOneDSFResponsePoolRequest DeleteOneDSFResponsePoolRequestType - -type DeleteOneDSFResponsePoolResponse DeleteOneDSFResponsePoolResponseType - -type CreateDSFRecordSetFailoverChainRequest CreateDSFRecordSetFailoverChainRequestType - -type CreateDSFRecordSetFailoverChainResponse CreateDSFRecordSetFailoverChainResponseType - -type UpdateDSFRecordSetFailoverChainRequest UpdateDSFRecordSetFailoverChainRequestType - -type UpdateDSFRecordSetFailoverChainResponse UpdateDSFRecordSetFailoverChainResponseType - -type GetDSFRecordSetFailoverChainsRequest GetDSFRecordSetFailoverChainsRequestType - -type GetDSFRecordSetFailoverChainsResponse GetDSFRecordSetFailoverChainsResponseType - -type GetOneDSFRecordSetFailoverChainRequest GetOneDSFRecordSetFailoverChainRequestType - -type GetOneDSFRecordSetFailoverChainResponse GetOneDSFRecordSetFailoverChainResponseType - -type DeleteOneDSFRecordSetFailoverChainRequest DeleteOneDSFRecordSetFailoverChainRequestType - -type DeleteOneDSFRecordSetFailoverChainResponse DeleteOneDSFRecordSetFailoverChainResponseType - -type CreateDSFRecordSetRequest CreateDSFRecordSetRequestType - -type CreateDSFRecordSetResponse CreateDSFRecordSetResponseType - -type UpdateDSFRecordSetRequest UpdateDSFRecordSetRequestType - -type UpdateDSFRecordSetResponse UpdateDSFRecordSetResponseType - -type GetOneDSFRecordSetRequest GetOneDSFRecordSetRequestType - -type GetOneDSFRecordSetResponse GetOneDSFRecordSetResponseType - -type GetDSFRecordSetsRequest GetDSFRecordSetsRequestType - -type GetDSFRecordSetsResponse GetDSFRecordSetsResponseType - -type DeleteOneDSFRecordSetRequest DeleteOneDSFRecordSetRequestType - -type DeleteOneDSFRecordSetResponse DeleteOneDSFRecordSetResponseType - -type CreateDSFRecordRequest CreateDSFRecordRequestType - -type CreateDSFRecordResponse CreateDSFRecordResponseType - -type UpdateDSFRecordRequest UpdateDSFRecordRequestType - -type UpdateDSFRecordResponse UpdateDSFRecordResponseType - -type GetOneDSFRecordRequest GetOneDSFRecordRequestType - -type GetOneDSFRecordResponse GetOneDSFRecordResponseType - -type GetDSFRecordsRequest GetDSFRecordsRequestType - -type GetDSFRecordsResponse GetDSFRecordsResponseType - -type DeleteOneDSFRecordRequest DeleteOneDSFRecordRequestType - -type DeleteOneDSFRecordResponse DeleteOneDSFRecordResponseType - -type AddDSFNodeRequest AddDSFNodeRequestType - -type AddDSFNodeResponse AddDSFNodeResponseType - -type UpdateDSFNodesRequest UpdateDSFNodesRequestType - -type UpdateDSFNodesResponse UpdateDSFNodesResponseType - -type GetDSFNodesRequest GetDSFNodesRequestType - -type GetDSFNodesResponse GetDSFNodesResponseType - -type DeleteOneDSFNodeRequest DeleteOneDSFNodeRequestType - -type DeleteOneDSFNodeResponse DeleteOneDSFNodeResponseType - -type CreateDSFMonitorRequest CreateDSFMonitorRequestType - -type CreateDSFMonitorResponse CreateDSFMonitorResponseType - -type UpdateDSFMonitorRequest UpdateDSFMonitorRequestType - -type UpdateDSFMonitorResponse UpdateDSFMonitorResponseType - -type GetOneDSFMonitorRequest GetOneDSFMonitorRequestType - -type GetOneDSFMonitorResponse GetOneDSFMonitorResponseType - -type GetDSFMonitorsRequest GetDSFMonitorsRequestType - -type GetDSFMonitorsResponse GetDSFMonitorsResponseType - -type DeleteOneDSFMonitorRequest DeleteOneDSFMonitorRequestType - -type DeleteOneDSFMonitorResponse DeleteOneDSFMonitorResponseType - -type AddDSFMonitorNotifierRequest AddDSFMonitorNotifierRequestType - -type AddDSFMonitorNotifierResponse AddDSFMonitorNotifierResponseType - -type GetDSFMonitorSitesRequest GetDSFMonitorSitesRequestType - -type GetDSFMonitorSitesResponse GetDSFMonitorSitesResponseType - -type CreateNotifierRequest CreateNotifierRequestType - -type CreateNotifierResponse CreateNotifierResponseType - -type UpdateNotifierRequest UpdateNotifierRequestType - -type UpdateNotifierResponse UpdateNotifierResponseType - -type GetOneNotifierRequest GetOneNotifierRequestType - -type GetOneNotifierResponse GetOneNotifierResponseType - -type GetNotifiersRequest GetNotifiersRequestType - -type GetNotifiersResponse GetNotifiersResponseType - -type DeleteOneNotifierRequest DeleteOneNotifierRequestType - -type DeleteOneNotifierResponse DeleteOneNotifierResponseType - -type CreateConfigLimitRequest CreateConfigLimitRequestType - -type CreateConfigLimitResponse CreateConfigLimitResponseType - -type GetOneConfigLimitRequest GetOneConfigLimitRequestType - -type GetOneConfigLimitResponse GetOneConfigLimitResponseType - -type GetConfigLimitsRequest GetConfigLimitsRequestType - -type GetConfigLimitsResponse GetConfigLimitsResponseType - -type UpdateConfigLimitRequest UpdateConfigLimitRequestType - -type UpdateConfigLimitResponse UpdateConfigLimitResponseType - -type DeleteOneConfigLimitRequest DeleteOneConfigLimitRequestType - -type DeleteOneConfigLimitResponse DeleteOneConfigLimitResponseType - -type CreatePermissionGroupRequest CreatePermissionGroupRequestType - -type CreatePermissionGroupResponse CreatePermissionGroupResponseType - -type GetOnePermissionGroupRequest GetOnePermissionGroupRequestType - -type GetOnePermissionGroupResponse GetOnePermissionGroupResponseType - -type GetPermissionGroupsRequest GetPermissionGroupsRequestType - -type GetPermissionGroupsResponse GetPermissionGroupsResponseType - -type DeleteOnePermissionGroupRequest DeleteOnePermissionGroupRequestType - -type DeleteOnePermissionGroupResponse DeleteOnePermissionGroupResponseType - -type UpdatePermissionGroupRequest UpdatePermissionGroupRequestType - -type UpdatePermissionGroupResponse UpdatePermissionGroupResponseType - -type GetCustomerPermissionsRequest GetCustomerPermissionsRequestType - -type GetCustomerPermissionsResponse GetCustomerPermissionsResponseType - -type GetUserPermissionsRequest GetUserPermissionsRequestType - -type GetUserPermissionsResponse GetUserPermissionsResponseType - -type CheckPermissionsRequest CheckPermissionsRequestType - -type CheckPermissionsResponse CheckPermissionsResponseType - -type AddPermissionGroupUsersRequest AddPermissionGroupUsersRequestType - -type AddPermissionGroupUsersResponse AddPermissionGroupUsersResponseType - -type SetPermissionGroupUsersRequest SetPermissionGroupUsersRequestType - -type SetPermissionGroupUsersResponse SetPermissionGroupUsersResponseType - -type RemovePermissionGroupUsersRequest RemovePermissionGroupUsersRequestType - -type RemovePermissionGroupUsersResponse RemovePermissionGroupUsersResponseType - -type AddPermissionGroupSubgroupsRequest AddPermissionGroupSubgroupsRequestType - -type AddPermissionGroupSubgroupsResponse AddPermissionGroupSubgroupsResponseType - -type SetPermissionGroupSubgroupsRequest SetPermissionGroupSubgroupsRequestType - -type SetPermissionGroupSubgroupsResponse SetPermissionGroupSubgroupsResponseType - -type RemovePermissionGroupSubgroupsRequest RemovePermissionGroupSubgroupsRequestType - -type RemovePermissionGroupSubgroupsResponse RemovePermissionGroupSubgroupsResponseType - -type AddPermissionGroupPermissionsRequest AddPermissionGroupPermissionsRequestType - -type AddPermissionGroupPermissionsResponse AddPermissionGroupPermissionsResponseType - -type SetPermissionGroupPermissionsRequest SetPermissionGroupPermissionsRequestType - -type SetPermissionGroupPermissionsResponse SetPermissionGroupPermissionsResponseType - -type RemovePermissionGroupPermissionsRequest RemovePermissionGroupPermissionsRequestType - -type RemovePermissionGroupPermissionsResponse RemovePermissionGroupPermissionsResponseType - -type AddPermissionGroupZonesRequest AddPermissionGroupZonesRequestType - -type AddPermissionGroupZonesResponse AddPermissionGroupZonesResponseType - -type SetPermissionGroupZonesRequest SetPermissionGroupZonesRequestType - -type SetPermissionGroupZonesResponse SetPermissionGroupZonesResponseType - -type RemovePermissionGroupZonesRequest RemovePermissionGroupZonesRequestType - -type RemovePermissionGroupZonesResponse RemovePermissionGroupZonesResponseType - -type AddUserGroupsRequest AddUserGroupsRequestType - -type AddUserGroupsResponse AddUserGroupsResponseType - -type SetUserGroupsRequest SetUserGroupsRequestType - -type SetUserGroupsResponse SetUserGroupsResponseType - -type RemoveUserGroupsRequest RemoveUserGroupsRequestType - -type RemoveUserGroupsResponse RemoveUserGroupsResponseType - -type AddUserZonesRequest AddUserZonesRequestType - -type AddUserZonesResponse AddUserZonesResponseType - -type SetUserZonesRequest SetUserZonesRequestType - -type SetUserZonesResponse SetUserZonesResponseType - -type RemoveUserZonesRequest RemoveUserZonesRequestType - -type RemoveUserZonesResponse RemoveUserZonesResponseType - -type AddUserPermissionsRequest AddUserPermissionsRequestType - -type AddUserPermissionsResponse AddUserPermissionsResponseType - -type SetUserPermissionsRequest SetUserPermissionsRequestType - -type SetUserPermissionsResponse SetUserPermissionsResponseType - -type RemoveUserPermissionsRequest RemoveUserPermissionsRequestType - -type RemoveUserPermissionsResponse RemoveUserPermissionsResponseType - -type AddUserForbidsRequest AddUserForbidsRequestType - -type AddUserForbidsResponse AddUserForbidsResponseType - -type SetUserForbidsRequest SetUserForbidsRequestType - -type SetUserForbidsResponse SetUserForbidsResponseType - -type RemoveUserForbidsRequest RemoveUserForbidsRequestType - -type RemoveUserForbidsResponse RemoveUserForbidsResponseType - -type AddCustomerPermissionsRequest AddCustomerPermissionsRequestType - -type AddCustomerPermissionsResponse AddCustomerPermissionsResponseType - -type SetCustomerPermissionsRequest SetCustomerPermissionsRequestType - -type SetCustomerPermissionsResponse SetCustomerPermissionsResponseType - -type RemoveCustomerPermissionsRequest RemoveCustomerPermissionsRequestType - -type RemoveCustomerPermissionsResponse RemoveCustomerPermissionsResponseType - -type AddCustomerForbidsRequest AddCustomerForbidsRequestType - -type AddCustomerForbidsResponse AddCustomerForbidsResponseType - -type SetCustomerForbidsRequest SetCustomerForbidsRequestType - -type SetCustomerForbidsResponse SetCustomerForbidsResponseType - -type RemoveCustomerForbidsRequest RemoveCustomerForbidsRequestType - -type RemoveCustomerForbidsResponse RemoveCustomerForbidsResponseType - -type GetHostStatsFlagsRequest GetHostStatsFlagsRequestType - -type GetHostStatsFlagsResponse GetHostStatsFlagsResponseType - -type SetHostStatsFlagsRequest SetHostStatsFlagsRequestType - -type SetHostStatsFlagsResponse SetHostStatsFlagsResponseType - -type CreateTSIGKeyRequest CreateTSIGKeyRequestType - -type CreateTSIGKeyResponse CreateTSIGKeyResponseType - -type GetOneTSIGKeyRequest GetOneTSIGKeyRequestType - -type GetOneTSIGKeyResponse GetOneTSIGKeyResponseType - -type GetTSIGKeysRequest GetTSIGKeysRequestType - -type GetTSIGKeysResponse GetTSIGKeysResponseType - -type UpdateTSIGKeyRequest UpdateTSIGKeyRequestType - -type UpdateTSIGKeyResponse UpdateTSIGKeyResponseType - -type DeleteOneTSIGKeyRequest DeleteOneTSIGKeyRequestType - -type DeleteOneTSIGKeyResponse DeleteOneTSIGKeyResponseType - -type CreateZoneRequest CreateZoneRequestType - -type CreateZoneResponse CreateZoneResponseType - -type GetOneZoneRequest GetOneZoneRequestType - -type GetOneZoneResponse GetOneZoneResponseType - -type GetZonesRequest GetZonesRequestType - -type GetZonesResponse GetZonesResponseType - -type DeleteOneZoneRequest DeleteOneZoneRequestType - -type DeleteOneZoneResponse DeleteOneZoneResponseType - -type CreateSecondaryZoneRequest CreateSecondaryZoneRequestType - -type CreateSecondaryZoneResponse CreateSecondaryZoneResponseType - -type UpdateSecondaryRequest UpdateSecondaryRequestType - -type UpdateSecondaryResponse UpdateSecondaryResponseType - -type ActivateSecondaryRequest ActivateSecondaryRequestType - -type ActivateSecondaryResponse ActivateSecondaryResponseType - -type DeactivateSecondaryRequest DeactivateSecondaryRequestType - -type DeactivateSecondaryResponse DeactivateSecondaryResponseType - -type RetransferSecondaryRequest RetransferSecondaryRequestType - -type RetransferSecondaryResponse RetransferSecondaryResponseType - -type GetOneSecondaryRequest GetOneSecondaryRequestType - -type GetOneSecondaryResponse GetOneSecondaryResponseType - -type GetSecondariesRequest GetSecondariesRequestType - -type GetSecondariesResponse GetSecondariesResponseType - -type GetZoneApexRequest GetZoneApexRequestType - -type GetZoneApexResponse GetZoneApexResponseType - -type CreateARecordRequest CreateARecordRequestType - -type CreateARecordResponse CreateARecordResponseType - -type GetOneARecordRequest GetOneARecordRequestType - -type GetOneARecordResponse GetOneARecordResponseType - -type GetARecordsRequest GetARecordsRequestType - -type GetARecordsResponse GetARecordsResponseType - -type UpdateARecordRequest UpdateARecordRequestType - -type UpdateARecordResponse UpdateARecordResponseType - -type DeleteARecordsRequest DeleteARecordsRequestType - -type DeleteARecordsResponse DeleteARecordsResponseType - -type DeleteOneARecordRequest DeleteOneARecordRequestType - -type DeleteOneARecordResponse DeleteOneARecordResponseType - -type CreateAAAARecordRequest CreateAAAARecordRequestType - -type CreateAAAARecordResponse CreateAAAARecordResponseType - -type GetOneAAAARecordRequest GetOneAAAARecordRequestType - -type GetOneAAAARecordResponse GetOneAAAARecordResponseType - -type GetAAAARecordsRequest GetAAAARecordsRequestType - -type GetAAAARecordsResponse GetAAAARecordsResponseType - -type UpdateAAAARecordRequest UpdateAAAARecordRequestType - -type UpdateAAAARecordResponse UpdateAAAARecordResponseType - -type DeleteAAAARecordsRequest DeleteAAAARecordsRequestType - -type DeleteAAAARecordsResponse DeleteAAAARecordsResponseType - -type DeleteOneAAAARecordRequest DeleteOneAAAARecordRequestType - -type DeleteOneAAAARecordResponse DeleteOneAAAARecordResponseType - -type CreateALIASRecordRequest CreateALIASRecordRequestType - -type CreateALIASRecordResponse CreateALIASRecordResponseType - -type GetOneALIASRecordRequest GetOneALIASRecordRequestType - -type GetOneALIASRecordResponse GetOneALIASRecordResponseType - -type GetALIASRecordsRequest GetALIASRecordsRequestType - -type GetALIASRecordsResponse GetALIASRecordsResponseType - -type UpdateALIASRecordRequest UpdateALIASRecordRequestType - -type UpdateALIASRecordResponse UpdateALIASRecordResponseType - -type DeleteALIASRecordsRequest DeleteALIASRecordsRequestType - -type DeleteALIASRecordsResponse DeleteALIASRecordsResponseType - -type DeleteOneALIASRecordRequest DeleteOneALIASRecordRequestType - -type DeleteOneALIASRecordResponse DeleteOneALIASRecordResponseType - -type CreateCAARecordRequest CreateCAARecordRequestType - -type CreateCAARecordResponse CreateCAARecordResponseType - -type GetOneCAARecordRequest GetOneCAARecordRequestType - -type GetOneCAARecordResponse GetOneCAARecordResponseType - -type GetCAARecordsRequest GetCAARecordsRequestType - -type GetCAARecordsResponse GetCAARecordsResponseType - -type UpdateCAARecordRequest UpdateCAARecordRequestType - -type UpdateCAARecordResponse UpdateCAARecordResponseType - -type DeleteCAARecordsRequest DeleteCAARecordsRequestType - -type DeleteCAARecordsResponse DeleteCAARecordsResponseType - -type DeleteOneCAARecordRequest DeleteOneCAARecordRequestType - -type DeleteOneCAARecordResponse DeleteOneCAARecordResponseType - -type CreateCDNSKEYRecordRequest CreateCDNSKEYRecordRequestType - -type CreateCDNSKEYRecordResponse CreateCDNSKEYRecordResponseType - -type GetOneCDNSKEYRecordRequest GetOneCDNSKEYRecordRequestType - -type GetOneCDNSKEYRecordResponse GetOneCDNSKEYRecordResponseType - -type GetCDNSKEYRecordsRequest GetCDNSKEYRecordsRequestType - -type GetCDNSKEYRecordsResponse GetCDNSKEYRecordsResponseType - -type UpdateCDNSKEYRecordRequest UpdateCDNSKEYRecordRequestType - -type UpdateCDNSKEYRecordResponse UpdateCDNSKEYRecordResponseType - -type DeleteCDNSKEYRecordsRequest DeleteCDNSKEYRecordsRequestType - -type DeleteCDNSKEYRecordsResponse DeleteCDNSKEYRecordsResponseType - -type DeleteOneCDNSKEYRecordRequest DeleteOneCDNSKEYRecordRequestType - -type DeleteOneCDNSKEYRecordResponse DeleteOneCDNSKEYRecordResponseType - -type CreateCDSRecordRequest CreateCDSRecordRequestType - -type CreateCDSRecordResponse CreateCDSRecordResponseType - -type GetOneCDSRecordRequest GetOneCDSRecordRequestType - -type GetOneCDSRecordResponse GetOneCDSRecordResponseType - -type GetCDSRecordsRequest GetCDSRecordsRequestType - -type GetCDSRecordsResponse GetCDSRecordsResponseType - -type UpdateCDSRecordRequest UpdateCDSRecordRequestType - -type UpdateCDSRecordResponse UpdateCDSRecordResponseType - -type DeleteCDSRecordsRequest DeleteCDSRecordsRequestType - -type DeleteCDSRecordsResponse DeleteCDSRecordsResponseType - -type DeleteOneCDSRecordRequest DeleteOneCDSRecordRequestType - -type DeleteOneCDSRecordResponse DeleteOneCDSRecordResponseType - -type CreateCERTRecordRequest CreateCERTRecordRequestType - -type CreateCERTRecordResponse CreateCERTRecordResponseType - -type GetOneCERTRecordRequest GetOneCERTRecordRequestType - -type GetOneCERTRecordResponse GetOneCERTRecordResponseType - -type GetCERTRecordsRequest GetCERTRecordsRequestType - -type GetCERTRecordsResponse GetCERTRecordsResponseType - -type UpdateCERTRecordRequest UpdateCERTRecordRequestType - -type UpdateCERTRecordResponse UpdateCERTRecordResponseType - -type DeleteCERTRecordsRequest DeleteCERTRecordsRequestType - -type DeleteCERTRecordsResponse DeleteCERTRecordsResponseType - -type DeleteOneCERTRecordRequest DeleteOneCERTRecordRequestType - -type DeleteOneCERTRecordResponse DeleteOneCERTRecordResponseType - -type CreateCNAMERecordRequest CreateCNAMERecordRequestType - -type CreateCNAMERecordResponse CreateCNAMERecordResponseType - -type GetOneCNAMERecordRequest GetOneCNAMERecordRequestType - -type GetOneCNAMERecordResponse GetOneCNAMERecordResponseType - -type GetCNAMERecordsRequest GetCNAMERecordsRequestType - -type GetCNAMERecordsResponse GetCNAMERecordsResponseType - -type UpdateCNAMERecordRequest UpdateCNAMERecordRequestType - -type UpdateCNAMERecordResponse UpdateCNAMERecordResponseType - -type DeleteCNAMERecordsRequest DeleteCNAMERecordsRequestType - -type DeleteCNAMERecordsResponse DeleteCNAMERecordsResponseType - -type DeleteOneCNAMERecordRequest DeleteOneCNAMERecordRequestType - -type DeleteOneCNAMERecordResponse DeleteOneCNAMERecordResponseType - -type CreateCSYNCRecordRequest CreateCSYNCRecordRequestType - -type CreateCSYNCRecordResponse CreateCSYNCRecordResponseType - -type GetOneCSYNCRecordRequest GetOneCSYNCRecordRequestType - -type GetOneCSYNCRecordResponse GetOneCSYNCRecordResponseType - -type GetCSYNCRecordsRequest GetCSYNCRecordsRequestType - -type GetCSYNCRecordsResponse GetCSYNCRecordsResponseType - -type UpdateCSYNCRecordRequest UpdateCSYNCRecordRequestType - -type UpdateCSYNCRecordResponse UpdateCSYNCRecordResponseType - -type DeleteCSYNCRecordsRequest DeleteCSYNCRecordsRequestType - -type DeleteCSYNCRecordsResponse DeleteCSYNCRecordsResponseType - -type DeleteOneCSYNCRecordRequest DeleteOneCSYNCRecordRequestType - -type DeleteOneCSYNCRecordResponse DeleteOneCSYNCRecordResponseType - -type CreateDHCIDRecordRequest CreateDHCIDRecordRequestType - -type CreateDHCIDRecordResponse CreateDHCIDRecordResponseType - -type GetOneDHCIDRecordRequest GetOneDHCIDRecordRequestType - -type GetOneDHCIDRecordResponse GetOneDHCIDRecordResponseType - -type GetDHCIDRecordsRequest GetDHCIDRecordsRequestType - -type GetDHCIDRecordsResponse GetDHCIDRecordsResponseType - -type UpdateDHCIDRecordRequest UpdateDHCIDRecordRequestType - -type UpdateDHCIDRecordResponse UpdateDHCIDRecordResponseType - -type DeleteDHCIDRecordsRequest DeleteDHCIDRecordsRequestType - -type DeleteDHCIDRecordsResponse DeleteDHCIDRecordsResponseType - -type DeleteOneDHCIDRecordRequest DeleteOneDHCIDRecordRequestType - -type DeleteOneDHCIDRecordResponse DeleteOneDHCIDRecordResponseType - -type CreateDNAMERecordRequest CreateDNAMERecordRequestType - -type CreateDNAMERecordResponse CreateDNAMERecordResponseType - -type GetOneDNAMERecordRequest GetOneDNAMERecordRequestType - -type GetOneDNAMERecordResponse GetOneDNAMERecordResponseType - -type GetDNAMERecordsRequest GetDNAMERecordsRequestType - -type GetDNAMERecordsResponse GetDNAMERecordsResponseType - -type UpdateDNAMERecordRequest UpdateDNAMERecordRequestType - -type UpdateDNAMERecordResponse UpdateDNAMERecordResponseType - -type DeleteDNAMERecordsRequest DeleteDNAMERecordsRequestType - -type DeleteDNAMERecordsResponse DeleteDNAMERecordsResponseType - -type DeleteOneDNAMERecordRequest DeleteOneDNAMERecordRequestType - -type DeleteOneDNAMERecordResponse DeleteOneDNAMERecordResponseType - -type CreateDNSKEYRecordRequest CreateDNSKEYRecordRequestType - -type CreateDNSKEYRecordResponse CreateDNSKEYRecordResponseType - -type GetOneDNSKEYRecordRequest GetOneDNSKEYRecordRequestType - -type GetOneDNSKEYRecordResponse GetOneDNSKEYRecordResponseType - -type GetDNSKEYRecordsRequest GetDNSKEYRecordsRequestType - -type GetDNSKEYRecordsResponse GetDNSKEYRecordsResponseType - -type UpdateDNSKEYRecordRequest UpdateDNSKEYRecordRequestType - -type UpdateDNSKEYRecordResponse UpdateDNSKEYRecordResponseType - -type DeleteDNSKEYRecordsRequest DeleteDNSKEYRecordsRequestType - -type DeleteDNSKEYRecordsResponse DeleteDNSKEYRecordsResponseType - -type DeleteOneDNSKEYRecordRequest DeleteOneDNSKEYRecordRequestType - -type DeleteOneDNSKEYRecordResponse DeleteOneDNSKEYRecordResponseType - -type CreateDSRecordRequest CreateDSRecordRequestType - -type CreateDSRecordResponse CreateDSRecordResponseType - -type GetOneDSRecordRequest GetOneDSRecordRequestType - -type GetOneDSRecordResponse GetOneDSRecordResponseType - -type GetDSRecordsRequest GetDSRecordsRequestType - -type GetDSRecordsResponse GetDSRecordsResponseType - -type UpdateDSRecordRequest UpdateDSRecordRequestType - -type UpdateDSRecordResponse UpdateDSRecordResponseType - -type DeleteDSRecordsRequest DeleteDSRecordsRequestType - -type DeleteDSRecordsResponse DeleteDSRecordsResponseType - -type DeleteOneDSRecordRequest DeleteOneDSRecordRequestType - -type DeleteOneDSRecordResponse DeleteOneDSRecordResponseType - -type CreateIPSECKEYRecordRequest CreateIPSECKEYRecordRequestType - -type CreateIPSECKEYRecordResponse CreateIPSECKEYRecordResponseType - -type GetOneIPSECKEYRecordRequest GetOneIPSECKEYRecordRequestType - -type GetOneIPSECKEYRecordResponse GetOneIPSECKEYRecordResponseType - -type GetIPSECKEYRecordsRequest GetIPSECKEYRecordsRequestType - -type GetIPSECKEYRecordsResponse GetIPSECKEYRecordsResponseType - -type UpdateIPSECKEYRecordRequest UpdateIPSECKEYRecordRequestType - -type UpdateIPSECKEYRecordResponse UpdateIPSECKEYRecordResponseType - -type DeleteIPSECKEYRecordsRequest DeleteIPSECKEYRecordsRequestType - -type DeleteIPSECKEYRecordsResponse DeleteIPSECKEYRecordsResponseType - -type DeleteOneIPSECKEYRecordRequest DeleteOneIPSECKEYRecordRequestType - -type DeleteOneIPSECKEYRecordResponse DeleteOneIPSECKEYRecordResponseType - -type CreateKEYRecordRequest CreateKEYRecordRequestType - -type CreateKEYRecordResponse CreateKEYRecordResponseType - -type GetOneKEYRecordRequest GetOneKEYRecordRequestType - -type GetOneKEYRecordResponse GetOneKEYRecordResponseType - -type GetKEYRecordsRequest GetKEYRecordsRequestType - -type GetKEYRecordsResponse GetKEYRecordsResponseType - -type UpdateKEYRecordRequest UpdateKEYRecordRequestType - -type UpdateKEYRecordResponse UpdateKEYRecordResponseType - -type DeleteKEYRecordsRequest DeleteKEYRecordsRequestType - -type DeleteKEYRecordsResponse DeleteKEYRecordsResponseType - -type DeleteOneKEYRecordRequest DeleteOneKEYRecordRequestType - -type DeleteOneKEYRecordResponse DeleteOneKEYRecordResponseType - -type CreateKXRecordRequest CreateKXRecordRequestType - -type CreateKXRecordResponse CreateKXRecordResponseType - -type GetOneKXRecordRequest GetOneKXRecordRequestType - -type GetOneKXRecordResponse GetOneKXRecordResponseType - -type GetKXRecordsRequest GetKXRecordsRequestType - -type GetKXRecordsResponse GetKXRecordsResponseType - -type UpdateKXRecordRequest UpdateKXRecordRequestType - -type UpdateKXRecordResponse UpdateKXRecordResponseType - -type DeleteKXRecordsRequest DeleteKXRecordsRequestType - -type DeleteKXRecordsResponse DeleteKXRecordsResponseType - -type DeleteOneKXRecordRequest DeleteOneKXRecordRequestType - -type DeleteOneKXRecordResponse DeleteOneKXRecordResponseType - -type CreateLOCRecordRequest CreateLOCRecordRequestType - -type CreateLOCRecordResponse CreateLOCRecordResponseType - -type GetOneLOCRecordRequest GetOneLOCRecordRequestType - -type GetOneLOCRecordResponse GetOneLOCRecordResponseType - -type GetLOCRecordsRequest GetLOCRecordsRequestType - -type GetLOCRecordsResponse GetLOCRecordsResponseType - -type UpdateLOCRecordRequest UpdateLOCRecordRequestType - -type UpdateLOCRecordResponse UpdateLOCRecordResponseType - -type DeleteLOCRecordsRequest DeleteLOCRecordsRequestType - -type DeleteLOCRecordsResponse DeleteLOCRecordsResponseType - -type DeleteOneLOCRecordRequest DeleteOneLOCRecordRequestType - -type DeleteOneLOCRecordResponse DeleteOneLOCRecordResponseType - -type CreateMXRecordRequest CreateMXRecordRequestType - -type CreateMXRecordResponse CreateMXRecordResponseType - -type GetOneMXRecordRequest GetOneMXRecordRequestType - -type GetOneMXRecordResponse GetOneMXRecordResponseType - -type GetMXRecordsRequest GetMXRecordsRequestType - -type GetMXRecordsResponse GetMXRecordsResponseType - -type UpdateMXRecordRequest UpdateMXRecordRequestType - -type UpdateMXRecordResponse UpdateMXRecordResponseType - -type DeleteMXRecordsRequest DeleteMXRecordsRequestType - -type DeleteMXRecordsResponse DeleteMXRecordsResponseType - -type DeleteOneMXRecordRequest DeleteOneMXRecordRequestType - -type DeleteOneMXRecordResponse DeleteOneMXRecordResponseType - -type CreateNAPTRRecordRequest CreateNAPTRRecordRequestType - -type CreateNAPTRRecordResponse CreateNAPTRRecordResponseType - -type GetOneNAPTRRecordRequest GetOneNAPTRRecordRequestType - -type GetOneNAPTRRecordResponse GetOneNAPTRRecordResponseType - -type GetNAPTRRecordsRequest GetNAPTRRecordsRequestType - -type GetNAPTRRecordsResponse GetNAPTRRecordsResponseType - -type UpdateNAPTRRecordRequest UpdateNAPTRRecordRequestType - -type UpdateNAPTRRecordResponse UpdateNAPTRRecordResponseType - -type DeleteNAPTRRecordsRequest DeleteNAPTRRecordsRequestType - -type DeleteNAPTRRecordsResponse DeleteNAPTRRecordsResponseType - -type DeleteOneNAPTRRecordRequest DeleteOneNAPTRRecordRequestType - -type DeleteOneNAPTRRecordResponse DeleteOneNAPTRRecordResponseType - -type CreateNSAPRecordRequest CreateNSAPRecordRequestType - -type CreateNSAPRecordResponse CreateNSAPRecordResponseType - -type GetOneNSAPRecordRequest GetOneNSAPRecordRequestType - -type GetOneNSAPRecordResponse GetOneNSAPRecordResponseType - -type GetNSAPRecordsRequest GetNSAPRecordsRequestType - -type GetNSAPRecordsResponse GetNSAPRecordsResponseType - -type UpdateNSAPRecordRequest UpdateNSAPRecordRequestType - -type UpdateNSAPRecordResponse UpdateNSAPRecordResponseType - -type DeleteNSAPRecordsRequest DeleteNSAPRecordsRequestType - -type DeleteNSAPRecordsResponse DeleteNSAPRecordsResponseType - -type DeleteOneNSAPRecordRequest DeleteOneNSAPRecordRequestType - -type DeleteOneNSAPRecordResponse DeleteOneNSAPRecordResponseType - -type CreatePOLICYRecordRequest CreatePOLICYRecordRequestType - -type CreatePOLICYRecordResponse CreatePOLICYRecordResponseType - -type GetOnePOLICYRecordRequest GetOnePOLICYRecordRequestType - -type GetOnePOLICYRecordResponse GetOnePOLICYRecordResponseType - -type GetPOLICYRecordsRequest GetPOLICYRecordsRequestType - -type GetPOLICYRecordsResponse GetPOLICYRecordsResponseType - -type UpdatePOLICYRecordRequest UpdatePOLICYRecordRequestType - -type UpdatePOLICYRecordResponse UpdatePOLICYRecordResponseType - -type DeletePOLICYRecordsRequest DeletePOLICYRecordsRequestType - -type DeletePOLICYRecordsResponse DeletePOLICYRecordsResponseType - -type DeleteOnePOLICYRecordRequest DeleteOnePOLICYRecordRequestType - -type DeleteOnePOLICYRecordResponse DeleteOnePOLICYRecordResponseType - -type CreatePTRRecordRequest CreatePTRRecordRequestType - -type CreatePTRRecordResponse CreatePTRRecordResponseType - -type GetOnePTRRecordRequest GetOnePTRRecordRequestType - -type GetOnePTRRecordResponse GetOnePTRRecordResponseType - -type GetPTRRecordsRequest GetPTRRecordsRequestType - -type GetPTRRecordsResponse GetPTRRecordsResponseType - -type UpdatePTRRecordRequest UpdatePTRRecordRequestType - -type UpdatePTRRecordResponse UpdatePTRRecordResponseType - -type DeletePTRRecordsRequest DeletePTRRecordsRequestType - -type DeletePTRRecordsResponse DeletePTRRecordsResponseType - -type DeleteOnePTRRecordRequest DeleteOnePTRRecordRequestType - -type DeleteOnePTRRecordResponse DeleteOnePTRRecordResponseType - -type CreatePXRecordRequest CreatePXRecordRequestType - -type CreatePXRecordResponse CreatePXRecordResponseType - -type GetOnePXRecordRequest GetOnePXRecordRequestType - -type GetOnePXRecordResponse GetOnePXRecordResponseType - -type GetPXRecordsRequest GetPXRecordsRequestType - -type GetPXRecordsResponse GetPXRecordsResponseType - -type UpdatePXRecordRequest UpdatePXRecordRequestType - -type UpdatePXRecordResponse UpdatePXRecordResponseType - -type DeletePXRecordsRequest DeletePXRecordsRequestType - -type DeletePXRecordsResponse DeletePXRecordsResponseType - -type DeleteOnePXRecordRequest DeleteOnePXRecordRequestType - -type DeleteOnePXRecordResponse DeleteOnePXRecordResponseType - -type CreateRPRecordRequest CreateRPRecordRequestType - -type CreateRPRecordResponse CreateRPRecordResponseType - -type GetOneRPRecordRequest GetOneRPRecordRequestType - -type GetOneRPRecordResponse GetOneRPRecordResponseType - -type GetRPRecordsRequest GetRPRecordsRequestType - -type GetRPRecordsResponse GetRPRecordsResponseType - -type UpdateRPRecordRequest UpdateRPRecordRequestType - -type UpdateRPRecordResponse UpdateRPRecordResponseType - -type DeleteRPRecordsRequest DeleteRPRecordsRequestType - -type DeleteRPRecordsResponse DeleteRPRecordsResponseType - -type DeleteOneRPRecordRequest DeleteOneRPRecordRequestType - -type DeleteOneRPRecordResponse DeleteOneRPRecordResponseType - -type CreateSPFRecordRequest CreateSPFRecordRequestType - -type CreateSPFRecordResponse CreateSPFRecordResponseType - -type GetOneSPFRecordRequest GetOneSPFRecordRequestType - -type GetOneSPFRecordResponse GetOneSPFRecordResponseType - -type GetSPFRecordsRequest GetSPFRecordsRequestType - -type GetSPFRecordsResponse GetSPFRecordsResponseType - -type UpdateSPFRecordRequest UpdateSPFRecordRequestType - -type UpdateSPFRecordResponse UpdateSPFRecordResponseType - -type DeleteSPFRecordsRequest DeleteSPFRecordsRequestType - -type DeleteSPFRecordsResponse DeleteSPFRecordsResponseType - -type DeleteOneSPFRecordRequest DeleteOneSPFRecordRequestType - -type DeleteOneSPFRecordResponse DeleteOneSPFRecordResponseType - -type CreateSRVRecordRequest CreateSRVRecordRequestType - -type CreateSRVRecordResponse CreateSRVRecordResponseType - -type GetOneSRVRecordRequest GetOneSRVRecordRequestType - -type GetOneSRVRecordResponse GetOneSRVRecordResponseType - -type GetSRVRecordsRequest GetSRVRecordsRequestType - -type GetSRVRecordsResponse GetSRVRecordsResponseType - -type UpdateSRVRecordRequest UpdateSRVRecordRequestType - -type UpdateSRVRecordResponse UpdateSRVRecordResponseType - -type DeleteSRVRecordsRequest DeleteSRVRecordsRequestType - -type DeleteSRVRecordsResponse DeleteSRVRecordsResponseType - -type DeleteOneSRVRecordRequest DeleteOneSRVRecordRequestType - -type DeleteOneSRVRecordResponse DeleteOneSRVRecordResponseType - -type CreateSSHFPRecordRequest CreateSSHFPRecordRequestType - -type CreateSSHFPRecordResponse CreateSSHFPRecordResponseType - -type GetOneSSHFPRecordRequest GetOneSSHFPRecordRequestType - -type GetOneSSHFPRecordResponse GetOneSSHFPRecordResponseType - -type GetSSHFPRecordsRequest GetSSHFPRecordsRequestType - -type GetSSHFPRecordsResponse GetSSHFPRecordsResponseType - -type UpdateSSHFPRecordRequest UpdateSSHFPRecordRequestType - -type UpdateSSHFPRecordResponse UpdateSSHFPRecordResponseType - -type DeleteSSHFPRecordsRequest DeleteSSHFPRecordsRequestType - -type DeleteSSHFPRecordsResponse DeleteSSHFPRecordsResponseType - -type DeleteOneSSHFPRecordRequest DeleteOneSSHFPRecordRequestType - -type DeleteOneSSHFPRecordResponse DeleteOneSSHFPRecordResponseType - -type CreateTLSARecordRequest CreateTLSARecordRequestType - -type CreateTLSARecordResponse CreateTLSARecordResponseType - -type GetOneTLSARecordRequest GetOneTLSARecordRequestType - -type GetOneTLSARecordResponse GetOneTLSARecordResponseType - -type GetTLSARecordsRequest GetTLSARecordsRequestType - -type GetTLSARecordsResponse GetTLSARecordsResponseType - -type UpdateTLSARecordRequest UpdateTLSARecordRequestType - -type UpdateTLSARecordResponse UpdateTLSARecordResponseType - -type DeleteTLSARecordsRequest DeleteTLSARecordsRequestType - -type DeleteTLSARecordsResponse DeleteTLSARecordsResponseType - -type DeleteOneTLSARecordRequest DeleteOneTLSARecordRequestType - -type DeleteOneTLSARecordResponse DeleteOneTLSARecordResponseType - -type CreateTXTRecordRequest CreateTXTRecordRequestType - -type CreateTXTRecordResponse CreateTXTRecordResponseType - -type GetOneTXTRecordRequest GetOneTXTRecordRequestType - -type GetOneTXTRecordResponse GetOneTXTRecordResponseType - -type GetTXTRecordsRequest GetTXTRecordsRequestType - -type GetTXTRecordsResponse GetTXTRecordsResponseType - -type UpdateTXTRecordRequest UpdateTXTRecordRequestType - -type UpdateTXTRecordResponse UpdateTXTRecordResponseType - -type DeleteTXTRecordsRequest DeleteTXTRecordsRequestType - -type DeleteTXTRecordsResponse DeleteTXTRecordsResponseType - -type DeleteOneTXTRecordRequest DeleteOneTXTRecordRequestType - -type DeleteOneTXTRecordResponse DeleteOneTXTRecordResponseType - -type GetOneSOARecordRequest GetOneSOARecordRequestType - -type GetOneSOARecordResponse GetOneSOARecordResponseType - -type GetSOARecordsRequest GetSOARecordsRequestType - -type GetSOARecordsResponse GetSOARecordsResponseType - -type UpdateSOARecordRequest UpdateSOARecordRequestType - -type UpdateSOARecordResponse UpdateSOARecordResponseType - -type CreateNSRecordRequest CreateNSRecordRequestType - -type CreateNSRecordResponse CreateNSRecordResponseType - -type GetOneNSRecordRequest GetOneNSRecordRequestType - -type GetOneNSRecordResponse GetOneNSRecordResponseType - -type GetNSRecordsRequest GetNSRecordsRequestType - -type GetNSRecordsResponse GetNSRecordsResponseType - -type UpdateNSRecordRequest UpdateNSRecordRequestType - -type UpdateNSRecordResponse UpdateNSRecordResponseType - -type DeleteNSRecordsRequest DeleteNSRecordsRequestType - -type DeleteNSRecordsResponse DeleteNSRecordsResponseType - -type DeleteOneNSRecordRequest DeleteOneNSRecordRequestType - -type DeleteOneNSRecordResponse DeleteOneNSRecordResponseType - -type ReplaceARecordsRequest ReplaceARecordsRequestType - -type ReplaceARecordsResponse ReplaceARecordsResponseType - -type ReplaceAAAARecordsRequest ReplaceAAAARecordsRequestType - -type ReplaceAAAARecordsResponse ReplaceAAAARecordsResponseType - -type ReplaceALIASRecordsRequest ReplaceALIASRecordsRequestType - -type ReplaceALIASRecordsResponse ReplaceALIASRecordsResponseType - -type ReplaceCAARecordsRequest ReplaceCAARecordsRequestType - -type ReplaceCAARecordsResponse ReplaceCAARecordsResponseType - -type ReplaceCDNSKEYRecordsRequest ReplaceCDNSKEYRecordsRequestType - -type ReplaceCDNSKEYRecordsResponse ReplaceCDNSKEYRecordsResponseType - -type ReplaceCDSRecordsRequest ReplaceCDSRecordsRequestType - -type ReplaceCDSRecordsResponse ReplaceCDSRecordsResponseType - -type ReplaceCERTRecordsRequest ReplaceCERTRecordsRequestType - -type ReplaceCERTRecordsResponse ReplaceCERTRecordsResponseType - -type ReplaceCNAMERecordsRequest ReplaceCNAMERecordsRequestType - -type ReplaceCNAMERecordsResponse ReplaceCNAMERecordsResponseType - -type ReplaceCSYNCRecordsRequest ReplaceCSYNCRecordsRequestType - -type ReplaceCSYNCRecordsResponse ReplaceCSYNCRecordsResponseType - -type ReplaceDHCIDRecordsRequest ReplaceDHCIDRecordsRequestType - -type ReplaceDHCIDRecordsResponse ReplaceDHCIDRecordsResponseType - -type ReplaceDNAMERecordsRequest ReplaceDNAMERecordsRequestType - -type ReplaceDNAMERecordsResponse ReplaceDNAMERecordsResponseType - -type ReplaceDNSKEYRecordsRequest ReplaceDNSKEYRecordsRequestType - -type ReplaceDNSKEYRecordsResponse ReplaceDNSKEYRecordsResponseType - -type ReplaceDSRecordsRequest ReplaceDSRecordsRequestType - -type ReplaceDSRecordsResponse ReplaceDSRecordsResponseType - -type ReplaceIPSECKEYRecordsRequest ReplaceIPSECKEYRecordsRequestType - -type ReplaceIPSECKEYRecordsResponse ReplaceIPSECKEYRecordsResponseType - -type ReplaceKEYRecordsRequest ReplaceKEYRecordsRequestType - -type ReplaceKEYRecordsResponse ReplaceKEYRecordsResponseType - -type ReplaceKXRecordsRequest ReplaceKXRecordsRequestType - -type ReplaceKXRecordsResponse ReplaceKXRecordsResponseType - -type ReplaceLOCRecordsRequest ReplaceLOCRecordsRequestType - -type ReplaceLOCRecordsResponse ReplaceLOCRecordsResponseType - -type ReplaceMXRecordsRequest ReplaceMXRecordsRequestType - -type ReplaceMXRecordsResponse ReplaceMXRecordsResponseType - -type ReplaceNAPTRRecordsRequest ReplaceNAPTRRecordsRequestType - -type ReplaceNAPTRRecordsResponse ReplaceNAPTRRecordsResponseType - -type ReplaceNSAPRecordsRequest ReplaceNSAPRecordsRequestType - -type ReplaceNSAPRecordsResponse ReplaceNSAPRecordsResponseType - -type ReplacePOLICYRecordsRequest ReplacePOLICYRecordsRequestType - -type ReplacePOLICYRecordsResponse ReplacePOLICYRecordsResponseType - -type ReplacePTRRecordsRequest ReplacePTRRecordsRequestType - -type ReplacePTRRecordsResponse ReplacePTRRecordsResponseType - -type ReplacePXRecordsRequest ReplacePXRecordsRequestType - -type ReplacePXRecordsResponse ReplacePXRecordsResponseType - -type ReplaceRPRecordsRequest ReplaceRPRecordsRequestType - -type ReplaceRPRecordsResponse ReplaceRPRecordsResponseType - -type ReplaceSPFRecordsRequest ReplaceSPFRecordsRequestType - -type ReplaceSPFRecordsResponse ReplaceSPFRecordsResponseType - -type ReplaceSRVRecordsRequest ReplaceSRVRecordsRequestType - -type ReplaceSRVRecordsResponse ReplaceSRVRecordsResponseType - -type ReplaceSSHFPRecordsRequest ReplaceSSHFPRecordsRequestType - -type ReplaceSSHFPRecordsResponse ReplaceSSHFPRecordsResponseType - -type ReplaceTLSARecordsRequest ReplaceTLSARecordsRequestType - -type ReplaceTLSARecordsResponse ReplaceTLSARecordsResponseType - -type ReplaceTXTRecordsRequest ReplaceTXTRecordsRequestType - -type ReplaceTXTRecordsResponse ReplaceTXTRecordsResponseType - -type ReplaceNSRecordsRequest ReplaceNSRecordsRequestType - -type ReplaceNSRecordsResponse ReplaceNSRecordsResponseType - -type GetANYRecordsRequest GetANYRecordsRequestType - -type GetANYRecordsResponse GetANYRecordsResponseType - -type GetAllRecordsRequest GetAllRecordsRequestType - -type GetAllRecordsResponse GetAllRecordsResponseType - -type GetAllAliasQNamesRequest GetAllAliasQNamesRequestType - -type GetAllAliasQNamesResponse GetAllAliasQNamesResponseType - -type GetOneUserRequest GetOneUserRequestType - -type GetOneUserResponse GetOneUserResponseType - -type DeleteOneUserRequest DeleteOneUserRequestType - -type DeleteOneUserResponse DeleteOneUserResponseType - -type CreateUserRequest CreateUserRequestType - -type CreateUserResponse CreateUserResponseType - -type UpdateUserRequest UpdateUserRequestType - -type UpdateUserResponse UpdateUserResponseType - -type GetUsersRequest GetUsersRequestType - -type GetUsersResponse GetUsersResponseType - -type GetUpdateUsersRequest GetUpdateUsersRequestType - -type GetUpdateUsersResponse GetUpdateUsersResponseType - -type UpdateUpdateUserRequest UpdateUpdateUserRequestType - -type UpdateUpdateUserResponse UpdateUpdateUserResponseType - -type DeleteOneUpdateUserRequest DeleteOneUpdateUserRequestType - -type DeleteOneUpdateUserResponse DeleteOneUpdateUserResponseType - -type UpdateUserPasswordRequest UpdateUserPasswordRequestType - -type UpdateUserPasswordResponse UpdateUserPasswordResponseType - -type BlockUserRequest BlockUserRequestType - -type BlockUserResponse BlockUserResponseType - -type UnblockUserRequest UnblockUserRequestType - -type UnblockUserResponse UnblockUserResponseType - -type CreateContactRequest CreateContactRequestType - -type CreateContactResponse CreateContactResponseType - -type GetOneContactRequest GetOneContactRequestType - -type GetOneContactResponse GetOneContactResponseType - -type GetContactsRequest GetContactsRequestType - -type GetContactsResponse GetContactsResponseType - -type DeleteOneContactRequest DeleteOneContactRequestType - -type DeleteOneContactResponse DeleteOneContactResponseType - -type UpdateContactRequest UpdateContactRequestType - -type UpdateContactResponse UpdateContactResponseType - -type CreateCustomerRequest CreateCustomerRequestType - -type CreateCustomerResponse CreateCustomerResponseType - -type UpdateCustomerRequest UpdateCustomerRequestType - -type UpdateCustomerResponse UpdateCustomerResponseType - -type GetOneCustomerRequest GetOneCustomerRequestType - -type GetOneCustomerResponse GetOneCustomerResponseType - -type GetCustomersRequest GetCustomersRequestType - -type GetCustomersResponse GetCustomersResponseType - -type DeleteOneCustomerRequest DeleteOneCustomerRequestType - -type DeleteOneCustomerResponse DeleteOneCustomerResponseType - -type GetCustomerPrefsRequest GetCustomerPrefsRequestType - -type GetCustomerPrefsResponse GetCustomerPrefsResponseType - -type SetCustomerPrefsRequest SetCustomerPrefsRequestType - -type SetCustomerPrefsResponse SetCustomerPrefsResponseType - -type GetCustomerIPACLRequest GetCustomerIPACLRequestType - -type GetCustomerIPACLResponse GetCustomerIPACLResponseType - -type SetCustomerIPACLRequest SetCustomerIPACLRequestType - -type SetCustomerIPACLResponse SetCustomerIPACLResponseType - -type CreateCustomerOracleMetadataRequest CreateCustomerOracleMetadataRequestType - -type CreateCustomerOracleMetadataResponse CreateCustomerOracleMetadataResponseType - -type UpdateCustomerOracleMetadataRequest UpdateCustomerOracleMetadataRequestType - -type UpdateCustomerOracleMetadataResponse UpdateCustomerOracleMetadataResponseType - -type GetCustomerOracleMetadataRequest GetCustomerOracleMetadataRequestType - -type GetCustomerOracleMetadataResponse GetCustomerOracleMetadataResponseType - -type DeleteCustomerOracleMetadataRequest DeleteCustomerOracleMetadataRequestType - -type DeleteCustomerOracleMetadataResponse DeleteCustomerOracleMetadataResponseType - -type CreateZoneOracleMetadataRequest CreateZoneOracleMetadataRequestType - -type CreateZoneOracleMetadataResponse CreateZoneOracleMetadataResponseType - -type UpdateZoneOracleMetadataRequest UpdateZoneOracleMetadataRequestType - -type UpdateZoneOracleMetadataResponse UpdateZoneOracleMetadataResponseType - -type GetZoneOracleMetadataRequest GetZoneOracleMetadataRequestType - -type GetZoneOracleMetadataResponse GetZoneOracleMetadataResponseType - -type DeleteZoneOracleMetadataRequest DeleteZoneOracleMetadataRequestType - -type DeleteZoneOracleMetadataResponse DeleteZoneOracleMetadataResponseType - -type OCIMigrateRequest OCIMigrateRequestType - -type OCIMigrateResponse OCIMigrateResponseType - -type CreateDDNSRequest CreateDDNSRequestType - -type CreateDDNSResponse CreateDDNSResponseType - -type GetOneDDNSRequest GetOneDDNSRequestType - -type GetOneDDNSResponse GetOneDDNSResponseType - -type GetDDNSsRequest GetDDNSsRequestType - -type GetDDNSsResponse GetDDNSsResponseType - -type UpdateDDNSRequest UpdateDDNSRequestType - -type UpdateDDNSResponse UpdateDDNSResponseType - -type DeleteOneDDNSRequest DeleteOneDDNSRequestType - -type DeleteOneDDNSResponse DeleteOneDDNSResponseType - -type ActivateDDNSRequest ActivateDDNSRequestType - -type ActivateDDNSResponse ActivateDDNSResponseType - -type DeactivateDDNSRequest DeactivateDDNSRequestType - -type DeactivateDDNSResponse DeactivateDDNSResponseType - -type ResetDDNSRequest ResetDDNSRequestType - -type ResetDDNSResponse ResetDDNSResponseType - -type GetUpdateUserPasswordRequest GetUpdateUserPasswordRequestType - -type GetUpdateUserPasswordResponse GetUpdateUserPasswordResponseType - -type CreateDDNSHostRequest CreateDDNSHostRequestType - -type CreateDDNSHostResponse CreateDDNSHostResponseType - -type CreateUpdateUserRequest CreateUpdateUserRequestType - -type CreateUpdateUserResponse CreateUpdateUserResponseType - -type AddDDNSRequest AddDDNSRequestType - -type AddDDNSResponse AddDDNSResponseType - -type CreateFailoverRequest CreateFailoverRequestType - -type CreateFailoverResponse CreateFailoverResponseType - -type GetOneFailoverRequest GetOneFailoverRequestType - -type GetOneFailoverResponse GetOneFailoverResponseType - -type GetFailoversRequest GetFailoversRequestType - -type GetFailoversResponse GetFailoversResponseType - -type UpdateFailoverRequest UpdateFailoverRequestType - -type UpdateFailoverResponse UpdateFailoverResponseType - -type DeleteOneFailoverRequest DeleteOneFailoverRequestType - -type DeleteOneFailoverResponse DeleteOneFailoverResponseType - -type ActivateFailoverRequest ActivateFailoverRequestType - -type ActivateFailoverResponse ActivateFailoverResponseType - -type DeactivateFailoverRequest DeactivateFailoverRequestType - -type DeactivateFailoverResponse DeactivateFailoverResponseType - -type RecoverFailoverRequest RecoverFailoverRequestType - -type RecoverFailoverResponse RecoverFailoverResponseType - -type CreateLoadBalanceRequest CreateLoadBalanceRequestType - -type CreateLoadBalanceResponse CreateLoadBalanceResponseType - -type GetOneLoadBalanceRequest GetOneLoadBalanceRequestType - -type GetOneLoadBalanceResponse GetOneLoadBalanceResponseType - -type GetLoadBalancesRequest GetLoadBalancesRequestType - -type GetLoadBalancesResponse GetLoadBalancesResponseType - -type UpdateLoadBalanceRequest UpdateLoadBalanceRequestType - -type UpdateLoadBalanceResponse UpdateLoadBalanceResponseType - -type DeleteOneLoadBalanceRequest DeleteOneLoadBalanceRequestType - -type DeleteOneLoadBalanceResponse DeleteOneLoadBalanceResponseType - -type ActivateLoadBalanceRequest ActivateLoadBalanceRequestType - -type ActivateLoadBalanceResponse ActivateLoadBalanceResponseType - -type DeactivateLoadBalanceRequest DeactivateLoadBalanceRequestType - -type DeactivateLoadBalanceResponse DeactivateLoadBalanceResponseType - -type RecoverLoadBalanceRequest RecoverLoadBalanceRequestType - -type RecoverLoadBalanceResponse RecoverLoadBalanceResponseType - -type RecoverLoadBalanceIPRequest RecoverLoadBalanceIPRequestType - -type RecoverLoadBalanceIPResponse RecoverLoadBalanceIPResponseType - -type CreateLoadBalancePoolEntryRequest CreateLoadBalancePoolEntryRequestType - -type CreateLoadBalancePoolEntryResponse CreateLoadBalancePoolEntryResponseType - -type UpdateLoadBalancePoolEntryRequest UpdateLoadBalancePoolEntryRequestType - -type UpdateLoadBalancePoolEntryResponse UpdateLoadBalancePoolEntryResponseType - -type GetOneLoadBalancePoolEntryRequest GetOneLoadBalancePoolEntryRequestType - -type GetOneLoadBalancePoolEntryResponse GetOneLoadBalancePoolEntryResponseType - -type GetLoadBalancePoolEntriesRequest GetLoadBalancePoolEntriesRequestType - -type GetLoadBalancePoolEntriesResponse GetLoadBalancePoolEntriesResponseType - -type DeleteOneLoadBalancePoolEntryRequest DeleteOneLoadBalancePoolEntryRequestType - -type DeleteOneLoadBalancePoolEntryResponse DeleteOneLoadBalancePoolEntryResponseType - -type CreateGSLBRequest CreateGSLBRequestType - -type CreateGSLBResponse CreateGSLBResponseType - -type GetOneGSLBRequest GetOneGSLBRequestType - -type GetOneGSLBResponse GetOneGSLBResponseType - -type GetGSLBsRequest GetGSLBsRequestType - -type GetGSLBsResponse GetGSLBsResponseType - -type UpdateGSLBRequest UpdateGSLBRequestType - -type UpdateGSLBResponse UpdateGSLBResponseType - -type DeleteOneGSLBRequest DeleteOneGSLBRequestType - -type DeleteOneGSLBResponse DeleteOneGSLBResponseType - -type ActivateGSLBRequest ActivateGSLBRequestType - -type ActivateGSLBResponse ActivateGSLBResponseType - -type DeactivateGSLBRequest DeactivateGSLBRequestType - -type DeactivateGSLBResponse DeactivateGSLBResponseType - -type RecoverGSLBRequest RecoverGSLBRequestType - -type RecoverGSLBResponse RecoverGSLBResponseType - -type RecoverGSLBIPRequest RecoverGSLBIPRequestType - -type RecoverGSLBIPResponse RecoverGSLBIPResponseType - -type CreateGSLBRegionRequest CreateGSLBRegionRequestType - -type CreateGSLBRegionResponse CreateGSLBRegionResponseType - -type GetOneGSLBRegionRequest GetOneGSLBRegionRequestType - -type GetOneGSLBRegionResponse GetOneGSLBRegionResponseType - -type GetGSLBRegionsRequest GetGSLBRegionsRequestType - -type GetGSLBRegionsResponse GetGSLBRegionsResponseType - -type UpdateGSLBRegionRequest UpdateGSLBRegionRequestType - -type UpdateGSLBRegionResponse UpdateGSLBRegionResponseType - -type DeleteOneGSLBRegionRequest DeleteOneGSLBRegionRequestType - -type DeleteOneGSLBRegionResponse DeleteOneGSLBRegionResponseType - -type CreateGSLBRegionPoolEntryRequest CreateGSLBRegionPoolEntryRequestType - -type CreateGSLBRegionPoolEntryResponse CreateGSLBRegionPoolEntryResponseType - -type UpdateGSLBRegionPoolEntryRequest UpdateGSLBRegionPoolEntryRequestType - -type UpdateGSLBRegionPoolEntryResponse UpdateGSLBRegionPoolEntryResponseType - -type GetOneGSLBRegionPoolEntryRequest GetOneGSLBRegionPoolEntryRequestType - -type GetOneGSLBRegionPoolEntryResponse GetOneGSLBRegionPoolEntryResponseType - -type GetGSLBRegionPoolEntriesRequest GetGSLBRegionPoolEntriesRequestType - -type GetGSLBRegionPoolEntriesResponse GetGSLBRegionPoolEntriesResponseType - -type DeleteOneGSLBRegionPoolEntryRequest DeleteOneGSLBRegionPoolEntryRequestType - -type DeleteOneGSLBRegionPoolEntryResponse DeleteOneGSLBRegionPoolEntryResponseType - -type CreateRTTMRequest CreateRTTMRequestType - -type CreateRTTMResponse CreateRTTMResponseType - -type GetOneRTTMRequest GetOneRTTMRequestType - -type GetOneRTTMResponse GetOneRTTMResponseType - -type GetRTTMsRequest GetRTTMsRequestType - -type GetRTTMsResponse GetRTTMsResponseType - -type UpdateRTTMRequest UpdateRTTMRequestType - -type UpdateRTTMResponse UpdateRTTMResponseType - -type DeleteOneRTTMRequest DeleteOneRTTMRequestType - -type DeleteOneRTTMResponse DeleteOneRTTMResponseType - -type ActivateRTTMRequest ActivateRTTMRequestType - -type ActivateRTTMResponse ActivateRTTMResponseType - -type DeactivateRTTMRequest DeactivateRTTMRequestType - -type DeactivateRTTMResponse DeactivateRTTMResponseType - -type RecoverRTTMRequest RecoverRTTMRequestType - -type RecoverRTTMResponse RecoverRTTMResponseType - -type RecoverRTTMIPRequest RecoverRTTMIPRequestType - -type RecoverRTTMIPResponse RecoverRTTMIPResponseType - -type GetRTTMLogsRequest GetRTTMLogsRequestType - -type GetRTTMLogsResponse GetRTTMLogsResponseType - -type GetRTTMRRSetsRequest GetRTTMRRSetsRequestType - -type GetRTTMRRSetsResponse GetRTTMRRSetsResponseType - -type CreateRTTMRegionRequest CreateRTTMRegionRequestType - -type CreateRTTMRegionResponse CreateRTTMRegionResponseType - -type GetOneRTTMRegionRequest GetOneRTTMRegionRequestType - -type GetOneRTTMRegionResponse GetOneRTTMRegionResponseType - -type GetRTTMRegionsRequest GetRTTMRegionsRequestType - -type GetRTTMRegionsResponse GetRTTMRegionsResponseType - -type UpdateRTTMRegionRequest UpdateRTTMRegionRequestType - -type UpdateRTTMRegionResponse UpdateRTTMRegionResponseType - -type DeleteOneRTTMRegionRequest DeleteOneRTTMRegionRequestType - -type DeleteOneRTTMRegionResponse DeleteOneRTTMRegionResponseType - -type CreateRTTMRegionPoolEntryRequest CreateRTTMRegionPoolEntryRequestType - -type CreateRTTMRegionPoolEntryResponse CreateRTTMRegionPoolEntryResponseType - -type UpdateRTTMRegionPoolEntryRequest UpdateRTTMRegionPoolEntryRequestType - -type UpdateRTTMRegionPoolEntryResponse UpdateRTTMRegionPoolEntryResponseType - -type GetOneRTTMRegionPoolEntryRequest GetOneRTTMRegionPoolEntryRequestType - -type GetOneRTTMRegionPoolEntryResponse GetOneRTTMRegionPoolEntryResponseType - -type GetRTTMRegionPoolEntriesRequest GetRTTMRegionPoolEntriesRequestType - -type GetRTTMRegionPoolEntriesResponse GetRTTMRegionPoolEntriesResponseType - -type DeleteOneRTTMRegionPoolEntryRequest DeleteOneRTTMRegionPoolEntryRequestType - -type DeleteOneRTTMRegionPoolEntryResponse DeleteOneRTTMRegionPoolEntryResponseType - -type CreateHTTPRedirectRequest CreateHTTPRedirectRequestType - -type CreateHTTPRedirectResponse CreateHTTPRedirectResponseType - -type GetOneHTTPRedirectRequest GetOneHTTPRedirectRequestType - -type GetOneHTTPRedirectResponse GetOneHTTPRedirectResponseType - -type GetHTTPRedirectsRequest GetHTTPRedirectsRequestType - -type GetHTTPRedirectsResponse GetHTTPRedirectsResponseType - -type UpdateHTTPRedirectRequest UpdateHTTPRedirectRequestType - -type UpdateHTTPRedirectResponse UpdateHTTPRedirectResponseType - -type DeleteOneHTTPRedirectRequest DeleteOneHTTPRedirectRequestType - -type DeleteOneHTTPRedirectResponse DeleteOneHTTPRedirectResponseType - -type CreateAdvRedirectRuleRequest CreateAdvRedirectRuleRequestType - -type CreateAdvRedirectRuleResponse CreateAdvRedirectRuleResponseType - -type UpdateAdvRedirectRuleRequest UpdateAdvRedirectRuleRequestType - -type UpdateAdvRedirectRuleResponse UpdateAdvRedirectRuleResponseType - -type GetOneAdvRedirectRuleRequest GetOneAdvRedirectRuleRequestType - -type GetOneAdvRedirectRuleResponse GetOneAdvRedirectRuleResponseType - -type GetAdvRedirectRulesRequest GetAdvRedirectRulesRequestType - -type GetAdvRedirectRulesResponse GetAdvRedirectRulesResponseType - -type DeleteOneAdvRedirectRuleRequest DeleteOneAdvRedirectRuleRequestType - -type DeleteOneAdvRedirectRuleResponse DeleteOneAdvRedirectRuleResponseType - -type CreateAdvRedirectRequest CreateAdvRedirectRequestType - -type CreateAdvRedirectResponse CreateAdvRedirectResponseType - -type GetOneAdvRedirectRequest GetOneAdvRedirectRequestType - -type GetOneAdvRedirectResponse GetOneAdvRedirectResponseType - -type GetAdvRedirectsRequest GetAdvRedirectsRequestType - -type GetAdvRedirectsResponse GetAdvRedirectsResponseType - -type UpdateAdvRedirectRequest UpdateAdvRedirectRequestType - -type UpdateAdvRedirectResponse UpdateAdvRedirectResponseType - -type DeleteOneAdvRedirectRequest DeleteOneAdvRedirectRequestType - -type DeleteOneAdvRedirectResponse DeleteOneAdvRedirectResponseType - -type GetNodeListRequest GetNodeListRequestType - -type GetNodeListResponse GetNodeListResponseType - -type PublishZoneRequest PublishZoneRequestType - -type PublishZoneResponse PublishZoneResponseType - -type PruneZoneRequest PruneZoneRequestType - -type PruneZoneResponse PruneZoneResponseType - -type FreezeZoneRequest FreezeZoneRequestType - -type FreezeZoneResponse FreezeZoneResponseType - -type ThawZoneRequest ThawZoneRequestType - -type ThawZoneResponse ThawZoneResponseType - -type RestoreZoneRequest RestoreZoneRequestType - -type RestoreZoneResponse RestoreZoneResponseType - -type BlockZoneRequest BlockZoneRequestType - -type BlockZoneResponse BlockZoneResponseType - -type DeleteZoneChangesetRequest DeleteZoneChangesetRequestType - -type DeleteZoneChangesetResponse DeleteZoneChangesetResponseType - -type GetZoneChangesetRequest GetZoneChangesetRequestType - -type GetZoneChangesetResponse GetZoneChangesetResponseType - -type GetZoneNotesRequest GetZoneNotesRequestType - -type GetZoneNotesResponse GetZoneNotesResponseType - -type UploadZoneFileRequest UploadZoneFileRequestType - -type UploadZoneFileResponse UploadZoneFileResponseType - -type TransferZoneInRequest TransferZoneInRequestType - -type TransferZoneInResponse TransferZoneInResponseType - -type GetTransferStatusRequest GetTransferStatusRequestType - -type GetTransferStatusResponse GetTransferStatusResponseType - -type GetZoneConfigOptionsRequest GetZoneConfigOptionsRequestType - -type GetZoneConfigOptionsResponse GetZoneConfigOptionsResponseType - -type SetZoneConfigOptionsRequest SetZoneConfigOptionsRequestType - -type SetZoneConfigOptionsResponse SetZoneConfigOptionsResponseType - -type CreateIPTrackRequest CreateIPTrackRequestType - -type CreateIPTrackResponse CreateIPTrackResponseType - -type GetOneIPTrackRequest GetOneIPTrackRequestType - -type GetOneIPTrackResponse GetOneIPTrackResponseType - -type GetIPTracksRequest GetIPTracksRequestType - -type GetIPTracksResponse GetIPTracksResponseType - -type UpdateIPTrackRequest UpdateIPTrackRequestType - -type UpdateIPTrackResponse UpdateIPTrackResponseType - -type DeleteOneIPTrackRequest DeleteOneIPTrackRequestType - -type DeleteOneIPTrackResponse DeleteOneIPTrackResponseType - -type ActivateIPTrackRequest ActivateIPTrackRequestType - -type ActivateIPTrackResponse ActivateIPTrackResponseType - -type DeactivateIPTrackRequest DeactivateIPTrackRequestType - -type DeactivateIPTrackResponse DeactivateIPTrackResponseType - -type CreateDNSSECRequest CreateDNSSECRequestType - -type CreateDNSSECResponse CreateDNSSECResponseType - -type GetOneDNSSECRequest GetOneDNSSECRequestType - -type GetOneDNSSECResponse GetOneDNSSECResponseType - -type GetDNSSECsRequest GetDNSSECsRequestType - -type GetDNSSECsResponse GetDNSSECsResponseType - -type UpdateDNSSECRequest UpdateDNSSECRequestType - -type UpdateDNSSECResponse UpdateDNSSECResponseType - -type DeleteOneDNSSECRequest DeleteOneDNSSECRequestType - -type DeleteOneDNSSECResponse DeleteOneDNSSECResponseType - -type ActivateDNSSECRequest ActivateDNSSECRequestType - -type ActivateDNSSECResponse ActivateDNSSECResponseType - -type DeactivateDNSSECRequest DeactivateDNSSECRequestType - -type DeactivateDNSSECResponse DeactivateDNSSECResponseType - -type GetDNSSECTimelineRequest GetDNSSECTimelineRequestType - -type GetDNSSECTimelineResponse GetDNSSECTimelineResponseType - -type GetTasksRequest GetTasksRequestType - -type GetTasksResponse GetTasksResponseType - -type GetOneTaskRequest GetOneTaskRequestType - -type GetOneTaskResponse GetOneTaskResponseType - -type CancelTaskRequest CancelTaskRequestType - -type CancelTaskResponse CancelTaskResponseType - -type CreateExtNameserverRequest CreateExtNameserverRequestType - -type CreateExtNameserverResponse CreateExtNameserverResponseType - -type GetOneExtNameserverRequest GetOneExtNameserverRequestType - -type GetOneExtNameserverResponse GetOneExtNameserverResponseType - -type GetExtNameserversRequest GetExtNameserversRequestType - -type GetExtNameserversResponse GetExtNameserversResponseType - -type UpdateExtNameserverRequest UpdateExtNameserverRequestType - -type UpdateExtNameserverResponse UpdateExtNameserverResponseType - -type DeleteOneExtNameserverRequest DeleteOneExtNameserverRequestType - -type DeleteOneExtNameserverResponse DeleteOneExtNameserverResponseType - -type Messages struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ messages"` - - Source string `xml:"source,omitempty" json:"source,omitempty"` - - Lvl string `xml:"lvl,omitempty" json:"lvl,omitempty"` - - Err_cd string `xml:"err_cd,omitempty" json:"err_cd,omitempty"` - - Info string `xml:"info,omitempty" json:"info,omitempty"` -} - -type WeightData struct { - A_weight []string `xml:"a_weight,omitempty" json:"a_weight,omitempty"` - - Aaaa_weight []string `xml:"aaaa_weight,omitempty" json:"aaaa_weight,omitempty"` - - Cname_weight []string `xml:"cname_weight,omitempty" json:"cname_weight,omitempty"` -} - -type ServeCountData struct { - A_serve_count string `xml:"a_serve_count,omitempty" json:"a_serve_count,omitempty"` - - Aaaa_serve_count string `xml:"aaaa_serve_count,omitempty" json:"aaaa_serve_count,omitempty"` -} - -type TTLData struct { - A_ttl int32 `xml:"a_ttl,omitempty" json:"a_ttl,omitempty"` - - Aaaa_ttl int32 `xml:"aaaa_ttl,omitempty" json:"aaaa_ttl,omitempty"` - - Cert_ttl int32 `xml:"cert_ttl,omitempty" json:"cert_ttl,omitempty"` - - Cname_ttl int32 `xml:"cname_ttl,omitempty" json:"cname_ttl,omitempty"` - - Mx_ttl int32 `xml:"mx_ttl,omitempty" json:"mx_ttl,omitempty"` - - Txt_ttl int32 `xml:"txt_ttl,omitempty" json:"txt_ttl,omitempty"` - - Spf_ttl int32 `xml:"spf_ttl,omitempty" json:"spf_ttl,omitempty"` - - Ptr_ttl int32 `xml:"ptr_ttl,omitempty" json:"ptr_ttl,omitempty"` - - Loc_ttl int32 `xml:"loc_ttl,omitempty" json:"loc_ttl,omitempty"` - - Srv_ttl int32 `xml:"srv_ttl,omitempty" json:"srv_ttl,omitempty"` - - Rp_ttl int32 `xml:"rp_ttl,omitempty" json:"rp_ttl,omitempty"` - - Key_ttl int32 `xml:"key_ttl,omitempty" json:"key_ttl,omitempty"` - - Dnskey_ttl int32 `xml:"dnskey_ttl,omitempty" json:"dnskey_ttl,omitempty"` - - Sshfp_ttl int32 `xml:"sshfp_ttl,omitempty" json:"sshfp_ttl,omitempty"` - - Dhcid_ttl int32 `xml:"dhcid_ttl,omitempty" json:"dhcid_ttl,omitempty"` - - Nsap_ttl int32 `xml:"nsap_ttl,omitempty" json:"nsap_ttl,omitempty"` - - Px_ttl int32 `xml:"px_ttl,omitempty" json:"px_ttl,omitempty"` -} - -type LabelData struct { - A_label []string `xml:"a_label,omitempty" json:"a_label,omitempty"` - - Aaaa_label []string `xml:"aaaa_label,omitempty" json:"aaaa_label,omitempty"` - - Cert_label []string `xml:"cert_label,omitempty" json:"cert_label,omitempty"` - - Cname_label []string `xml:"cname_label,omitempty" json:"cname_label,omitempty"` - - Mx_label []string `xml:"mx_label,omitempty" json:"mx_label,omitempty"` - - Txt_label []string `xml:"txt_label,omitempty" json:"txt_label,omitempty"` - - Spf_label []string `xml:"spf_label,omitempty" json:"spf_label,omitempty"` - - Ptr_label []string `xml:"ptr_label,omitempty" json:"ptr_label,omitempty"` - - Loc_label []string `xml:"loc_label,omitempty" json:"loc_label,omitempty"` - - Srv_label []string `xml:"srv_label,omitempty" json:"srv_label,omitempty"` - - Rp_label []string `xml:"rp_label,omitempty" json:"rp_label,omitempty"` - - Key_label []string `xml:"key_label,omitempty" json:"key_label,omitempty"` - - Dnskey_label []string `xml:"dnskey_label,omitempty" json:"dnskey_label,omitempty"` - - Sshfp_label []string `xml:"sshfp_label,omitempty" json:"sshfp_label,omitempty"` - - Dhcid_label []string `xml:"dhcid_label,omitempty" json:"dhcid_label,omitempty"` - - Nsap_label []string `xml:"nsap_label,omitempty" json:"nsap_label,omitempty"` - - Px_label []string `xml:"px_label,omitempty" json:"px_label,omitempty"` -} - -type GeoRegionGroup struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Rdata *ANYRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Countries []string `xml:"countries,omitempty" json:"countries,omitempty"` - - Serve_count *ServeCountData `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - Weight *WeightData `xml:"weight,omitempty" json:"weight,omitempty"` - - Ttl *TTLData `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Label *LabelData `xml:"label,omitempty" json:"label,omitempty"` -} - -type GeoRegionGroupData struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Rdata *ANYRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Countries []string `xml:"countries,omitempty" json:"countries,omitempty"` - - Serve_count *ServeCountData `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - Weight *WeightData `xml:"weight,omitempty" json:"weight,omitempty"` - - Ttl *TTLData `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Label *LabelData `xml:"label,omitempty" json:"label,omitempty"` - - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` -} - -type GeoNode struct { - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type Geo struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Groups []*GeoRegionGroup `xml:"groups,omitempty" json:"groups,omitempty"` - - Nodes []*GeoNode `xml:"nodes,omitempty" json:"nodes,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type DSFRData struct { - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - Data *GenericRData `xml:"data,omitempty" json:"data,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type DSFRecord struct { - Master_line string `xml:"master_line,omitempty" json:"master_line,omitempty"` - - // Rdata to update the svc record with - Rdata *ANYOneRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Weight string `xml:"weight,omitempty" json:"weight,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Endpoints []string `xml:"endpoints,omitempty" json:"endpoints,omitempty"` - - Endpoint_up_count string `xml:"endpoint_up_count,omitempty" json:"endpoint_up_count,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` -} - -type DSFRecordData struct { - Dsf_record_id string `xml:"dsf_record_id,omitempty" json:"dsf_record_id,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Master_line string `xml:"master_line,omitempty" json:"master_line,omitempty"` - - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Endpoints []string `xml:"endpoints,omitempty" json:"endpoints,omitempty"` - - Endpoint_up_count int32 `xml:"endpoint_up_count,omitempty" json:"endpoint_up_count,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Rdata_class string `xml:"rdata_class,omitempty" json:"rdata_class,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata []*DSFRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Response_time int32 `xml:"response_time,omitempty" json:"response_time,omitempty"` - - Torpidity int32 `xml:"torpidity,omitempty" json:"torpidity,omitempty"` - - Last_monitored int32 `xml:"last_monitored,omitempty" json:"last_monitored,omitempty"` - - Pending_change string `xml:"pending_change,omitempty" json:"pending_change,omitempty"` -} - -type DSFRecordSet struct { - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - Failover string `xml:"failover,omitempty" json:"failover,omitempty"` - - Rdata_class string `xml:"rdata_class,omitempty" json:"rdata_class,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Serve_count string `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - Fail_count string `xml:"fail_count,omitempty" json:"fail_count,omitempty"` - - Trouble_count string `xml:"trouble_count,omitempty" json:"trouble_count,omitempty"` - - Torpidity_max string `xml:"torpidity_max,omitempty" json:"torpidity_max,omitempty"` - - Index string `xml:"index,omitempty" json:"index,omitempty"` - - Records []*DSFRecord `xml:"records,omitempty" json:"records,omitempty"` -} - -type DSFRecordSetData struct { - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Rdata_class string `xml:"rdata_class,omitempty" json:"rdata_class,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Serve_count string `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - Fail_count string `xml:"fail_count,omitempty" json:"fail_count,omitempty"` - - Trouble_count string `xml:"trouble_count,omitempty" json:"trouble_count,omitempty"` - - Torpidity_max string `xml:"torpidity_max,omitempty" json:"torpidity_max,omitempty"` - - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Pending_change string `xml:"pending_change,omitempty" json:"pending_change,omitempty"` - - Ttl_derived string `xml:"ttl_derived,omitempty" json:"ttl_derived,omitempty"` - - Records []*DSFRecordData `xml:"records,omitempty" json:"records,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Last_monitored string `xml:"last_monitored,omitempty" json:"last_monitored,omitempty"` -} - -type DSFRecordSetFailoverChain struct { - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Core string `xml:"core,omitempty" json:"core,omitempty"` - - Record_sets []*DSFRecordSet `xml:"record_sets,omitempty" json:"record_sets,omitempty"` -} - -type DSFRecordSetFailoverChainData struct { - Dsf_record_set_failover_chain_id string `xml:"dsf_record_set_failover_chain_id,omitempty" json:"dsf_record_set_failover_chain_id,omitempty"` - - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Core string `xml:"core,omitempty" json:"core,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Pending_change string `xml:"pending_change,omitempty" json:"pending_change,omitempty"` - - Record_sets []*DSFRecordSetData `xml:"record_sets,omitempty" json:"record_sets,omitempty"` -} - -type DSFCriteria struct { - Geoip *DSFGeoIPCriteria `xml:"geoip,omitempty" json:"geoip,omitempty"` -} - -type DSFGeoIPCriteria struct { - Country []string `xml:"country,omitempty" json:"country,omitempty"` - - Region []string `xml:"region,omitempty" json:"region,omitempty"` - - Province []string `xml:"province,omitempty" json:"province,omitempty"` -} - -type DSFRulesetData struct { - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Criteria_type string `xml:"criteria_type,omitempty" json:"criteria_type,omitempty"` - - Criteria *DSFCriteria `xml:"criteria,omitempty" json:"criteria,omitempty"` - - Ordering string `xml:"ordering,omitempty" json:"ordering,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Response_pools []*DSFResponsePoolData `xml:"response_pools,omitempty" json:"response_pools,omitempty"` - - Pending_change string `xml:"pending_change,omitempty" json:"pending_change,omitempty"` -} - -type DSFRuleset struct { - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // The type of criteria contained within this Pool - Criteria_type string `xml:"criteria_type,omitempty" json:"criteria_type,omitempty"` - - // Required based on criteria_type. Filtered in API/BLL - Criteria *DSFCriteria `xml:"criteria,omitempty" json:"criteria,omitempty"` - - // where in the list of rulesets this should be. Defaults to last. - Ordering string `xml:"ordering,omitempty" json:"ordering,omitempty"` - - Response_pools []*DSFResponsePool `xml:"response_pools,omitempty" json:"response_pools,omitempty"` -} - -type DSFResponsePoolData struct { - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Notify Object - Notifier string `xml:"notifier,omitempty" json:"notifier,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Core_set_count string `xml:"core_set_count,omitempty" json:"core_set_count,omitempty"` - - Pending_change string `xml:"pending_change,omitempty" json:"pending_change,omitempty"` - - Rs_chains []*DSFRecordSetFailoverChainData `xml:"rs_chains,omitempty" json:"rs_chains,omitempty"` - - Rulesets []*DSFRulesetData `xml:"rulesets,omitempty" json:"rulesets,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Last_monitored string `xml:"last_monitored,omitempty" json:"last_monitored,omitempty"` -} - -type DSFResponsePool struct { - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - Failover string `xml:"failover,omitempty" json:"failover,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Notifier string `xml:"notifier,omitempty" json:"notifier,omitempty"` - - Core_set_count string `xml:"core_set_count,omitempty" json:"core_set_count,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Rs_chains []*DSFRecordSetFailoverChain `xml:"rs_chains,omitempty" json:"rs_chains,omitempty"` - - Ruleset string `xml:"ruleset,omitempty" json:"ruleset,omitempty"` - - Index string `xml:"index,omitempty" json:"index,omitempty"` -} - -type DSFData struct { - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Nodes []*DSFNode `xml:"nodes,omitempty" json:"nodes,omitempty"` - - Notifiers []*NotifierLinkData `xml:"notifiers,omitempty" json:"notifiers,omitempty"` - - Rulesets []*DSFRulesetData `xml:"rulesets,omitempty" json:"rulesets,omitempty"` - - Pending_change string `xml:"pending_change,omitempty" json:"pending_change,omitempty"` -} - -type DSFNode struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DSFMonitorData struct { - - // ID - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - // Label for the DSF Monitor - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Indicates whether or not the DSF Monitor is active - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // Num of responses to determine status - Response_count string `xml:"response_count,omitempty" json:"response_count,omitempty"` - - // Interval, in seconds, between probes - Probe_interval string `xml:"probe_interval,omitempty" json:"probe_interval,omitempty"` - - // number of attempted retries on failure before giving up - Retries string `xml:"retries,omitempty" json:"retries,omitempty"` - - // name of the protocol to monitor - Protocol string `xml:"protocol,omitempty" json:"protocol,omitempty"` - - // options pertaining the monitor - Options *DSFMonitorOptions `xml:"options,omitempty" json:"options,omitempty"` - - // IDs of attached notifiers - Notifier []string `xml:"notifier,omitempty" json:"notifier,omitempty"` - - // Endpoints to monitor - Endpoints []*DSFMonitorEndpoint `xml:"endpoints,omitempty" json:"endpoints,omitempty"` - - // how are agents chosen? - Agent_scheme string `xml:"agent_scheme,omitempty" json:"agent_scheme,omitempty"` - - // IDs of attached services - Services []string `xml:"services,omitempty" json:"services,omitempty"` -} - -type DSFMonitorEndpoint struct { - - // Indicates whether or not the end point is active - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // label of the endpoint - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // address for the endpoint - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // ordered list of preferred sites for monitoring - Site_prefs []string `xml:"site_prefs,omitempty" json:"site_prefs,omitempty"` -} - -type DSFMonitorOptions struct { - - // time, in seconds, before the check timeout - Timeout string `xml:"timeout,omitempty" json:"timeout,omitempty"` - - // an alternate port to connect to - Port string `xml:"port,omitempty" json:"port,omitempty"` - - // a specific path to request - Path string `xml:"path,omitempty" json:"path,omitempty"` - - // a value to pass into the `HOST:` header - Host string `xml:"host,omitempty" json:"host,omitempty"` - - // additional header fields - Header string `xml:"header,omitempty" json:"header,omitempty"` - - // a string to search for in the response - Expected string `xml:"expected,omitempty" json:"expected,omitempty"` - - Host_override []*DSFMonitorHostOverride `xml:"host_override,omitempty" json:"host_override,omitempty"` -} - -type DSFMonitorHostOverride struct { - - // address of an endpoint - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // host to use when checking that endpoint - Host string `xml:"host,omitempty" json:"host,omitempty"` -} - -type DSFMonitorSitesData struct { - - // information for a site performing DSF monitoring - DSFMonitorSites []*DSFMonitorSite `xml:"DSFMonitorSites,omitempty" json:"DSFMonitorSites,omitempty"` -} - -type DSFMonitorSite struct { - - // site code for the monitoring machine - Code string `xml:"code,omitempty" json:"code,omitempty"` - - // description of the machine's location - Description string `xml:"description,omitempty" json:"description,omitempty"` - - // CIDR of the monitoring machine(s) - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type Notifier struct { - - // Label for the Notifier object - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // List of Recipients attached to the Notifier - Recipients []*Recipient `xml:"recipients,omitempty" json:"recipients,omitempty"` - - // List of services attached to the Notifier - Services []*Service `xml:"services,omitempty" json:"services,omitempty"` -} - -type NotifierLink struct { - - // Public_id of the Notifier to link to - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` - - // filters on when services should fire the notifier - Filters []string `xml:"filters,omitempty" json:"filters,omitempty"` -} - -type NotifierDataAlt struct { - - // Public ID of the Notifier object - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` - - // Label for the Notifier object - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Indicates whether or not the Notifier is active - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // List of Recepients attached to the Notifier - Recipients []string `xml:"recipients,omitempty" json:"recipients,omitempty"` - - // List of services attached to the Notifier - Services []*Service `xml:"services,omitempty" json:"services,omitempty"` -} - -type NotifierData struct { - - // Public ID of the Notifier object - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` - - // Label for the Notifier object - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Indicates whether or not the Notifier is active - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // List of Recepients attached to the Notifier - Recipients []*Recipient `xml:"recipients,omitempty" json:"recipients,omitempty"` - - // List of services attached to the Notifier - Services []*Service `xml:"services,omitempty" json:"services,omitempty"` -} - -type NotifierLinkData struct { - - // Public ID of the Notifier object - Link_id string `xml:"link_id,omitempty" json:"link_id,omitempty"` - - // Indicates whether or not the Notifier link is active - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // filters on when services should fire the notifier - Filters []string `xml:"filters,omitempty" json:"filters,omitempty"` - - Notifier *NotifierSummaryData `xml:"notifier,omitempty" json:"notifier,omitempty"` -} - -type NotifierSummaryData struct { - - // Public ID of the Notifier object - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // List of Recepients attached to the Notifier - Recipients []string `xml:"recipients,omitempty" json:"recipients,omitempty"` - - // Indicates whether or not the Notifier is active - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type Recipient struct { - - // email or syslog - Format string `xml:"format,omitempty" json:"format,omitempty"` - - // For email, valid address or contact name. Syslog - address or hostname - Recipient string `xml:"recipient,omitempty" json:"recipient,omitempty"` - - // hash of options - Details *RecipientDetail `xml:"details,omitempty" json:"details,omitempty"` - - // List of string. For email - detail and summary are valid - Features []string `xml:"features,omitempty" json:"features,omitempty"` -} - -type RecipientDetail struct { - - // syslog port - Port string `xml:"port,omitempty" json:"port,omitempty"` - - // syslog ident - Ident string `xml:"ident,omitempty" json:"ident,omitempty"` - - // syslog facility - Facility string `xml:"facility,omitempty" json:"facility,omitempty"` - - // syslog tls - Tls string `xml:"tls,omitempty" json:"tls,omitempty"` -} - -type Service struct { - - // Valid entries - DSF or Monitor - Service_class string `xml:"service_class,omitempty" json:"service_class,omitempty"` - - // public_id of the specified service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // filters on when services should fire the notifier - Filters []string `xml:"filters,omitempty" json:"filters,omitempty"` - - // Indicates whether or not the link to the service is active - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type ConfigLimitData struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Value string `xml:"value,omitempty" json:"value,omitempty"` -} - -type PermissionZone struct { - Zone_name string `xml:"zone_name,omitempty" json:"zone_name,omitempty"` - - Recurse string `xml:"recurse,omitempty" json:"recurse,omitempty"` - - // This field is returned in responses from the API, it should not be included in requests. - Reason []string `xml:"reason,omitempty" json:"reason,omitempty"` -} - -type PermissionResponse struct { - Admin_override string `xml:"admin_override,omitempty" json:"admin_override,omitempty"` - - Allowed []*PermissionData `xml:"allowed,omitempty" json:"allowed,omitempty"` - - Forbidden []*PermissionData `xml:"forbidden,omitempty" json:"forbidden,omitempty"` -} - -type PermissionData struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` - - Reason []string `xml:"reason,omitempty" json:"reason,omitempty"` -} - -type PermissionGroupData struct { - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - Description string `xml:"description,omitempty" json:"description,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - User_name []string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Subgroup []string `xml:"subgroup,omitempty" json:"subgroup,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type TSIGKeyData struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Algorithm string `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Secret string `xml:"secret,omitempty" json:"secret,omitempty"` -} - -type HostStatFlagsData struct { - - // empty for customer-wide default - Zone_name string `xml:"zone_name,omitempty" json:"zone_name,omitempty"` - - // Y or N - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type ZoneData struct { - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // code indicating how serial numbers are constructed on publish - Serial_style string `xml:"serial_style,omitempty" json:"serial_style,omitempty"` - - // current serial number - Serial int32 `xml:"serial,omitempty" json:"serial,omitempty"` - - // Type of zone. Primary or Secondary - Zone_type string `xml:"zone_type,omitempty" json:"zone_type,omitempty"` -} - -type SecondaryData struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Masters []string `xml:"masters,omitempty" json:"masters,omitempty"` - - Tsig_key_name string `xml:"tsig_key_name,omitempty" json:"tsig_key_name,omitempty"` - - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` - - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` -} - -type SessionLoginData struct { - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Version string `xml:"version,omitempty" json:"version,omitempty"` -} - -type QueryStatsData struct { - Csv string `xml:"csv,omitempty" json:"csv,omitempty"` -} - -type ARecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type AAAARecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataAAAA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type ALIASRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataALIAS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CAARecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCAA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CDNSKEYRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CDSRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CERTRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCERT `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CNAMERecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CSYNCRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCSYNC `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DHCIDRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDHCID `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DNAMERecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DNSKEYRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DSRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type IPSECKEYRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataIPSECKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type KEYRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type KXRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type LOCRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataLOC `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type MXRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataMX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type NAPTRRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNAPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type NSAPRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNSAP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type POLICYRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPOLICY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type PTRRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type PXRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RPRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataRP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type SPFRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSPF `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type SRVRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSRV `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type SSHFPRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSSHFP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type TLSARecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTLSA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type TXTRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTXT `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type SOARecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataSOA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Serial_style string `xml:"serial_style,omitempty" json:"serial_style,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RDataSOAUpdate struct { - Rname string `xml:"rname,omitempty" json:"rname,omitempty"` - - Refresh string `xml:"refresh,omitempty" json:"refresh,omitempty"` - - Retry string `xml:"retry,omitempty" json:"retry,omitempty"` - - Expire string `xml:"expire,omitempty" json:"expire,omitempty"` - - Minimum string `xml:"minimum,omitempty" json:"minimum,omitempty"` -} - -type NSRecordData struct { - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Service_class string `xml:"service_class,omitempty" json:"service_class,omitempty"` - - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type UserData struct { - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - User_id string `xml:"user_id,omitempty" json:"user_id,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` - - Group_name []string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` - - First_name string `xml:"first_name,omitempty" json:"first_name,omitempty"` - - Last_name string `xml:"last_name,omitempty" json:"last_name,omitempty"` - - Phone string `xml:"phone,omitempty" json:"phone,omitempty"` - - Fax string `xml:"fax,omitempty" json:"fax,omitempty"` - - Email string `xml:"email,omitempty" json:"email,omitempty"` - - Notify_email string `xml:"notify_email,omitempty" json:"notify_email,omitempty"` - - Pager_email string `xml:"pager_email,omitempty" json:"pager_email,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` - - Address_2 string `xml:"address_2,omitempty" json:"address_2,omitempty"` - - City string `xml:"city,omitempty" json:"city,omitempty"` - - State string `xml:"state,omitempty" json:"state,omitempty"` - - Post_code string `xml:"post_code,omitempty" json:"post_code,omitempty"` - - Country string `xml:"country,omitempty" json:"country,omitempty"` - - Website string `xml:"website,omitempty" json:"website,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` -} - -type ContactData struct { - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` - - First_name string `xml:"first_name,omitempty" json:"first_name,omitempty"` - - Last_name string `xml:"last_name,omitempty" json:"last_name,omitempty"` - - Phone string `xml:"phone,omitempty" json:"phone,omitempty"` - - Fax string `xml:"fax,omitempty" json:"fax,omitempty"` - - Email string `xml:"email,omitempty" json:"email,omitempty"` - - Notify_email string `xml:"notify_email,omitempty" json:"notify_email,omitempty"` - - Pager_email string `xml:"pager_email,omitempty" json:"pager_email,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` - - Address_2 string `xml:"address_2,omitempty" json:"address_2,omitempty"` - - City string `xml:"city,omitempty" json:"city,omitempty"` - - State string `xml:"state,omitempty" json:"state,omitempty"` - - Post_code string `xml:"post_code,omitempty" json:"post_code,omitempty"` - - Country string `xml:"country,omitempty" json:"country,omitempty"` - - Website string `xml:"website,omitempty" json:"website,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` -} - -type CustomerNSData struct { - Primary string `xml:"primary,omitempty" json:"primary,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CustomerInterfaceData struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Address []string `xml:"address,omitempty" json:"address,omitempty"` -} - -type CustomerData struct { - Id string `xml:"id,omitempty" json:"id,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Pool_id string `xml:"pool_id,omitempty" json:"pool_id,omitempty"` - - Activated string `xml:"activated,omitempty" json:"activated,omitempty"` - - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - Level string `xml:"level,omitempty" json:"level,omitempty"` - - Owner_contact string `xml:"owner_contact,omitempty" json:"owner_contact,omitempty"` - - Billing_contact string `xml:"billing_contact,omitempty" json:"billing_contact,omitempty"` - - Primary_sales_agent string `xml:"primary_sales_agent,omitempty" json:"primary_sales_agent,omitempty"` - - Salesforce_id string `xml:"salesforce_id,omitempty" json:"salesforce_id,omitempty"` - - Default_ns []*CustomerNSData `xml:"default_ns,omitempty" json:"default_ns,omitempty"` - - Interfaces []*CustomerInterfaceData `xml:"interfaces,omitempty" json:"interfaces,omitempty"` - - Admin_user_id string `xml:"admin_user_id,omitempty" json:"admin_user_id,omitempty"` - - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - Tenant string `xml:"tenant,omitempty" json:"tenant,omitempty"` -} - -type CustomerAdminData struct { - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` - - Email string `xml:"email,omitempty" json:"email,omitempty"` - - First_name string `xml:"first_name,omitempty" json:"first_name,omitempty"` - - Last_name string `xml:"last_name,omitempty" json:"last_name,omitempty"` - - Phone string `xml:"phone,omitempty" json:"phone,omitempty"` - - Fax string `xml:"fax,omitempty" json:"fax,omitempty"` - - Notify_email string `xml:"notify_email,omitempty" json:"notify_email,omitempty"` - - Pager_email string `xml:"pager_email,omitempty" json:"pager_email,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` - - Address_2 string `xml:"address_2,omitempty" json:"address_2,omitempty"` - - City string `xml:"city,omitempty" json:"city,omitempty"` - - State string `xml:"state,omitempty" json:"state,omitempty"` - - Post_code string `xml:"post_code,omitempty" json:"post_code,omitempty"` - - Country string `xml:"country,omitempty" json:"country,omitempty"` - - Website string `xml:"website,omitempty" json:"website,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` -} - -type CustomerPrefData struct { - - // name of the pref setting - Name string `xml:"name,omitempty" json:"name,omitempty"` - - // value of the setting - Value string `xml:"value,omitempty" json:"value,omitempty"` - - // Y/N: pref is not explicitly set, this is the default value - Default_ string `xml:"default,omitempty" json:"default,omitempty"` -} - -type CustomerIPACL struct { - - // comma or space-delimited list of netmasks, in CIDR form; no '/' assumes exact address - Netmasks string `xml:"netmasks,omitempty" json:"netmasks,omitempty"` - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // 'web'/'api', default 'web' - Scope string `xml:"scope,omitempty" json:"scope,omitempty"` -} - -type CustomerOracleMetadataData struct { - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // customer id - Cust_id string `xml:"cust_id,omitempty" json:"cust_id,omitempty"` - - // tenant id - Tenant string `xml:"tenant,omitempty" json:"tenant,omitempty"` -} - -type ZoneOracleMetadataData struct { - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // public id - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` - - // zone id - Zone_id string `xml:"zone_id,omitempty" json:"zone_id,omitempty"` -} - -type RedirectData struct { - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata string `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Rtype string `xml:"rtype,omitempty" json:"rtype,omitempty"` - - SubstituteRtype string `xml:"substituteRtype,omitempty" json:"substituteRtype,omitempty"` -} - -type Replacement struct { - Redirects []*RedirectData `xml:"redirects,omitempty" json:"redirects,omitempty"` -} - -type DDNSData struct { - - // an IP address, either v4 or v6 - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // last time this service was update by a Dynamic DNS client - Last_updated string `xml:"last_updated,omitempty" json:"last_updated,omitempty"` - - // count of excessive updates - Abuse_count string `xml:"abuse_count,omitempty" json:"abuse_count,omitempty"` - - // 'Y', 'N' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type UpdateUserPasswordData struct { - Password string `xml:"password,omitempty" json:"password,omitempty"` -} - -type UpdateUser struct { - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` - - Group_name []string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` -} - -type DDNSHostData struct { - Ddns *DDNSData `xml:"ddns,omitempty" json:"ddns,omitempty"` - - New_user *UpdateUser `xml:"new_user,omitempty" json:"new_user,omitempty"` -} - -type FailoverData struct { - - // normally served address - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // 'ip' or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // address or CNAME to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // 'ok', 'trouble', 'failover' - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // 'Y', 'N' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // monitoring changes task - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` - - // Recent monitoring results. This field is returned in responses from the API, it should not be included in requests. - Log []*MonitorLogData `xml:"log,omitempty" json:"log,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type MonitorData struct { - - // HTTP, HTTPS, PING, SMTP, TCP, NONE - Protocol string `xml:"protocol,omitempty" json:"protocol,omitempty"` - - // time between checks, in minutes - Interval int32 `xml:"interval,omitempty" json:"interval,omitempty"` - - // times to retest on failure - Retries int32 `xml:"retries,omitempty" json:"retries,omitempty"` - - // if different from service default - Port int32 `xml:"port,omitempty" json:"port,omitempty"` - - // e.g: http://host/path - Path string `xml:"path,omitempty" json:"path,omitempty"` - - // if different from fqdn - Host string `xml:"host,omitempty" json:"host,omitempty"` - - // check response for specific text - Expected string `xml:"expected,omitempty" json:"expected,omitempty"` - - // additional HTTP headers - Header string `xml:"header,omitempty" json:"header,omitempty"` - - // test timeout - Timeout int32 `xml:"timeout,omitempty" json:"timeout,omitempty"` -} - -type MonitorLogData struct { - - // 'up', 'down', 'unk' - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // more details on error - Message string `xml:"message,omitempty" json:"message,omitempty"` - - // unix timestamp of monitor - Time int32 `xml:"time,omitempty" json:"time,omitempty"` - - // "airport" code - Site_code string `xml:"site_code,omitempty" json:"site_code,omitempty"` -} - -type LoadBalanceData struct { - - // pool of IP addresses to balance - Pool []*LoadBalanceAddress `xml:"pool,omitempty" json:"pool,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // 'ip', 'global', or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' or 'cname', what to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // 'ok', 'trouble', 'failover' - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // 'Y', 'N' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type LoadBalanceAddress struct { - - // an IP address to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` - - // current monitoring status This field is returned in responses from the API, it should not be included in requests. - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // Recent monitoring results for this address. This field is returned in responses from the API, it should not be included in requests. - Log []*MonitorLogData `xml:"log,omitempty" json:"log,omitempty"` -} - -type LoadBalancePoolEntry struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // an IP address to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` - - // current monitoring status This field is returned in responses from the API, it should not be included in requests. - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // Recent monitoring results for this address. This field is returned in responses from the API, it should not be included in requests. - Log []*MonitorLogData `xml:"log,omitempty" json:"log,omitempty"` -} - -type GSLBData struct { - - // per-region addresses and configuration - Region []*GSLBRegion `xml:"region,omitempty" json:"region,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // 'ok', 'trouble', 'failover' - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // 'Y', 'N' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // monitoring changes task - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GSLBRegion struct { - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // 'ip', 'global', or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' or 'cname', what to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // number of 'ok' addresses before region fails over - Min_healthy int32 `xml:"min_healthy,omitempty" json:"min_healthy,omitempty"` - - // pool of IP addresses to balance - Pool []*GSLBAddress `xml:"pool,omitempty" json:"pool,omitempty"` -} - -type GSLBAddress struct { - - // an IP address or FQDN to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` - - // current monitoring status This field is returned in responses from the API, it should not be included in requests. - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // Recent monitoring results for this address. This field is returned in responses from the API, it should not be included in requests. - Log []*MonitorLogData `xml:"log,omitempty" json:"log,omitempty"` -} - -type GSLBRegionData struct { - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // 'ip', 'global', or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' or 'cname', what to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // number of 'ok' addresses before region fails over - Min_healthy int32 `xml:"min_healthy,omitempty" json:"min_healthy,omitempty"` - - // pool of IP addresses to balance - Pool []*GSLBAddress `xml:"pool,omitempty" json:"pool,omitempty"` - - // 'ok', 'trouble', 'failover' - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // monitoring changes task - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GSLBRegionPoolEntry struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // an IP address or FQDN to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` - - // current monitoring status This field is returned in responses from the API, it should not be included in requests. - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // monitoring changes task This field is returned in responses from the API, it should not be included in requests. - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` - - // Recent monitoring results for this address. This field is returned in responses from the API, it should not be included in requests. - Log []*MonitorLogData `xml:"log,omitempty" json:"log,omitempty"` -} - -type RTTMData struct { - - // per-region addresses and configuration - Region []*RTTMRegion `xml:"region,omitempty" json:"region,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // for custom syslog messages - Syslog_rttm_fmt string `xml:"syslog_rttm_fmt,omitempty" json:"syslog_rttm_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // details about performance monitoring - Performance_monitor *MonitorData `xml:"performance_monitor,omitempty" json:"performance_monitor,omitempty"` - - // 'ok', 'unk', 'trouble', 'failover' - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // 'Y', 'N' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // monitoring changes task - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RTTMRegion struct { - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // 'Y' or 'N', if 'Y', region will filled in with global settings - Autopopulate string `xml:"autopopulate,omitempty" json:"autopopulate,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // pool_count, number of addresses to be included in the serve pool - Ep int32 `xml:"ep,omitempty" json:"ep,omitempty"` - - // 'ip', 'global', 'region', default 'global' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' mode, address to serve on failover. For 'region' mode, region_code of the region to failover to. - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // failover_count, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Apmc int32 `xml:"apmc,omitempty" json:"apmc,omitempty"` - - // failover_count2, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Epmc int32 `xml:"epmc,omitempty" json:"epmc,omitempty"` - - // pool of IP addresses to balance - Pool []*RTTMAddress `xml:"pool,omitempty" json:"pool,omitempty"` - - // 'ok, 'unk', 'trouble', 'failover', This field is returned in responses from the API, it should not be included in requests. - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // monitoring changes task This field is returned in responses from the API, it should not be included in requests. - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` -} - -type RTTMAddress struct { - - // an IP address to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` - - // current monitoring status This field is returned in responses from the API, it should not be included in requests. - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // Recent monitoring results for this address. This field is returned in responses from the API, it should not be included in requests. - Log []*MonitorLogData `xml:"log,omitempty" json:"log,omitempty"` -} - -type RTTMLogData struct { - - // zone serial at which this status was made - Serial string `xml:"serial,omitempty" json:"serial,omitempty"` - - // timestamp in UTC at which this status was made - Change_ts string `xml:"change_ts,omitempty" json:"change_ts,omitempty"` - - // type of status change. 'health', 'perf', or 'user' - Change_type string `xml:"change_type,omitempty" json:"change_type,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // 'up', 'trouble', 'failover', or 'reg_remove' - Region_status string `xml:"region_status,omitempty" json:"region_status,omitempty"` - - // If change_type is 'user', the user that made the change - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - // number of addresses in each DNS response - Serve_count string `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // 'A', 'AAAA', or 'CNAME' - Rdata_type string `xml:"rdata_type,omitempty" json:"rdata_type,omitempty"` - - // List of rdata being served for this region - Region_rdata []*RTTMLogRData `xml:"region_rdata,omitempty" json:"region_rdata,omitempty"` -} - -type RTTMLogRData struct { - - // how often this is served relative to others in pool - Weight string `xml:"weight,omitempty" json:"weight,omitempty"` - - Rdata_a *RDataA `xml:"rdata_a,omitempty" json:"rdata_a,omitempty"` - - Rdata_aaaa *RDataAAAA `xml:"rdata_aaaa,omitempty" json:"rdata_aaaa,omitempty"` - - Rdata_cname *RDataCNAME `xml:"rdata_cname,omitempty" json:"rdata_cname,omitempty"` -} - -type RTTMRegionData struct { - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // 'Y' or 'N', if 'Y', region will filled in with global settings - Autopopulate string `xml:"autopopulate,omitempty" json:"autopopulate,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // pool_count, number of addresses to be included in the serve pool - Ep int32 `xml:"ep,omitempty" json:"ep,omitempty"` - - // 'ip', 'global', 'region', default 'global' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' mode, address to serve on failover. For 'region' mode, region_code of the region to failover to. - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // failover_count, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Apmc int32 `xml:"apmc,omitempty" json:"apmc,omitempty"` - - // failover_count2, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Epmc int32 `xml:"epmc,omitempty" json:"epmc,omitempty"` - - // pool of IP addresses to balance - Pool []*RTTMAddress `xml:"pool,omitempty" json:"pool,omitempty"` - - // monitoring changes task This field is returned in responses from the API, it should not be included in requests. - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` - - // 'ok, 'unk', 'trouble', 'failover', - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RTTMRegionPoolEntry struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // an IP address to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` - - // current monitoring status This field is returned in responses from the API, it should not be included in requests. - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // Recent monitoring results for this address. This field is returned in responses from the API, it should not be included in requests. - Log []*MonitorLogData `xml:"log,omitempty" json:"log,omitempty"` - - // monitoring changes task This field is returned in responses from the API, it should not be included in requests. - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` -} - -type HTTPRedirectData struct { - - // URL requests are redirecto to - Url string `xml:"url,omitempty" json:"url,omitempty"` - - // either '301' (temporary) or '302' (permanent) - Code string `xml:"code,omitempty" json:"code,omitempty"` - - // should redirected URL include requested URL - Keep_uri string `xml:"keep_uri,omitempty" json:"keep_uri,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type AdvRedirectRuleData struct { - - // Public ID of rule. - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` - - // either '301' (temporary) or '302' (permanent) - Code string `xml:"code,omitempty" json:"code,omitempty"` - - // host portion of URL to match - Host_prefix string `xml:"host_prefix,omitempty" json:"host_prefix,omitempty"` - - // path portion of URL to match - Path string `xml:"path,omitempty" json:"path,omitempty"` - - // replacement pattern - Url_pattern string `xml:"url_pattern,omitempty" json:"url_pattern,omitempty"` - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // Public ID of next AdvRedirect rule to be processed. (default to end of list) - Next_public_id string `xml:"next_public_id,omitempty" json:"next_public_id,omitempty"` -} - -type AdvRedirectData struct { - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // List of AdvRedirectRules - Rules []*AdvRedirectRuleData `xml:"rules,omitempty" json:"rules,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RDataA struct { - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type RDataAAAA struct { - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type RDataALIAS struct { - Alias string `xml:"alias,omitempty" json:"alias,omitempty"` -} - -type RDataCAA struct { - Flags int32 `xml:"flags,omitempty" json:"flags,omitempty"` - - Tag string `xml:"tag,omitempty" json:"tag,omitempty"` - - Value string `xml:"value,omitempty" json:"value,omitempty"` -} - -type RDataCDNSKEY struct { - Flags int32 `xml:"flags,omitempty" json:"flags,omitempty"` - - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Protocol int32 `xml:"protocol,omitempty" json:"protocol,omitempty"` - - Public_key string `xml:"public_key,omitempty" json:"public_key,omitempty"` -} - -type RDataCDS struct { - Keytag int32 `xml:"keytag,omitempty" json:"keytag,omitempty"` - - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Digtype int32 `xml:"digtype,omitempty" json:"digtype,omitempty"` - - Digest string `xml:"digest,omitempty" json:"digest,omitempty"` -} - -type RDataCERT struct { - Format int32 `xml:"format,omitempty" json:"format,omitempty"` - - Tag int32 `xml:"tag,omitempty" json:"tag,omitempty"` - - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Certificate string `xml:"certificate,omitempty" json:"certificate,omitempty"` -} - -type RDataCNAME struct { - Cname string `xml:"cname,omitempty" json:"cname,omitempty"` -} - -type RDataCSYNC struct { - Soa_serial int32 `xml:"soa_serial,omitempty" json:"soa_serial,omitempty"` - - Flags string `xml:"flags,omitempty" json:"flags,omitempty"` - - Types string `xml:"types,omitempty" json:"types,omitempty"` -} - -type RDataDNSKEY struct { - Flags int32 `xml:"flags,omitempty" json:"flags,omitempty"` - - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Protocol int32 `xml:"protocol,omitempty" json:"protocol,omitempty"` - - Public_key string `xml:"public_key,omitempty" json:"public_key,omitempty"` -} - -type RDataDHCID struct { - Digest string `xml:"digest,omitempty" json:"digest,omitempty"` -} - -type RDataDNAME struct { - Dname string `xml:"dname,omitempty" json:"dname,omitempty"` -} - -type RDataDS struct { - Keytag int32 `xml:"keytag,omitempty" json:"keytag,omitempty"` - - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Digtype int32 `xml:"digtype,omitempty" json:"digtype,omitempty"` - - Digest string `xml:"digest,omitempty" json:"digest,omitempty"` -} - -type RDataIPSECKEY struct { - Precedence int32 `xml:"precedence,omitempty" json:"precedence,omitempty"` - - Gatetype int32 `xml:"gatetype,omitempty" json:"gatetype,omitempty"` - - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Gateway string `xml:"gateway,omitempty" json:"gateway,omitempty"` - - Public_key string `xml:"public_key,omitempty" json:"public_key,omitempty"` -} - -type RDataKEY struct { - Flags int32 `xml:"flags,omitempty" json:"flags,omitempty"` - - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Protocol int32 `xml:"protocol,omitempty" json:"protocol,omitempty"` - - Public_key string `xml:"public_key,omitempty" json:"public_key,omitempty"` -} - -type RDataKX struct { - Preference int32 `xml:"preference,omitempty" json:"preference,omitempty"` - - Exchange string `xml:"exchange,omitempty" json:"exchange,omitempty"` -} - -type RDataLOC struct { - Latitude string `xml:"latitude,omitempty" json:"latitude,omitempty"` - - Longitude string `xml:"longitude,omitempty" json:"longitude,omitempty"` - - Altitude int32 `xml:"altitude,omitempty" json:"altitude,omitempty"` - - Horiz_pre int32 `xml:"horiz_pre,omitempty" json:"horiz_pre,omitempty"` - - Vert_pre int32 `xml:"vert_pre,omitempty" json:"vert_pre,omitempty"` - - Size int32 `xml:"size,omitempty" json:"size,omitempty"` - - Version int32 `xml:"version,omitempty" json:"version,omitempty"` -} - -type RDataMX struct { - Preference int32 `xml:"preference,omitempty" json:"preference,omitempty"` - - Exchange string `xml:"exchange,omitempty" json:"exchange,omitempty"` -} - -type RDataNAPTR struct { - Order int32 `xml:"order,omitempty" json:"order,omitempty"` - - Preference int32 `xml:"preference,omitempty" json:"preference,omitempty"` - - Flags string `xml:"flags,omitempty" json:"flags,omitempty"` - - Services string `xml:"services,omitempty" json:"services,omitempty"` - - Regexp string `xml:"regexp,omitempty" json:"regexp,omitempty"` - - Replacement string `xml:"replacement,omitempty" json:"replacement,omitempty"` -} - -type RDataNS struct { - Nsdname string `xml:"nsdname,omitempty" json:"nsdname,omitempty"` -} - -type RDataNSAP struct { - Nsap string `xml:"nsap,omitempty" json:"nsap,omitempty"` -} - -type RDataPOLICY struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Rtype string `xml:"rtype,omitempty" json:"rtype,omitempty"` - - Api_url string `xml:"api_url,omitempty" json:"api_url,omitempty"` - - Gui_url string `xml:"gui_url,omitempty" json:"gui_url,omitempty"` - - Policy string `xml:"policy,omitempty" json:"policy,omitempty"` -} - -type RDataPTR struct { - Ptrdname string `xml:"ptrdname,omitempty" json:"ptrdname,omitempty"` -} - -type RDataPX struct { - Preference int32 `xml:"preference,omitempty" json:"preference,omitempty"` - - Map822 string `xml:"map822,omitempty" json:"map822,omitempty"` - - Mapx400 string `xml:"mapx400,omitempty" json:"mapx400,omitempty"` -} - -type RDataRP struct { - Mbox string `xml:"mbox,omitempty" json:"mbox,omitempty"` - - Txtdname string `xml:"txtdname,omitempty" json:"txtdname,omitempty"` -} - -type RDataSPF struct { - Txtdata string `xml:"txtdata,omitempty" json:"txtdata,omitempty"` -} - -type RDataSSHFP struct { - Algorithm int32 `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Fptype int32 `xml:"fptype,omitempty" json:"fptype,omitempty"` - - Fingerprint string `xml:"fingerprint,omitempty" json:"fingerprint,omitempty"` -} - -type RDataSRV struct { - Priority int32 `xml:"priority,omitempty" json:"priority,omitempty"` - - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - Port int32 `xml:"port,omitempty" json:"port,omitempty"` - - Target string `xml:"target,omitempty" json:"target,omitempty"` -} - -type RDataTLSA struct { - Cert_usage int32 `xml:"cert_usage,omitempty" json:"cert_usage,omitempty"` - - Selector int32 `xml:"selector,omitempty" json:"selector,omitempty"` - - Match_type int32 `xml:"match_type,omitempty" json:"match_type,omitempty"` - - Certificate string `xml:"certificate,omitempty" json:"certificate,omitempty"` -} - -type RDataTXT struct { - Txtdata string `xml:"txtdata,omitempty" json:"txtdata,omitempty"` -} - -type RDataSOA struct { - Mname string `xml:"mname,omitempty" json:"mname,omitempty"` - - Rname string `xml:"rname,omitempty" json:"rname,omitempty"` - - Serial int32 `xml:"serial,omitempty" json:"serial,omitempty"` - - Refresh int32 `xml:"refresh,omitempty" json:"refresh,omitempty"` - - Retry int32 `xml:"retry,omitempty" json:"retry,omitempty"` - - Expire int32 `xml:"expire,omitempty" json:"expire,omitempty"` - - Minimum int32 `xml:"minimum,omitempty" json:"minimum,omitempty"` -} - -type GenericRData struct { - Rdata_a *RDataA `xml:"rdata_a,omitempty" json:"rdata_a,omitempty"` - - Rdata_aaaa *RDataAAAA `xml:"rdata_aaaa,omitempty" json:"rdata_aaaa,omitempty"` - - Rdata_alias *RDataALIAS `xml:"rdata_alias,omitempty" json:"rdata_alias,omitempty"` - - Rdata_caa *RDataCAA `xml:"rdata_caa,omitempty" json:"rdata_caa,omitempty"` - - Rdata_cdnskey *RDataCDNSKEY `xml:"rdata_cdnskey,omitempty" json:"rdata_cdnskey,omitempty"` - - Rdata_cds *RDataCDS `xml:"rdata_cds,omitempty" json:"rdata_cds,omitempty"` - - Rdata_cert *RDataCERT `xml:"rdata_cert,omitempty" json:"rdata_cert,omitempty"` - - Rdata_cname *RDataCNAME `xml:"rdata_cname,omitempty" json:"rdata_cname,omitempty"` - - Rdata_csync *RDataCSYNC `xml:"rdata_csync,omitempty" json:"rdata_csync,omitempty"` - - Rdata_dhcid *RDataDHCID `xml:"rdata_dhcid,omitempty" json:"rdata_dhcid,omitempty"` - - Rdata_dname *RDataDNAME `xml:"rdata_dname,omitempty" json:"rdata_dname,omitempty"` - - Rdata_dnskey *RDataDNSKEY `xml:"rdata_dnskey,omitempty" json:"rdata_dnskey,omitempty"` - - Rdata_ds *RDataDS `xml:"rdata_ds,omitempty" json:"rdata_ds,omitempty"` - - Rdata_ipseckey *RDataIPSECKEY `xml:"rdata_ipseckey,omitempty" json:"rdata_ipseckey,omitempty"` - - Rdata_key *RDataKEY `xml:"rdata_key,omitempty" json:"rdata_key,omitempty"` - - Rdata_kx *RDataKX `xml:"rdata_kx,omitempty" json:"rdata_kx,omitempty"` - - Rdata_loc *RDataLOC `xml:"rdata_loc,omitempty" json:"rdata_loc,omitempty"` - - Rdata_mx *RDataMX `xml:"rdata_mx,omitempty" json:"rdata_mx,omitempty"` - - Rdata_naptr *RDataNAPTR `xml:"rdata_naptr,omitempty" json:"rdata_naptr,omitempty"` - - Rdata_ns *RDataNS `xml:"rdata_ns,omitempty" json:"rdata_ns,omitempty"` - - Rdata_nsap *RDataNSAP `xml:"rdata_nsap,omitempty" json:"rdata_nsap,omitempty"` - - Rdata_policy *RDataPOLICY `xml:"rdata_policy,omitempty" json:"rdata_policy,omitempty"` - - Rdata_ptr *RDataPTR `xml:"rdata_ptr,omitempty" json:"rdata_ptr,omitempty"` - - Rdata_px *RDataPX `xml:"rdata_px,omitempty" json:"rdata_px,omitempty"` - - Rdata_rp *RDataRP `xml:"rdata_rp,omitempty" json:"rdata_rp,omitempty"` - - Rdata_spf *RDataSPF `xml:"rdata_spf,omitempty" json:"rdata_spf,omitempty"` - - Rdata_sshfp *RDataSSHFP `xml:"rdata_sshfp,omitempty" json:"rdata_sshfp,omitempty"` - - Rdata_srv *RDataSRV `xml:"rdata_srv,omitempty" json:"rdata_srv,omitempty"` - - Rdata_tlsa *RDataTLSA `xml:"rdata_tlsa,omitempty" json:"rdata_tlsa,omitempty"` - - Rdata_txt *RDataTXT `xml:"rdata_txt,omitempty" json:"rdata_txt,omitempty"` - - Rdata_soa *RDataSOA `xml:"rdata_soa,omitempty" json:"rdata_soa,omitempty"` -} - -type QNames struct { - Names []string `xml:"names,omitempty" json:"names,omitempty"` -} - -type ANYRecordData struct { - A_records []*ARecordData `xml:"a_records,omitempty" json:"a_records,omitempty"` - - Aaaa_records []*AAAARecordData `xml:"aaaa_records,omitempty" json:"aaaa_records,omitempty"` - - Alias_records []*ALIASRecordData `xml:"alias_records,omitempty" json:"alias_records,omitempty"` - - Caa_records []*CAARecordData `xml:"caa_records,omitempty" json:"caa_records,omitempty"` - - Cdnskey_records []*CDNSKEYRecordData `xml:"cdnskey_records,omitempty" json:"cdnskey_records,omitempty"` - - Cds_records []*CDSRecordData `xml:"cds_records,omitempty" json:"cds_records,omitempty"` - - Cert_records []*CERTRecordData `xml:"cert_records,omitempty" json:"cert_records,omitempty"` - - Cname_records []*CNAMERecordData `xml:"cname_records,omitempty" json:"cname_records,omitempty"` - - Csync_records []*CSYNCRecordData `xml:"csync_records,omitempty" json:"csync_records,omitempty"` - - Dhcid_records []*DHCIDRecordData `xml:"dhcid_records,omitempty" json:"dhcid_records,omitempty"` - - Dname_records []*DNAMERecordData `xml:"dname_records,omitempty" json:"dname_records,omitempty"` - - Dnskey_records []*DNSKEYRecordData `xml:"dnskey_records,omitempty" json:"dnskey_records,omitempty"` - - Ds_records []*DSRecordData `xml:"ds_records,omitempty" json:"ds_records,omitempty"` - - Ipseckey_records []*IPSECKEYRecordData `xml:"ipseckey_records,omitempty" json:"ipseckey_records,omitempty"` - - Key_records []*KEYRecordData `xml:"key_records,omitempty" json:"key_records,omitempty"` - - Kx_records []*KXRecordData `xml:"kx_records,omitempty" json:"kx_records,omitempty"` - - Loc_records []*LOCRecordData `xml:"loc_records,omitempty" json:"loc_records,omitempty"` - - Mx_records []*MXRecordData `xml:"mx_records,omitempty" json:"mx_records,omitempty"` - - Naptr_records []*NAPTRRecordData `xml:"naptr_records,omitempty" json:"naptr_records,omitempty"` - - Nsap_records []*NSAPRecordData `xml:"nsap_records,omitempty" json:"nsap_records,omitempty"` - - Policy_records []*POLICYRecordData `xml:"policy_records,omitempty" json:"policy_records,omitempty"` - - Ptr_records []*PTRRecordData `xml:"ptr_records,omitempty" json:"ptr_records,omitempty"` - - Px_records []*PXRecordData `xml:"px_records,omitempty" json:"px_records,omitempty"` - - Rp_records []*RPRecordData `xml:"rp_records,omitempty" json:"rp_records,omitempty"` - - Spf_records []*SPFRecordData `xml:"spf_records,omitempty" json:"spf_records,omitempty"` - - Srv_records []*SRVRecordData `xml:"srv_records,omitempty" json:"srv_records,omitempty"` - - Sshfp_records []*SSHFPRecordData `xml:"sshfp_records,omitempty" json:"sshfp_records,omitempty"` - - Tlsa_records []*TLSARecordData `xml:"tlsa_records,omitempty" json:"tlsa_records,omitempty"` - - Txt_records []*TXTRecordData `xml:"txt_records,omitempty" json:"txt_records,omitempty"` - - Soa_records []*SOARecordData `xml:"soa_records,omitempty" json:"soa_records,omitempty"` - - Ns_records []*NSRecordData `xml:"ns_records,omitempty" json:"ns_records,omitempty"` -} - -type ANYRData struct { - A_rdata []*RDataA `xml:"a_rdata,omitempty" json:"a_rdata,omitempty"` - - Aaaa_rdata []*RDataAAAA `xml:"aaaa_rdata,omitempty" json:"aaaa_rdata,omitempty"` - - Alias_rdata []*RDataALIAS `xml:"alias_rdata,omitempty" json:"alias_rdata,omitempty"` - - Caa_rdata []*RDataCAA `xml:"caa_rdata,omitempty" json:"caa_rdata,omitempty"` - - Cdnskey_rdata []*RDataCDNSKEY `xml:"cdnskey_rdata,omitempty" json:"cdnskey_rdata,omitempty"` - - Cds_rdata []*RDataCDS `xml:"cds_rdata,omitempty" json:"cds_rdata,omitempty"` - - Cert_rdata []*RDataCERT `xml:"cert_rdata,omitempty" json:"cert_rdata,omitempty"` - - Cname_rdata []*RDataCNAME `xml:"cname_rdata,omitempty" json:"cname_rdata,omitempty"` - - Csync_rdata []*RDataCSYNC `xml:"csync_rdata,omitempty" json:"csync_rdata,omitempty"` - - Dhcid_rdata []*RDataDHCID `xml:"dhcid_rdata,omitempty" json:"dhcid_rdata,omitempty"` - - Dname_rdata []*RDataDNAME `xml:"dname_rdata,omitempty" json:"dname_rdata,omitempty"` - - Dnskey_rdata []*RDataDNSKEY `xml:"dnskey_rdata,omitempty" json:"dnskey_rdata,omitempty"` - - Ds_rdata []*RDataDS `xml:"ds_rdata,omitempty" json:"ds_rdata,omitempty"` - - Ipseckey_rdata []*RDataIPSECKEY `xml:"ipseckey_rdata,omitempty" json:"ipseckey_rdata,omitempty"` - - Key_rdata []*RDataKEY `xml:"key_rdata,omitempty" json:"key_rdata,omitempty"` - - Kx_rdata []*RDataKX `xml:"kx_rdata,omitempty" json:"kx_rdata,omitempty"` - - Loc_rdata []*RDataLOC `xml:"loc_rdata,omitempty" json:"loc_rdata,omitempty"` - - Mx_rdata []*RDataMX `xml:"mx_rdata,omitempty" json:"mx_rdata,omitempty"` - - Naptr_rdata []*RDataNAPTR `xml:"naptr_rdata,omitempty" json:"naptr_rdata,omitempty"` - - Nsap_rdata []*RDataNSAP `xml:"nsap_rdata,omitempty" json:"nsap_rdata,omitempty"` - - Policy_rdata []*RDataPOLICY `xml:"policy_rdata,omitempty" json:"policy_rdata,omitempty"` - - Ptr_rdata []*RDataPTR `xml:"ptr_rdata,omitempty" json:"ptr_rdata,omitempty"` - - Px_rdata []*RDataPX `xml:"px_rdata,omitempty" json:"px_rdata,omitempty"` - - Rp_rdata []*RDataRP `xml:"rp_rdata,omitempty" json:"rp_rdata,omitempty"` - - Spf_rdata []*RDataSPF `xml:"spf_rdata,omitempty" json:"spf_rdata,omitempty"` - - Srv_rdata []*RDataSRV `xml:"srv_rdata,omitempty" json:"srv_rdata,omitempty"` - - Sshfp_rdata []*RDataSSHFP `xml:"sshfp_rdata,omitempty" json:"sshfp_rdata,omitempty"` - - Tlsa_rdata []*RDataTLSA `xml:"tlsa_rdata,omitempty" json:"tlsa_rdata,omitempty"` - - Txt_rdata []*RDataTXT `xml:"txt_rdata,omitempty" json:"txt_rdata,omitempty"` - - Soa_rdata []*RDataSOA `xml:"soa_rdata,omitempty" json:"soa_rdata,omitempty"` - - Ns_rdata []*RDataNS `xml:"ns_rdata,omitempty" json:"ns_rdata,omitempty"` -} - -type ANYOneRData struct { - A_rdata *RDataA `xml:"a_rdata,omitempty" json:"a_rdata,omitempty"` - - Aaaa_rdata *RDataAAAA `xml:"aaaa_rdata,omitempty" json:"aaaa_rdata,omitempty"` - - Alias_rdata *RDataALIAS `xml:"alias_rdata,omitempty" json:"alias_rdata,omitempty"` - - Caa_rdata *RDataCAA `xml:"caa_rdata,omitempty" json:"caa_rdata,omitempty"` - - Cdnskey_rdata *RDataCDNSKEY `xml:"cdnskey_rdata,omitempty" json:"cdnskey_rdata,omitempty"` - - Cds_rdata *RDataCDS `xml:"cds_rdata,omitempty" json:"cds_rdata,omitempty"` - - Cert_rdata *RDataCERT `xml:"cert_rdata,omitempty" json:"cert_rdata,omitempty"` - - Cname_rdata *RDataCNAME `xml:"cname_rdata,omitempty" json:"cname_rdata,omitempty"` - - Csync_rdata *RDataCSYNC `xml:"csync_rdata,omitempty" json:"csync_rdata,omitempty"` - - Dhcid_rdata *RDataDHCID `xml:"dhcid_rdata,omitempty" json:"dhcid_rdata,omitempty"` - - Dname_rdata *RDataDNAME `xml:"dname_rdata,omitempty" json:"dname_rdata,omitempty"` - - Dnskey_rdata *RDataDNSKEY `xml:"dnskey_rdata,omitempty" json:"dnskey_rdata,omitempty"` - - Ds_rdata *RDataDS `xml:"ds_rdata,omitempty" json:"ds_rdata,omitempty"` - - Ipseckey_rdata *RDataIPSECKEY `xml:"ipseckey_rdata,omitempty" json:"ipseckey_rdata,omitempty"` - - Key_rdata *RDataKEY `xml:"key_rdata,omitempty" json:"key_rdata,omitempty"` - - Kx_rdata *RDataKX `xml:"kx_rdata,omitempty" json:"kx_rdata,omitempty"` - - Loc_rdata *RDataLOC `xml:"loc_rdata,omitempty" json:"loc_rdata,omitempty"` - - Mx_rdata *RDataMX `xml:"mx_rdata,omitempty" json:"mx_rdata,omitempty"` - - Naptr_rdata *RDataNAPTR `xml:"naptr_rdata,omitempty" json:"naptr_rdata,omitempty"` - - Nsap_rdata *RDataNSAP `xml:"nsap_rdata,omitempty" json:"nsap_rdata,omitempty"` - - Policy_rdata *RDataPOLICY `xml:"policy_rdata,omitempty" json:"policy_rdata,omitempty"` - - Ptr_rdata *RDataPTR `xml:"ptr_rdata,omitempty" json:"ptr_rdata,omitempty"` - - Px_rdata *RDataPX `xml:"px_rdata,omitempty" json:"px_rdata,omitempty"` - - Rp_rdata *RDataRP `xml:"rp_rdata,omitempty" json:"rp_rdata,omitempty"` - - Spf_rdata *RDataSPF `xml:"spf_rdata,omitempty" json:"spf_rdata,omitempty"` - - Srv_rdata *RDataSRV `xml:"srv_rdata,omitempty" json:"srv_rdata,omitempty"` - - Sshfp_rdata *RDataSSHFP `xml:"sshfp_rdata,omitempty" json:"sshfp_rdata,omitempty"` - - Tlsa_rdata *RDataTLSA `xml:"tlsa_rdata,omitempty" json:"tlsa_rdata,omitempty"` - - Txt_rdata *RDataTXT `xml:"txt_rdata,omitempty" json:"txt_rdata,omitempty"` - - Soa_rdata *RDataSOA `xml:"soa_rdata,omitempty" json:"soa_rdata,omitempty"` - - Ns_rdata *RDataNS `xml:"ns_rdata,omitempty" json:"ns_rdata,omitempty"` -} - -type ZoneChangeData struct { - Id int64 `xml:"id,omitempty" json:"id,omitempty"` - - User_id int64 `xml:"user_id,omitempty" json:"user_id,omitempty"` - - Rdata_type string `xml:"rdata_type,omitempty" json:"rdata_type,omitempty"` - - Rdata *GenericRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Serial int32 `xml:"serial,omitempty" json:"serial,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type ZoneNoteData struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Serial int32 `xml:"serial,omitempty" json:"serial,omitempty"` - - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - Note string `xml:"note,omitempty" json:"note,omitempty"` - - Timestamp string `xml:"timestamp,omitempty" json:"timestamp,omitempty"` -} - -type ZoneTransferStatus struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Master_ip string `xml:"master_ip,omitempty" json:"master_ip,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Message string `xml:"message,omitempty" json:"message,omitempty"` -} - -type ZoneConfigOptionData struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Value string `xml:"value,omitempty" json:"value,omitempty"` - - Target string `xml:"target,omitempty" json:"target,omitempty"` -} - -type PublishZoneData struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Serial int32 `xml:"serial,omitempty" json:"serial,omitempty"` - - Serial_style string `xml:"serial_style,omitempty" json:"serial_style,omitempty"` - - Zone_type string `xml:"zone_type,omitempty" json:"zone_type,omitempty"` - - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` -} - -type IPTrackData struct { - - // A, Dynamic_A, AAAA, Dynamic_AAAA - Record_types []string `xml:"record_types,omitempty" json:"record_types,omitempty"` - - // List of hostnames to watch for records - Hosts []string `xml:"hosts,omitempty" json:"hosts,omitempty"` - - // 'match', 'default', or a valid ttl - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // Mask that records should match - Netmask string `xml:"netmask,omitempty" json:"netmask,omitempty"` - - Iptrack_id int64 `xml:"iptrack_id,omitempty" json:"iptrack_id,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DNSSECData struct { - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // , contact that gets key notifications - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - Keys []*DNSSECKey `xml:"keys,omitempty" json:"keys,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type DNSSECKey struct { - - // 'KSK' or 'ZSK' - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - // 'RSA/SHA-1', 'RSA/SHA-256', 'RSA/SHA-512', 'DSA' - Algorithm string `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Bits string `xml:"bits,omitempty" json:"bits,omitempty"` - - Start_ts int32 `xml:"start_ts,omitempty" json:"start_ts,omitempty"` - - Lifetime int32 `xml:"lifetime,omitempty" json:"lifetime,omitempty"` - - Overlap int32 `xml:"overlap,omitempty" json:"overlap,omitempty"` - - Expire_ts int32 `xml:"expire_ts,omitempty" json:"expire_ts,omitempty"` - - // Only for updates: 'rollover', 'rollover_now', 'remove' - Action string `xml:"action,omitempty" json:"action,omitempty"` - - Dnssec_key_id int64 `xml:"dnssec_key_id,omitempty" json:"dnssec_key_id,omitempty"` - - // This field is returned in responses from the API, it should not be included in requests. - Dnskey *RDataDNSKEY `xml:"dnskey,omitempty" json:"dnskey,omitempty"` - - // preserved for compatibility This field is returned in responses from the API, it should not be included in requests. - Ds *RDataDS `xml:"ds,omitempty" json:"ds,omitempty"` - - All_ds []*RDataDS `xml:"all_ds,omitempty" json:"all_ds,omitempty"` -} - -type DNSSECTimelineEvent struct { - Scheduled_ts int32 `xml:"scheduled_ts,omitempty" json:"scheduled_ts,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Event string `xml:"event,omitempty" json:"event,omitempty"` - - Message string `xml:"message,omitempty" json:"message,omitempty"` - - Send_notify string `xml:"send_notify,omitempty" json:"send_notify,omitempty"` - - User string `xml:"user,omitempty" json:"user,omitempty"` - - Dnssec_key_id int64 `xml:"dnssec_key_id,omitempty" json:"dnssec_key_id,omitempty"` -} - -type TaskArgData struct { - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Value string `xml:"value,omitempty" json:"value,omitempty"` -} - -type TaskIDData struct { - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` -} - -type TaskData struct { - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` - - // identifies the task operation - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Zone_name string `xml:"zone_name,omitempty" json:"zone_name,omitempty"` - - // ready running waiting complete failed canceled stalled - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // in a multi-step process, how far along - Step_count int32 `xml:"step_count,omitempty" json:"step_count,omitempty"` - - // total number of steps in multi-step process - Total_steps int32 `xml:"total_steps,omitempty" json:"total_steps,omitempty"` - - // Y/N - does this task block further zone operations? - Blocking string `xml:"blocking,omitempty" json:"blocking,omitempty"` - - Message string `xml:"message,omitempty" json:"message,omitempty"` - - Debug string `xml:"debug,omitempty" json:"debug,omitempty"` - - Created_ts int64 `xml:"created_ts,omitempty" json:"created_ts,omitempty"` - - Modified_ts int64 `xml:"modified_ts,omitempty" json:"modified_ts,omitempty"` - - // other arguments passed to the task - Args []*TaskArgData `xml:"args,omitempty" json:"args,omitempty"` -} - -type ExtNameserverData struct { - - // can be empty or 'default' - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // Y/N - does this block requests or add them - Deny string `xml:"deny,omitempty" json:"deny,omitempty"` - - Hosts []*ExtNSEntry `xml:"hosts,omitempty" json:"hosts,omitempty"` - - Tsig_key_name string `xml:"tsig_key_name,omitempty" json:"tsig_key_name,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type ExtNSEntry struct { - - // address or CIDR - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // Y/N - do we send NOTIFYs to this host? - Notifies string `xml:"notifies,omitempty" json:"notifies,omitempty"` - - // Y/N - do we accept [AI]XFRs from this host? - Transfers string `xml:"transfers,omitempty" json:"transfers,omitempty"` -} - -type ErrorResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ErrorResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - // should be empty and can be ignored - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetJobRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetJobRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` -} - -type GetJobResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetJobResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - // Contains the response data. Can be any type as GetJob is request-agnostic. - Data interface{} `xml:"data,omitempty" json:"data,omitempty"` -} - -type SessionLoginRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionLoginRequest"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` -} - -type SessionLoginResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionLoginResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - // identifies your session token (needed for all other Dynect API calls) and the API protocol version - Data *SessionLoginData `xml:"data,omitempty" json:"data,omitempty"` -} - -type SessionLogoutRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionLogoutRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type SessionLogoutResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionLogoutResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SessionIsAliveRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionIsAliveRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type SessionIsAliveResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionIsAliveResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SessionKeepAliveRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionKeepAliveRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type SessionKeepAliveResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SessionKeepAliveResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ScopeInRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ScopeInRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - // defaults to admin user - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type ScopeInResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ScopeInResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ScopeAsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ScopeAsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - // defaults to admin user - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type ScopeAsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ScopeAsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type UnscopeRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UnscopeRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type UnscopeResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UnscopeResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetQueryStatsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetQueryStatsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // The timestamp indicating the beginning of the period to report on - Start_ts int32 `xml:"start_ts,omitempty" json:"start_ts,omitempty"` - - // The timestamp indicating the end of the period to report on - End_ts int32 `xml:"end_ts,omitempty" json:"end_ts,omitempty"` - - // The fields to break down the data with - Breakdown []string `xml:"breakdown,omitempty" json:"breakdown,omitempty"` - - // A list of specific hostnames to report on. A hostname beginning with '!' will cause that hostname to be excluded - Hosts []string `xml:"hosts,omitempty" json:"hosts,omitempty"` - - // A list of specific nameservers to report on. A nameserver beginning with '!' will cause that nameserver to be excluded - Nameservers []string `xml:"nameservers,omitempty" json:"nameservers,omitempty"` - - // A list of record types to report on. A record type beginning with '!' will cause that record type to be excluded - Rrecs []string `xml:"rrecs,omitempty" json:"rrecs,omitempty"` - - // A list of zone names to report on. A zone name beginning with '!' will cause that zone to be excluded. - Zones []string `xml:"zones,omitempty" json:"zones,omitempty"` -} - -type GetQueryStatsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetQueryStatsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - // The CSV data containing the requested statistics - Data *QueryStatsData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateGeoRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGeoRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the service we want to create - Name string `xml:"name,omitempty" json:"name,omitempty"` - - // List of region groups that contain a list of countries and records to be served - Groups []*GeoRegionGroup `xml:"groups,omitempty" json:"groups,omitempty"` - - // List of zone name, node name pairs to link a node to the Geo Service - Nodes []*GeoNode `xml:"nodes,omitempty" json:"nodes,omitempty"` - - // Default TTL for records - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type CreateGeoResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGeoResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateGeoRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGeoRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to update - Name string `xml:"name,omitempty" json:"name,omitempty"` - - // The new name to assign to the Geo Service - New_name string `xml:"new_name,omitempty" json:"new_name,omitempty"` - - // List of region groups that contain a list of countries and records to be served - Groups []*GeoRegionGroup `xml:"groups,omitempty" json:"groups,omitempty"` - - // List of zone name, node name pairs to link a node to the Geo Service - Nodes []*GeoNode `xml:"nodes,omitempty" json:"nodes,omitempty"` - - // Default TTL for records - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateGeoResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGeoResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetGeosRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGeosRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name (partial) of the Geo Service to find - Name string `xml:"name,omitempty" json:"name,omitempty"` - - // Name (partial) of the Geo Region Group to find - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` -} - -type GetGeosResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGeosResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneGeoRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGeoRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name (partial) of the Geo Service to find - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type GetOneGeoResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGeoResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneGeoRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGeoRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to delete - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type DeleteOneGeoResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGeoResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateGeoRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateGeoRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to activate - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type ActivateGeoResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateGeoResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateGeoRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateGeoRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to deactivate - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type DeactivateGeoResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateGeoResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateGeoRegionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGeoRegionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to update - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` - - // , Name of the Region Group - Name string `xml:"name,omitempty" json:"name,omitempty"` - - // Rdata to update the Region Group with - Rdata *ANYRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // List of countries to update the Region Group with - Countries []string `xml:"countries,omitempty" json:"countries,omitempty"` - - // Optional weights to accompany the rdata - Weight *WeightData `xml:"weight,omitempty" json:"weight,omitempty"` - - // Optional serve counts to accompany the rdata - Serve_count *ServeCountData `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // Optional Default TTL values for each record - Ttl *TTLData `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // Optional labels for the rdata - Label *LabelData `xml:"label,omitempty" json:"label,omitempty"` -} - -type CreateGeoRegionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGeoRegionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateGeoRegionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGeoRegionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to update - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` - - // , Name of the Region Group - Name string `xml:"name,omitempty" json:"name,omitempty"` - - // Rdata to update the Region Group with - Rdata *ANYRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // List of countries to update the Region Group with - Countries []string `xml:"countries,omitempty" json:"countries,omitempty"` - - // Optional weights to accompany the rdata - Weight *WeightData `xml:"weight,omitempty" json:"weight,omitempty"` - - // Optional serve counts to accompany the rdata - Serve_count *ServeCountData `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // Optional Default TTL values for each record - Ttl *TTLData `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // Optional labels for the rdata - Label *LabelData `xml:"label,omitempty" json:"label,omitempty"` -} - -type UpdateGeoRegionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGeoRegionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneGeoRegionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGeoRegionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to update - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` - - // , Name of the Region Group - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type DeleteOneGeoRegionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGeoRegionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetGeoRegionGroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGeoRegionGroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to update - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` -} - -type GetGeoRegionGroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGeoRegionGroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*GeoRegionGroupData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneGeoRegionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGeoRegionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to update - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` - - // , Name of the Region Group - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type GetOneGeoRegionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGeoRegionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GeoRegionGroupData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateGeoNodeRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGeoNodeRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to add the nodes to - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CreateGeoNodeResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGeoNodeResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *Geo `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneGeoNodeRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGeoNodeRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service to delete the nodes from - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteOneGeoNodeResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGeoNodeResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetGeoNodesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGeoNodesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Name of the Geo Service - Service_name string `xml:"service_name,omitempty" json:"service_name,omitempty"` -} - -type GetGeoNodesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGeoNodesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSFRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // DSF Label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Default TTL to be used in this service - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // A list of fqdn,zone pairs to identify nodes to attach - Nodes []*DSFNode `xml:"nodes,omitempty" json:"nodes,omitempty"` - - // A list of DSF Rulesets defined for the service - Rulesets []*DSFRuleset `xml:"rulesets,omitempty" json:"rulesets,omitempty"` - - // A list of notifier links - Notifiers []*NotifierLink `xml:"notifiers,omitempty" json:"notifiers,omitempty"` - - // If 'Y', service will be published on creation - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type CreateDSFResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF service to update - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // A new label for the service - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Default TTL to be used - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // A list of fqdn,zone pairs to identify nodes to attach - Nodes []*DSFNode `xml:"nodes,omitempty" json:"nodes,omitempty"` - - Rulesets []*DSFRuleset `xml:"rulesets,omitempty" json:"rulesets,omitempty"` - - // A list of notifier links - Notifiers []*NotifierLink `xml:"notifiers,omitempty" json:"notifiers,omitempty"` - - // If true, the service is immediately published - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type UpdateDSFResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label, ID, or wildcard - Cust string `xml:"cust,omitempty" json:"cust,omitempty"` - - // label or ID - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // wildcard - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // linker - Linker string `xml:"linker,omitempty" json:"linker,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetDSFsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFNotifiersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFNotifiersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Identifier for DSF service to search on - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` -} - -type GetDSFNotifiersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFNotifiersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NotifierDataAlt `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF service to delete - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` -} - -type DeleteOneDSFResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSFRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label or ID - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetOneDSFResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RevertDSFRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RevertDSFRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label or ID - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` -} - -type RevertDSFResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RevertDSFResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFData `xml:"data,omitempty" json:"data,omitempty"` -} - -type PublishDSFRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ PublishDSFRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label or ID - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type PublishDSFResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ PublishDSFResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFData `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddDSFNotifierRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDSFNotifierRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Identifier for DSF service to search on - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Public_id of the Notifier to link to - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` - - // filters on when services should fire the notifier - Filters []string `xml:"filters,omitempty" json:"filters,omitempty"` - - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type AddDSFNotifierResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDSFNotifierResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NotifierLinkData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemoveDSFNotifierRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveDSFNotifierRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Identifier for DSF service to search on - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Public_id of the Notifier to link to - Link_id string `xml:"link_id,omitempty" json:"link_id,omitempty"` - - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type RemoveDSFNotifierResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveDSFNotifierResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NotifierLinkData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSFRulesetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRulesetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Ruleset label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // The type of criteria contained within this Pool - Criteria_type string `xml:"criteria_type,omitempty" json:"criteria_type,omitempty"` - - // Required based on criteria_type. Filtered in API/BLL - Criteria *DSFCriteria `xml:"criteria,omitempty" json:"criteria,omitempty"` - - // Where in the chain does the ruleset land. Defautls to the last. - Ordering string `xml:"ordering,omitempty" json:"ordering,omitempty"` - - // A list of DSF Reponse Pools that comprise the Ruleset - Response_pools []*DSFResponsePool `xml:"response_pools,omitempty" json:"response_pools,omitempty"` - - // boolean - immediately save change and publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type CreateDSFRulesetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRulesetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRulesetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFRulesetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRulesetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID of the ruleset to update - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - // Ruleset label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // The type of criteria contained within this Pool - Criteria_type string `xml:"criteria_type,omitempty" json:"criteria_type,omitempty"` - - // Required based on criteria_type. Filtered in API/BLL - Criteria *DSFCriteria `xml:"criteria,omitempty" json:"criteria,omitempty"` - - // Where in the chain does the ruleset land. Defautls to the last. - Ordering string `xml:"ordering,omitempty" json:"ordering,omitempty"` - - // A list of DSF Reponse Pools that comprise the Ruleset - Response_pools []*DSFResponsePool `xml:"response_pools,omitempty" json:"response_pools,omitempty"` - - // boolean - immediately save change and publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type UpdateDSFRulesetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRulesetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRulesetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFRulesetsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRulesetsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Ruleset label to search on. Can be wildcarded - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Can be wildcarded...must be string representation - Criteria string `xml:"criteria,omitempty" json:"criteria,omitempty"` - - // The type of criteria contained within this Pool - Criteria_type string `xml:"criteria_type,omitempty" json:"criteria_type,omitempty"` - - // Where in the chain does the ruleset land. Defautls to the last. - Ordering string `xml:"ordering,omitempty" json:"ordering,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetDSFRulesetsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRulesetsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFRulesetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSFRulesetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRulesetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID of the ruleset to update - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetOneDSFRulesetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRulesetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRulesetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFRulesetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRulesetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID of the ruleset to update - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - // boolean - immediately save change and publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type DeleteOneDSFRulesetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRulesetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRulesetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSFResponsePoolRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFResponsePoolRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Response Pool label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Core_set_count string `xml:"core_set_count,omitempty" json:"core_set_count,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - // Defaults to true - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - // ID or label of the DSF Ruleset to join - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - // Index within the specified DSF Ruleset - Index string `xml:"index,omitempty" json:"index,omitempty"` - - Rs_chains []*DSFRecordSetFailoverChain `xml:"rs_chains,omitempty" json:"rs_chains,omitempty"` - - // boolean - immediately save change and publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type CreateDSFResponsePoolResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFResponsePoolResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFResponsePoolData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFResponsePoolRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFResponsePoolRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the Response Pool to update - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - // Response Pool label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Core_set_count string `xml:"core_set_count,omitempty" json:"core_set_count,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - // Defaults to true - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - // Entire chain must be specified - Rs_chains []*DSFRecordSetFailoverChain `xml:"rs_chains,omitempty" json:"rs_chains,omitempty"` - - // ID or label of the DSF Ruleset to join - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - // If true, removes record-sets that are no longer referenced by anyone - Remove_orphans string `xml:"remove_orphans,omitempty" json:"remove_orphans,omitempty"` - - // boolean - immediately save change and publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type UpdateDSFResponsePoolResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFResponsePoolResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFResponsePoolData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFResponsePoolsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFResponsePoolsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // ID or label of a DSF Ruleset that could contain - Dsf_ruleset_id string `xml:"dsf_ruleset_id,omitempty" json:"dsf_ruleset_id,omitempty"` - - Core_set_count string `xml:"core_set_count,omitempty" json:"core_set_count,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // bool, if true, finds pools that do not exist in any Rulesets - No_ruleset string `xml:"no_ruleset,omitempty" json:"no_ruleset,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetDSFResponsePoolsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFResponsePoolsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFResponsePoolData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSFResponsePoolRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFResponsePoolRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or the label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the desired response pool - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetOneDSFResponsePoolResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFResponsePoolResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFResponsePoolData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFResponsePoolRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFResponsePoolRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or the label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the desired response pool - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - // If 'Y', Pool will be deleted on execution - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type DeleteOneDSFResponsePoolResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFResponsePoolResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFResponsePoolData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSFRecordSetFailoverChainRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRecordSetFailoverChainRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID of the DSF Response Pool that the Rec Set Fail chain belongs to - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - // Label of the DSF Record Set Failover Chain - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Optional, defaults to false, indicates whether enclosed Record Sets are Core - Core string `xml:"core,omitempty" json:"core,omitempty"` - - // A list of record sets to be included in this chain - Record_sets []*DSFRecordSet `xml:"record_sets,omitempty" json:"record_sets,omitempty"` - - // If 'Y', RS Chain will be deleted on execution - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type CreateDSFRecordSetFailoverChainResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRecordSetFailoverChainResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetFailoverChainData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFRecordSetFailoverChainRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRecordSetFailoverChainRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the DSF Rec Set Failover Chain - Dsf_record_set_failover_chain_id string `xml:"dsf_record_set_failover_chain_id,omitempty" json:"dsf_record_set_failover_chain_id,omitempty"` - - // Label of the DSF Record Set Failover Chain - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Optional, defaults to false, indicates whether enclosed Record Sets are Core - Core string `xml:"core,omitempty" json:"core,omitempty"` - - // A list of record sets to be included in this chain - Record_sets []*DSFRecordSet `xml:"record_sets,omitempty" json:"record_sets,omitempty"` - - // If 'Y', RS Chain will be deleted on execution - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type UpdateDSFRecordSetFailoverChainResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRecordSetFailoverChainResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetFailoverChainData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFRecordSetFailoverChainsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRecordSetFailoverChainsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the DSF Response Pool that the Rec Set Fail chain belongs to - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - // Label of the DSF Record Set Failover Chain - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Search for core DSF Record Set Failover Chains that are core - Core string `xml:"core,omitempty" json:"core,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetDSFRecordSetFailoverChainsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRecordSetFailoverChainsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFRecordSetFailoverChainData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSFRecordSetFailoverChainRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRecordSetFailoverChainRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the DSF Rec Set Failover Chain - Dsf_record_set_failover_chain_id string `xml:"dsf_record_set_failover_chain_id,omitempty" json:"dsf_record_set_failover_chain_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetOneDSFRecordSetFailoverChainResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRecordSetFailoverChainResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetFailoverChainData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFRecordSetFailoverChainRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRecordSetFailoverChainRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the DSF Rec Set Failover Chain - Dsf_record_set_failover_chain_id string `xml:"dsf_record_set_failover_chain_id,omitempty" json:"dsf_record_set_failover_chain_id,omitempty"` - - // If 'Y', Pool will be deleted on execution - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type DeleteOneDSFRecordSetFailoverChainResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRecordSetFailoverChainResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetFailoverChainData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSFRecordSetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRecordSetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // class of rdata that the set will contain - Rdata_class string `xml:"rdata_class,omitempty" json:"rdata_class,omitempty"` - - // Record Set label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // ID or label of the associated monitor - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Serve_count string `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - Fail_count string `xml:"fail_count,omitempty" json:"fail_count,omitempty"` - - Trouble_count string `xml:"trouble_count,omitempty" json:"trouble_count,omitempty"` - - Torpidity_max string `xml:"torpidity_max,omitempty" json:"torpidity_max,omitempty"` - - // list of hashes that contain information to create DSF Records - Records []*DSFRecord `xml:"records,omitempty" json:"records,omitempty"` - - // ID or label to associate the new RS with an existing RP - Dsf_record_set_failover_chain_id string `xml:"dsf_record_set_failover_chain_id,omitempty" json:"dsf_record_set_failover_chain_id,omitempty"` - - // Index of the RS in the specified chain - Index string `xml:"index,omitempty" json:"index,omitempty"` - - // ID or label to associate the new RS with an existing RP - Dsf_response_pool_id string `xml:"dsf_response_pool_id,omitempty" json:"dsf_response_pool_id,omitempty"` - - // Defaults to true - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - // boolean - immediately save change and publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type CreateDSFRecordSetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRecordSetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFRecordSetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRecordSetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the DSF Record Set - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - // new label for the DSF Record Set - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // ID or label of the associated monitor - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Serve_count string `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - Fail_count string `xml:"fail_count,omitempty" json:"fail_count,omitempty"` - - Trouble_count string `xml:"trouble_count,omitempty" json:"trouble_count,omitempty"` - - Torpidity_max string `xml:"torpidity_max,omitempty" json:"torpidity_max,omitempty"` - - // Defaults to true - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - // hash of information to create DSF Records - Records []*DSFRecord `xml:"records,omitempty" json:"records,omitempty"` - - // boolean - immediately save change and publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type UpdateDSFRecordSetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRecordSetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSFRecordSetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRecordSetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the DSF Record Set - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetOneDSFRecordSetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRecordSetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFRecordSetsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRecordSetsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Record Set label - can be wildcarded - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Serve_count string `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - Fail_count string `xml:"fail_count,omitempty" json:"fail_count,omitempty"` - - Trouble_count string `xml:"trouble_count,omitempty" json:"trouble_count,omitempty"` - - Torpidity_max string `xml:"torpidity_max,omitempty" json:"torpidity_max,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // class of rdata that the set will contain - Rdata_class string `xml:"rdata_class,omitempty" json:"rdata_class,omitempty"` - - // ID or label to associate the RS with an existing DSF Record Set Failover Chain - Dsf_record_set_failover_chain_id string `xml:"dsf_record_set_failover_chain_id,omitempty" json:"dsf_record_set_failover_chain_id,omitempty"` - - // ID or label of the associated monitor - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetDSFRecordSetsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRecordSetsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFRecordSetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFRecordSetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRecordSetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID or label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // ID or label of the DSF Record Set - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - // If 'Y', Record Set will be deleted on execution - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type DeleteOneDSFRecordSetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRecordSetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordSetData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // label of the DSF Record Set - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - Master_line string `xml:"master_line,omitempty" json:"master_line,omitempty"` - - // Rdata to create the svc record with - Rdata *ANYOneRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of the DSF record - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Weight string `xml:"weight,omitempty" json:"weight,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Endpoints []string `xml:"endpoints,omitempty" json:"endpoints,omitempty"` - - // number of endpoints that need to be up - Endpoint_up_count string `xml:"endpoint_up_count,omitempty" json:"endpoint_up_count,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - // boolean, if true add and immediately publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type CreateDSFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // label of the DSF Record - Dsf_record_id string `xml:"dsf_record_id,omitempty" json:"dsf_record_id,omitempty"` - - Master_line string `xml:"master_line,omitempty" json:"master_line,omitempty"` - - // Rdata to update the svc record with - Rdata *ANYOneRData `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of the DSF record - Label string `xml:"label,omitempty" json:"label,omitempty"` - - Weight string `xml:"weight,omitempty" json:"weight,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Endpoints []string `xml:"endpoints,omitempty" json:"endpoints,omitempty"` - - // number of endpoints that need to be up - Endpoint_up_count string `xml:"endpoint_up_count,omitempty" json:"endpoint_up_count,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - // boolean, if true add and immediately publish - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type UpdateDSFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // label of the DSF Record - Dsf_record_id string `xml:"dsf_record_id,omitempty" json:"dsf_record_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetOneDSFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // DSF Record Set Failover Chain ID to search on - Dsf_record_set_failover_chain_id string `xml:"dsf_record_set_failover_chain_id,omitempty" json:"dsf_record_set_failover_chain_id,omitempty"` - - // Record set id to search on - Dsf_record_set_id string `xml:"dsf_record_set_id,omitempty" json:"dsf_record_set_id,omitempty"` - - // Wildcard allowed - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Wildcard allowed - Master_line string `xml:"master_line,omitempty" json:"master_line,omitempty"` - - // Wildcard allowed - Endpoints string `xml:"endpoints,omitempty" json:"endpoints,omitempty"` - - Endpoint_up_count string `xml:"endpoint_up_count,omitempty" json:"endpoint_up_count,omitempty"` - - Weight string `xml:"weight,omitempty" json:"weight,omitempty"` - - Automation string `xml:"automation,omitempty" json:"automation,omitempty"` - - Eligible string `xml:"eligible,omitempty" json:"eligible,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetDSFRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // label of the DSF Record - Dsf_record_id string `xml:"dsf_record_id,omitempty" json:"dsf_record_id,omitempty"` - - // If 'Y', Record will be deleted on execution - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type DeleteOneDSFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddDSFNodeRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDSFNodeRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // an fqdn, zone pair - Node *DSFNode `xml:"node,omitempty" json:"node,omitempty"` - - // If 'Y', change is published immediately - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type AddDSFNodeResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDSFNodeResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFNode `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFNodesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFNodesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // A list of fqdn, zone pairs - Nodes []*DSFNode `xml:"nodes,omitempty" json:"nodes,omitempty"` - - // If 'Y', change is published immediately - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional Publish Notes. - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type UpdateDSFNodesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFNodesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFNode `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFNodesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFNodesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // response will include pending changes - Pending_changes string `xml:"pending_changes,omitempty" json:"pending_changes,omitempty"` -} - -type GetDSFNodesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFNodesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFNode `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFNodeRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFNodeRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // label of the DSF Service - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // an fqdn, zone pair - Node *DSFNode `xml:"node,omitempty" json:"node,omitempty"` - - // If 'Y', change is published immediately - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` - - // Optional notes - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type DeleteOneDSFNodeResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFNodeResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFNode `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSFMonitorRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFMonitorRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Label for the DSF Monitor - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Num of responses to determine status - Response_count string `xml:"response_count,omitempty" json:"response_count,omitempty"` - - // Interval, in seconds, between probes - Probe_interval string `xml:"probe_interval,omitempty" json:"probe_interval,omitempty"` - - // number of attempted retries on failure before giving up - Retries string `xml:"retries,omitempty" json:"retries,omitempty"` - - // name of the protocol to monitor - Protocol string `xml:"protocol,omitempty" json:"protocol,omitempty"` - - // indicates if the monitor is active, default is N - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // options pertaining the monitor - Options *DSFMonitorOptions `xml:"options,omitempty" json:"options,omitempty"` - - // Endpoints to monitor - Endpoints []*DSFMonitorEndpoint `xml:"endpoints,omitempty" json:"endpoints,omitempty"` -} - -type CreateDSFMonitorResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSFMonitorResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFMonitorData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSFMonitorRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFMonitorRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - // New label for the DSF Monitor - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Num of responses to determine status - Response_count string `xml:"response_count,omitempty" json:"response_count,omitempty"` - - // Interval, in seconds, between probes - Probe_interval string `xml:"probe_interval,omitempty" json:"probe_interval,omitempty"` - - // number of attempted retries on failure before giving up - Retries string `xml:"retries,omitempty" json:"retries,omitempty"` - - // name of the protocol to monitor - Protocol string `xml:"protocol,omitempty" json:"protocol,omitempty"` - - // indicates if the monitor is active - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // options pertaining the monitor - Options *DSFMonitorOptions `xml:"options,omitempty" json:"options,omitempty"` - - // Endpoints to monitor - Endpoints []*DSFMonitorEndpoint `xml:"endpoints,omitempty" json:"endpoints,omitempty"` -} - -type UpdateDSFMonitorResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSFMonitorResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFMonitorData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSFMonitorRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFMonitorRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` -} - -type GetOneDSFMonitorResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSFMonitorResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFMonitorData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFMonitorsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFMonitorsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Label for the DSF Monitor - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Interval, in seconds, between probes - Probe_interval string `xml:"probe_interval,omitempty" json:"probe_interval,omitempty"` - - // number of attempted retries on failure before giving up - Retries string `xml:"retries,omitempty" json:"retries,omitempty"` - - // name of the protocol to monitor - Protocol string `xml:"protocol,omitempty" json:"protocol,omitempty"` -} - -type GetDSFMonitorsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFMonitorsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSFMonitorData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSFMonitorRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFMonitorRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // ID - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` -} - -type DeleteOneDSFMonitorResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSFMonitorResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddDSFMonitorNotifierRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDSFMonitorNotifierRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Monitor ID - Dsf_monitor_id string `xml:"dsf_monitor_id,omitempty" json:"dsf_monitor_id,omitempty"` - - // Notifier ID passed in for existing Notifier, or the follow params used to create - Dsf_notify_id string `xml:"dsf_notify_id,omitempty" json:"dsf_notify_id,omitempty"` - - // filters on when services should fire the notifier - Filters []string `xml:"filters,omitempty" json:"filters,omitempty"` -} - -type AddDSFMonitorNotifierResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDSFMonitorNotifierResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NotifierData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSFMonitorSitesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFMonitorSitesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetDSFMonitorSitesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSFMonitorSitesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSFMonitorSitesData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateNotifierRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNotifierRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Label for the Notifier - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // List of Recipients attached to the Notifier - Recipients []*Recipient `xml:"recipients,omitempty" json:"recipients,omitempty"` - - // List of Services attached to the Notifier - Services []*Service `xml:"services,omitempty" json:"services,omitempty"` -} - -type CreateNotifierResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNotifierResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NotifierData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateNotifierRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNotifierRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Public_id of the Notifier to update - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` - - // Label for the DSF Notify - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // List of Recipients attached to the Notifier - Recipients []*Recipient `xml:"recipients,omitempty" json:"recipients,omitempty"` - - // List of Services attached to the Notifier - Services []*Service `xml:"services,omitempty" json:"services,omitempty"` -} - -type UpdateNotifierResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNotifierResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NotifierData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneNotifierRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNotifierRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Public_id of the Notifier to retrieve - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` -} - -type GetOneNotifierResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNotifierResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NotifierData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetNotifiersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNotifiersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Label for the DSF Notify - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // Search for active or inactive notifiers - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // Search for email or syslog recipients - Format string `xml:"format,omitempty" json:"format,omitempty"` - - // Search on the recipient email, hostname, or contact - Recipient string `xml:"recipient,omitempty" json:"recipient,omitempty"` - - // Search for active or inactive recipients - Recipient_active string `xml:"recipient_active,omitempty" json:"recipient_active,omitempty"` - - // Must be specified with service public id - Service_class string `xml:"service_class,omitempty" json:"service_class,omitempty"` - - // Public_id of the service_class item to search for - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - // Search for active or inactive services - Service_active string `xml:"service_active,omitempty" json:"service_active,omitempty"` -} - -type GetNotifiersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNotifiersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NotifierDataAlt `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneNotifierRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNotifierRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // Public_id of the Notifier to delete - Notifier_id string `xml:"notifier_id,omitempty" json:"notifier_id,omitempty"` -} - -type DeleteOneNotifierResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNotifierResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateConfigLimitRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateConfigLimitRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Value string `xml:"value,omitempty" json:"value,omitempty"` -} - -type CreateConfigLimitResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateConfigLimitResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ConfigLimitData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneConfigLimitRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneConfigLimitRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type GetOneConfigLimitResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneConfigLimitResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ConfigLimitData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetConfigLimitsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetConfigLimitsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` -} - -type GetConfigLimitsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetConfigLimitsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ConfigLimitData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateConfigLimitRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateConfigLimitRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Value string `xml:"value,omitempty" json:"value,omitempty"` -} - -type UpdateConfigLimitResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateConfigLimitResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ConfigLimitData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneConfigLimitRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneConfigLimitRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Service_id string `xml:"service_id,omitempty" json:"service_id,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type DeleteOneConfigLimitResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneConfigLimitResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreatePermissionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePermissionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - All_users string `xml:"all_users,omitempty" json:"all_users,omitempty"` - - Description string `xml:"description,omitempty" json:"description,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - User_name []string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Subgroup []string `xml:"subgroup,omitempty" json:"subgroup,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type CreatePermissionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePermissionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PermissionGroupData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOnePermissionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePermissionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` -} - -type GetOnePermissionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePermissionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PermissionGroupData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetPermissionGroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPermissionGroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetPermissionGroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPermissionGroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*PermissionGroupData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOnePermissionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePermissionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` -} - -type DeleteOnePermissionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePermissionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdatePermissionGroupRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePermissionGroupRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - New_group_name string `xml:"new_group_name,omitempty" json:"new_group_name,omitempty"` - - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - All_users string `xml:"all_users,omitempty" json:"all_users,omitempty"` - - Description string `xml:"description,omitempty" json:"description,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - User_name []string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Subgroup []string `xml:"subgroup,omitempty" json:"subgroup,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type UpdatePermissionGroupResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePermissionGroupResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PermissionGroupData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCustomerPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` -} - -type GetCustomerPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PermissionResponse `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetUserPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUserPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type GetUserPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUserPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PermissionResponse `xml:"data,omitempty" json:"data,omitempty"` -} - -type CheckPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CheckPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - Zone_name string `xml:"zone_name,omitempty" json:"zone_name,omitempty"` -} - -type CheckPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CheckPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PermissionResponse `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddPermissionGroupUsersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupUsersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - User_name []string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type AddPermissionGroupUsersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupUsersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetPermissionGroupUsersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupUsersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - User_name []string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type SetPermissionGroupUsersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupUsersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemovePermissionGroupUsersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupUsersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - User_name []string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type RemovePermissionGroupUsersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupUsersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddPermissionGroupSubgroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupSubgroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Subgroup []string `xml:"subgroup,omitempty" json:"subgroup,omitempty"` -} - -type AddPermissionGroupSubgroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupSubgroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetPermissionGroupSubgroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupSubgroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Subgroup []string `xml:"subgroup,omitempty" json:"subgroup,omitempty"` -} - -type SetPermissionGroupSubgroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupSubgroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemovePermissionGroupSubgroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupSubgroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Subgroup []string `xml:"subgroup,omitempty" json:"subgroup,omitempty"` -} - -type RemovePermissionGroupSubgroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupSubgroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddPermissionGroupPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type AddPermissionGroupPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetPermissionGroupPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type SetPermissionGroupPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemovePermissionGroupPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type RemovePermissionGroupPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddPermissionGroupZonesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupZonesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type AddPermissionGroupZonesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddPermissionGroupZonesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetPermissionGroupZonesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupZonesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type SetPermissionGroupZonesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetPermissionGroupZonesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemovePermissionGroupZonesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupZonesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Group_name string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RemovePermissionGroupZonesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemovePermissionGroupZonesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddUserGroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserGroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Group []string `xml:"group,omitempty" json:"group,omitempty"` -} - -type AddUserGroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserGroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetUserGroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserGroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Group []string `xml:"group,omitempty" json:"group,omitempty"` -} - -type SetUserGroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserGroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemoveUserGroupsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserGroupsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Group []string `xml:"group,omitempty" json:"group,omitempty"` -} - -type RemoveUserGroupsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserGroupsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddUserZonesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserZonesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type AddUserZonesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserZonesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetUserZonesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserZonesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type SetUserZonesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserZonesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemoveUserZonesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserZonesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RemoveUserZonesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserZonesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddUserPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type AddUserPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetUserPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type SetUserPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemoveUserPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type RemoveUserPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddUserForbidsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserForbidsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Forbid []*PermissionData `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type AddUserForbidsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddUserForbidsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetUserForbidsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserForbidsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Forbid []*PermissionData `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type SetUserForbidsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetUserForbidsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemoveUserForbidsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserForbidsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Forbid []*PermissionData `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type RemoveUserForbidsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveUserForbidsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddCustomerPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddCustomerPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type AddCustomerPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddCustomerPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetCustomerPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type SetCustomerPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemoveCustomerPermissionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveCustomerPermissionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` -} - -type RemoveCustomerPermissionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveCustomerPermissionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddCustomerForbidsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddCustomerForbidsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Forbid []string `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type AddCustomerForbidsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddCustomerForbidsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetCustomerForbidsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerForbidsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Forbid []string `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type SetCustomerForbidsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerForbidsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RemoveCustomerForbidsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveCustomerForbidsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Forbid []string `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type RemoveCustomerForbidsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RemoveCustomerForbidsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetHostStatsFlagsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetHostStatsFlagsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` -} - -type GetHostStatsFlagsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetHostStatsFlagsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*HostStatFlagsData `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetHostStatsFlagsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetHostStatsFlagsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Host_stats []*HostStatFlagsData `xml:"host_stats,omitempty" json:"host_stats,omitempty"` -} - -type SetHostStatsFlagsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetHostStatsFlagsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*HostStatFlagsData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateTSIGKeyRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateTSIGKeyRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Algorithm string `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Secret string `xml:"secret,omitempty" json:"secret,omitempty"` - - Tsig_ocid string `xml:"tsig_ocid,omitempty" json:"tsig_ocid,omitempty"` - - Compartment string `xml:"compartment,omitempty" json:"compartment,omitempty"` -} - -type CreateTSIGKeyResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateTSIGKeyResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TSIGKeyData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneTSIGKeyRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTSIGKeyRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type GetOneTSIGKeyResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTSIGKeyResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TSIGKeyData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetTSIGKeysRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTSIGKeysRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetTSIGKeysResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTSIGKeysResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*TSIGKeyData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateTSIGKeyRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateTSIGKeyRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` - - New_name string `xml:"new_name,omitempty" json:"new_name,omitempty"` - - Secret string `xml:"secret,omitempty" json:"secret,omitempty"` - - Algorithm string `xml:"algorithm,omitempty" json:"algorithm,omitempty"` - - Tsig_ocid string `xml:"tsig_ocid,omitempty" json:"tsig_ocid,omitempty"` - - Compartment string `xml:"compartment,omitempty" json:"compartment,omitempty"` -} - -type UpdateTSIGKeyResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateTSIGKeyResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TSIGKeyData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneTSIGKeyRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneTSIGKeyRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` -} - -type DeleteOneTSIGKeyResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneTSIGKeyResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // address of responsible party, per SOA - Rname string `xml:"rname,omitempty" json:"rname,omitempty"` - - // default TTL (Time-to-Live) for records - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // code indicating how serial numbers are constructed on publish - Serial_style string `xml:"serial_style,omitempty" json:"serial_style,omitempty"` -} - -type CreateZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetOneZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetZonesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZonesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetZonesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZonesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ZoneData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteOneZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateSecondaryZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSecondaryZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Masters []string `xml:"masters,omitempty" json:"masters,omitempty"` - - Tsig_key_name string `xml:"tsig_key_name,omitempty" json:"tsig_key_name,omitempty"` - - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` -} - -type CreateSecondaryZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSecondaryZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SecondaryData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateSecondaryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSecondaryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Masters []string `xml:"masters,omitempty" json:"masters,omitempty"` - - Tsig_key_name string `xml:"tsig_key_name,omitempty" json:"tsig_key_name,omitempty"` - - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` -} - -type UpdateSecondaryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSecondaryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SecondaryData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateSecondaryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateSecondaryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type ActivateSecondaryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateSecondaryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SecondaryData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateSecondaryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateSecondaryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeactivateSecondaryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateSecondaryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SecondaryData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RetransferSecondaryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RetransferSecondaryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RetransferSecondaryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RetransferSecondaryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SecondaryData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneSecondaryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSecondaryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetOneSecondaryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSecondaryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SecondaryData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetSecondariesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSecondariesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetSecondariesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSecondariesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SecondaryData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetZoneApexRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneApexRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // FQDN of a node - Node string `xml:"node,omitempty" json:"node,omitempty"` -} - -type GetZoneApexResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneApexResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateAAAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateAAAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataAAAA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateAAAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateAAAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AAAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneAAAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneAAAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataAAAA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneAAAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneAAAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AAAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetAAAARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAAAARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetAAAARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAAAARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*AAAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateAAAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateAAAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataAAAA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateAAAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateAAAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AAAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteAAAARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteAAAARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteAAAARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteAAAARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneAAAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneAAAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataAAAA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneAAAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneAAAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateALIASRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateALIASRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataALIAS `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateALIASRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateALIASRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ALIASRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneALIASRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneALIASRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataALIAS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneALIASRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneALIASRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ALIASRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetALIASRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetALIASRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetALIASRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetALIASRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ALIASRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateALIASRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateALIASRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataALIAS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateALIASRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateALIASRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ALIASRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteALIASRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteALIASRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteALIASRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteALIASRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneALIASRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneALIASRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataALIAS `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneALIASRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneALIASRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataCAA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateCAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneCAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCAA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneCAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCAARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCAARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetCAARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCAARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCAA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateCAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteCAARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCAARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteCAARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCAARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneCAARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCAARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCAA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneCAARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCAARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataCDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateCDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CDNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneCDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneCDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CDNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCDNSKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCDNSKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetCDNSKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCDNSKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CDNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateCDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CDNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteCDNSKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCDNSKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteCDNSKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCDNSKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneCDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneCDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataCDS `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateCDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CDSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneCDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneCDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CDSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCDSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCDSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetCDSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCDSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CDSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateCDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CDSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteCDSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCDSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteCDSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCDSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneCDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCDS `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneCDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCERTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCERTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataCERT `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateCERTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCERTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CERTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneCERTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCERTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCERT `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneCERTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCERTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CERTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCERTRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCERTRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetCERTRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCERTRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CERTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCERTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCERTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCERT `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateCERTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCERTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CERTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteCERTRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCERTRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteCERTRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCERTRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneCERTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCERTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCERT `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneCERTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCERTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataCNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateCNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneCNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneCNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCNAMERecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCNAMERecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetCNAMERecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCNAMERecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateCNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteCNAMERecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCNAMERecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteCNAMERecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCNAMERecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneCNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneCNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCSYNCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCSYNCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataCSYNC `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateCSYNCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCSYNCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CSYNCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneCSYNCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCSYNCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCSYNC `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneCSYNCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCSYNCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CSYNCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCSYNCRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCSYNCRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetCSYNCRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCSYNCRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CSYNCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCSYNCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCSYNCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCSYNC `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateCSYNCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCSYNCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CSYNCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteCSYNCRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCSYNCRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteCSYNCRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCSYNCRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneCSYNCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCSYNCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataCSYNC `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneCSYNCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCSYNCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDHCIDRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDHCIDRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataDHCID `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateDHCIDRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDHCIDRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DHCIDRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDHCIDRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDHCIDRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDHCID `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneDHCIDRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDHCIDRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DHCIDRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDHCIDRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDHCIDRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetDHCIDRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDHCIDRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DHCIDRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDHCIDRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDHCIDRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDHCID `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateDHCIDRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDHCIDRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DHCIDRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteDHCIDRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDHCIDRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteDHCIDRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDHCIDRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDHCIDRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDHCIDRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDHCID `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneDHCIDRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDHCIDRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataDNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateDNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneDNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDNAMERecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNAMERecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetDNAMERecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNAMERecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateDNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteDNAMERecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDNAMERecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteDNAMERecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDNAMERecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDNAMERecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDNAMERecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNAME `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneDNAMERecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDNAMERecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDNSKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNSKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetDNSKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNSKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteDNSKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDNSKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteDNSKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDNSKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDNSKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDNSKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDNSKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneDNSKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDNSKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataDS `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetDSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteDSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteDSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteDSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataDS `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneDSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateIPSECKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateIPSECKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataIPSECKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateIPSECKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateIPSECKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPSECKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneIPSECKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneIPSECKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataIPSECKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneIPSECKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneIPSECKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPSECKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetIPSECKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetIPSECKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetIPSECKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetIPSECKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*IPSECKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateIPSECKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateIPSECKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataIPSECKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateIPSECKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateIPSECKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPSECKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteIPSECKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteIPSECKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteIPSECKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteIPSECKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneIPSECKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneIPSECKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataIPSECKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneIPSECKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneIPSECKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *KEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *KEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*KEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *KEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneKEYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneKEYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKEY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneKEYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneKEYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateKXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateKXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataKX `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateKXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateKXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *KXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneKXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneKXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneKXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneKXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *KXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetKXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetKXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetKXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetKXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*KXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateKXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateKXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateKXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateKXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *KXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteKXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteKXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteKXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteKXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneKXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneKXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataKX `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneKXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneKXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateLOCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateLOCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataLOC `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateLOCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateLOCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LOCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneLOCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneLOCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataLOC `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneLOCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneLOCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LOCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetLOCRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetLOCRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetLOCRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetLOCRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*LOCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateLOCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateLOCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataLOC `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateLOCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateLOCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LOCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteLOCRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteLOCRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteLOCRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteLOCRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneLOCRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneLOCRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataLOC `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneLOCRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneLOCRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateMXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateMXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataMX `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateMXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateMXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *MXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneMXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneMXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataMX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneMXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneMXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *MXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetMXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetMXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetMXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetMXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*MXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateMXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateMXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataMX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateMXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateMXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *MXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteMXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteMXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteMXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteMXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneMXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneMXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataMX `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneMXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneMXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateNAPTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNAPTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataNAPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateNAPTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNAPTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NAPTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneNAPTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNAPTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNAPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneNAPTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNAPTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NAPTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetNAPTRRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNAPTRRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetNAPTRRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNAPTRRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NAPTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateNAPTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNAPTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNAPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateNAPTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNAPTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NAPTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteNAPTRRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteNAPTRRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteNAPTRRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteNAPTRRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneNAPTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNAPTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNAPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneNAPTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNAPTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateNSAPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNSAPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataNSAP `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateNSAPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNSAPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NSAPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneNSAPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNSAPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNSAP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneNSAPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNSAPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NSAPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetNSAPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNSAPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetNSAPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNSAPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NSAPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateNSAPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNSAPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNSAP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateNSAPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNSAPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NSAPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteNSAPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteNSAPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteNSAPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteNSAPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneNSAPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNSAPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNSAP `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneNSAPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNSAPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreatePOLICYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePOLICYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataPOLICY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreatePOLICYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePOLICYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *POLICYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOnePOLICYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePOLICYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPOLICY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOnePOLICYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePOLICYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *POLICYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetPOLICYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPOLICYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetPOLICYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPOLICYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*POLICYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdatePOLICYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePOLICYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPOLICY `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdatePOLICYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePOLICYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *POLICYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeletePOLICYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeletePOLICYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeletePOLICYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeletePOLICYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOnePOLICYRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePOLICYRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPOLICY `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOnePOLICYRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePOLICYRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreatePTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreatePTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOnePTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOnePTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetPTRRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPTRRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetPTRRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPTRRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*PTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdatePTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdatePTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeletePTRRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeletePTRRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeletePTRRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeletePTRRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOnePTRRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePTRRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPTR `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOnePTRRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePTRRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreatePXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataPX `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreatePXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreatePXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOnePXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOnePXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOnePXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetPXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetPXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetPXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*PXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdatePXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPX `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdatePXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdatePXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeletePXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeletePXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeletePXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeletePXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOnePXRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePXRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataPX `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOnePXRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOnePXRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateRPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataRP `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateRPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneRPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataRP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneRPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetRPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetRPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*RPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateRPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataRP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateRPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteRPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteRPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteRPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteRPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneRPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataRP `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneRPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateSPFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSPFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataSPF `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateSPFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSPFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SPFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneSPFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSPFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSPF `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneSPFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSPFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SPFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetSPFRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSPFRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetSPFRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSPFRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SPFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateSPFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSPFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSPF `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateSPFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSPFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SPFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteSPFRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteSPFRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteSPFRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteSPFRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneSPFRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneSPFRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSPF `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneSPFRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneSPFRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateSRVRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSRVRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataSRV `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateSRVRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSRVRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SRVRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneSRVRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSRVRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSRV `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneSRVRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSRVRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SRVRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetSRVRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSRVRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetSRVRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSRVRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SRVRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateSRVRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSRVRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSRV `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateSRVRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSRVRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SRVRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteSRVRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteSRVRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteSRVRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteSRVRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneSRVRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneSRVRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSRV `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneSRVRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneSRVRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateSSHFPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSSHFPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataSSHFP `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateSSHFPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateSSHFPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SSHFPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneSSHFPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSSHFPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSSHFP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneSSHFPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSSHFPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SSHFPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetSSHFPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSSHFPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetSSHFPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSSHFPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SSHFPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateSSHFPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSSHFPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSSHFP `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateSSHFPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSSHFPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SSHFPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteSSHFPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteSSHFPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteSSHFPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteSSHFPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneSSHFPRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneSSHFPRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSSHFP `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneSSHFPRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneSSHFPRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateTLSARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateTLSARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataTLSA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateTLSARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateTLSARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TLSARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneTLSARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTLSARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTLSA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneTLSARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTLSARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TLSARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetTLSARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTLSARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetTLSARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTLSARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*TLSARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateTLSARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateTLSARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTLSA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateTLSARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateTLSARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TLSARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteTLSARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteTLSARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteTLSARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteTLSARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneTLSARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneTLSARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTLSA `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneTLSARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneTLSARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateTXTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateTXTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataTXT `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type CreateTXTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateTXTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TXTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneTXTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTXTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTXT `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneTXTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTXTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TXTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetTXTRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTXTRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetTXTRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTXTRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*TXTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateTXTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateTXTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTXT `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` -} - -type UpdateTXTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateTXTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TXTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteTXTRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteTXTRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteTXTRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteTXTRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneTXTRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneTXTRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataTXT `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneTXTRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneTXTRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneSOARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSOARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataSOA `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneSOARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneSOARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SOARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetSOARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSOARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetSOARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetSOARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SOARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateSOARecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSOARecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Serial_style string `xml:"serial_style,omitempty" json:"serial_style,omitempty"` - - Rdata *RDataSOAUpdate `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type UpdateSOARecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateSOARecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *SOARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateNSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Rdata *RDataNS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - Service_class string `xml:"service_class,omitempty" json:"service_class,omitempty"` -} - -type CreateNSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateNSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneNSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneNSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneNSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetNSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetNSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateNSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNS `xml:"rdata,omitempty" json:"rdata,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - Service_class string `xml:"service_class,omitempty" json:"service_class,omitempty"` -} - -type UpdateNSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateNSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *NSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteNSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteNSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteNSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteNSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneNSRecordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNSRecordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` - - Rdata *RDataNS `xml:"rdata,omitempty" json:"rdata,omitempty"` -} - -type DeleteOneNSRecordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneNSRecordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - ARecords []*ARecordData `xml:"ARecords,omitempty" json:"ARecords,omitempty"` -} - -type ReplaceARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceAAAARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceAAAARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - AAAARecords []*AAAARecordData `xml:"AAAARecords,omitempty" json:"AAAARecords,omitempty"` -} - -type ReplaceAAAARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceAAAARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*AAAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceALIASRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceALIASRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - ALIASRecords []*ALIASRecordData `xml:"ALIASRecords,omitempty" json:"ALIASRecords,omitempty"` -} - -type ReplaceALIASRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceALIASRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ALIASRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceCAARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCAARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - CAARecords []*CAARecordData `xml:"CAARecords,omitempty" json:"CAARecords,omitempty"` -} - -type ReplaceCAARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCAARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CAARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceCDNSKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCDNSKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - CDNSKEYRecords []*CDNSKEYRecordData `xml:"CDNSKEYRecords,omitempty" json:"CDNSKEYRecords,omitempty"` -} - -type ReplaceCDNSKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCDNSKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CDNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceCDSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCDSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - CDSRecords []*CDSRecordData `xml:"CDSRecords,omitempty" json:"CDSRecords,omitempty"` -} - -type ReplaceCDSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCDSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CDSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceCERTRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCERTRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - CERTRecords []*CERTRecordData `xml:"CERTRecords,omitempty" json:"CERTRecords,omitempty"` -} - -type ReplaceCERTRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCERTRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CERTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceCNAMERecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCNAMERecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - CNAMERecords []*CNAMERecordData `xml:"CNAMERecords,omitempty" json:"CNAMERecords,omitempty"` -} - -type ReplaceCNAMERecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCNAMERecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceCSYNCRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCSYNCRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - CSYNCRecords []*CSYNCRecordData `xml:"CSYNCRecords,omitempty" json:"CSYNCRecords,omitempty"` -} - -type ReplaceCSYNCRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceCSYNCRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CSYNCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceDHCIDRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDHCIDRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - DHCIDRecords []*DHCIDRecordData `xml:"DHCIDRecords,omitempty" json:"DHCIDRecords,omitempty"` -} - -type ReplaceDHCIDRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDHCIDRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DHCIDRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceDNAMERecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDNAMERecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - DNAMERecords []*DNAMERecordData `xml:"DNAMERecords,omitempty" json:"DNAMERecords,omitempty"` -} - -type ReplaceDNAMERecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDNAMERecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DNAMERecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceDNSKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDNSKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - DNSKEYRecords []*DNSKEYRecordData `xml:"DNSKEYRecords,omitempty" json:"DNSKEYRecords,omitempty"` -} - -type ReplaceDNSKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDNSKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DNSKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceDSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - DSRecords []*DSRecordData `xml:"DSRecords,omitempty" json:"DSRecords,omitempty"` -} - -type ReplaceDSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceDSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceIPSECKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceIPSECKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - IPSECKEYRecords []*IPSECKEYRecordData `xml:"IPSECKEYRecords,omitempty" json:"IPSECKEYRecords,omitempty"` -} - -type ReplaceIPSECKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceIPSECKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*IPSECKEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceKEYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceKEYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - KEYRecords []*KEYRecordData `xml:"KEYRecords,omitempty" json:"KEYRecords,omitempty"` -} - -type ReplaceKEYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceKEYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*KEYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceKXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceKXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - KXRecords []*KXRecordData `xml:"KXRecords,omitempty" json:"KXRecords,omitempty"` -} - -type ReplaceKXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceKXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*KXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceLOCRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceLOCRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - LOCRecords []*LOCRecordData `xml:"LOCRecords,omitempty" json:"LOCRecords,omitempty"` -} - -type ReplaceLOCRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceLOCRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*LOCRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceMXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceMXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - MXRecords []*MXRecordData `xml:"MXRecords,omitempty" json:"MXRecords,omitempty"` -} - -type ReplaceMXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceMXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*MXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceNAPTRRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceNAPTRRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - NAPTRRecords []*NAPTRRecordData `xml:"NAPTRRecords,omitempty" json:"NAPTRRecords,omitempty"` -} - -type ReplaceNAPTRRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceNAPTRRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NAPTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceNSAPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceNSAPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - NSAPRecords []*NSAPRecordData `xml:"NSAPRecords,omitempty" json:"NSAPRecords,omitempty"` -} - -type ReplaceNSAPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceNSAPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NSAPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplacePOLICYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplacePOLICYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - POLICYRecords []*POLICYRecordData `xml:"POLICYRecords,omitempty" json:"POLICYRecords,omitempty"` -} - -type ReplacePOLICYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplacePOLICYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*POLICYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplacePTRRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplacePTRRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - PTRRecords []*PTRRecordData `xml:"PTRRecords,omitempty" json:"PTRRecords,omitempty"` -} - -type ReplacePTRRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplacePTRRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*PTRRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplacePXRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplacePXRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - PXRecords []*PXRecordData `xml:"PXRecords,omitempty" json:"PXRecords,omitempty"` -} - -type ReplacePXRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplacePXRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*PXRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceRPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceRPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - RPRecords []*RPRecordData `xml:"RPRecords,omitempty" json:"RPRecords,omitempty"` -} - -type ReplaceRPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceRPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*RPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceSPFRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceSPFRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - SPFRecords []*SPFRecordData `xml:"SPFRecords,omitempty" json:"SPFRecords,omitempty"` -} - -type ReplaceSPFRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceSPFRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SPFRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceSRVRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceSRVRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - SRVRecords []*SRVRecordData `xml:"SRVRecords,omitempty" json:"SRVRecords,omitempty"` -} - -type ReplaceSRVRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceSRVRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SRVRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceSSHFPRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceSSHFPRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - SSHFPRecords []*SSHFPRecordData `xml:"SSHFPRecords,omitempty" json:"SSHFPRecords,omitempty"` -} - -type ReplaceSSHFPRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceSSHFPRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*SSHFPRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceTLSARecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceTLSARecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - TLSARecords []*TLSARecordData `xml:"TLSARecords,omitempty" json:"TLSARecords,omitempty"` -} - -type ReplaceTLSARecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceTLSARecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*TLSARecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceTXTRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceTXTRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - TXTRecords []*TXTRecordData `xml:"TXTRecords,omitempty" json:"TXTRecords,omitempty"` -} - -type ReplaceTXTRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceTXTRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*TXTRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ReplaceNSRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceNSRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - NSRecords []*NSRecordData `xml:"NSRecords,omitempty" json:"NSRecords,omitempty"` -} - -type ReplaceNSRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ReplaceNSRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*NSRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetANYRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetANYRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetANYRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetANYRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ANYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetAllRecordsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAllRecordsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetAllRecordsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAllRecordsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ANYRecordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetAllAliasQNamesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAllAliasQNamesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetAllAliasQNamesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAllAliasQNamesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *QNames `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of user - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type GetOneUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of user - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type DeleteOneUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - Group_name []string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` - - Forbid []*PermissionData `xml:"forbid,omitempty" json:"forbid,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` - - First_name string `xml:"first_name,omitempty" json:"first_name,omitempty"` - - Last_name string `xml:"last_name,omitempty" json:"last_name,omitempty"` - - Phone string `xml:"phone,omitempty" json:"phone,omitempty"` - - Fax string `xml:"fax,omitempty" json:"fax,omitempty"` - - Email string `xml:"email,omitempty" json:"email,omitempty"` - - Notify_email string `xml:"notify_email,omitempty" json:"notify_email,omitempty"` - - Pager_email string `xml:"pager_email,omitempty" json:"pager_email,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` - - Address_2 string `xml:"address_2,omitempty" json:"address_2,omitempty"` - - City string `xml:"city,omitempty" json:"city,omitempty"` - - State string `xml:"state,omitempty" json:"state,omitempty"` - - Post_code string `xml:"post_code,omitempty" json:"post_code,omitempty"` - - Country string `xml:"country,omitempty" json:"country,omitempty"` - - Website string `xml:"website,omitempty" json:"website,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` -} - -type CreateUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - New_user_name string `xml:"new_user_name,omitempty" json:"new_user_name,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` - - Require_pw_change string `xml:"require_pw_change,omitempty" json:"require_pw_change,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - Group_name []string `xml:"group_name,omitempty" json:"group_name,omitempty"` - - Zone []*PermissionZone `xml:"zone,omitempty" json:"zone,omitempty"` - - Forbid []*PermissionData `xml:"forbid,omitempty" json:"forbid,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` - - First_name string `xml:"first_name,omitempty" json:"first_name,omitempty"` - - Last_name string `xml:"last_name,omitempty" json:"last_name,omitempty"` - - Phone string `xml:"phone,omitempty" json:"phone,omitempty"` - - Fax string `xml:"fax,omitempty" json:"fax,omitempty"` - - Email string `xml:"email,omitempty" json:"email,omitempty"` - - Notify_email string `xml:"notify_email,omitempty" json:"notify_email,omitempty"` - - Pager_email string `xml:"pager_email,omitempty" json:"pager_email,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` - - Address_2 string `xml:"address_2,omitempty" json:"address_2,omitempty"` - - City string `xml:"city,omitempty" json:"city,omitempty"` - - State string `xml:"state,omitempty" json:"state,omitempty"` - - Post_code string `xml:"post_code,omitempty" json:"post_code,omitempty"` - - Country string `xml:"country,omitempty" json:"country,omitempty"` - - Website string `xml:"website,omitempty" json:"website,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` -} - -type UpdateUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetUsersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUsersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Search string `xml:"search,omitempty" json:"search,omitempty"` -} - -type GetUsersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUsersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetUpdateUsersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUpdateUsersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetUpdateUsersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUpdateUsersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateUpdateUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateUpdateUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` -} - -type UpdateUpdateUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateUpdateUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneUpdateUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneUpdateUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type DeleteOneUpdateUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneUpdateUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateUserPasswordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateUserPasswordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` -} - -type UpdateUserPasswordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateUserPasswordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type BlockUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ BlockUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type BlockUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ BlockUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UnblockUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UnblockUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type UnblockUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UnblockUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UserData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateContactRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateContactRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` - - First_name string `xml:"first_name,omitempty" json:"first_name,omitempty"` - - Last_name string `xml:"last_name,omitempty" json:"last_name,omitempty"` - - Phone string `xml:"phone,omitempty" json:"phone,omitempty"` - - Fax string `xml:"fax,omitempty" json:"fax,omitempty"` - - Email string `xml:"email,omitempty" json:"email,omitempty"` - - Notify_email string `xml:"notify_email,omitempty" json:"notify_email,omitempty"` - - Pager_email string `xml:"pager_email,omitempty" json:"pager_email,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` - - Address_2 string `xml:"address_2,omitempty" json:"address_2,omitempty"` - - City string `xml:"city,omitempty" json:"city,omitempty"` - - State string `xml:"state,omitempty" json:"state,omitempty"` - - Post_code string `xml:"post_code,omitempty" json:"post_code,omitempty"` - - Country string `xml:"country,omitempty" json:"country,omitempty"` - - Website string `xml:"website,omitempty" json:"website,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` -} - -type CreateContactResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateContactResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ContactData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneContactRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneContactRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` -} - -type GetOneContactResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneContactResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ContactData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetContactsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetContactsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetContactsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetContactsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ContactData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneContactRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneContactRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` -} - -type DeleteOneContactResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneContactResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateContactRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateContactRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` - - New_nickname string `xml:"new_nickname,omitempty" json:"new_nickname,omitempty"` - - First_name string `xml:"first_name,omitempty" json:"first_name,omitempty"` - - Last_name string `xml:"last_name,omitempty" json:"last_name,omitempty"` - - Phone string `xml:"phone,omitempty" json:"phone,omitempty"` - - Fax string `xml:"fax,omitempty" json:"fax,omitempty"` - - Email string `xml:"email,omitempty" json:"email,omitempty"` - - Notify_email string `xml:"notify_email,omitempty" json:"notify_email,omitempty"` - - Pager_email string `xml:"pager_email,omitempty" json:"pager_email,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` - - Address_2 string `xml:"address_2,omitempty" json:"address_2,omitempty"` - - City string `xml:"city,omitempty" json:"city,omitempty"` - - State string `xml:"state,omitempty" json:"state,omitempty"` - - Post_code string `xml:"post_code,omitempty" json:"post_code,omitempty"` - - Country string `xml:"country,omitempty" json:"country,omitempty"` - - Website string `xml:"website,omitempty" json:"website,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` -} - -type UpdateContactResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateContactResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ContactData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCustomerRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCustomerRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Pool_id string `xml:"pool_id,omitempty" json:"pool_id,omitempty"` - - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - Level string `xml:"level,omitempty" json:"level,omitempty"` - - Primary_sales_agent string `xml:"primary_sales_agent,omitempty" json:"primary_sales_agent,omitempty"` - - Salesforce_id string `xml:"salesforce_id,omitempty" json:"salesforce_id,omitempty"` - - Owner *CustomerAdminData `xml:"owner,omitempty" json:"owner,omitempty"` - - Billing *CustomerAdminData `xml:"billing,omitempty" json:"billing,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - Forbid []string `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type CreateCustomerResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCustomerResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CustomerData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCustomerRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCustomerRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - New_customer_name string `xml:"new_customer_name,omitempty" json:"new_customer_name,omitempty"` - - Organization string `xml:"organization,omitempty" json:"organization,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Note string `xml:"note,omitempty" json:"note,omitempty"` - - Pool_id string `xml:"pool_id,omitempty" json:"pool_id,omitempty"` - - Activated string `xml:"activated,omitempty" json:"activated,omitempty"` - - Type_ string `xml:"type,omitempty" json:"type,omitempty"` - - Level string `xml:"level,omitempty" json:"level,omitempty"` - - Primary_sales_agent string `xml:"primary_sales_agent,omitempty" json:"primary_sales_agent,omitempty"` - - Salesforce_id string `xml:"salesforce_id,omitempty" json:"salesforce_id,omitempty"` - - Owner_contact string `xml:"owner_contact,omitempty" json:"owner_contact,omitempty"` - - Billing_contact string `xml:"billing_contact,omitempty" json:"billing_contact,omitempty"` - - Permission []string `xml:"permission,omitempty" json:"permission,omitempty"` - - Forbid []string `xml:"forbid,omitempty" json:"forbid,omitempty"` -} - -type UpdateCustomerResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCustomerResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CustomerData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneCustomerRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCustomerRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` -} - -type GetOneCustomerResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneCustomerResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CustomerData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCustomersRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomersRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Simple string `xml:"simple,omitempty" json:"simple,omitempty"` - - Search string `xml:"search,omitempty" json:"search,omitempty"` -} - -type GetCustomersResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomersResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CustomerData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneCustomerRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCustomerRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Note string `xml:"note,omitempty" json:"note,omitempty"` -} - -type DeleteOneCustomerResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneCustomerResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCustomerPrefsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerPrefsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // preference name; may be '*' to list all - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` -} - -type GetCustomerPrefsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerPrefsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CustomerPrefData `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetCustomerPrefsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerPrefsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Prefs []*CustomerPrefData `xml:"prefs,omitempty" json:"prefs,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` -} - -type SetCustomerPrefsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerPrefsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCustomerIPACLRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerIPACLRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // customer name or ID to see ACLs for, defaults to current customer - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - // scope of the ACL to retrieve - Scope string `xml:"scope,omitempty" json:"scope,omitempty"` -} - -type GetCustomerIPACLResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerIPACLResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CustomerIPACL `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetCustomerIPACLRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerIPACLRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // customer name or ID to set ACLs for, defaults to current customer - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Acl *CustomerIPACL `xml:"acl,omitempty" json:"acl,omitempty"` -} - -type SetCustomerIPACLResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetCustomerIPACLResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CustomerIPACL `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateCustomerOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCustomerOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of customer - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // tenant id - Tenant string `xml:"tenant,omitempty" json:"tenant,omitempty"` -} - -type CreateCustomerOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateCustomerOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CustomerOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateCustomerOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCustomerOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of customer - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // tenant id - Tenant string `xml:"tenant,omitempty" json:"tenant,omitempty"` -} - -type UpdateCustomerOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateCustomerOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CustomerOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetCustomerOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of customer - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // tenant id - Tenant string `xml:"tenant,omitempty" json:"tenant,omitempty"` -} - -type GetCustomerOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetCustomerOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*CustomerOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteCustomerOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCustomerOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of customer - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` -} - -type DeleteCustomerOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteCustomerOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *CustomerOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateZoneOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateZoneOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // public_id - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` -} - -type CreateZoneOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateZoneOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateZoneOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateZoneOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // public_id - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` -} - -type UpdateZoneOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateZoneOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetZoneOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // public id - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` -} - -type GetZoneOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ZoneOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteZoneOracleMetadataRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteZoneOracleMetadataRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteZoneOracleMetadataResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteZoneOracleMetadataResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneOracleMetadataData `xml:"data,omitempty" json:"data,omitempty"` -} - -type OCIMigrateRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ OCIMigrateRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // , req - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // public_id - Zone_ocid string `xml:"zone_ocid,omitempty" json:"zone_ocid,omitempty"` - - // compartment id - Compartment_id string `xml:"compartment_id,omitempty" json:"compartment_id,omitempty"` - - // tenant id - Tenancy_id string `xml:"tenancy_id,omitempty" json:"tenancy_id,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` - - Replacements *Replacement `xml:"replacements,omitempty" json:"replacements,omitempty"` -} - -type OCIMigrateResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ OCIMigrateResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // an IP address, either v4 or v6 - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDDNSsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDDNSsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetDDNSsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDDNSsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // an IP address, either v4 or v6 - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type UpdateDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` -} - -type ActivateDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` -} - -type DeactivateDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type ResetDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ResetDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` -} - -type ResetDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ResetDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetUpdateUserPasswordRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUpdateUserPasswordRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - User_name string `xml:"user_name,omitempty" json:"user_name,omitempty"` -} - -type GetUpdateUserPasswordResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetUpdateUserPasswordResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UpdateUserPasswordData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDDNSHostRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDDNSHostRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // an IP address, either v4 or v6 - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // either A or AAAA - Record_type string `xml:"record_type,omitempty" json:"record_type,omitempty"` - - // name of update user - User string `xml:"user,omitempty" json:"user,omitempty"` -} - -type CreateDDNSHostResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDDNSHostResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSHostData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateUpdateUserRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateUpdateUserRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Nickname string `xml:"nickname,omitempty" json:"nickname,omitempty"` - - Password string `xml:"password,omitempty" json:"password,omitempty"` -} - -type CreateUpdateUserResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateUpdateUserResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *UpdateUser `xml:"data,omitempty" json:"data,omitempty"` -} - -type AddDDNSRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDDNSRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Record_id int64 `xml:"record_id,omitempty" json:"record_id,omitempty"` -} - -type AddDDNSResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ AddDDNSResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DDNSData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateFailoverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateFailoverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // normally served address - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // 'ip' or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // address or CNAME to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateFailoverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateFailoverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *FailoverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneFailoverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneFailoverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneFailoverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneFailoverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *FailoverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetFailoversRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetFailoversRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetFailoversResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetFailoversResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*FailoverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateFailoverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateFailoverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // normally served address - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // 'ip' or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // address or CNAME to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` -} - -type UpdateFailoverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateFailoverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *FailoverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneFailoverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneFailoverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneFailoverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneFailoverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateFailoverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateFailoverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type ActivateFailoverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateFailoverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *FailoverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateFailoverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateFailoverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeactivateFailoverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateFailoverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *FailoverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RecoverFailoverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverFailoverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type RecoverFailoverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverFailoverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *FailoverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateLoadBalanceRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateLoadBalanceRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // pool of IP addresses to balance - Pool []*LoadBalanceAddress `xml:"pool,omitempty" json:"pool,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // 'ip', 'global', or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' or 'cname', what to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateLoadBalanceResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateLoadBalanceResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneLoadBalanceRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneLoadBalanceRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneLoadBalanceResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneLoadBalanceResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetLoadBalancesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetLoadBalancesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetLoadBalancesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetLoadBalancesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateLoadBalanceRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateLoadBalanceRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // pool of IP addresses to balance - Pool []*LoadBalanceAddress `xml:"pool,omitempty" json:"pool,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // 'ip', 'global', or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' or 'cname', what to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` -} - -type UpdateLoadBalanceResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateLoadBalanceResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneLoadBalanceRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneLoadBalanceRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneLoadBalanceResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneLoadBalanceResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateLoadBalanceRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateLoadBalanceRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type ActivateLoadBalanceResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateLoadBalanceResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateLoadBalanceRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateLoadBalanceRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeactivateLoadBalanceResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateLoadBalanceResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RecoverLoadBalanceRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverLoadBalanceRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type RecoverLoadBalanceResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverLoadBalanceResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RecoverLoadBalanceIPRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverLoadBalanceIPRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type RecoverLoadBalanceIPResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverLoadBalanceIPResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalanceData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateLoadBalancePoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateLoadBalancePoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // an IP address to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` -} - -type CreateLoadBalancePoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateLoadBalancePoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalancePoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateLoadBalancePoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateLoadBalancePoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // The IP of the pool entry to update - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // If specified, the new IP address for this entry - New_address string `xml:"new_address,omitempty" json:"new_address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` -} - -type UpdateLoadBalancePoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateLoadBalancePoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalancePoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneLoadBalancePoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneLoadBalancePoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // The IP of the pool entry to get - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type GetOneLoadBalancePoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneLoadBalancePoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *LoadBalancePoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetLoadBalancePoolEntriesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetLoadBalancePoolEntriesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetLoadBalancePoolEntriesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetLoadBalancePoolEntriesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*LoadBalancePoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneLoadBalancePoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneLoadBalancePoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // The IP of the pool entry to delete - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type DeleteOneLoadBalancePoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneLoadBalancePoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateGSLBRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGSLBRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // per-region addresses and configuration - Region []*GSLBRegion `xml:"region,omitempty" json:"region,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateGSLBResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGSLBResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneGSLBRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGSLBRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneGSLBResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGSLBResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetGSLBsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGSLBsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetGSLBsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGSLBsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateGSLBRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGSLBRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // per-region addresses and configuration - Region []*GSLBRegion `xml:"region,omitempty" json:"region,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` -} - -type UpdateGSLBResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGSLBResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneGSLBRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGSLBRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneGSLBResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGSLBResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateGSLBRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateGSLBRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type ActivateGSLBResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateGSLBResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateGSLBRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateGSLBRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeactivateGSLBResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateGSLBResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RecoverGSLBRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverGSLBRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type RecoverGSLBResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverGSLBResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RecoverGSLBIPRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverGSLBIPRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type RecoverGSLBIPResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverGSLBIPResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateGSLBRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGSLBRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // 'ip', 'global', or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' or 'cname', what to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // number of 'ok' addresses before region fails over - Min_healthy int32 `xml:"min_healthy,omitempty" json:"min_healthy,omitempty"` - - // pool of IP addresses to balance - Pool []*GSLBAddress `xml:"pool,omitempty" json:"pool,omitempty"` -} - -type CreateGSLBRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGSLBRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneGSLBRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGSLBRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneGSLBRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGSLBRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetGSLBRegionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGSLBRegionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetGSLBRegionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGSLBRegionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*GSLBRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateGSLBRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGSLBRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'ip', 'global', or 'cname' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' or 'cname', what to serve on failover - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // number of 'ok' addresses before region fails over - Min_healthy int32 `xml:"min_healthy,omitempty" json:"min_healthy,omitempty"` - - // pool of IP addresses to balance - Pool []*GSLBAddress `xml:"pool,omitempty" json:"pool,omitempty"` -} - -type UpdateGSLBRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGSLBRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneGSLBRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGSLBRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneGSLBRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGSLBRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateGSLBRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGSLBRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // an IP address or FQDN to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` -} - -type CreateGSLBRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateGSLBRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateGSLBRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGSLBRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // The IP address or FQDN of the pool entry to update - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // If specified, the new IP address for this entry - New_address string `xml:"new_address,omitempty" json:"new_address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` -} - -type UpdateGSLBRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateGSLBRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneGSLBRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGSLBRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // The IP address or FQDN of the pool entry to get - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type GetOneGSLBRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneGSLBRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *GSLBRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetGSLBRegionPoolEntriesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGSLBRegionPoolEntriesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` -} - -type GetGSLBRegionPoolEntriesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetGSLBRegionPoolEntriesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*GSLBRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneGSLBRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGSLBRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // The IP of the pool entry to delete - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type DeleteOneGSLBRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneGSLBRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateRTTMRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRTTMRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // per-region addresses and configuration - Region []*RTTMRegion `xml:"region,omitempty" json:"region,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // for custom syslog messages - Syslog_rttm_fmt string `xml:"syslog_rttm_fmt,omitempty" json:"syslog_rttm_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // details about performance monitoring - Performance_monitor *MonitorData `xml:"performance_monitor,omitempty" json:"performance_monitor,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateRTTMResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRTTMResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneRTTMRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRTTMRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneRTTMResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRTTMResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetRTTMsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetRTTMsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateRTTMRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRTTMRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // per-region addresses and configuration - Region []*RTTMRegion `xml:"region,omitempty" json:"region,omitempty"` - - // TTL (time-to-live) - Ttl int32 `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // restore normal address automatically (Y) - Auto_recover string `xml:"auto_recover,omitempty" json:"auto_recover,omitempty"` - - // The number of consecutive monitoring intervals to delay before placing an IP address back in service - Recovery_delay int32 `xml:"recovery_delay,omitempty" json:"recovery_delay,omitempty"` - - // contact that gets status notification - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - // The IP or hostname of a syslog server to send monitor events to - Syslog_server string `xml:"syslog_server,omitempty" json:"syslog_server,omitempty"` - - // The port of the syslog server. Defaults to 514 if not present - Syslog_port string `xml:"syslog_port,omitempty" json:"syslog_port,omitempty"` - - // The syslog ident to use. Defaults to 'dynect' - Syslog_ident string `xml:"syslog_ident,omitempty" json:"syslog_ident,omitempty"` - - // The syslog facility to use. Defaults to 'daemon' - Syslog_facility string `xml:"syslog_facility,omitempty" json:"syslog_facility,omitempty"` - - // When to deliver syslog message; 'change' or 'all' - Syslog_delivery string `xml:"syslog_delivery,omitempty" json:"syslog_delivery,omitempty"` - - // for custom syslog messages - Syslog_probe_fmt string `xml:"syslog_probe_fmt,omitempty" json:"syslog_probe_fmt,omitempty"` - - // for custom syslog messages - Syslog_status_fmt string `xml:"syslog_status_fmt,omitempty" json:"syslog_status_fmt,omitempty"` - - // for custom syslog messages - Syslog_rttm_fmt string `xml:"syslog_rttm_fmt,omitempty" json:"syslog_rttm_fmt,omitempty"` - - // details about monitoring - Monitor *MonitorData `xml:"monitor,omitempty" json:"monitor,omitempty"` - - // details about performance monitoring - Performance_monitor *MonitorData `xml:"performance_monitor,omitempty" json:"performance_monitor,omitempty"` -} - -type UpdateRTTMResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRTTMResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneRTTMRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRTTMRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneRTTMResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRTTMResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateRTTMRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateRTTMRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type ActivateRTTMResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateRTTMResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateRTTMRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateRTTMRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeactivateRTTMResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateRTTMResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RecoverRTTMRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverRTTMRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type RecoverRTTMResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverRTTMResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type RecoverRTTMIPRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverRTTMIPRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type RecoverRTTMIPResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RecoverRTTMIPResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetRTTMLogsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMLogsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // The timestamp indicating the beginning of the period to report on - Start_ts int32 `xml:"start_ts,omitempty" json:"start_ts,omitempty"` - - // The timestamp indicating the end of the period to report on - End_ts int32 `xml:"end_ts,omitempty" json:"end_ts,omitempty"` -} - -type GetRTTMLogsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMLogsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*RTTMLogData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetRTTMRRSetsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMRRSetsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // The timestamp indicating the period to report on - Ts int32 `xml:"ts,omitempty" json:"ts,omitempty"` -} - -type GetRTTMRRSetsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMRRSetsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*RTTMLogData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateRTTMRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRTTMRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // 'Y' or 'N', if 'Y', region will filled in with global settings - Autopopulate string `xml:"autopopulate,omitempty" json:"autopopulate,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // pool_count, number of addresses to be included in the serve pool - Ep int32 `xml:"ep,omitempty" json:"ep,omitempty"` - - // 'ip', 'global', 'region', default 'global' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' mode, address to serve on failover. For 'region' mode, region_code of the region to failover to. - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // failover_count, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Apmc int32 `xml:"apmc,omitempty" json:"apmc,omitempty"` - - // failover_count2, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Epmc int32 `xml:"epmc,omitempty" json:"epmc,omitempty"` - - // pool of IP addresses to balance - Pool []*RTTMAddress `xml:"pool,omitempty" json:"pool,omitempty"` -} - -type CreateRTTMRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRTTMRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneRTTMRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRTTMRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneRTTMRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRTTMRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetRTTMRegionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMRegionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetRTTMRegionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMRegionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*RTTMRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateRTTMRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRTTMRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'Y' or 'N', if 'Y', region will filled in with global settings - Autopopulate string `xml:"autopopulate,omitempty" json:"autopopulate,omitempty"` - - // number of addresses in each DNS response - Serve_count int32 `xml:"serve_count,omitempty" json:"serve_count,omitempty"` - - // pool_count, number of addresses to be included in the serve pool - Ep int32 `xml:"ep,omitempty" json:"ep,omitempty"` - - // 'ip', 'global', 'region', default 'global' - Failover_mode string `xml:"failover_mode,omitempty" json:"failover_mode,omitempty"` - - // for 'ip' mode, address to serve on failover. For 'region' mode, region_code of the region to failover to. - Failover_data string `xml:"failover_data,omitempty" json:"failover_data,omitempty"` - - // failover_count, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Apmc int32 `xml:"apmc,omitempty" json:"apmc,omitempty"` - - // failover_count2, number of addresses that must be 'ok', otherwise a region is considered 'failover' - Epmc int32 `xml:"epmc,omitempty" json:"epmc,omitempty"` - - // pool of IP addresses to balance - Pool []*RTTMAddress `xml:"pool,omitempty" json:"pool,omitempty"` -} - -type UpdateRTTMRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRTTMRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMRegionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneRTTMRegionRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRTTMRegionRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneRTTMRegionResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRTTMRegionResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateRTTMRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRTTMRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // an IP address to monitor and publish - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` -} - -type CreateRTTMRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateRTTMRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateRTTMRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRTTMRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // The IP of the pool entry to update - Address string `xml:"address,omitempty" json:"address,omitempty"` - - // If specified, the new IP address for this entry - New_address string `xml:"new_address,omitempty" json:"new_address,omitempty"` - - // a human-readable label - Label string `xml:"label,omitempty" json:"label,omitempty"` - - // how often this is served relative to others in pool - Weight int32 `xml:"weight,omitempty" json:"weight,omitempty"` - - // how this address reponds to monitoring: obey,remove,always,no - Serve_mode string `xml:"serve_mode,omitempty" json:"serve_mode,omitempty"` -} - -type UpdateRTTMRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateRTTMRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneRTTMRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRTTMRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // The IP of the pool entry to get - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type GetOneRTTMRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneRTTMRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *RTTMRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetRTTMRegionPoolEntriesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMRegionPoolEntriesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` -} - -type GetRTTMRegionPoolEntriesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetRTTMRegionPoolEntriesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*RTTMRegionPoolEntry `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneRTTMRegionPoolEntryRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRTTMRegionPoolEntryRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'global' or specific region code: 'US West', 'US Central', 'US East', 'EU West', 'EU Central', 'Asia', - Region_code string `xml:"region_code,omitempty" json:"region_code,omitempty"` - - // The IP of the pool entry to delete - Address string `xml:"address,omitempty" json:"address,omitempty"` -} - -type DeleteOneRTTMRegionPoolEntryResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneRTTMRegionPoolEntryResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateHTTPRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateHTTPRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // URL requests are redirecto to - Url string `xml:"url,omitempty" json:"url,omitempty"` - - // either '301' (temporary) or '302' (permanent) - Code string `xml:"code,omitempty" json:"code,omitempty"` - - // should redirected URL include requested URL - Keep_uri string `xml:"keep_uri,omitempty" json:"keep_uri,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateHTTPRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateHTTPRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *HTTPRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneHTTPRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneHTTPRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneHTTPRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneHTTPRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *HTTPRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetHTTPRedirectsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetHTTPRedirectsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetHTTPRedirectsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetHTTPRedirectsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*HTTPRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateHTTPRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateHTTPRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // URL requests are redirecto to - Url string `xml:"url,omitempty" json:"url,omitempty"` - - // either '301' (temporary) or '302' (permanent) - Code string `xml:"code,omitempty" json:"code,omitempty"` - - // should redirected URL include requested URL - Keep_uri string `xml:"keep_uri,omitempty" json:"keep_uri,omitempty"` -} - -type UpdateHTTPRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateHTTPRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *HTTPRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneHTTPRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneHTTPRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - Publish string `xml:"publish,omitempty" json:"publish,omitempty"` -} - -type DeleteOneHTTPRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneHTTPRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateAdvRedirectRuleRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateAdvRedirectRuleRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // either '301' (temporary) or '302' (permanent) - Code string `xml:"code,omitempty" json:"code,omitempty"` - - // host portion of URL to match - Host_prefix string `xml:"host_prefix,omitempty" json:"host_prefix,omitempty"` - - // path portion of URL to match - Path string `xml:"path,omitempty" json:"path,omitempty"` - - // replacement pattern - Url_pattern string `xml:"url_pattern,omitempty" json:"url_pattern,omitempty"` - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // Public ID of next AdvRedirect rule to be processed. (default to end of list) - Next_public_id string `xml:"next_public_id,omitempty" json:"next_public_id,omitempty"` -} - -type CreateAdvRedirectRuleResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateAdvRedirectRuleResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectRuleData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateAdvRedirectRuleRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateAdvRedirectRuleRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // public_id of Rule - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` - - // either '301' (temporary) or '302' (permanent) - Code string `xml:"code,omitempty" json:"code,omitempty"` - - // host portion of URL to match - Host_prefix string `xml:"host_prefix,omitempty" json:"host_prefix,omitempty"` - - // path portion of URL to match - Path string `xml:"path,omitempty" json:"path,omitempty"` - - // replacement pattern - Url_pattern string `xml:"url_pattern,omitempty" json:"url_pattern,omitempty"` - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // Public ID of next AdvRedirect rule to be processed. (default to end of list) - Next_public_id string `xml:"next_public_id,omitempty" json:"next_public_id,omitempty"` -} - -type UpdateAdvRedirectRuleResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateAdvRedirectRuleResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectRuleData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneAdvRedirectRuleRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneAdvRedirectRuleRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // public_id of Rule - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` -} - -type GetOneAdvRedirectRuleResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneAdvRedirectRuleResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectRuleData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetAdvRedirectRulesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAdvRedirectRulesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetAdvRedirectRulesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAdvRedirectRulesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*AdvRedirectRuleData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneAdvRedirectRuleRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneAdvRedirectRuleRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // public_id of Rule - Public_id string `xml:"public_id,omitempty" json:"public_id,omitempty"` -} - -type DeleteOneAdvRedirectRuleResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneAdvRedirectRuleResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectRuleData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateAdvRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateAdvRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // List of AdvRedirectRules - Rules []*AdvRedirectRuleData `xml:"rules,omitempty" json:"rules,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateAdvRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateAdvRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneAdvRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneAdvRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneAdvRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneAdvRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetAdvRedirectsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAdvRedirectsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Rules string `xml:"rules,omitempty" json:"rules,omitempty"` -} - -type GetAdvRedirectsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetAdvRedirectsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*AdvRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateAdvRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateAdvRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // List of AdvRedirectRules - Rules []*AdvRedirectRuleData `xml:"rules,omitempty" json:"rules,omitempty"` -} - -type UpdateAdvRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateAdvRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneAdvRedirectRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneAdvRedirectRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // 'Y'/'N', default 'Y' - Active string `xml:"active,omitempty" json:"active,omitempty"` - - // List of AdvRedirectRules - Rules []*AdvRedirectRuleData `xml:"rules,omitempty" json:"rules,omitempty"` -} - -type DeleteOneAdvRedirectResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneAdvRedirectResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *AdvRedirectData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetNodeListRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNodeListRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetNodeListResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetNodeListResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []string `xml:"data,omitempty" json:"data,omitempty"` -} - -type PublishZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ PublishZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Notes string `xml:"notes,omitempty" json:"notes,omitempty"` -} - -type PublishZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ PublishZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *PublishZoneData `xml:"data,omitempty" json:"data,omitempty"` -} - -type PruneZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ PruneZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type PruneZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ PruneZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneData `xml:"data,omitempty" json:"data,omitempty"` -} - -type FreezeZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ FreezeZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type FreezeZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ FreezeZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ThawZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ThawZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type ThawZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ThawZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type RestoreZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RestoreZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type RestoreZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ RestoreZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type BlockZoneRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ BlockZoneRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type BlockZoneResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ BlockZoneResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteZoneChangesetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteZoneChangesetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteZoneChangesetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteZoneChangesetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetZoneChangesetRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneChangesetRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetZoneChangesetResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneChangesetResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ZoneChangeData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetZoneNotesRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneNotesRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Limit int32 `xml:"limit,omitempty" json:"limit,omitempty"` - - Offset int32 `xml:"offset,omitempty" json:"offset,omitempty"` -} - -type GetZoneNotesResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneNotesResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ZoneNoteData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UploadZoneFileRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UploadZoneFileRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - File string `xml:"file,omitempty" json:"file,omitempty"` - - Create string `xml:"create,omitempty" json:"create,omitempty"` -} - -type UploadZoneFileResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UploadZoneFileResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TaskIDData `xml:"data,omitempty" json:"data,omitempty"` -} - -type TransferZoneInRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ TransferZoneInRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Master_ip string `xml:"master_ip,omitempty" json:"master_ip,omitempty"` -} - -type TransferZoneInResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ TransferZoneInResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TaskIDData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetTransferStatusRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTransferStatusRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetTransferStatusResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTransferStatusResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ZoneTransferStatus `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetZoneConfigOptionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneConfigOptionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetZoneConfigOptionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetZoneConfigOptionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ZoneConfigOptionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type SetZoneConfigOptionsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetZoneConfigOptionsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - Option []*ZoneConfigOptionData `xml:"option,omitempty" json:"option,omitempty"` -} - -type SetZoneConfigOptionsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ SetZoneConfigOptionsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ZoneConfigOptionData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateIPTrackRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateIPTrackRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // A, Dynamic_A, AAAA, Dynamic_AAAA - Record_types []string `xml:"record_types,omitempty" json:"record_types,omitempty"` - - // List of hostnames to watch for records - Hosts []string `xml:"hosts,omitempty" json:"hosts,omitempty"` - - // 'match', 'default', or a valid ttl - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // Mask that records should match - Netmask string `xml:"netmask,omitempty" json:"netmask,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type CreateIPTrackResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateIPTrackResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPTrackData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneIPTrackRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneIPTrackRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Iptrack_id int64 `xml:"iptrack_id,omitempty" json:"iptrack_id,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type GetOneIPTrackResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneIPTrackResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPTrackData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetIPTracksRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetIPTracksRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetIPTracksResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetIPTracksResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*IPTrackData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateIPTrackRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateIPTrackRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Iptrack_id int64 `xml:"iptrack_id,omitempty" json:"iptrack_id,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` - - // A, Dynamic_A, AAAA, Dynamic_AAAA - Record_types []string `xml:"record_types,omitempty" json:"record_types,omitempty"` - - // List of hostnames to watch for records - Hosts []string `xml:"hosts,omitempty" json:"hosts,omitempty"` - - // 'match', 'default', or a valid ttl - Ttl string `xml:"ttl,omitempty" json:"ttl,omitempty"` - - // Mask that records should match - Netmask string `xml:"netmask,omitempty" json:"netmask,omitempty"` -} - -type UpdateIPTrackResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateIPTrackResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPTrackData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneIPTrackRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneIPTrackRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Iptrack_id int64 `xml:"iptrack_id,omitempty" json:"iptrack_id,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeleteOneIPTrackResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneIPTrackResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateIPTrackRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateIPTrackRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Iptrack_id int64 `xml:"iptrack_id,omitempty" json:"iptrack_id,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type ActivateIPTrackResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateIPTrackResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPTrackData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateIPTrackRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateIPTrackRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Iptrack_id int64 `xml:"iptrack_id,omitempty" json:"iptrack_id,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // hostname - Fqdn string `xml:"fqdn,omitempty" json:"fqdn,omitempty"` -} - -type DeactivateIPTrackResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateIPTrackResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *IPTrackData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateDNSSECRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDNSSECRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // , contact that gets key notifications - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - Keys []*DNSSECKey `xml:"keys,omitempty" json:"keys,omitempty"` -} - -type CreateDNSSECResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateDNSSECResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSSECData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneDNSSECRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDNSSECRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetOneDNSSECResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneDNSSECResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSSECData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDNSSECsRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNSSECsRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetDNSSECsResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNSSECsResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DNSSECData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateDNSSECRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDNSSECRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // , contact that gets key notifications - Contact_nickname string `xml:"contact_nickname,omitempty" json:"contact_nickname,omitempty"` - - // when notifications are sent - Notify_events string `xml:"notify_events,omitempty" json:"notify_events,omitempty"` - - Keys []*DNSSECKey `xml:"keys,omitempty" json:"keys,omitempty"` -} - -type UpdateDNSSECResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateDNSSECResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSSECData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneDNSSECRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDNSSECRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteOneDNSSECResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneDNSSECResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type ActivateDNSSECRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateDNSSECRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type ActivateDNSSECResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ ActivateDNSSECResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSSECData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeactivateDNSSECRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateDNSSECRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeactivateDNSSECResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeactivateDNSSECResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *DNSSECData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetDNSSECTimelineRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNSSECTimelineRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // name of zone - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // an epoch time, or 'now' - Start_ts string `xml:"start_ts,omitempty" json:"start_ts,omitempty"` - - // an epoch time, or 'now' - End_ts string `xml:"end_ts,omitempty" json:"end_ts,omitempty"` -} - -type GetDNSSECTimelineResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetDNSSECTimelineResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*DNSSECTimelineEvent `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetTasksRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTasksRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Name string `xml:"name,omitempty" json:"name,omitempty"` - - Customer_name string `xml:"customer_name,omitempty" json:"customer_name,omitempty"` - - Zone_name string `xml:"zone_name,omitempty" json:"zone_name,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` -} - -type GetTasksResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetTasksResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*TaskData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneTaskRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTaskRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` -} - -type GetOneTaskResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneTaskResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TaskData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CancelTaskRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CancelTaskRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - Task_id string `xml:"task_id,omitempty" json:"task_id,omitempty"` -} - -type CancelTaskResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CancelTaskResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *TaskData `xml:"data,omitempty" json:"data,omitempty"` -} - -type CreateExtNameserverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateExtNameserverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // can be empty or 'default' - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // Y/N - does this block requests or add them - Deny string `xml:"deny,omitempty" json:"deny,omitempty"` - - Hosts []*ExtNSEntry `xml:"hosts,omitempty" json:"hosts,omitempty"` - - Tsig_key_name string `xml:"tsig_key_name,omitempty" json:"tsig_key_name,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type CreateExtNameserverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ CreateExtNameserverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ExtNameserverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetOneExtNameserverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneExtNameserverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // can be empty or 'default' - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type GetOneExtNameserverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetOneExtNameserverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ExtNameserverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type GetExtNameserversRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetExtNameserversRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` -} - -type GetExtNameserversResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ GetExtNameserversResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data []*ExtNameserverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type UpdateExtNameserverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateExtNameserverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // can be empty or 'default' - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` - - // Y/N - does this block requests or add them - Deny string `xml:"deny,omitempty" json:"deny,omitempty"` - - Hosts []*ExtNSEntry `xml:"hosts,omitempty" json:"hosts,omitempty"` - - Tsig_key_name string `xml:"tsig_key_name,omitempty" json:"tsig_key_name,omitempty"` - - Active string `xml:"active,omitempty" json:"active,omitempty"` -} - -type UpdateExtNameserverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ UpdateExtNameserverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data *ExtNameserverData `xml:"data,omitempty" json:"data,omitempty"` -} - -type DeleteOneExtNameserverRequestType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneExtNameserverRequest"` - - Token string `xml:"token,omitempty" json:"token,omitempty"` - - Fault_incompat int32 `xml:"fault_incompat,omitempty" json:"fault_incompat,omitempty"` - - // can be empty or 'default' - Zone string `xml:"zone,omitempty" json:"zone,omitempty"` -} - -type DeleteOneExtNameserverResponseType struct { - XMLName xml.Name `xml:"https://api2.dynect.net/wsdl/3.7.16/Dynect/ DeleteOneExtNameserverResponse"` - - Job_id string `xml:"job_id,omitempty" json:"job_id,omitempty"` - - Status string `xml:"status,omitempty" json:"status,omitempty"` - - Msgs []*Messages `xml:"messages,omitempty" json:"msgs,omitempty"` - - Data string `xml:"data,omitempty" json:"data,omitempty"` -} - -type Dynect interface { - - // Error can be either of the following types: - // - // - fault - - GetJob(request *GetJobRequestType) (*GetJobResponseType, error) - - GetJobContext(ctx context.Context, request *GetJobRequestType) (*GetJobResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* starts a DynectAPI session */ - SessionLogin(request *SessionLoginRequestType) (*SessionLoginResponseType, error) - - SessionLoginContext(ctx context.Context, request *SessionLoginRequestType) (*SessionLoginResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* ends a DynectAPI session and invalidates the token */ - SessionLogout(request *SessionLogoutRequestType) (*SessionLogoutResponseType, error) - - SessionLogoutContext(ctx context.Context, request *SessionLogoutRequestType) (*SessionLogoutResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* checks where session and token are still valid */ - SessionIsAlive(request *SessionIsAliveRequestType) (*SessionIsAliveResponseType, error) - - SessionIsAliveContext(ctx context.Context, request *SessionIsAliveRequestType) (*SessionIsAliveResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* No operation, prevents sessions from timing out */ - SessionKeepAlive(request *SessionKeepAliveRequestType) (*SessionKeepAliveResponseType, error) - - SessionKeepAliveContext(ctx context.Context, request *SessionKeepAliveRequestType) (*SessionKeepAliveResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Support only; adds permissions from a given customer */ - ScopeIn(request *ScopeInRequestType) (*ScopeInResponseType, error) - - ScopeInContext(ctx context.Context, request *ScopeInRequestType) (*ScopeInResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Support only; changes permissions to those of some particular user */ - ScopeAs(request *ScopeAsRequestType) (*ScopeAsResponseType, error) - - ScopeAsContext(ctx context.Context, request *ScopeAsRequestType) (*ScopeAsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Undoes any ScopeIn or ScopeAs, returning to usual permissions */ - Unscope(request *UnscopeRequestType) (*UnscopeResponseType, error) - - UnscopeContext(ctx context.Context, request *UnscopeRequestType) (*UnscopeResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Retrieves Queries Per Second statistics in CSV format */ - GetQueryStats(request *GetQueryStatsRequestType) (*GetQueryStatsResponseType, error) - - GetQueryStatsContext(ctx context.Context, request *GetQueryStatsRequestType) (*GetQueryStatsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateGeo(request *CreateGeoRequestType) (*CreateGeoResponseType, error) - - CreateGeoContext(ctx context.Context, request *CreateGeoRequestType) (*CreateGeoResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateGeo(request *UpdateGeoRequestType) (*UpdateGeoResponseType, error) - - UpdateGeoContext(ctx context.Context, request *UpdateGeoRequestType) (*UpdateGeoResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetGeos(request *GetGeosRequestType) (*GetGeosResponseType, error) - - GetGeosContext(ctx context.Context, request *GetGeosRequestType) (*GetGeosResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneGeo(request *GetOneGeoRequestType) (*GetOneGeoResponseType, error) - - GetOneGeoContext(ctx context.Context, request *GetOneGeoRequestType) (*GetOneGeoResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneGeo(request *DeleteOneGeoRequestType) (*DeleteOneGeoResponseType, error) - - DeleteOneGeoContext(ctx context.Context, request *DeleteOneGeoRequestType) (*DeleteOneGeoResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateGeo(request *ActivateGeoRequestType) (*ActivateGeoResponseType, error) - - ActivateGeoContext(ctx context.Context, request *ActivateGeoRequestType) (*ActivateGeoResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateGeo(request *DeactivateGeoRequestType) (*DeactivateGeoResponseType, error) - - DeactivateGeoContext(ctx context.Context, request *DeactivateGeoRequestType) (*DeactivateGeoResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateGeoRegionGroup(request *CreateGeoRegionGroupRequestType) (*CreateGeoRegionGroupResponseType, error) - - CreateGeoRegionGroupContext(ctx context.Context, request *CreateGeoRegionGroupRequestType) (*CreateGeoRegionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateGeoRegionGroup(request *UpdateGeoRegionGroupRequestType) (*UpdateGeoRegionGroupResponseType, error) - - UpdateGeoRegionGroupContext(ctx context.Context, request *UpdateGeoRegionGroupRequestType) (*UpdateGeoRegionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneGeoRegionGroup(request *DeleteOneGeoRegionGroupRequestType) (*DeleteOneGeoRegionGroupResponseType, error) - - DeleteOneGeoRegionGroupContext(ctx context.Context, request *DeleteOneGeoRegionGroupRequestType) (*DeleteOneGeoRegionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetGeoRegionGroups(request *GetGeoRegionGroupsRequestType) (*GetGeoRegionGroupsResponseType, error) - - GetGeoRegionGroupsContext(ctx context.Context, request *GetGeoRegionGroupsRequestType) (*GetGeoRegionGroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneGeoRegionGroup(request *GetOneGeoRegionGroupRequestType) (*GetOneGeoRegionGroupResponseType, error) - - GetOneGeoRegionGroupContext(ctx context.Context, request *GetOneGeoRegionGroupRequestType) (*GetOneGeoRegionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateGeoNode(request *CreateGeoNodeRequestType) (*CreateGeoNodeResponseType, error) - - CreateGeoNodeContext(ctx context.Context, request *CreateGeoNodeRequestType) (*CreateGeoNodeResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneGeoNode(request *DeleteOneGeoNodeRequestType) (*DeleteOneGeoNodeResponseType, error) - - DeleteOneGeoNodeContext(ctx context.Context, request *DeleteOneGeoNodeRequestType) (*DeleteOneGeoNodeResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetGeoNodes(request *GetGeoNodesRequestType) (*GetGeoNodesResponseType, error) - - GetGeoNodesContext(ctx context.Context, request *GetGeoNodesRequestType) (*GetGeoNodesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDSF(request *CreateDSFRequestType) (*CreateDSFResponseType, error) - - CreateDSFContext(ctx context.Context, request *CreateDSFRequestType) (*CreateDSFResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSF(request *UpdateDSFRequestType) (*UpdateDSFResponseType, error) - - UpdateDSFContext(ctx context.Context, request *UpdateDSFRequestType) (*UpdateDSFResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFs(request *GetDSFsRequestType) (*GetDSFsResponseType, error) - - GetDSFsContext(ctx context.Context, request *GetDSFsRequestType) (*GetDSFsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFNotifiers(request *GetDSFNotifiersRequestType) (*GetDSFNotifiersResponseType, error) - - GetDSFNotifiersContext(ctx context.Context, request *GetDSFNotifiersRequestType) (*GetDSFNotifiersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSF(request *DeleteOneDSFRequestType) (*DeleteOneDSFResponseType, error) - - DeleteOneDSFContext(ctx context.Context, request *DeleteOneDSFRequestType) (*DeleteOneDSFResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneDSF(request *GetOneDSFRequestType) (*GetOneDSFResponseType, error) - - GetOneDSFContext(ctx context.Context, request *GetOneDSFRequestType) (*GetOneDSFResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RevertDSF(request *RevertDSFRequestType) (*RevertDSFResponseType, error) - - RevertDSFContext(ctx context.Context, request *RevertDSFRequestType) (*RevertDSFResponseType, error) - - // Error can be either of the following types: - // - // - fault - - PublishDSF(request *PublishDSFRequestType) (*PublishDSFResponseType, error) - - PublishDSFContext(ctx context.Context, request *PublishDSFRequestType) (*PublishDSFResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddDSFNotifier(request *AddDSFNotifierRequestType) (*AddDSFNotifierResponseType, error) - - AddDSFNotifierContext(ctx context.Context, request *AddDSFNotifierRequestType) (*AddDSFNotifierResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemoveDSFNotifier(request *RemoveDSFNotifierRequestType) (*RemoveDSFNotifierResponseType, error) - - RemoveDSFNotifierContext(ctx context.Context, request *RemoveDSFNotifierRequestType) (*RemoveDSFNotifierResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDSFRuleset(request *CreateDSFRulesetRequestType) (*CreateDSFRulesetResponseType, error) - - CreateDSFRulesetContext(ctx context.Context, request *CreateDSFRulesetRequestType) (*CreateDSFRulesetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSFRuleset(request *UpdateDSFRulesetRequestType) (*UpdateDSFRulesetResponseType, error) - - UpdateDSFRulesetContext(ctx context.Context, request *UpdateDSFRulesetRequestType) (*UpdateDSFRulesetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFRulesets(request *GetDSFRulesetsRequestType) (*GetDSFRulesetsResponseType, error) - - GetDSFRulesetsContext(ctx context.Context, request *GetDSFRulesetsRequestType) (*GetDSFRulesetsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneDSFRuleset(request *GetOneDSFRulesetRequestType) (*GetOneDSFRulesetResponseType, error) - - GetOneDSFRulesetContext(ctx context.Context, request *GetOneDSFRulesetRequestType) (*GetOneDSFRulesetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSFRuleset(request *DeleteOneDSFRulesetRequestType) (*DeleteOneDSFRulesetResponseType, error) - - DeleteOneDSFRulesetContext(ctx context.Context, request *DeleteOneDSFRulesetRequestType) (*DeleteOneDSFRulesetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDSFResponsePool(request *CreateDSFResponsePoolRequestType) (*CreateDSFResponsePoolResponseType, error) - - CreateDSFResponsePoolContext(ctx context.Context, request *CreateDSFResponsePoolRequestType) (*CreateDSFResponsePoolResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSFResponsePool(request *UpdateDSFResponsePoolRequestType) (*UpdateDSFResponsePoolResponseType, error) - - UpdateDSFResponsePoolContext(ctx context.Context, request *UpdateDSFResponsePoolRequestType) (*UpdateDSFResponsePoolResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFResponsePools(request *GetDSFResponsePoolsRequestType) (*GetDSFResponsePoolsResponseType, error) - - GetDSFResponsePoolsContext(ctx context.Context, request *GetDSFResponsePoolsRequestType) (*GetDSFResponsePoolsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneDSFResponsePool(request *GetOneDSFResponsePoolRequestType) (*GetOneDSFResponsePoolResponseType, error) - - GetOneDSFResponsePoolContext(ctx context.Context, request *GetOneDSFResponsePoolRequestType) (*GetOneDSFResponsePoolResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSFResponsePool(request *DeleteOneDSFResponsePoolRequestType) (*DeleteOneDSFResponsePoolResponseType, error) - - DeleteOneDSFResponsePoolContext(ctx context.Context, request *DeleteOneDSFResponsePoolRequestType) (*DeleteOneDSFResponsePoolResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDSFRecordSetFailoverChain(request *CreateDSFRecordSetFailoverChainRequestType) (*CreateDSFRecordSetFailoverChainResponseType, error) - - CreateDSFRecordSetFailoverChainContext(ctx context.Context, request *CreateDSFRecordSetFailoverChainRequestType) (*CreateDSFRecordSetFailoverChainResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSFRecordSetFailoverChain(request *UpdateDSFRecordSetFailoverChainRequestType) (*UpdateDSFRecordSetFailoverChainResponseType, error) - - UpdateDSFRecordSetFailoverChainContext(ctx context.Context, request *UpdateDSFRecordSetFailoverChainRequestType) (*UpdateDSFRecordSetFailoverChainResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFRecordSetFailoverChains(request *GetDSFRecordSetFailoverChainsRequestType) (*GetDSFRecordSetFailoverChainsResponseType, error) - - GetDSFRecordSetFailoverChainsContext(ctx context.Context, request *GetDSFRecordSetFailoverChainsRequestType) (*GetDSFRecordSetFailoverChainsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneDSFRecordSetFailoverChain(request *GetOneDSFRecordSetFailoverChainRequestType) (*GetOneDSFRecordSetFailoverChainResponseType, error) - - GetOneDSFRecordSetFailoverChainContext(ctx context.Context, request *GetOneDSFRecordSetFailoverChainRequestType) (*GetOneDSFRecordSetFailoverChainResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSFRecordSetFailoverChain(request *DeleteOneDSFRecordSetFailoverChainRequestType) (*DeleteOneDSFRecordSetFailoverChainResponseType, error) - - DeleteOneDSFRecordSetFailoverChainContext(ctx context.Context, request *DeleteOneDSFRecordSetFailoverChainRequestType) (*DeleteOneDSFRecordSetFailoverChainResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDSFRecordSet(request *CreateDSFRecordSetRequestType) (*CreateDSFRecordSetResponseType, error) - - CreateDSFRecordSetContext(ctx context.Context, request *CreateDSFRecordSetRequestType) (*CreateDSFRecordSetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSFRecordSet(request *UpdateDSFRecordSetRequestType) (*UpdateDSFRecordSetResponseType, error) - - UpdateDSFRecordSetContext(ctx context.Context, request *UpdateDSFRecordSetRequestType) (*UpdateDSFRecordSetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneDSFRecordSet(request *GetOneDSFRecordSetRequestType) (*GetOneDSFRecordSetResponseType, error) - - GetOneDSFRecordSetContext(ctx context.Context, request *GetOneDSFRecordSetRequestType) (*GetOneDSFRecordSetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFRecordSets(request *GetDSFRecordSetsRequestType) (*GetDSFRecordSetsResponseType, error) - - GetDSFRecordSetsContext(ctx context.Context, request *GetDSFRecordSetsRequestType) (*GetDSFRecordSetsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSFRecordSet(request *DeleteOneDSFRecordSetRequestType) (*DeleteOneDSFRecordSetResponseType, error) - - DeleteOneDSFRecordSetContext(ctx context.Context, request *DeleteOneDSFRecordSetRequestType) (*DeleteOneDSFRecordSetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDSFRecord(request *CreateDSFRecordRequestType) (*CreateDSFRecordResponseType, error) - - CreateDSFRecordContext(ctx context.Context, request *CreateDSFRecordRequestType) (*CreateDSFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSFRecord(request *UpdateDSFRecordRequestType) (*UpdateDSFRecordResponseType, error) - - UpdateDSFRecordContext(ctx context.Context, request *UpdateDSFRecordRequestType) (*UpdateDSFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneDSFRecord(request *GetOneDSFRecordRequestType) (*GetOneDSFRecordResponseType, error) - - GetOneDSFRecordContext(ctx context.Context, request *GetOneDSFRecordRequestType) (*GetOneDSFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFRecords(request *GetDSFRecordsRequestType) (*GetDSFRecordsResponseType, error) - - GetDSFRecordsContext(ctx context.Context, request *GetDSFRecordsRequestType) (*GetDSFRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSFRecord(request *DeleteOneDSFRecordRequestType) (*DeleteOneDSFRecordResponseType, error) - - DeleteOneDSFRecordContext(ctx context.Context, request *DeleteOneDSFRecordRequestType) (*DeleteOneDSFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddDSFNode(request *AddDSFNodeRequestType) (*AddDSFNodeResponseType, error) - - AddDSFNodeContext(ctx context.Context, request *AddDSFNodeRequestType) (*AddDSFNodeResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSFNodes(request *UpdateDSFNodesRequestType) (*UpdateDSFNodesResponseType, error) - - UpdateDSFNodesContext(ctx context.Context, request *UpdateDSFNodesRequestType) (*UpdateDSFNodesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFNodes(request *GetDSFNodesRequestType) (*GetDSFNodesResponseType, error) - - GetDSFNodesContext(ctx context.Context, request *GetDSFNodesRequestType) (*GetDSFNodesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSFNode(request *DeleteOneDSFNodeRequestType) (*DeleteOneDSFNodeResponseType, error) - - DeleteOneDSFNodeContext(ctx context.Context, request *DeleteOneDSFNodeRequestType) (*DeleteOneDSFNodeResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDSFMonitor(request *CreateDSFMonitorRequestType) (*CreateDSFMonitorResponseType, error) - - CreateDSFMonitorContext(ctx context.Context, request *CreateDSFMonitorRequestType) (*CreateDSFMonitorResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateDSFMonitor(request *UpdateDSFMonitorRequestType) (*UpdateDSFMonitorResponseType, error) - - UpdateDSFMonitorContext(ctx context.Context, request *UpdateDSFMonitorRequestType) (*UpdateDSFMonitorResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneDSFMonitor(request *GetOneDSFMonitorRequestType) (*GetOneDSFMonitorResponseType, error) - - GetOneDSFMonitorContext(ctx context.Context, request *GetOneDSFMonitorRequestType) (*GetOneDSFMonitorResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFMonitors(request *GetDSFMonitorsRequestType) (*GetDSFMonitorsResponseType, error) - - GetDSFMonitorsContext(ctx context.Context, request *GetDSFMonitorsRequestType) (*GetDSFMonitorsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneDSFMonitor(request *DeleteOneDSFMonitorRequestType) (*DeleteOneDSFMonitorResponseType, error) - - DeleteOneDSFMonitorContext(ctx context.Context, request *DeleteOneDSFMonitorRequestType) (*DeleteOneDSFMonitorResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddDSFMonitorNotifier(request *AddDSFMonitorNotifierRequestType) (*AddDSFMonitorNotifierResponseType, error) - - AddDSFMonitorNotifierContext(ctx context.Context, request *AddDSFMonitorNotifierRequestType) (*AddDSFMonitorNotifierResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDSFMonitorSites(request *GetDSFMonitorSitesRequestType) (*GetDSFMonitorSitesResponseType, error) - - GetDSFMonitorSitesContext(ctx context.Context, request *GetDSFMonitorSitesRequestType) (*GetDSFMonitorSitesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateNotifier(request *CreateNotifierRequestType) (*CreateNotifierResponseType, error) - - CreateNotifierContext(ctx context.Context, request *CreateNotifierRequestType) (*CreateNotifierResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateNotifier(request *UpdateNotifierRequestType) (*UpdateNotifierResponseType, error) - - UpdateNotifierContext(ctx context.Context, request *UpdateNotifierRequestType) (*UpdateNotifierResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneNotifier(request *GetOneNotifierRequestType) (*GetOneNotifierResponseType, error) - - GetOneNotifierContext(ctx context.Context, request *GetOneNotifierRequestType) (*GetOneNotifierResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetNotifiers(request *GetNotifiersRequestType) (*GetNotifiersResponseType, error) - - GetNotifiersContext(ctx context.Context, request *GetNotifiersRequestType) (*GetNotifiersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneNotifier(request *DeleteOneNotifierRequestType) (*DeleteOneNotifierResponseType, error) - - DeleteOneNotifierContext(ctx context.Context, request *DeleteOneNotifierRequestType) (*DeleteOneNotifierResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateConfigLimit(request *CreateConfigLimitRequestType) (*CreateConfigLimitResponseType, error) - - CreateConfigLimitContext(ctx context.Context, request *CreateConfigLimitRequestType) (*CreateConfigLimitResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneConfigLimit(request *GetOneConfigLimitRequestType) (*GetOneConfigLimitResponseType, error) - - GetOneConfigLimitContext(ctx context.Context, request *GetOneConfigLimitRequestType) (*GetOneConfigLimitResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetConfigLimits(request *GetConfigLimitsRequestType) (*GetConfigLimitsResponseType, error) - - GetConfigLimitsContext(ctx context.Context, request *GetConfigLimitsRequestType) (*GetConfigLimitsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateConfigLimit(request *UpdateConfigLimitRequestType) (*UpdateConfigLimitResponseType, error) - - UpdateConfigLimitContext(ctx context.Context, request *UpdateConfigLimitRequestType) (*UpdateConfigLimitResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneConfigLimit(request *DeleteOneConfigLimitRequestType) (*DeleteOneConfigLimitResponseType, error) - - DeleteOneConfigLimitContext(ctx context.Context, request *DeleteOneConfigLimitRequestType) (*DeleteOneConfigLimitResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new PermissionGroup */ - CreatePermissionGroup(request *CreatePermissionGroupRequestType) (*CreatePermissionGroupResponseType, error) - - CreatePermissionGroupContext(ctx context.Context, request *CreatePermissionGroupRequestType) (*CreatePermissionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single PermissionGroup */ - GetOnePermissionGroup(request *GetOnePermissionGroupRequestType) (*GetOnePermissionGroupResponseType, error) - - GetOnePermissionGroupContext(ctx context.Context, request *GetOnePermissionGroupRequestType) (*GetOnePermissionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every PermissionGroup */ - GetPermissionGroups(request *GetPermissionGroupsRequestType) (*GetPermissionGroupsResponseType, error) - - GetPermissionGroupsContext(ctx context.Context, request *GetPermissionGroupsRequestType) (*GetPermissionGroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single PermissionGroup */ - DeleteOnePermissionGroup(request *DeleteOnePermissionGroupRequestType) (*DeleteOnePermissionGroupResponseType, error) - - DeleteOnePermissionGroupContext(ctx context.Context, request *DeleteOnePermissionGroupRequestType) (*DeleteOnePermissionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdatePermissionGroup(request *UpdatePermissionGroupRequestType) (*UpdatePermissionGroupResponseType, error) - - UpdatePermissionGroupContext(ctx context.Context, request *UpdatePermissionGroupRequestType) (*UpdatePermissionGroupResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetCustomerPermissions(request *GetCustomerPermissionsRequestType) (*GetCustomerPermissionsResponseType, error) - - GetCustomerPermissionsContext(ctx context.Context, request *GetCustomerPermissionsRequestType) (*GetCustomerPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetUserPermissions(request *GetUserPermissionsRequestType) (*GetUserPermissionsResponseType, error) - - GetUserPermissionsContext(ctx context.Context, request *GetUserPermissionsRequestType) (*GetUserPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CheckPermissions(request *CheckPermissionsRequestType) (*CheckPermissionsResponseType, error) - - CheckPermissionsContext(ctx context.Context, request *CheckPermissionsRequestType) (*CheckPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddPermissionGroupUsers(request *AddPermissionGroupUsersRequestType) (*AddPermissionGroupUsersResponseType, error) - - AddPermissionGroupUsersContext(ctx context.Context, request *AddPermissionGroupUsersRequestType) (*AddPermissionGroupUsersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetPermissionGroupUsers(request *SetPermissionGroupUsersRequestType) (*SetPermissionGroupUsersResponseType, error) - - SetPermissionGroupUsersContext(ctx context.Context, request *SetPermissionGroupUsersRequestType) (*SetPermissionGroupUsersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemovePermissionGroupUsers(request *RemovePermissionGroupUsersRequestType) (*RemovePermissionGroupUsersResponseType, error) - - RemovePermissionGroupUsersContext(ctx context.Context, request *RemovePermissionGroupUsersRequestType) (*RemovePermissionGroupUsersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddPermissionGroupSubgroups(request *AddPermissionGroupSubgroupsRequestType) (*AddPermissionGroupSubgroupsResponseType, error) - - AddPermissionGroupSubgroupsContext(ctx context.Context, request *AddPermissionGroupSubgroupsRequestType) (*AddPermissionGroupSubgroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetPermissionGroupSubgroups(request *SetPermissionGroupSubgroupsRequestType) (*SetPermissionGroupSubgroupsResponseType, error) - - SetPermissionGroupSubgroupsContext(ctx context.Context, request *SetPermissionGroupSubgroupsRequestType) (*SetPermissionGroupSubgroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemovePermissionGroupSubgroups(request *RemovePermissionGroupSubgroupsRequestType) (*RemovePermissionGroupSubgroupsResponseType, error) - - RemovePermissionGroupSubgroupsContext(ctx context.Context, request *RemovePermissionGroupSubgroupsRequestType) (*RemovePermissionGroupSubgroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddPermissionGroupPermissions(request *AddPermissionGroupPermissionsRequestType) (*AddPermissionGroupPermissionsResponseType, error) - - AddPermissionGroupPermissionsContext(ctx context.Context, request *AddPermissionGroupPermissionsRequestType) (*AddPermissionGroupPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetPermissionGroupPermissions(request *SetPermissionGroupPermissionsRequestType) (*SetPermissionGroupPermissionsResponseType, error) - - SetPermissionGroupPermissionsContext(ctx context.Context, request *SetPermissionGroupPermissionsRequestType) (*SetPermissionGroupPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemovePermissionGroupPermissions(request *RemovePermissionGroupPermissionsRequestType) (*RemovePermissionGroupPermissionsResponseType, error) - - RemovePermissionGroupPermissionsContext(ctx context.Context, request *RemovePermissionGroupPermissionsRequestType) (*RemovePermissionGroupPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddPermissionGroupZones(request *AddPermissionGroupZonesRequestType) (*AddPermissionGroupZonesResponseType, error) - - AddPermissionGroupZonesContext(ctx context.Context, request *AddPermissionGroupZonesRequestType) (*AddPermissionGroupZonesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetPermissionGroupZones(request *SetPermissionGroupZonesRequestType) (*SetPermissionGroupZonesResponseType, error) - - SetPermissionGroupZonesContext(ctx context.Context, request *SetPermissionGroupZonesRequestType) (*SetPermissionGroupZonesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemovePermissionGroupZones(request *RemovePermissionGroupZonesRequestType) (*RemovePermissionGroupZonesResponseType, error) - - RemovePermissionGroupZonesContext(ctx context.Context, request *RemovePermissionGroupZonesRequestType) (*RemovePermissionGroupZonesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddUserGroups(request *AddUserGroupsRequestType) (*AddUserGroupsResponseType, error) - - AddUserGroupsContext(ctx context.Context, request *AddUserGroupsRequestType) (*AddUserGroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetUserGroups(request *SetUserGroupsRequestType) (*SetUserGroupsResponseType, error) - - SetUserGroupsContext(ctx context.Context, request *SetUserGroupsRequestType) (*SetUserGroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemoveUserGroups(request *RemoveUserGroupsRequestType) (*RemoveUserGroupsResponseType, error) - - RemoveUserGroupsContext(ctx context.Context, request *RemoveUserGroupsRequestType) (*RemoveUserGroupsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddUserZones(request *AddUserZonesRequestType) (*AddUserZonesResponseType, error) - - AddUserZonesContext(ctx context.Context, request *AddUserZonesRequestType) (*AddUserZonesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetUserZones(request *SetUserZonesRequestType) (*SetUserZonesResponseType, error) - - SetUserZonesContext(ctx context.Context, request *SetUserZonesRequestType) (*SetUserZonesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemoveUserZones(request *RemoveUserZonesRequestType) (*RemoveUserZonesResponseType, error) - - RemoveUserZonesContext(ctx context.Context, request *RemoveUserZonesRequestType) (*RemoveUserZonesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddUserPermissions(request *AddUserPermissionsRequestType) (*AddUserPermissionsResponseType, error) - - AddUserPermissionsContext(ctx context.Context, request *AddUserPermissionsRequestType) (*AddUserPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetUserPermissions(request *SetUserPermissionsRequestType) (*SetUserPermissionsResponseType, error) - - SetUserPermissionsContext(ctx context.Context, request *SetUserPermissionsRequestType) (*SetUserPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemoveUserPermissions(request *RemoveUserPermissionsRequestType) (*RemoveUserPermissionsResponseType, error) - - RemoveUserPermissionsContext(ctx context.Context, request *RemoveUserPermissionsRequestType) (*RemoveUserPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddUserForbids(request *AddUserForbidsRequestType) (*AddUserForbidsResponseType, error) - - AddUserForbidsContext(ctx context.Context, request *AddUserForbidsRequestType) (*AddUserForbidsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetUserForbids(request *SetUserForbidsRequestType) (*SetUserForbidsResponseType, error) - - SetUserForbidsContext(ctx context.Context, request *SetUserForbidsRequestType) (*SetUserForbidsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemoveUserForbids(request *RemoveUserForbidsRequestType) (*RemoveUserForbidsResponseType, error) - - RemoveUserForbidsContext(ctx context.Context, request *RemoveUserForbidsRequestType) (*RemoveUserForbidsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddCustomerPermissions(request *AddCustomerPermissionsRequestType) (*AddCustomerPermissionsResponseType, error) - - AddCustomerPermissionsContext(ctx context.Context, request *AddCustomerPermissionsRequestType) (*AddCustomerPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetCustomerPermissions(request *SetCustomerPermissionsRequestType) (*SetCustomerPermissionsResponseType, error) - - SetCustomerPermissionsContext(ctx context.Context, request *SetCustomerPermissionsRequestType) (*SetCustomerPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemoveCustomerPermissions(request *RemoveCustomerPermissionsRequestType) (*RemoveCustomerPermissionsResponseType, error) - - RemoveCustomerPermissionsContext(ctx context.Context, request *RemoveCustomerPermissionsRequestType) (*RemoveCustomerPermissionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddCustomerForbids(request *AddCustomerForbidsRequestType) (*AddCustomerForbidsResponseType, error) - - AddCustomerForbidsContext(ctx context.Context, request *AddCustomerForbidsRequestType) (*AddCustomerForbidsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetCustomerForbids(request *SetCustomerForbidsRequestType) (*SetCustomerForbidsResponseType, error) - - SetCustomerForbidsContext(ctx context.Context, request *SetCustomerForbidsRequestType) (*SetCustomerForbidsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RemoveCustomerForbids(request *RemoveCustomerForbidsRequestType) (*RemoveCustomerForbidsResponseType, error) - - RemoveCustomerForbidsContext(ctx context.Context, request *RemoveCustomerForbidsRequestType) (*RemoveCustomerForbidsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetHostStatsFlags(request *GetHostStatsFlagsRequestType) (*GetHostStatsFlagsResponseType, error) - - GetHostStatsFlagsContext(ctx context.Context, request *GetHostStatsFlagsRequestType) (*GetHostStatsFlagsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetHostStatsFlags(request *SetHostStatsFlagsRequestType) (*SetHostStatsFlagsResponseType, error) - - SetHostStatsFlagsContext(ctx context.Context, request *SetHostStatsFlagsRequestType) (*SetHostStatsFlagsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateTSIGKey(request *CreateTSIGKeyRequestType) (*CreateTSIGKeyResponseType, error) - - CreateTSIGKeyContext(ctx context.Context, request *CreateTSIGKeyRequestType) (*CreateTSIGKeyResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneTSIGKey(request *GetOneTSIGKeyRequestType) (*GetOneTSIGKeyResponseType, error) - - GetOneTSIGKeyContext(ctx context.Context, request *GetOneTSIGKeyRequestType) (*GetOneTSIGKeyResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetTSIGKeys(request *GetTSIGKeysRequestType) (*GetTSIGKeysResponseType, error) - - GetTSIGKeysContext(ctx context.Context, request *GetTSIGKeysRequestType) (*GetTSIGKeysResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateTSIGKey(request *UpdateTSIGKeyRequestType) (*UpdateTSIGKeyResponseType, error) - - UpdateTSIGKeyContext(ctx context.Context, request *UpdateTSIGKeyRequestType) (*UpdateTSIGKeyResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneTSIGKey(request *DeleteOneTSIGKeyRequestType) (*DeleteOneTSIGKeyResponseType, error) - - DeleteOneTSIGKeyContext(ctx context.Context, request *DeleteOneTSIGKeyRequestType) (*DeleteOneTSIGKeyResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new Zone */ - CreateZone(request *CreateZoneRequestType) (*CreateZoneResponseType, error) - - CreateZoneContext(ctx context.Context, request *CreateZoneRequestType) (*CreateZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single Zone */ - GetOneZone(request *GetOneZoneRequestType) (*GetOneZoneResponseType, error) - - GetOneZoneContext(ctx context.Context, request *GetOneZoneRequestType) (*GetOneZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every Zone */ - GetZones(request *GetZonesRequestType) (*GetZonesResponseType, error) - - GetZonesContext(ctx context.Context, request *GetZonesRequestType) (*GetZonesResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single Zone */ - DeleteOneZone(request *DeleteOneZoneRequestType) (*DeleteOneZoneResponseType, error) - - DeleteOneZoneContext(ctx context.Context, request *DeleteOneZoneRequestType) (*DeleteOneZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateSecondaryZone(request *CreateSecondaryZoneRequestType) (*CreateSecondaryZoneResponseType, error) - - CreateSecondaryZoneContext(ctx context.Context, request *CreateSecondaryZoneRequestType) (*CreateSecondaryZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateSecondary(request *UpdateSecondaryRequestType) (*UpdateSecondaryResponseType, error) - - UpdateSecondaryContext(ctx context.Context, request *UpdateSecondaryRequestType) (*UpdateSecondaryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateSecondary(request *ActivateSecondaryRequestType) (*ActivateSecondaryResponseType, error) - - ActivateSecondaryContext(ctx context.Context, request *ActivateSecondaryRequestType) (*ActivateSecondaryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateSecondary(request *DeactivateSecondaryRequestType) (*DeactivateSecondaryResponseType, error) - - DeactivateSecondaryContext(ctx context.Context, request *DeactivateSecondaryRequestType) (*DeactivateSecondaryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RetransferSecondary(request *RetransferSecondaryRequestType) (*RetransferSecondaryResponseType, error) - - RetransferSecondaryContext(ctx context.Context, request *RetransferSecondaryRequestType) (*RetransferSecondaryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneSecondary(request *GetOneSecondaryRequestType) (*GetOneSecondaryResponseType, error) - - GetOneSecondaryContext(ctx context.Context, request *GetOneSecondaryRequestType) (*GetOneSecondaryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetSecondaries(request *GetSecondariesRequestType) (*GetSecondariesResponseType, error) - - GetSecondariesContext(ctx context.Context, request *GetSecondariesRequestType) (*GetSecondariesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetZoneApex(request *GetZoneApexRequestType) (*GetZoneApexResponseType, error) - - GetZoneApexContext(ctx context.Context, request *GetZoneApexRequestType) (*GetZoneApexResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new A record */ - CreateARecord(request *CreateARecordRequestType) (*CreateARecordResponseType, error) - - CreateARecordContext(ctx context.Context, request *CreateARecordRequestType) (*CreateARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single A record */ - GetOneARecord(request *GetOneARecordRequestType) (*GetOneARecordResponseType, error) - - GetOneARecordContext(ctx context.Context, request *GetOneARecordRequestType) (*GetOneARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every A record */ - GetARecords(request *GetARecordsRequestType) (*GetARecordsResponseType, error) - - GetARecordsContext(ctx context.Context, request *GetARecordsRequestType) (*GetARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single A record */ - UpdateARecord(request *UpdateARecordRequestType) (*UpdateARecordResponseType, error) - - UpdateARecordContext(ctx context.Context, request *UpdateARecordRequestType) (*UpdateARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every A record */ - DeleteARecords(request *DeleteARecordsRequestType) (*DeleteARecordsResponseType, error) - - DeleteARecordsContext(ctx context.Context, request *DeleteARecordsRequestType) (*DeleteARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single A record */ - DeleteOneARecord(request *DeleteOneARecordRequestType) (*DeleteOneARecordResponseType, error) - - DeleteOneARecordContext(ctx context.Context, request *DeleteOneARecordRequestType) (*DeleteOneARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new AAAA record */ - CreateAAAARecord(request *CreateAAAARecordRequestType) (*CreateAAAARecordResponseType, error) - - CreateAAAARecordContext(ctx context.Context, request *CreateAAAARecordRequestType) (*CreateAAAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single AAAA record */ - GetOneAAAARecord(request *GetOneAAAARecordRequestType) (*GetOneAAAARecordResponseType, error) - - GetOneAAAARecordContext(ctx context.Context, request *GetOneAAAARecordRequestType) (*GetOneAAAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every AAAA record */ - GetAAAARecords(request *GetAAAARecordsRequestType) (*GetAAAARecordsResponseType, error) - - GetAAAARecordsContext(ctx context.Context, request *GetAAAARecordsRequestType) (*GetAAAARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single AAAA record */ - UpdateAAAARecord(request *UpdateAAAARecordRequestType) (*UpdateAAAARecordResponseType, error) - - UpdateAAAARecordContext(ctx context.Context, request *UpdateAAAARecordRequestType) (*UpdateAAAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every AAAA record */ - DeleteAAAARecords(request *DeleteAAAARecordsRequestType) (*DeleteAAAARecordsResponseType, error) - - DeleteAAAARecordsContext(ctx context.Context, request *DeleteAAAARecordsRequestType) (*DeleteAAAARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single AAAA record */ - DeleteOneAAAARecord(request *DeleteOneAAAARecordRequestType) (*DeleteOneAAAARecordResponseType, error) - - DeleteOneAAAARecordContext(ctx context.Context, request *DeleteOneAAAARecordRequestType) (*DeleteOneAAAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new ALIAS record */ - CreateALIASRecord(request *CreateALIASRecordRequestType) (*CreateALIASRecordResponseType, error) - - CreateALIASRecordContext(ctx context.Context, request *CreateALIASRecordRequestType) (*CreateALIASRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single ALIAS record */ - GetOneALIASRecord(request *GetOneALIASRecordRequestType) (*GetOneALIASRecordResponseType, error) - - GetOneALIASRecordContext(ctx context.Context, request *GetOneALIASRecordRequestType) (*GetOneALIASRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every ALIAS record */ - GetALIASRecords(request *GetALIASRecordsRequestType) (*GetALIASRecordsResponseType, error) - - GetALIASRecordsContext(ctx context.Context, request *GetALIASRecordsRequestType) (*GetALIASRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single ALIAS record */ - UpdateALIASRecord(request *UpdateALIASRecordRequestType) (*UpdateALIASRecordResponseType, error) - - UpdateALIASRecordContext(ctx context.Context, request *UpdateALIASRecordRequestType) (*UpdateALIASRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every ALIAS record */ - DeleteALIASRecords(request *DeleteALIASRecordsRequestType) (*DeleteALIASRecordsResponseType, error) - - DeleteALIASRecordsContext(ctx context.Context, request *DeleteALIASRecordsRequestType) (*DeleteALIASRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single ALIAS record */ - DeleteOneALIASRecord(request *DeleteOneALIASRecordRequestType) (*DeleteOneALIASRecordResponseType, error) - - DeleteOneALIASRecordContext(ctx context.Context, request *DeleteOneALIASRecordRequestType) (*DeleteOneALIASRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new CAA record */ - CreateCAARecord(request *CreateCAARecordRequestType) (*CreateCAARecordResponseType, error) - - CreateCAARecordContext(ctx context.Context, request *CreateCAARecordRequestType) (*CreateCAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single CAA record */ - GetOneCAARecord(request *GetOneCAARecordRequestType) (*GetOneCAARecordResponseType, error) - - GetOneCAARecordContext(ctx context.Context, request *GetOneCAARecordRequestType) (*GetOneCAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every CAA record */ - GetCAARecords(request *GetCAARecordsRequestType) (*GetCAARecordsResponseType, error) - - GetCAARecordsContext(ctx context.Context, request *GetCAARecordsRequestType) (*GetCAARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single CAA record */ - UpdateCAARecord(request *UpdateCAARecordRequestType) (*UpdateCAARecordResponseType, error) - - UpdateCAARecordContext(ctx context.Context, request *UpdateCAARecordRequestType) (*UpdateCAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every CAA record */ - DeleteCAARecords(request *DeleteCAARecordsRequestType) (*DeleteCAARecordsResponseType, error) - - DeleteCAARecordsContext(ctx context.Context, request *DeleteCAARecordsRequestType) (*DeleteCAARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single CAA record */ - DeleteOneCAARecord(request *DeleteOneCAARecordRequestType) (*DeleteOneCAARecordResponseType, error) - - DeleteOneCAARecordContext(ctx context.Context, request *DeleteOneCAARecordRequestType) (*DeleteOneCAARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new CDNSKEY record */ - CreateCDNSKEYRecord(request *CreateCDNSKEYRecordRequestType) (*CreateCDNSKEYRecordResponseType, error) - - CreateCDNSKEYRecordContext(ctx context.Context, request *CreateCDNSKEYRecordRequestType) (*CreateCDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single CDNSKEY record */ - GetOneCDNSKEYRecord(request *GetOneCDNSKEYRecordRequestType) (*GetOneCDNSKEYRecordResponseType, error) - - GetOneCDNSKEYRecordContext(ctx context.Context, request *GetOneCDNSKEYRecordRequestType) (*GetOneCDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every CDNSKEY record */ - GetCDNSKEYRecords(request *GetCDNSKEYRecordsRequestType) (*GetCDNSKEYRecordsResponseType, error) - - GetCDNSKEYRecordsContext(ctx context.Context, request *GetCDNSKEYRecordsRequestType) (*GetCDNSKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single CDNSKEY record */ - UpdateCDNSKEYRecord(request *UpdateCDNSKEYRecordRequestType) (*UpdateCDNSKEYRecordResponseType, error) - - UpdateCDNSKEYRecordContext(ctx context.Context, request *UpdateCDNSKEYRecordRequestType) (*UpdateCDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every CDNSKEY record */ - DeleteCDNSKEYRecords(request *DeleteCDNSKEYRecordsRequestType) (*DeleteCDNSKEYRecordsResponseType, error) - - DeleteCDNSKEYRecordsContext(ctx context.Context, request *DeleteCDNSKEYRecordsRequestType) (*DeleteCDNSKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single CDNSKEY record */ - DeleteOneCDNSKEYRecord(request *DeleteOneCDNSKEYRecordRequestType) (*DeleteOneCDNSKEYRecordResponseType, error) - - DeleteOneCDNSKEYRecordContext(ctx context.Context, request *DeleteOneCDNSKEYRecordRequestType) (*DeleteOneCDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new CDS record */ - CreateCDSRecord(request *CreateCDSRecordRequestType) (*CreateCDSRecordResponseType, error) - - CreateCDSRecordContext(ctx context.Context, request *CreateCDSRecordRequestType) (*CreateCDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single CDS record */ - GetOneCDSRecord(request *GetOneCDSRecordRequestType) (*GetOneCDSRecordResponseType, error) - - GetOneCDSRecordContext(ctx context.Context, request *GetOneCDSRecordRequestType) (*GetOneCDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every CDS record */ - GetCDSRecords(request *GetCDSRecordsRequestType) (*GetCDSRecordsResponseType, error) - - GetCDSRecordsContext(ctx context.Context, request *GetCDSRecordsRequestType) (*GetCDSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single CDS record */ - UpdateCDSRecord(request *UpdateCDSRecordRequestType) (*UpdateCDSRecordResponseType, error) - - UpdateCDSRecordContext(ctx context.Context, request *UpdateCDSRecordRequestType) (*UpdateCDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every CDS record */ - DeleteCDSRecords(request *DeleteCDSRecordsRequestType) (*DeleteCDSRecordsResponseType, error) - - DeleteCDSRecordsContext(ctx context.Context, request *DeleteCDSRecordsRequestType) (*DeleteCDSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single CDS record */ - DeleteOneCDSRecord(request *DeleteOneCDSRecordRequestType) (*DeleteOneCDSRecordResponseType, error) - - DeleteOneCDSRecordContext(ctx context.Context, request *DeleteOneCDSRecordRequestType) (*DeleteOneCDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new CERT record */ - CreateCERTRecord(request *CreateCERTRecordRequestType) (*CreateCERTRecordResponseType, error) - - CreateCERTRecordContext(ctx context.Context, request *CreateCERTRecordRequestType) (*CreateCERTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single CERT record */ - GetOneCERTRecord(request *GetOneCERTRecordRequestType) (*GetOneCERTRecordResponseType, error) - - GetOneCERTRecordContext(ctx context.Context, request *GetOneCERTRecordRequestType) (*GetOneCERTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every CERT record */ - GetCERTRecords(request *GetCERTRecordsRequestType) (*GetCERTRecordsResponseType, error) - - GetCERTRecordsContext(ctx context.Context, request *GetCERTRecordsRequestType) (*GetCERTRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single CERT record */ - UpdateCERTRecord(request *UpdateCERTRecordRequestType) (*UpdateCERTRecordResponseType, error) - - UpdateCERTRecordContext(ctx context.Context, request *UpdateCERTRecordRequestType) (*UpdateCERTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every CERT record */ - DeleteCERTRecords(request *DeleteCERTRecordsRequestType) (*DeleteCERTRecordsResponseType, error) - - DeleteCERTRecordsContext(ctx context.Context, request *DeleteCERTRecordsRequestType) (*DeleteCERTRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single CERT record */ - DeleteOneCERTRecord(request *DeleteOneCERTRecordRequestType) (*DeleteOneCERTRecordResponseType, error) - - DeleteOneCERTRecordContext(ctx context.Context, request *DeleteOneCERTRecordRequestType) (*DeleteOneCERTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new CNAME record */ - CreateCNAMERecord(request *CreateCNAMERecordRequestType) (*CreateCNAMERecordResponseType, error) - - CreateCNAMERecordContext(ctx context.Context, request *CreateCNAMERecordRequestType) (*CreateCNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single CNAME record */ - GetOneCNAMERecord(request *GetOneCNAMERecordRequestType) (*GetOneCNAMERecordResponseType, error) - - GetOneCNAMERecordContext(ctx context.Context, request *GetOneCNAMERecordRequestType) (*GetOneCNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every CNAME record */ - GetCNAMERecords(request *GetCNAMERecordsRequestType) (*GetCNAMERecordsResponseType, error) - - GetCNAMERecordsContext(ctx context.Context, request *GetCNAMERecordsRequestType) (*GetCNAMERecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single CNAME record */ - UpdateCNAMERecord(request *UpdateCNAMERecordRequestType) (*UpdateCNAMERecordResponseType, error) - - UpdateCNAMERecordContext(ctx context.Context, request *UpdateCNAMERecordRequestType) (*UpdateCNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every CNAME record */ - DeleteCNAMERecords(request *DeleteCNAMERecordsRequestType) (*DeleteCNAMERecordsResponseType, error) - - DeleteCNAMERecordsContext(ctx context.Context, request *DeleteCNAMERecordsRequestType) (*DeleteCNAMERecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single CNAME record */ - DeleteOneCNAMERecord(request *DeleteOneCNAMERecordRequestType) (*DeleteOneCNAMERecordResponseType, error) - - DeleteOneCNAMERecordContext(ctx context.Context, request *DeleteOneCNAMERecordRequestType) (*DeleteOneCNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new CSYNC record */ - CreateCSYNCRecord(request *CreateCSYNCRecordRequestType) (*CreateCSYNCRecordResponseType, error) - - CreateCSYNCRecordContext(ctx context.Context, request *CreateCSYNCRecordRequestType) (*CreateCSYNCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single CSYNC record */ - GetOneCSYNCRecord(request *GetOneCSYNCRecordRequestType) (*GetOneCSYNCRecordResponseType, error) - - GetOneCSYNCRecordContext(ctx context.Context, request *GetOneCSYNCRecordRequestType) (*GetOneCSYNCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every CSYNC record */ - GetCSYNCRecords(request *GetCSYNCRecordsRequestType) (*GetCSYNCRecordsResponseType, error) - - GetCSYNCRecordsContext(ctx context.Context, request *GetCSYNCRecordsRequestType) (*GetCSYNCRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single CSYNC record */ - UpdateCSYNCRecord(request *UpdateCSYNCRecordRequestType) (*UpdateCSYNCRecordResponseType, error) - - UpdateCSYNCRecordContext(ctx context.Context, request *UpdateCSYNCRecordRequestType) (*UpdateCSYNCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every CSYNC record */ - DeleteCSYNCRecords(request *DeleteCSYNCRecordsRequestType) (*DeleteCSYNCRecordsResponseType, error) - - DeleteCSYNCRecordsContext(ctx context.Context, request *DeleteCSYNCRecordsRequestType) (*DeleteCSYNCRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single CSYNC record */ - DeleteOneCSYNCRecord(request *DeleteOneCSYNCRecordRequestType) (*DeleteOneCSYNCRecordResponseType, error) - - DeleteOneCSYNCRecordContext(ctx context.Context, request *DeleteOneCSYNCRecordRequestType) (*DeleteOneCSYNCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new DHCID record */ - CreateDHCIDRecord(request *CreateDHCIDRecordRequestType) (*CreateDHCIDRecordResponseType, error) - - CreateDHCIDRecordContext(ctx context.Context, request *CreateDHCIDRecordRequestType) (*CreateDHCIDRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single DHCID record */ - GetOneDHCIDRecord(request *GetOneDHCIDRecordRequestType) (*GetOneDHCIDRecordResponseType, error) - - GetOneDHCIDRecordContext(ctx context.Context, request *GetOneDHCIDRecordRequestType) (*GetOneDHCIDRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every DHCID record */ - GetDHCIDRecords(request *GetDHCIDRecordsRequestType) (*GetDHCIDRecordsResponseType, error) - - GetDHCIDRecordsContext(ctx context.Context, request *GetDHCIDRecordsRequestType) (*GetDHCIDRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single DHCID record */ - UpdateDHCIDRecord(request *UpdateDHCIDRecordRequestType) (*UpdateDHCIDRecordResponseType, error) - - UpdateDHCIDRecordContext(ctx context.Context, request *UpdateDHCIDRecordRequestType) (*UpdateDHCIDRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every DHCID record */ - DeleteDHCIDRecords(request *DeleteDHCIDRecordsRequestType) (*DeleteDHCIDRecordsResponseType, error) - - DeleteDHCIDRecordsContext(ctx context.Context, request *DeleteDHCIDRecordsRequestType) (*DeleteDHCIDRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single DHCID record */ - DeleteOneDHCIDRecord(request *DeleteOneDHCIDRecordRequestType) (*DeleteOneDHCIDRecordResponseType, error) - - DeleteOneDHCIDRecordContext(ctx context.Context, request *DeleteOneDHCIDRecordRequestType) (*DeleteOneDHCIDRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new DNAME record */ - CreateDNAMERecord(request *CreateDNAMERecordRequestType) (*CreateDNAMERecordResponseType, error) - - CreateDNAMERecordContext(ctx context.Context, request *CreateDNAMERecordRequestType) (*CreateDNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single DNAME record */ - GetOneDNAMERecord(request *GetOneDNAMERecordRequestType) (*GetOneDNAMERecordResponseType, error) - - GetOneDNAMERecordContext(ctx context.Context, request *GetOneDNAMERecordRequestType) (*GetOneDNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every DNAME record */ - GetDNAMERecords(request *GetDNAMERecordsRequestType) (*GetDNAMERecordsResponseType, error) - - GetDNAMERecordsContext(ctx context.Context, request *GetDNAMERecordsRequestType) (*GetDNAMERecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single DNAME record */ - UpdateDNAMERecord(request *UpdateDNAMERecordRequestType) (*UpdateDNAMERecordResponseType, error) - - UpdateDNAMERecordContext(ctx context.Context, request *UpdateDNAMERecordRequestType) (*UpdateDNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every DNAME record */ - DeleteDNAMERecords(request *DeleteDNAMERecordsRequestType) (*DeleteDNAMERecordsResponseType, error) - - DeleteDNAMERecordsContext(ctx context.Context, request *DeleteDNAMERecordsRequestType) (*DeleteDNAMERecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single DNAME record */ - DeleteOneDNAMERecord(request *DeleteOneDNAMERecordRequestType) (*DeleteOneDNAMERecordResponseType, error) - - DeleteOneDNAMERecordContext(ctx context.Context, request *DeleteOneDNAMERecordRequestType) (*DeleteOneDNAMERecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new DNSKEY record */ - CreateDNSKEYRecord(request *CreateDNSKEYRecordRequestType) (*CreateDNSKEYRecordResponseType, error) - - CreateDNSKEYRecordContext(ctx context.Context, request *CreateDNSKEYRecordRequestType) (*CreateDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single DNSKEY record */ - GetOneDNSKEYRecord(request *GetOneDNSKEYRecordRequestType) (*GetOneDNSKEYRecordResponseType, error) - - GetOneDNSKEYRecordContext(ctx context.Context, request *GetOneDNSKEYRecordRequestType) (*GetOneDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every DNSKEY record */ - GetDNSKEYRecords(request *GetDNSKEYRecordsRequestType) (*GetDNSKEYRecordsResponseType, error) - - GetDNSKEYRecordsContext(ctx context.Context, request *GetDNSKEYRecordsRequestType) (*GetDNSKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single DNSKEY record */ - UpdateDNSKEYRecord(request *UpdateDNSKEYRecordRequestType) (*UpdateDNSKEYRecordResponseType, error) - - UpdateDNSKEYRecordContext(ctx context.Context, request *UpdateDNSKEYRecordRequestType) (*UpdateDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every DNSKEY record */ - DeleteDNSKEYRecords(request *DeleteDNSKEYRecordsRequestType) (*DeleteDNSKEYRecordsResponseType, error) - - DeleteDNSKEYRecordsContext(ctx context.Context, request *DeleteDNSKEYRecordsRequestType) (*DeleteDNSKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single DNSKEY record */ - DeleteOneDNSKEYRecord(request *DeleteOneDNSKEYRecordRequestType) (*DeleteOneDNSKEYRecordResponseType, error) - - DeleteOneDNSKEYRecordContext(ctx context.Context, request *DeleteOneDNSKEYRecordRequestType) (*DeleteOneDNSKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new DS record */ - CreateDSRecord(request *CreateDSRecordRequestType) (*CreateDSRecordResponseType, error) - - CreateDSRecordContext(ctx context.Context, request *CreateDSRecordRequestType) (*CreateDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single DS record */ - GetOneDSRecord(request *GetOneDSRecordRequestType) (*GetOneDSRecordResponseType, error) - - GetOneDSRecordContext(ctx context.Context, request *GetOneDSRecordRequestType) (*GetOneDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every DS record */ - GetDSRecords(request *GetDSRecordsRequestType) (*GetDSRecordsResponseType, error) - - GetDSRecordsContext(ctx context.Context, request *GetDSRecordsRequestType) (*GetDSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single DS record */ - UpdateDSRecord(request *UpdateDSRecordRequestType) (*UpdateDSRecordResponseType, error) - - UpdateDSRecordContext(ctx context.Context, request *UpdateDSRecordRequestType) (*UpdateDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every DS record */ - DeleteDSRecords(request *DeleteDSRecordsRequestType) (*DeleteDSRecordsResponseType, error) - - DeleteDSRecordsContext(ctx context.Context, request *DeleteDSRecordsRequestType) (*DeleteDSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single DS record */ - DeleteOneDSRecord(request *DeleteOneDSRecordRequestType) (*DeleteOneDSRecordResponseType, error) - - DeleteOneDSRecordContext(ctx context.Context, request *DeleteOneDSRecordRequestType) (*DeleteOneDSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new IPSECKEY record */ - CreateIPSECKEYRecord(request *CreateIPSECKEYRecordRequestType) (*CreateIPSECKEYRecordResponseType, error) - - CreateIPSECKEYRecordContext(ctx context.Context, request *CreateIPSECKEYRecordRequestType) (*CreateIPSECKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single IPSECKEY record */ - GetOneIPSECKEYRecord(request *GetOneIPSECKEYRecordRequestType) (*GetOneIPSECKEYRecordResponseType, error) - - GetOneIPSECKEYRecordContext(ctx context.Context, request *GetOneIPSECKEYRecordRequestType) (*GetOneIPSECKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every IPSECKEY record */ - GetIPSECKEYRecords(request *GetIPSECKEYRecordsRequestType) (*GetIPSECKEYRecordsResponseType, error) - - GetIPSECKEYRecordsContext(ctx context.Context, request *GetIPSECKEYRecordsRequestType) (*GetIPSECKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single IPSECKEY record */ - UpdateIPSECKEYRecord(request *UpdateIPSECKEYRecordRequestType) (*UpdateIPSECKEYRecordResponseType, error) - - UpdateIPSECKEYRecordContext(ctx context.Context, request *UpdateIPSECKEYRecordRequestType) (*UpdateIPSECKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every IPSECKEY record */ - DeleteIPSECKEYRecords(request *DeleteIPSECKEYRecordsRequestType) (*DeleteIPSECKEYRecordsResponseType, error) - - DeleteIPSECKEYRecordsContext(ctx context.Context, request *DeleteIPSECKEYRecordsRequestType) (*DeleteIPSECKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single IPSECKEY record */ - DeleteOneIPSECKEYRecord(request *DeleteOneIPSECKEYRecordRequestType) (*DeleteOneIPSECKEYRecordResponseType, error) - - DeleteOneIPSECKEYRecordContext(ctx context.Context, request *DeleteOneIPSECKEYRecordRequestType) (*DeleteOneIPSECKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new KEY record */ - CreateKEYRecord(request *CreateKEYRecordRequestType) (*CreateKEYRecordResponseType, error) - - CreateKEYRecordContext(ctx context.Context, request *CreateKEYRecordRequestType) (*CreateKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single KEY record */ - GetOneKEYRecord(request *GetOneKEYRecordRequestType) (*GetOneKEYRecordResponseType, error) - - GetOneKEYRecordContext(ctx context.Context, request *GetOneKEYRecordRequestType) (*GetOneKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every KEY record */ - GetKEYRecords(request *GetKEYRecordsRequestType) (*GetKEYRecordsResponseType, error) - - GetKEYRecordsContext(ctx context.Context, request *GetKEYRecordsRequestType) (*GetKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single KEY record */ - UpdateKEYRecord(request *UpdateKEYRecordRequestType) (*UpdateKEYRecordResponseType, error) - - UpdateKEYRecordContext(ctx context.Context, request *UpdateKEYRecordRequestType) (*UpdateKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every KEY record */ - DeleteKEYRecords(request *DeleteKEYRecordsRequestType) (*DeleteKEYRecordsResponseType, error) - - DeleteKEYRecordsContext(ctx context.Context, request *DeleteKEYRecordsRequestType) (*DeleteKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single KEY record */ - DeleteOneKEYRecord(request *DeleteOneKEYRecordRequestType) (*DeleteOneKEYRecordResponseType, error) - - DeleteOneKEYRecordContext(ctx context.Context, request *DeleteOneKEYRecordRequestType) (*DeleteOneKEYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new KX record */ - CreateKXRecord(request *CreateKXRecordRequestType) (*CreateKXRecordResponseType, error) - - CreateKXRecordContext(ctx context.Context, request *CreateKXRecordRequestType) (*CreateKXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single KX record */ - GetOneKXRecord(request *GetOneKXRecordRequestType) (*GetOneKXRecordResponseType, error) - - GetOneKXRecordContext(ctx context.Context, request *GetOneKXRecordRequestType) (*GetOneKXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every KX record */ - GetKXRecords(request *GetKXRecordsRequestType) (*GetKXRecordsResponseType, error) - - GetKXRecordsContext(ctx context.Context, request *GetKXRecordsRequestType) (*GetKXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single KX record */ - UpdateKXRecord(request *UpdateKXRecordRequestType) (*UpdateKXRecordResponseType, error) - - UpdateKXRecordContext(ctx context.Context, request *UpdateKXRecordRequestType) (*UpdateKXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every KX record */ - DeleteKXRecords(request *DeleteKXRecordsRequestType) (*DeleteKXRecordsResponseType, error) - - DeleteKXRecordsContext(ctx context.Context, request *DeleteKXRecordsRequestType) (*DeleteKXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single KX record */ - DeleteOneKXRecord(request *DeleteOneKXRecordRequestType) (*DeleteOneKXRecordResponseType, error) - - DeleteOneKXRecordContext(ctx context.Context, request *DeleteOneKXRecordRequestType) (*DeleteOneKXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new LOC record */ - CreateLOCRecord(request *CreateLOCRecordRequestType) (*CreateLOCRecordResponseType, error) - - CreateLOCRecordContext(ctx context.Context, request *CreateLOCRecordRequestType) (*CreateLOCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single LOC record */ - GetOneLOCRecord(request *GetOneLOCRecordRequestType) (*GetOneLOCRecordResponseType, error) - - GetOneLOCRecordContext(ctx context.Context, request *GetOneLOCRecordRequestType) (*GetOneLOCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every LOC record */ - GetLOCRecords(request *GetLOCRecordsRequestType) (*GetLOCRecordsResponseType, error) - - GetLOCRecordsContext(ctx context.Context, request *GetLOCRecordsRequestType) (*GetLOCRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single LOC record */ - UpdateLOCRecord(request *UpdateLOCRecordRequestType) (*UpdateLOCRecordResponseType, error) - - UpdateLOCRecordContext(ctx context.Context, request *UpdateLOCRecordRequestType) (*UpdateLOCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every LOC record */ - DeleteLOCRecords(request *DeleteLOCRecordsRequestType) (*DeleteLOCRecordsResponseType, error) - - DeleteLOCRecordsContext(ctx context.Context, request *DeleteLOCRecordsRequestType) (*DeleteLOCRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single LOC record */ - DeleteOneLOCRecord(request *DeleteOneLOCRecordRequestType) (*DeleteOneLOCRecordResponseType, error) - - DeleteOneLOCRecordContext(ctx context.Context, request *DeleteOneLOCRecordRequestType) (*DeleteOneLOCRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new MX record */ - CreateMXRecord(request *CreateMXRecordRequestType) (*CreateMXRecordResponseType, error) - - CreateMXRecordContext(ctx context.Context, request *CreateMXRecordRequestType) (*CreateMXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single MX record */ - GetOneMXRecord(request *GetOneMXRecordRequestType) (*GetOneMXRecordResponseType, error) - - GetOneMXRecordContext(ctx context.Context, request *GetOneMXRecordRequestType) (*GetOneMXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every MX record */ - GetMXRecords(request *GetMXRecordsRequestType) (*GetMXRecordsResponseType, error) - - GetMXRecordsContext(ctx context.Context, request *GetMXRecordsRequestType) (*GetMXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single MX record */ - UpdateMXRecord(request *UpdateMXRecordRequestType) (*UpdateMXRecordResponseType, error) - - UpdateMXRecordContext(ctx context.Context, request *UpdateMXRecordRequestType) (*UpdateMXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every MX record */ - DeleteMXRecords(request *DeleteMXRecordsRequestType) (*DeleteMXRecordsResponseType, error) - - DeleteMXRecordsContext(ctx context.Context, request *DeleteMXRecordsRequestType) (*DeleteMXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single MX record */ - DeleteOneMXRecord(request *DeleteOneMXRecordRequestType) (*DeleteOneMXRecordResponseType, error) - - DeleteOneMXRecordContext(ctx context.Context, request *DeleteOneMXRecordRequestType) (*DeleteOneMXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new NAPTR record */ - CreateNAPTRRecord(request *CreateNAPTRRecordRequestType) (*CreateNAPTRRecordResponseType, error) - - CreateNAPTRRecordContext(ctx context.Context, request *CreateNAPTRRecordRequestType) (*CreateNAPTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single NAPTR record */ - GetOneNAPTRRecord(request *GetOneNAPTRRecordRequestType) (*GetOneNAPTRRecordResponseType, error) - - GetOneNAPTRRecordContext(ctx context.Context, request *GetOneNAPTRRecordRequestType) (*GetOneNAPTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every NAPTR record */ - GetNAPTRRecords(request *GetNAPTRRecordsRequestType) (*GetNAPTRRecordsResponseType, error) - - GetNAPTRRecordsContext(ctx context.Context, request *GetNAPTRRecordsRequestType) (*GetNAPTRRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single NAPTR record */ - UpdateNAPTRRecord(request *UpdateNAPTRRecordRequestType) (*UpdateNAPTRRecordResponseType, error) - - UpdateNAPTRRecordContext(ctx context.Context, request *UpdateNAPTRRecordRequestType) (*UpdateNAPTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every NAPTR record */ - DeleteNAPTRRecords(request *DeleteNAPTRRecordsRequestType) (*DeleteNAPTRRecordsResponseType, error) - - DeleteNAPTRRecordsContext(ctx context.Context, request *DeleteNAPTRRecordsRequestType) (*DeleteNAPTRRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single NAPTR record */ - DeleteOneNAPTRRecord(request *DeleteOneNAPTRRecordRequestType) (*DeleteOneNAPTRRecordResponseType, error) - - DeleteOneNAPTRRecordContext(ctx context.Context, request *DeleteOneNAPTRRecordRequestType) (*DeleteOneNAPTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new NSAP record */ - CreateNSAPRecord(request *CreateNSAPRecordRequestType) (*CreateNSAPRecordResponseType, error) - - CreateNSAPRecordContext(ctx context.Context, request *CreateNSAPRecordRequestType) (*CreateNSAPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single NSAP record */ - GetOneNSAPRecord(request *GetOneNSAPRecordRequestType) (*GetOneNSAPRecordResponseType, error) - - GetOneNSAPRecordContext(ctx context.Context, request *GetOneNSAPRecordRequestType) (*GetOneNSAPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every NSAP record */ - GetNSAPRecords(request *GetNSAPRecordsRequestType) (*GetNSAPRecordsResponseType, error) - - GetNSAPRecordsContext(ctx context.Context, request *GetNSAPRecordsRequestType) (*GetNSAPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single NSAP record */ - UpdateNSAPRecord(request *UpdateNSAPRecordRequestType) (*UpdateNSAPRecordResponseType, error) - - UpdateNSAPRecordContext(ctx context.Context, request *UpdateNSAPRecordRequestType) (*UpdateNSAPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every NSAP record */ - DeleteNSAPRecords(request *DeleteNSAPRecordsRequestType) (*DeleteNSAPRecordsResponseType, error) - - DeleteNSAPRecordsContext(ctx context.Context, request *DeleteNSAPRecordsRequestType) (*DeleteNSAPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single NSAP record */ - DeleteOneNSAPRecord(request *DeleteOneNSAPRecordRequestType) (*DeleteOneNSAPRecordResponseType, error) - - DeleteOneNSAPRecordContext(ctx context.Context, request *DeleteOneNSAPRecordRequestType) (*DeleteOneNSAPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new POLICY record */ - CreatePOLICYRecord(request *CreatePOLICYRecordRequestType) (*CreatePOLICYRecordResponseType, error) - - CreatePOLICYRecordContext(ctx context.Context, request *CreatePOLICYRecordRequestType) (*CreatePOLICYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single POLICY record */ - GetOnePOLICYRecord(request *GetOnePOLICYRecordRequestType) (*GetOnePOLICYRecordResponseType, error) - - GetOnePOLICYRecordContext(ctx context.Context, request *GetOnePOLICYRecordRequestType) (*GetOnePOLICYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every POLICY record */ - GetPOLICYRecords(request *GetPOLICYRecordsRequestType) (*GetPOLICYRecordsResponseType, error) - - GetPOLICYRecordsContext(ctx context.Context, request *GetPOLICYRecordsRequestType) (*GetPOLICYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single POLICY record */ - UpdatePOLICYRecord(request *UpdatePOLICYRecordRequestType) (*UpdatePOLICYRecordResponseType, error) - - UpdatePOLICYRecordContext(ctx context.Context, request *UpdatePOLICYRecordRequestType) (*UpdatePOLICYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every POLICY record */ - DeletePOLICYRecords(request *DeletePOLICYRecordsRequestType) (*DeletePOLICYRecordsResponseType, error) - - DeletePOLICYRecordsContext(ctx context.Context, request *DeletePOLICYRecordsRequestType) (*DeletePOLICYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single POLICY record */ - DeleteOnePOLICYRecord(request *DeleteOnePOLICYRecordRequestType) (*DeleteOnePOLICYRecordResponseType, error) - - DeleteOnePOLICYRecordContext(ctx context.Context, request *DeleteOnePOLICYRecordRequestType) (*DeleteOnePOLICYRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new PTR record */ - CreatePTRRecord(request *CreatePTRRecordRequestType) (*CreatePTRRecordResponseType, error) - - CreatePTRRecordContext(ctx context.Context, request *CreatePTRRecordRequestType) (*CreatePTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single PTR record */ - GetOnePTRRecord(request *GetOnePTRRecordRequestType) (*GetOnePTRRecordResponseType, error) - - GetOnePTRRecordContext(ctx context.Context, request *GetOnePTRRecordRequestType) (*GetOnePTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every PTR record */ - GetPTRRecords(request *GetPTRRecordsRequestType) (*GetPTRRecordsResponseType, error) - - GetPTRRecordsContext(ctx context.Context, request *GetPTRRecordsRequestType) (*GetPTRRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single PTR record */ - UpdatePTRRecord(request *UpdatePTRRecordRequestType) (*UpdatePTRRecordResponseType, error) - - UpdatePTRRecordContext(ctx context.Context, request *UpdatePTRRecordRequestType) (*UpdatePTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every PTR record */ - DeletePTRRecords(request *DeletePTRRecordsRequestType) (*DeletePTRRecordsResponseType, error) - - DeletePTRRecordsContext(ctx context.Context, request *DeletePTRRecordsRequestType) (*DeletePTRRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single PTR record */ - DeleteOnePTRRecord(request *DeleteOnePTRRecordRequestType) (*DeleteOnePTRRecordResponseType, error) - - DeleteOnePTRRecordContext(ctx context.Context, request *DeleteOnePTRRecordRequestType) (*DeleteOnePTRRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new PX record */ - CreatePXRecord(request *CreatePXRecordRequestType) (*CreatePXRecordResponseType, error) - - CreatePXRecordContext(ctx context.Context, request *CreatePXRecordRequestType) (*CreatePXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single PX record */ - GetOnePXRecord(request *GetOnePXRecordRequestType) (*GetOnePXRecordResponseType, error) - - GetOnePXRecordContext(ctx context.Context, request *GetOnePXRecordRequestType) (*GetOnePXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every PX record */ - GetPXRecords(request *GetPXRecordsRequestType) (*GetPXRecordsResponseType, error) - - GetPXRecordsContext(ctx context.Context, request *GetPXRecordsRequestType) (*GetPXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single PX record */ - UpdatePXRecord(request *UpdatePXRecordRequestType) (*UpdatePXRecordResponseType, error) - - UpdatePXRecordContext(ctx context.Context, request *UpdatePXRecordRequestType) (*UpdatePXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every PX record */ - DeletePXRecords(request *DeletePXRecordsRequestType) (*DeletePXRecordsResponseType, error) - - DeletePXRecordsContext(ctx context.Context, request *DeletePXRecordsRequestType) (*DeletePXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single PX record */ - DeleteOnePXRecord(request *DeleteOnePXRecordRequestType) (*DeleteOnePXRecordResponseType, error) - - DeleteOnePXRecordContext(ctx context.Context, request *DeleteOnePXRecordRequestType) (*DeleteOnePXRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new RP record */ - CreateRPRecord(request *CreateRPRecordRequestType) (*CreateRPRecordResponseType, error) - - CreateRPRecordContext(ctx context.Context, request *CreateRPRecordRequestType) (*CreateRPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single RP record */ - GetOneRPRecord(request *GetOneRPRecordRequestType) (*GetOneRPRecordResponseType, error) - - GetOneRPRecordContext(ctx context.Context, request *GetOneRPRecordRequestType) (*GetOneRPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every RP record */ - GetRPRecords(request *GetRPRecordsRequestType) (*GetRPRecordsResponseType, error) - - GetRPRecordsContext(ctx context.Context, request *GetRPRecordsRequestType) (*GetRPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single RP record */ - UpdateRPRecord(request *UpdateRPRecordRequestType) (*UpdateRPRecordResponseType, error) - - UpdateRPRecordContext(ctx context.Context, request *UpdateRPRecordRequestType) (*UpdateRPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every RP record */ - DeleteRPRecords(request *DeleteRPRecordsRequestType) (*DeleteRPRecordsResponseType, error) - - DeleteRPRecordsContext(ctx context.Context, request *DeleteRPRecordsRequestType) (*DeleteRPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single RP record */ - DeleteOneRPRecord(request *DeleteOneRPRecordRequestType) (*DeleteOneRPRecordResponseType, error) - - DeleteOneRPRecordContext(ctx context.Context, request *DeleteOneRPRecordRequestType) (*DeleteOneRPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new SPF record */ - CreateSPFRecord(request *CreateSPFRecordRequestType) (*CreateSPFRecordResponseType, error) - - CreateSPFRecordContext(ctx context.Context, request *CreateSPFRecordRequestType) (*CreateSPFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single SPF record */ - GetOneSPFRecord(request *GetOneSPFRecordRequestType) (*GetOneSPFRecordResponseType, error) - - GetOneSPFRecordContext(ctx context.Context, request *GetOneSPFRecordRequestType) (*GetOneSPFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every SPF record */ - GetSPFRecords(request *GetSPFRecordsRequestType) (*GetSPFRecordsResponseType, error) - - GetSPFRecordsContext(ctx context.Context, request *GetSPFRecordsRequestType) (*GetSPFRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single SPF record */ - UpdateSPFRecord(request *UpdateSPFRecordRequestType) (*UpdateSPFRecordResponseType, error) - - UpdateSPFRecordContext(ctx context.Context, request *UpdateSPFRecordRequestType) (*UpdateSPFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every SPF record */ - DeleteSPFRecords(request *DeleteSPFRecordsRequestType) (*DeleteSPFRecordsResponseType, error) - - DeleteSPFRecordsContext(ctx context.Context, request *DeleteSPFRecordsRequestType) (*DeleteSPFRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single SPF record */ - DeleteOneSPFRecord(request *DeleteOneSPFRecordRequestType) (*DeleteOneSPFRecordResponseType, error) - - DeleteOneSPFRecordContext(ctx context.Context, request *DeleteOneSPFRecordRequestType) (*DeleteOneSPFRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new SRV record */ - CreateSRVRecord(request *CreateSRVRecordRequestType) (*CreateSRVRecordResponseType, error) - - CreateSRVRecordContext(ctx context.Context, request *CreateSRVRecordRequestType) (*CreateSRVRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single SRV record */ - GetOneSRVRecord(request *GetOneSRVRecordRequestType) (*GetOneSRVRecordResponseType, error) - - GetOneSRVRecordContext(ctx context.Context, request *GetOneSRVRecordRequestType) (*GetOneSRVRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every SRV record */ - GetSRVRecords(request *GetSRVRecordsRequestType) (*GetSRVRecordsResponseType, error) - - GetSRVRecordsContext(ctx context.Context, request *GetSRVRecordsRequestType) (*GetSRVRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single SRV record */ - UpdateSRVRecord(request *UpdateSRVRecordRequestType) (*UpdateSRVRecordResponseType, error) - - UpdateSRVRecordContext(ctx context.Context, request *UpdateSRVRecordRequestType) (*UpdateSRVRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every SRV record */ - DeleteSRVRecords(request *DeleteSRVRecordsRequestType) (*DeleteSRVRecordsResponseType, error) - - DeleteSRVRecordsContext(ctx context.Context, request *DeleteSRVRecordsRequestType) (*DeleteSRVRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single SRV record */ - DeleteOneSRVRecord(request *DeleteOneSRVRecordRequestType) (*DeleteOneSRVRecordResponseType, error) - - DeleteOneSRVRecordContext(ctx context.Context, request *DeleteOneSRVRecordRequestType) (*DeleteOneSRVRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new SSHFP record */ - CreateSSHFPRecord(request *CreateSSHFPRecordRequestType) (*CreateSSHFPRecordResponseType, error) - - CreateSSHFPRecordContext(ctx context.Context, request *CreateSSHFPRecordRequestType) (*CreateSSHFPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single SSHFP record */ - GetOneSSHFPRecord(request *GetOneSSHFPRecordRequestType) (*GetOneSSHFPRecordResponseType, error) - - GetOneSSHFPRecordContext(ctx context.Context, request *GetOneSSHFPRecordRequestType) (*GetOneSSHFPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every SSHFP record */ - GetSSHFPRecords(request *GetSSHFPRecordsRequestType) (*GetSSHFPRecordsResponseType, error) - - GetSSHFPRecordsContext(ctx context.Context, request *GetSSHFPRecordsRequestType) (*GetSSHFPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single SSHFP record */ - UpdateSSHFPRecord(request *UpdateSSHFPRecordRequestType) (*UpdateSSHFPRecordResponseType, error) - - UpdateSSHFPRecordContext(ctx context.Context, request *UpdateSSHFPRecordRequestType) (*UpdateSSHFPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every SSHFP record */ - DeleteSSHFPRecords(request *DeleteSSHFPRecordsRequestType) (*DeleteSSHFPRecordsResponseType, error) - - DeleteSSHFPRecordsContext(ctx context.Context, request *DeleteSSHFPRecordsRequestType) (*DeleteSSHFPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single SSHFP record */ - DeleteOneSSHFPRecord(request *DeleteOneSSHFPRecordRequestType) (*DeleteOneSSHFPRecordResponseType, error) - - DeleteOneSSHFPRecordContext(ctx context.Context, request *DeleteOneSSHFPRecordRequestType) (*DeleteOneSSHFPRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new TLSA record */ - CreateTLSARecord(request *CreateTLSARecordRequestType) (*CreateTLSARecordResponseType, error) - - CreateTLSARecordContext(ctx context.Context, request *CreateTLSARecordRequestType) (*CreateTLSARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single TLSA record */ - GetOneTLSARecord(request *GetOneTLSARecordRequestType) (*GetOneTLSARecordResponseType, error) - - GetOneTLSARecordContext(ctx context.Context, request *GetOneTLSARecordRequestType) (*GetOneTLSARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every TLSA record */ - GetTLSARecords(request *GetTLSARecordsRequestType) (*GetTLSARecordsResponseType, error) - - GetTLSARecordsContext(ctx context.Context, request *GetTLSARecordsRequestType) (*GetTLSARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single TLSA record */ - UpdateTLSARecord(request *UpdateTLSARecordRequestType) (*UpdateTLSARecordResponseType, error) - - UpdateTLSARecordContext(ctx context.Context, request *UpdateTLSARecordRequestType) (*UpdateTLSARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every TLSA record */ - DeleteTLSARecords(request *DeleteTLSARecordsRequestType) (*DeleteTLSARecordsResponseType, error) - - DeleteTLSARecordsContext(ctx context.Context, request *DeleteTLSARecordsRequestType) (*DeleteTLSARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single TLSA record */ - DeleteOneTLSARecord(request *DeleteOneTLSARecordRequestType) (*DeleteOneTLSARecordResponseType, error) - - DeleteOneTLSARecordContext(ctx context.Context, request *DeleteOneTLSARecordRequestType) (*DeleteOneTLSARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new TXT record */ - CreateTXTRecord(request *CreateTXTRecordRequestType) (*CreateTXTRecordResponseType, error) - - CreateTXTRecordContext(ctx context.Context, request *CreateTXTRecordRequestType) (*CreateTXTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single TXT record */ - GetOneTXTRecord(request *GetOneTXTRecordRequestType) (*GetOneTXTRecordResponseType, error) - - GetOneTXTRecordContext(ctx context.Context, request *GetOneTXTRecordRequestType) (*GetOneTXTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every TXT record */ - GetTXTRecords(request *GetTXTRecordsRequestType) (*GetTXTRecordsResponseType, error) - - GetTXTRecordsContext(ctx context.Context, request *GetTXTRecordsRequestType) (*GetTXTRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single TXT record */ - UpdateTXTRecord(request *UpdateTXTRecordRequestType) (*UpdateTXTRecordResponseType, error) - - UpdateTXTRecordContext(ctx context.Context, request *UpdateTXTRecordRequestType) (*UpdateTXTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every TXT record */ - DeleteTXTRecords(request *DeleteTXTRecordsRequestType) (*DeleteTXTRecordsResponseType, error) - - DeleteTXTRecordsContext(ctx context.Context, request *DeleteTXTRecordsRequestType) (*DeleteTXTRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single TXT record */ - DeleteOneTXTRecord(request *DeleteOneTXTRecordRequestType) (*DeleteOneTXTRecordResponseType, error) - - DeleteOneTXTRecordContext(ctx context.Context, request *DeleteOneTXTRecordRequestType) (*DeleteOneTXTRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single SOA record */ - GetOneSOARecord(request *GetOneSOARecordRequestType) (*GetOneSOARecordResponseType, error) - - GetOneSOARecordContext(ctx context.Context, request *GetOneSOARecordRequestType) (*GetOneSOARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every SOA record */ - GetSOARecords(request *GetSOARecordsRequestType) (*GetSOARecordsResponseType, error) - - GetSOARecordsContext(ctx context.Context, request *GetSOARecordsRequestType) (*GetSOARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateSOARecord(request *UpdateSOARecordRequestType) (*UpdateSOARecordResponseType, error) - - UpdateSOARecordContext(ctx context.Context, request *UpdateSOARecordRequestType) (*UpdateSOARecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new NS record */ - CreateNSRecord(request *CreateNSRecordRequestType) (*CreateNSRecordResponseType, error) - - CreateNSRecordContext(ctx context.Context, request *CreateNSRecordRequestType) (*CreateNSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single NS record */ - GetOneNSRecord(request *GetOneNSRecordRequestType) (*GetOneNSRecordResponseType, error) - - GetOneNSRecordContext(ctx context.Context, request *GetOneNSRecordRequestType) (*GetOneNSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every NS record */ - GetNSRecords(request *GetNSRecordsRequestType) (*GetNSRecordsResponseType, error) - - GetNSRecordsContext(ctx context.Context, request *GetNSRecordsRequestType) (*GetNSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single NS record */ - UpdateNSRecord(request *UpdateNSRecordRequestType) (*UpdateNSRecordResponseType, error) - - UpdateNSRecordContext(ctx context.Context, request *UpdateNSRecordRequestType) (*UpdateNSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes every NS record */ - DeleteNSRecords(request *DeleteNSRecordsRequestType) (*DeleteNSRecordsResponseType, error) - - DeleteNSRecordsContext(ctx context.Context, request *DeleteNSRecordsRequestType) (*DeleteNSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single NS record */ - DeleteOneNSRecord(request *DeleteOneNSRecordRequestType) (*DeleteOneNSRecordResponseType, error) - - DeleteOneNSRecordContext(ctx context.Context, request *DeleteOneNSRecordRequestType) (*DeleteOneNSRecordResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceARecords(request *ReplaceARecordsRequestType) (*ReplaceARecordsResponseType, error) - - ReplaceARecordsContext(ctx context.Context, request *ReplaceARecordsRequestType) (*ReplaceARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceAAAARecords(request *ReplaceAAAARecordsRequestType) (*ReplaceAAAARecordsResponseType, error) - - ReplaceAAAARecordsContext(ctx context.Context, request *ReplaceAAAARecordsRequestType) (*ReplaceAAAARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceALIASRecords(request *ReplaceALIASRecordsRequestType) (*ReplaceALIASRecordsResponseType, error) - - ReplaceALIASRecordsContext(ctx context.Context, request *ReplaceALIASRecordsRequestType) (*ReplaceALIASRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceCAARecords(request *ReplaceCAARecordsRequestType) (*ReplaceCAARecordsResponseType, error) - - ReplaceCAARecordsContext(ctx context.Context, request *ReplaceCAARecordsRequestType) (*ReplaceCAARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceCDNSKEYRecords(request *ReplaceCDNSKEYRecordsRequestType) (*ReplaceCDNSKEYRecordsResponseType, error) - - ReplaceCDNSKEYRecordsContext(ctx context.Context, request *ReplaceCDNSKEYRecordsRequestType) (*ReplaceCDNSKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceCDSRecords(request *ReplaceCDSRecordsRequestType) (*ReplaceCDSRecordsResponseType, error) - - ReplaceCDSRecordsContext(ctx context.Context, request *ReplaceCDSRecordsRequestType) (*ReplaceCDSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceCERTRecords(request *ReplaceCERTRecordsRequestType) (*ReplaceCERTRecordsResponseType, error) - - ReplaceCERTRecordsContext(ctx context.Context, request *ReplaceCERTRecordsRequestType) (*ReplaceCERTRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceCNAMERecords(request *ReplaceCNAMERecordsRequestType) (*ReplaceCNAMERecordsResponseType, error) - - ReplaceCNAMERecordsContext(ctx context.Context, request *ReplaceCNAMERecordsRequestType) (*ReplaceCNAMERecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceCSYNCRecords(request *ReplaceCSYNCRecordsRequestType) (*ReplaceCSYNCRecordsResponseType, error) - - ReplaceCSYNCRecordsContext(ctx context.Context, request *ReplaceCSYNCRecordsRequestType) (*ReplaceCSYNCRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceDHCIDRecords(request *ReplaceDHCIDRecordsRequestType) (*ReplaceDHCIDRecordsResponseType, error) - - ReplaceDHCIDRecordsContext(ctx context.Context, request *ReplaceDHCIDRecordsRequestType) (*ReplaceDHCIDRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceDNAMERecords(request *ReplaceDNAMERecordsRequestType) (*ReplaceDNAMERecordsResponseType, error) - - ReplaceDNAMERecordsContext(ctx context.Context, request *ReplaceDNAMERecordsRequestType) (*ReplaceDNAMERecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceDNSKEYRecords(request *ReplaceDNSKEYRecordsRequestType) (*ReplaceDNSKEYRecordsResponseType, error) - - ReplaceDNSKEYRecordsContext(ctx context.Context, request *ReplaceDNSKEYRecordsRequestType) (*ReplaceDNSKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceDSRecords(request *ReplaceDSRecordsRequestType) (*ReplaceDSRecordsResponseType, error) - - ReplaceDSRecordsContext(ctx context.Context, request *ReplaceDSRecordsRequestType) (*ReplaceDSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceIPSECKEYRecords(request *ReplaceIPSECKEYRecordsRequestType) (*ReplaceIPSECKEYRecordsResponseType, error) - - ReplaceIPSECKEYRecordsContext(ctx context.Context, request *ReplaceIPSECKEYRecordsRequestType) (*ReplaceIPSECKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceKEYRecords(request *ReplaceKEYRecordsRequestType) (*ReplaceKEYRecordsResponseType, error) - - ReplaceKEYRecordsContext(ctx context.Context, request *ReplaceKEYRecordsRequestType) (*ReplaceKEYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceKXRecords(request *ReplaceKXRecordsRequestType) (*ReplaceKXRecordsResponseType, error) - - ReplaceKXRecordsContext(ctx context.Context, request *ReplaceKXRecordsRequestType) (*ReplaceKXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceLOCRecords(request *ReplaceLOCRecordsRequestType) (*ReplaceLOCRecordsResponseType, error) - - ReplaceLOCRecordsContext(ctx context.Context, request *ReplaceLOCRecordsRequestType) (*ReplaceLOCRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceMXRecords(request *ReplaceMXRecordsRequestType) (*ReplaceMXRecordsResponseType, error) - - ReplaceMXRecordsContext(ctx context.Context, request *ReplaceMXRecordsRequestType) (*ReplaceMXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceNAPTRRecords(request *ReplaceNAPTRRecordsRequestType) (*ReplaceNAPTRRecordsResponseType, error) - - ReplaceNAPTRRecordsContext(ctx context.Context, request *ReplaceNAPTRRecordsRequestType) (*ReplaceNAPTRRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceNSAPRecords(request *ReplaceNSAPRecordsRequestType) (*ReplaceNSAPRecordsResponseType, error) - - ReplaceNSAPRecordsContext(ctx context.Context, request *ReplaceNSAPRecordsRequestType) (*ReplaceNSAPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplacePOLICYRecords(request *ReplacePOLICYRecordsRequestType) (*ReplacePOLICYRecordsResponseType, error) - - ReplacePOLICYRecordsContext(ctx context.Context, request *ReplacePOLICYRecordsRequestType) (*ReplacePOLICYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplacePTRRecords(request *ReplacePTRRecordsRequestType) (*ReplacePTRRecordsResponseType, error) - - ReplacePTRRecordsContext(ctx context.Context, request *ReplacePTRRecordsRequestType) (*ReplacePTRRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplacePXRecords(request *ReplacePXRecordsRequestType) (*ReplacePXRecordsResponseType, error) - - ReplacePXRecordsContext(ctx context.Context, request *ReplacePXRecordsRequestType) (*ReplacePXRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceRPRecords(request *ReplaceRPRecordsRequestType) (*ReplaceRPRecordsResponseType, error) - - ReplaceRPRecordsContext(ctx context.Context, request *ReplaceRPRecordsRequestType) (*ReplaceRPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceSPFRecords(request *ReplaceSPFRecordsRequestType) (*ReplaceSPFRecordsResponseType, error) - - ReplaceSPFRecordsContext(ctx context.Context, request *ReplaceSPFRecordsRequestType) (*ReplaceSPFRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceSRVRecords(request *ReplaceSRVRecordsRequestType) (*ReplaceSRVRecordsResponseType, error) - - ReplaceSRVRecordsContext(ctx context.Context, request *ReplaceSRVRecordsRequestType) (*ReplaceSRVRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceSSHFPRecords(request *ReplaceSSHFPRecordsRequestType) (*ReplaceSSHFPRecordsResponseType, error) - - ReplaceSSHFPRecordsContext(ctx context.Context, request *ReplaceSSHFPRecordsRequestType) (*ReplaceSSHFPRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceTLSARecords(request *ReplaceTLSARecordsRequestType) (*ReplaceTLSARecordsResponseType, error) - - ReplaceTLSARecordsContext(ctx context.Context, request *ReplaceTLSARecordsRequestType) (*ReplaceTLSARecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceTXTRecords(request *ReplaceTXTRecordsRequestType) (*ReplaceTXTRecordsResponseType, error) - - ReplaceTXTRecordsContext(ctx context.Context, request *ReplaceTXTRecordsRequestType) (*ReplaceTXTRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ReplaceNSRecords(request *ReplaceNSRecordsRequestType) (*ReplaceNSRecordsResponseType, error) - - ReplaceNSRecordsContext(ctx context.Context, request *ReplaceNSRecordsRequestType) (*ReplaceNSRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetANYRecords(request *GetANYRecordsRequestType) (*GetANYRecordsResponseType, error) - - GetANYRecordsContext(ctx context.Context, request *GetANYRecordsRequestType) (*GetANYRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetAllRecords(request *GetAllRecordsRequestType) (*GetAllRecordsResponseType, error) - - GetAllRecordsContext(ctx context.Context, request *GetAllRecordsRequestType) (*GetAllRecordsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetAllAliasQNames(request *GetAllAliasQNamesRequestType) (*GetAllAliasQNamesResponseType, error) - - GetAllAliasQNamesContext(ctx context.Context, request *GetAllAliasQNamesRequestType) (*GetAllAliasQNamesResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single User */ - GetOneUser(request *GetOneUserRequestType) (*GetOneUserResponseType, error) - - GetOneUserContext(ctx context.Context, request *GetOneUserRequestType) (*GetOneUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single User */ - DeleteOneUser(request *DeleteOneUserRequestType) (*DeleteOneUserResponseType, error) - - DeleteOneUserContext(ctx context.Context, request *DeleteOneUserRequestType) (*DeleteOneUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateUser(request *CreateUserRequestType) (*CreateUserResponseType, error) - - CreateUserContext(ctx context.Context, request *CreateUserRequestType) (*CreateUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateUser(request *UpdateUserRequestType) (*UpdateUserResponseType, error) - - UpdateUserContext(ctx context.Context, request *UpdateUserRequestType) (*UpdateUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetUsers(request *GetUsersRequestType) (*GetUsersResponseType, error) - - GetUsersContext(ctx context.Context, request *GetUsersRequestType) (*GetUsersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetUpdateUsers(request *GetUpdateUsersRequestType) (*GetUpdateUsersResponseType, error) - - GetUpdateUsersContext(ctx context.Context, request *GetUpdateUsersRequestType) (*GetUpdateUsersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateUpdateUser(request *UpdateUpdateUserRequestType) (*UpdateUpdateUserResponseType, error) - - UpdateUpdateUserContext(ctx context.Context, request *UpdateUpdateUserRequestType) (*UpdateUpdateUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneUpdateUser(request *DeleteOneUpdateUserRequestType) (*DeleteOneUpdateUserResponseType, error) - - DeleteOneUpdateUserContext(ctx context.Context, request *DeleteOneUpdateUserRequestType) (*DeleteOneUpdateUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateUserPassword(request *UpdateUserPasswordRequestType) (*UpdateUserPasswordResponseType, error) - - UpdateUserPasswordContext(ctx context.Context, request *UpdateUserPasswordRequestType) (*UpdateUserPasswordResponseType, error) - - // Error can be either of the following types: - // - // - fault - - BlockUser(request *BlockUserRequestType) (*BlockUserResponseType, error) - - BlockUserContext(ctx context.Context, request *BlockUserRequestType) (*BlockUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UnblockUser(request *UnblockUserRequestType) (*UnblockUserResponseType, error) - - UnblockUserContext(ctx context.Context, request *UnblockUserRequestType) (*UnblockUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new Contact */ - CreateContact(request *CreateContactRequestType) (*CreateContactResponseType, error) - - CreateContactContext(ctx context.Context, request *CreateContactRequestType) (*CreateContactResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single Contact */ - GetOneContact(request *GetOneContactRequestType) (*GetOneContactResponseType, error) - - GetOneContactContext(ctx context.Context, request *GetOneContactRequestType) (*GetOneContactResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every Contact */ - GetContacts(request *GetContactsRequestType) (*GetContactsResponseType, error) - - GetContactsContext(ctx context.Context, request *GetContactsRequestType) (*GetContactsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single Contact */ - DeleteOneContact(request *DeleteOneContactRequestType) (*DeleteOneContactResponseType, error) - - DeleteOneContactContext(ctx context.Context, request *DeleteOneContactRequestType) (*DeleteOneContactResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateContact(request *UpdateContactRequestType) (*UpdateContactResponseType, error) - - UpdateContactContext(ctx context.Context, request *UpdateContactRequestType) (*UpdateContactResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateCustomer(request *CreateCustomerRequestType) (*CreateCustomerResponseType, error) - - CreateCustomerContext(ctx context.Context, request *CreateCustomerRequestType) (*CreateCustomerResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateCustomer(request *UpdateCustomerRequestType) (*UpdateCustomerResponseType, error) - - UpdateCustomerContext(ctx context.Context, request *UpdateCustomerRequestType) (*UpdateCustomerResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneCustomer(request *GetOneCustomerRequestType) (*GetOneCustomerResponseType, error) - - GetOneCustomerContext(ctx context.Context, request *GetOneCustomerRequestType) (*GetOneCustomerResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetCustomers(request *GetCustomersRequestType) (*GetCustomersResponseType, error) - - GetCustomersContext(ctx context.Context, request *GetCustomersRequestType) (*GetCustomersResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneCustomer(request *DeleteOneCustomerRequestType) (*DeleteOneCustomerResponseType, error) - - DeleteOneCustomerContext(ctx context.Context, request *DeleteOneCustomerRequestType) (*DeleteOneCustomerResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetCustomerPrefs(request *GetCustomerPrefsRequestType) (*GetCustomerPrefsResponseType, error) - - GetCustomerPrefsContext(ctx context.Context, request *GetCustomerPrefsRequestType) (*GetCustomerPrefsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetCustomerPrefs(request *SetCustomerPrefsRequestType) (*SetCustomerPrefsResponseType, error) - - SetCustomerPrefsContext(ctx context.Context, request *SetCustomerPrefsRequestType) (*SetCustomerPrefsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetCustomerIPACL(request *GetCustomerIPACLRequestType) (*GetCustomerIPACLResponseType, error) - - GetCustomerIPACLContext(ctx context.Context, request *GetCustomerIPACLRequestType) (*GetCustomerIPACLResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetCustomerIPACL(request *SetCustomerIPACLRequestType) (*SetCustomerIPACLResponseType, error) - - SetCustomerIPACLContext(ctx context.Context, request *SetCustomerIPACLRequestType) (*SetCustomerIPACLResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateCustomerOracleMetadata(request *CreateCustomerOracleMetadataRequestType) (*CreateCustomerOracleMetadataResponseType, error) - - CreateCustomerOracleMetadataContext(ctx context.Context, request *CreateCustomerOracleMetadataRequestType) (*CreateCustomerOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateCustomerOracleMetadata(request *UpdateCustomerOracleMetadataRequestType) (*UpdateCustomerOracleMetadataResponseType, error) - - UpdateCustomerOracleMetadataContext(ctx context.Context, request *UpdateCustomerOracleMetadataRequestType) (*UpdateCustomerOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetCustomerOracleMetadata(request *GetCustomerOracleMetadataRequestType) (*GetCustomerOracleMetadataResponseType, error) - - GetCustomerOracleMetadataContext(ctx context.Context, request *GetCustomerOracleMetadataRequestType) (*GetCustomerOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteCustomerOracleMetadata(request *DeleteCustomerOracleMetadataRequestType) (*DeleteCustomerOracleMetadataResponseType, error) - - DeleteCustomerOracleMetadataContext(ctx context.Context, request *DeleteCustomerOracleMetadataRequestType) (*DeleteCustomerOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateZoneOracleMetadata(request *CreateZoneOracleMetadataRequestType) (*CreateZoneOracleMetadataResponseType, error) - - CreateZoneOracleMetadataContext(ctx context.Context, request *CreateZoneOracleMetadataRequestType) (*CreateZoneOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateZoneOracleMetadata(request *UpdateZoneOracleMetadataRequestType) (*UpdateZoneOracleMetadataResponseType, error) - - UpdateZoneOracleMetadataContext(ctx context.Context, request *UpdateZoneOracleMetadataRequestType) (*UpdateZoneOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetZoneOracleMetadata(request *GetZoneOracleMetadataRequestType) (*GetZoneOracleMetadataResponseType, error) - - GetZoneOracleMetadataContext(ctx context.Context, request *GetZoneOracleMetadataRequestType) (*GetZoneOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteZoneOracleMetadata(request *DeleteZoneOracleMetadataRequestType) (*DeleteZoneOracleMetadataResponseType, error) - - DeleteZoneOracleMetadataContext(ctx context.Context, request *DeleteZoneOracleMetadataRequestType) (*DeleteZoneOracleMetadataResponseType, error) - - // Error can be either of the following types: - // - // - fault - - OCIMigrate(request *OCIMigrateRequestType) (*OCIMigrateResponseType, error) - - OCIMigrateContext(ctx context.Context, request *OCIMigrateRequestType) (*OCIMigrateResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new Dynamic DNS service */ - CreateDDNS(request *CreateDDNSRequestType) (*CreateDDNSResponseType, error) - - CreateDDNSContext(ctx context.Context, request *CreateDDNSRequestType) (*CreateDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single Dynamic DNS service */ - GetOneDDNS(request *GetOneDDNSRequestType) (*GetOneDDNSResponseType, error) - - GetOneDDNSContext(ctx context.Context, request *GetOneDDNSRequestType) (*GetOneDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every Dynamic DNS service */ - GetDDNSs(request *GetDDNSsRequestType) (*GetDDNSsResponseType, error) - - GetDDNSsContext(ctx context.Context, request *GetDDNSsRequestType) (*GetDDNSsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single Dynamic DNS service */ - UpdateDDNS(request *UpdateDDNSRequestType) (*UpdateDDNSResponseType, error) - - UpdateDDNSContext(ctx context.Context, request *UpdateDDNSRequestType) (*UpdateDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single Dynamic DNS service */ - DeleteOneDDNS(request *DeleteOneDDNSRequestType) (*DeleteOneDDNSResponseType, error) - - DeleteOneDDNSContext(ctx context.Context, request *DeleteOneDDNSRequestType) (*DeleteOneDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateDDNS(request *ActivateDDNSRequestType) (*ActivateDDNSResponseType, error) - - ActivateDDNSContext(ctx context.Context, request *ActivateDDNSRequestType) (*ActivateDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateDDNS(request *DeactivateDDNSRequestType) (*DeactivateDDNSResponseType, error) - - DeactivateDDNSContext(ctx context.Context, request *DeactivateDDNSRequestType) (*DeactivateDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ResetDDNS(request *ResetDDNSRequestType) (*ResetDDNSResponseType, error) - - ResetDDNSContext(ctx context.Context, request *ResetDDNSRequestType) (*ResetDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetUpdateUserPassword(request *GetUpdateUserPasswordRequestType) (*GetUpdateUserPasswordResponseType, error) - - GetUpdateUserPasswordContext(ctx context.Context, request *GetUpdateUserPasswordRequestType) (*GetUpdateUserPasswordResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateDDNSHost(request *CreateDDNSHostRequestType) (*CreateDDNSHostResponseType, error) - - CreateDDNSHostContext(ctx context.Context, request *CreateDDNSHostRequestType) (*CreateDDNSHostResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateUpdateUser(request *CreateUpdateUserRequestType) (*CreateUpdateUserResponseType, error) - - CreateUpdateUserContext(ctx context.Context, request *CreateUpdateUserRequestType) (*CreateUpdateUserResponseType, error) - - // Error can be either of the following types: - // - // - fault - - AddDDNS(request *AddDDNSRequestType) (*AddDDNSResponseType, error) - - AddDDNSContext(ctx context.Context, request *AddDDNSRequestType) (*AddDDNSResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new Simple Failover service */ - CreateFailover(request *CreateFailoverRequestType) (*CreateFailoverResponseType, error) - - CreateFailoverContext(ctx context.Context, request *CreateFailoverRequestType) (*CreateFailoverResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single Simple Failover service */ - GetOneFailover(request *GetOneFailoverRequestType) (*GetOneFailoverResponseType, error) - - GetOneFailoverContext(ctx context.Context, request *GetOneFailoverRequestType) (*GetOneFailoverResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every Simple Failover service */ - GetFailovers(request *GetFailoversRequestType) (*GetFailoversResponseType, error) - - GetFailoversContext(ctx context.Context, request *GetFailoversRequestType) (*GetFailoversResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single Simple Failover service */ - UpdateFailover(request *UpdateFailoverRequestType) (*UpdateFailoverResponseType, error) - - UpdateFailoverContext(ctx context.Context, request *UpdateFailoverRequestType) (*UpdateFailoverResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single Simple Failover service */ - DeleteOneFailover(request *DeleteOneFailoverRequestType) (*DeleteOneFailoverResponseType, error) - - DeleteOneFailoverContext(ctx context.Context, request *DeleteOneFailoverRequestType) (*DeleteOneFailoverResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateFailover(request *ActivateFailoverRequestType) (*ActivateFailoverResponseType, error) - - ActivateFailoverContext(ctx context.Context, request *ActivateFailoverRequestType) (*ActivateFailoverResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateFailover(request *DeactivateFailoverRequestType) (*DeactivateFailoverResponseType, error) - - DeactivateFailoverContext(ctx context.Context, request *DeactivateFailoverRequestType) (*DeactivateFailoverResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RecoverFailover(request *RecoverFailoverRequestType) (*RecoverFailoverResponseType, error) - - RecoverFailoverContext(ctx context.Context, request *RecoverFailoverRequestType) (*RecoverFailoverResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new basic LoadBalance service */ - CreateLoadBalance(request *CreateLoadBalanceRequestType) (*CreateLoadBalanceResponseType, error) - - CreateLoadBalanceContext(ctx context.Context, request *CreateLoadBalanceRequestType) (*CreateLoadBalanceResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single basic LoadBalance service */ - GetOneLoadBalance(request *GetOneLoadBalanceRequestType) (*GetOneLoadBalanceResponseType, error) - - GetOneLoadBalanceContext(ctx context.Context, request *GetOneLoadBalanceRequestType) (*GetOneLoadBalanceResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every basic LoadBalance service */ - GetLoadBalances(request *GetLoadBalancesRequestType) (*GetLoadBalancesResponseType, error) - - GetLoadBalancesContext(ctx context.Context, request *GetLoadBalancesRequestType) (*GetLoadBalancesResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single basic LoadBalance service */ - UpdateLoadBalance(request *UpdateLoadBalanceRequestType) (*UpdateLoadBalanceResponseType, error) - - UpdateLoadBalanceContext(ctx context.Context, request *UpdateLoadBalanceRequestType) (*UpdateLoadBalanceResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single basic LoadBalance service */ - DeleteOneLoadBalance(request *DeleteOneLoadBalanceRequestType) (*DeleteOneLoadBalanceResponseType, error) - - DeleteOneLoadBalanceContext(ctx context.Context, request *DeleteOneLoadBalanceRequestType) (*DeleteOneLoadBalanceResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateLoadBalance(request *ActivateLoadBalanceRequestType) (*ActivateLoadBalanceResponseType, error) - - ActivateLoadBalanceContext(ctx context.Context, request *ActivateLoadBalanceRequestType) (*ActivateLoadBalanceResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateLoadBalance(request *DeactivateLoadBalanceRequestType) (*DeactivateLoadBalanceResponseType, error) - - DeactivateLoadBalanceContext(ctx context.Context, request *DeactivateLoadBalanceRequestType) (*DeactivateLoadBalanceResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RecoverLoadBalance(request *RecoverLoadBalanceRequestType) (*RecoverLoadBalanceResponseType, error) - - RecoverLoadBalanceContext(ctx context.Context, request *RecoverLoadBalanceRequestType) (*RecoverLoadBalanceResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RecoverLoadBalanceIP(request *RecoverLoadBalanceIPRequestType) (*RecoverLoadBalanceIPResponseType, error) - - RecoverLoadBalanceIPContext(ctx context.Context, request *RecoverLoadBalanceIPRequestType) (*RecoverLoadBalanceIPResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateLoadBalancePoolEntry(request *CreateLoadBalancePoolEntryRequestType) (*CreateLoadBalancePoolEntryResponseType, error) - - CreateLoadBalancePoolEntryContext(ctx context.Context, request *CreateLoadBalancePoolEntryRequestType) (*CreateLoadBalancePoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateLoadBalancePoolEntry(request *UpdateLoadBalancePoolEntryRequestType) (*UpdateLoadBalancePoolEntryResponseType, error) - - UpdateLoadBalancePoolEntryContext(ctx context.Context, request *UpdateLoadBalancePoolEntryRequestType) (*UpdateLoadBalancePoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneLoadBalancePoolEntry(request *GetOneLoadBalancePoolEntryRequestType) (*GetOneLoadBalancePoolEntryResponseType, error) - - GetOneLoadBalancePoolEntryContext(ctx context.Context, request *GetOneLoadBalancePoolEntryRequestType) (*GetOneLoadBalancePoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetLoadBalancePoolEntries(request *GetLoadBalancePoolEntriesRequestType) (*GetLoadBalancePoolEntriesResponseType, error) - - GetLoadBalancePoolEntriesContext(ctx context.Context, request *GetLoadBalancePoolEntriesRequestType) (*GetLoadBalancePoolEntriesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneLoadBalancePoolEntry(request *DeleteOneLoadBalancePoolEntryRequestType) (*DeleteOneLoadBalancePoolEntryResponseType, error) - - DeleteOneLoadBalancePoolEntryContext(ctx context.Context, request *DeleteOneLoadBalancePoolEntryRequestType) (*DeleteOneLoadBalancePoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new GSLB */ - CreateGSLB(request *CreateGSLBRequestType) (*CreateGSLBResponseType, error) - - CreateGSLBContext(ctx context.Context, request *CreateGSLBRequestType) (*CreateGSLBResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single GSLB */ - GetOneGSLB(request *GetOneGSLBRequestType) (*GetOneGSLBResponseType, error) - - GetOneGSLBContext(ctx context.Context, request *GetOneGSLBRequestType) (*GetOneGSLBResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every GSLB */ - GetGSLBs(request *GetGSLBsRequestType) (*GetGSLBsResponseType, error) - - GetGSLBsContext(ctx context.Context, request *GetGSLBsRequestType) (*GetGSLBsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single GSLB */ - UpdateGSLB(request *UpdateGSLBRequestType) (*UpdateGSLBResponseType, error) - - UpdateGSLBContext(ctx context.Context, request *UpdateGSLBRequestType) (*UpdateGSLBResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single GSLB */ - DeleteOneGSLB(request *DeleteOneGSLBRequestType) (*DeleteOneGSLBResponseType, error) - - DeleteOneGSLBContext(ctx context.Context, request *DeleteOneGSLBRequestType) (*DeleteOneGSLBResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateGSLB(request *ActivateGSLBRequestType) (*ActivateGSLBResponseType, error) - - ActivateGSLBContext(ctx context.Context, request *ActivateGSLBRequestType) (*ActivateGSLBResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateGSLB(request *DeactivateGSLBRequestType) (*DeactivateGSLBResponseType, error) - - DeactivateGSLBContext(ctx context.Context, request *DeactivateGSLBRequestType) (*DeactivateGSLBResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RecoverGSLB(request *RecoverGSLBRequestType) (*RecoverGSLBResponseType, error) - - RecoverGSLBContext(ctx context.Context, request *RecoverGSLBRequestType) (*RecoverGSLBResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RecoverGSLBIP(request *RecoverGSLBIPRequestType) (*RecoverGSLBIPResponseType, error) - - RecoverGSLBIPContext(ctx context.Context, request *RecoverGSLBIPRequestType) (*RecoverGSLBIPResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new GSLBRegion */ - CreateGSLBRegion(request *CreateGSLBRegionRequestType) (*CreateGSLBRegionResponseType, error) - - CreateGSLBRegionContext(ctx context.Context, request *CreateGSLBRegionRequestType) (*CreateGSLBRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single GSLBRegion */ - GetOneGSLBRegion(request *GetOneGSLBRegionRequestType) (*GetOneGSLBRegionResponseType, error) - - GetOneGSLBRegionContext(ctx context.Context, request *GetOneGSLBRegionRequestType) (*GetOneGSLBRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every GSLBRegion */ - GetGSLBRegions(request *GetGSLBRegionsRequestType) (*GetGSLBRegionsResponseType, error) - - GetGSLBRegionsContext(ctx context.Context, request *GetGSLBRegionsRequestType) (*GetGSLBRegionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single GSLBRegion */ - UpdateGSLBRegion(request *UpdateGSLBRegionRequestType) (*UpdateGSLBRegionResponseType, error) - - UpdateGSLBRegionContext(ctx context.Context, request *UpdateGSLBRegionRequestType) (*UpdateGSLBRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single GSLBRegion */ - DeleteOneGSLBRegion(request *DeleteOneGSLBRegionRequestType) (*DeleteOneGSLBRegionResponseType, error) - - DeleteOneGSLBRegionContext(ctx context.Context, request *DeleteOneGSLBRegionRequestType) (*DeleteOneGSLBRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateGSLBRegionPoolEntry(request *CreateGSLBRegionPoolEntryRequestType) (*CreateGSLBRegionPoolEntryResponseType, error) - - CreateGSLBRegionPoolEntryContext(ctx context.Context, request *CreateGSLBRegionPoolEntryRequestType) (*CreateGSLBRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateGSLBRegionPoolEntry(request *UpdateGSLBRegionPoolEntryRequestType) (*UpdateGSLBRegionPoolEntryResponseType, error) - - UpdateGSLBRegionPoolEntryContext(ctx context.Context, request *UpdateGSLBRegionPoolEntryRequestType) (*UpdateGSLBRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneGSLBRegionPoolEntry(request *GetOneGSLBRegionPoolEntryRequestType) (*GetOneGSLBRegionPoolEntryResponseType, error) - - GetOneGSLBRegionPoolEntryContext(ctx context.Context, request *GetOneGSLBRegionPoolEntryRequestType) (*GetOneGSLBRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetGSLBRegionPoolEntries(request *GetGSLBRegionPoolEntriesRequestType) (*GetGSLBRegionPoolEntriesResponseType, error) - - GetGSLBRegionPoolEntriesContext(ctx context.Context, request *GetGSLBRegionPoolEntriesRequestType) (*GetGSLBRegionPoolEntriesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneGSLBRegionPoolEntry(request *DeleteOneGSLBRegionPoolEntryRequestType) (*DeleteOneGSLBRegionPoolEntryResponseType, error) - - DeleteOneGSLBRegionPoolEntryContext(ctx context.Context, request *DeleteOneGSLBRegionPoolEntryRequestType) (*DeleteOneGSLBRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new RTTM */ - CreateRTTM(request *CreateRTTMRequestType) (*CreateRTTMResponseType, error) - - CreateRTTMContext(ctx context.Context, request *CreateRTTMRequestType) (*CreateRTTMResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single RTTM */ - GetOneRTTM(request *GetOneRTTMRequestType) (*GetOneRTTMResponseType, error) - - GetOneRTTMContext(ctx context.Context, request *GetOneRTTMRequestType) (*GetOneRTTMResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every RTTM */ - GetRTTMs(request *GetRTTMsRequestType) (*GetRTTMsResponseType, error) - - GetRTTMsContext(ctx context.Context, request *GetRTTMsRequestType) (*GetRTTMsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single RTTM */ - UpdateRTTM(request *UpdateRTTMRequestType) (*UpdateRTTMResponseType, error) - - UpdateRTTMContext(ctx context.Context, request *UpdateRTTMRequestType) (*UpdateRTTMResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single RTTM */ - DeleteOneRTTM(request *DeleteOneRTTMRequestType) (*DeleteOneRTTMResponseType, error) - - DeleteOneRTTMContext(ctx context.Context, request *DeleteOneRTTMRequestType) (*DeleteOneRTTMResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateRTTM(request *ActivateRTTMRequestType) (*ActivateRTTMResponseType, error) - - ActivateRTTMContext(ctx context.Context, request *ActivateRTTMRequestType) (*ActivateRTTMResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateRTTM(request *DeactivateRTTMRequestType) (*DeactivateRTTMResponseType, error) - - DeactivateRTTMContext(ctx context.Context, request *DeactivateRTTMRequestType) (*DeactivateRTTMResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RecoverRTTM(request *RecoverRTTMRequestType) (*RecoverRTTMResponseType, error) - - RecoverRTTMContext(ctx context.Context, request *RecoverRTTMRequestType) (*RecoverRTTMResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RecoverRTTMIP(request *RecoverRTTMIPRequestType) (*RecoverRTTMIPResponseType, error) - - RecoverRTTMIPContext(ctx context.Context, request *RecoverRTTMIPRequestType) (*RecoverRTTMIPResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetRTTMLogs(request *GetRTTMLogsRequestType) (*GetRTTMLogsResponseType, error) - - GetRTTMLogsContext(ctx context.Context, request *GetRTTMLogsRequestType) (*GetRTTMLogsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetRTTMRRSets(request *GetRTTMRRSetsRequestType) (*GetRTTMRRSetsResponseType, error) - - GetRTTMRRSetsContext(ctx context.Context, request *GetRTTMRRSetsRequestType) (*GetRTTMRRSetsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new RTTMRegion */ - CreateRTTMRegion(request *CreateRTTMRegionRequestType) (*CreateRTTMRegionResponseType, error) - - CreateRTTMRegionContext(ctx context.Context, request *CreateRTTMRegionRequestType) (*CreateRTTMRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single RTTMRegion */ - GetOneRTTMRegion(request *GetOneRTTMRegionRequestType) (*GetOneRTTMRegionResponseType, error) - - GetOneRTTMRegionContext(ctx context.Context, request *GetOneRTTMRegionRequestType) (*GetOneRTTMRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every RTTMRegion */ - GetRTTMRegions(request *GetRTTMRegionsRequestType) (*GetRTTMRegionsResponseType, error) - - GetRTTMRegionsContext(ctx context.Context, request *GetRTTMRegionsRequestType) (*GetRTTMRegionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single RTTMRegion */ - UpdateRTTMRegion(request *UpdateRTTMRegionRequestType) (*UpdateRTTMRegionResponseType, error) - - UpdateRTTMRegionContext(ctx context.Context, request *UpdateRTTMRegionRequestType) (*UpdateRTTMRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single RTTMRegion */ - DeleteOneRTTMRegion(request *DeleteOneRTTMRegionRequestType) (*DeleteOneRTTMRegionResponseType, error) - - DeleteOneRTTMRegionContext(ctx context.Context, request *DeleteOneRTTMRegionRequestType) (*DeleteOneRTTMRegionResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateRTTMRegionPoolEntry(request *CreateRTTMRegionPoolEntryRequestType) (*CreateRTTMRegionPoolEntryResponseType, error) - - CreateRTTMRegionPoolEntryContext(ctx context.Context, request *CreateRTTMRegionPoolEntryRequestType) (*CreateRTTMRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateRTTMRegionPoolEntry(request *UpdateRTTMRegionPoolEntryRequestType) (*UpdateRTTMRegionPoolEntryResponseType, error) - - UpdateRTTMRegionPoolEntryContext(ctx context.Context, request *UpdateRTTMRegionPoolEntryRequestType) (*UpdateRTTMRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneRTTMRegionPoolEntry(request *GetOneRTTMRegionPoolEntryRequestType) (*GetOneRTTMRegionPoolEntryResponseType, error) - - GetOneRTTMRegionPoolEntryContext(ctx context.Context, request *GetOneRTTMRegionPoolEntryRequestType) (*GetOneRTTMRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetRTTMRegionPoolEntries(request *GetRTTMRegionPoolEntriesRequestType) (*GetRTTMRegionPoolEntriesResponseType, error) - - GetRTTMRegionPoolEntriesContext(ctx context.Context, request *GetRTTMRegionPoolEntriesRequestType) (*GetRTTMRegionPoolEntriesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneRTTMRegionPoolEntry(request *DeleteOneRTTMRegionPoolEntryRequestType) (*DeleteOneRTTMRegionPoolEntryResponseType, error) - - DeleteOneRTTMRegionPoolEntryContext(ctx context.Context, request *DeleteOneRTTMRegionPoolEntryRequestType) (*DeleteOneRTTMRegionPoolEntryResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new HTTPRedirect */ - CreateHTTPRedirect(request *CreateHTTPRedirectRequestType) (*CreateHTTPRedirectResponseType, error) - - CreateHTTPRedirectContext(ctx context.Context, request *CreateHTTPRedirectRequestType) (*CreateHTTPRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single HTTPRedirect */ - GetOneHTTPRedirect(request *GetOneHTTPRedirectRequestType) (*GetOneHTTPRedirectResponseType, error) - - GetOneHTTPRedirectContext(ctx context.Context, request *GetOneHTTPRedirectRequestType) (*GetOneHTTPRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every HTTPRedirect */ - GetHTTPRedirects(request *GetHTTPRedirectsRequestType) (*GetHTTPRedirectsResponseType, error) - - GetHTTPRedirectsContext(ctx context.Context, request *GetHTTPRedirectsRequestType) (*GetHTTPRedirectsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single HTTPRedirect */ - UpdateHTTPRedirect(request *UpdateHTTPRedirectRequestType) (*UpdateHTTPRedirectResponseType, error) - - UpdateHTTPRedirectContext(ctx context.Context, request *UpdateHTTPRedirectRequestType) (*UpdateHTTPRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single HTTPRedirect */ - DeleteOneHTTPRedirect(request *DeleteOneHTTPRedirectRequestType) (*DeleteOneHTTPRedirectResponseType, error) - - DeleteOneHTTPRedirectContext(ctx context.Context, request *DeleteOneHTTPRedirectRequestType) (*DeleteOneHTTPRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - - CreateAdvRedirectRule(request *CreateAdvRedirectRuleRequestType) (*CreateAdvRedirectRuleResponseType, error) - - CreateAdvRedirectRuleContext(ctx context.Context, request *CreateAdvRedirectRuleRequestType) (*CreateAdvRedirectRuleResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UpdateAdvRedirectRule(request *UpdateAdvRedirectRuleRequestType) (*UpdateAdvRedirectRuleResponseType, error) - - UpdateAdvRedirectRuleContext(ctx context.Context, request *UpdateAdvRedirectRuleRequestType) (*UpdateAdvRedirectRuleResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetOneAdvRedirectRule(request *GetOneAdvRedirectRuleRequestType) (*GetOneAdvRedirectRuleResponseType, error) - - GetOneAdvRedirectRuleContext(ctx context.Context, request *GetOneAdvRedirectRuleRequestType) (*GetOneAdvRedirectRuleResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetAdvRedirectRules(request *GetAdvRedirectRulesRequestType) (*GetAdvRedirectRulesResponseType, error) - - GetAdvRedirectRulesContext(ctx context.Context, request *GetAdvRedirectRulesRequestType) (*GetAdvRedirectRulesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneAdvRedirectRule(request *DeleteOneAdvRedirectRuleRequestType) (*DeleteOneAdvRedirectRuleResponseType, error) - - DeleteOneAdvRedirectRuleContext(ctx context.Context, request *DeleteOneAdvRedirectRuleRequestType) (*DeleteOneAdvRedirectRuleResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new AdvRedirect */ - CreateAdvRedirect(request *CreateAdvRedirectRequestType) (*CreateAdvRedirectResponseType, error) - - CreateAdvRedirectContext(ctx context.Context, request *CreateAdvRedirectRequestType) (*CreateAdvRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single AdvRedirect */ - GetOneAdvRedirect(request *GetOneAdvRedirectRequestType) (*GetOneAdvRedirectResponseType, error) - - GetOneAdvRedirectContext(ctx context.Context, request *GetOneAdvRedirectRequestType) (*GetOneAdvRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every AdvRedirect */ - GetAdvRedirects(request *GetAdvRedirectsRequestType) (*GetAdvRedirectsResponseType, error) - - GetAdvRedirectsContext(ctx context.Context, request *GetAdvRedirectsRequestType) (*GetAdvRedirectsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single AdvRedirect */ - UpdateAdvRedirect(request *UpdateAdvRedirectRequestType) (*UpdateAdvRedirectResponseType, error) - - UpdateAdvRedirectContext(ctx context.Context, request *UpdateAdvRedirectRequestType) (*UpdateAdvRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteOneAdvRedirect(request *DeleteOneAdvRedirectRequestType) (*DeleteOneAdvRedirectResponseType, error) - - DeleteOneAdvRedirectContext(ctx context.Context, request *DeleteOneAdvRedirectRequestType) (*DeleteOneAdvRedirectResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetNodeList(request *GetNodeListRequestType) (*GetNodeListResponseType, error) - - GetNodeListContext(ctx context.Context, request *GetNodeListRequestType) (*GetNodeListResponseType, error) - - // Error can be either of the following types: - // - // - fault - - PublishZone(request *PublishZoneRequestType) (*PublishZoneResponseType, error) - - PublishZoneContext(ctx context.Context, request *PublishZoneRequestType) (*PublishZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - PruneZone(request *PruneZoneRequestType) (*PruneZoneResponseType, error) - - PruneZoneContext(ctx context.Context, request *PruneZoneRequestType) (*PruneZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - FreezeZone(request *FreezeZoneRequestType) (*FreezeZoneResponseType, error) - - FreezeZoneContext(ctx context.Context, request *FreezeZoneRequestType) (*FreezeZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ThawZone(request *ThawZoneRequestType) (*ThawZoneResponseType, error) - - ThawZoneContext(ctx context.Context, request *ThawZoneRequestType) (*ThawZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - RestoreZone(request *RestoreZoneRequestType) (*RestoreZoneResponseType, error) - - RestoreZoneContext(ctx context.Context, request *RestoreZoneRequestType) (*RestoreZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - BlockZone(request *BlockZoneRequestType) (*BlockZoneResponseType, error) - - BlockZoneContext(ctx context.Context, request *BlockZoneRequestType) (*BlockZoneResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeleteZoneChangeset(request *DeleteZoneChangesetRequestType) (*DeleteZoneChangesetResponseType, error) - - DeleteZoneChangesetContext(ctx context.Context, request *DeleteZoneChangesetRequestType) (*DeleteZoneChangesetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetZoneChangeset(request *GetZoneChangesetRequestType) (*GetZoneChangesetResponseType, error) - - GetZoneChangesetContext(ctx context.Context, request *GetZoneChangesetRequestType) (*GetZoneChangesetResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetZoneNotes(request *GetZoneNotesRequestType) (*GetZoneNotesResponseType, error) - - GetZoneNotesContext(ctx context.Context, request *GetZoneNotesRequestType) (*GetZoneNotesResponseType, error) - - // Error can be either of the following types: - // - // - fault - - UploadZoneFile(request *UploadZoneFileRequestType) (*UploadZoneFileResponseType, error) - - UploadZoneFileContext(ctx context.Context, request *UploadZoneFileRequestType) (*UploadZoneFileResponseType, error) - - // Error can be either of the following types: - // - // - fault - - TransferZoneIn(request *TransferZoneInRequestType) (*TransferZoneInResponseType, error) - - TransferZoneInContext(ctx context.Context, request *TransferZoneInRequestType) (*TransferZoneInResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetTransferStatus(request *GetTransferStatusRequestType) (*GetTransferStatusResponseType, error) - - GetTransferStatusContext(ctx context.Context, request *GetTransferStatusRequestType) (*GetTransferStatusResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetZoneConfigOptions(request *GetZoneConfigOptionsRequestType) (*GetZoneConfigOptionsResponseType, error) - - GetZoneConfigOptionsContext(ctx context.Context, request *GetZoneConfigOptionsRequestType) (*GetZoneConfigOptionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - - SetZoneConfigOptions(request *SetZoneConfigOptionsRequestType) (*SetZoneConfigOptionsResponseType, error) - - SetZoneConfigOptionsContext(ctx context.Context, request *SetZoneConfigOptionsRequestType) (*SetZoneConfigOptionsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new IPTrack */ - CreateIPTrack(request *CreateIPTrackRequestType) (*CreateIPTrackResponseType, error) - - CreateIPTrackContext(ctx context.Context, request *CreateIPTrackRequestType) (*CreateIPTrackResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single IPTrack */ - GetOneIPTrack(request *GetOneIPTrackRequestType) (*GetOneIPTrackResponseType, error) - - GetOneIPTrackContext(ctx context.Context, request *GetOneIPTrackRequestType) (*GetOneIPTrackResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every IPTrack */ - GetIPTracks(request *GetIPTracksRequestType) (*GetIPTracksResponseType, error) - - GetIPTracksContext(ctx context.Context, request *GetIPTracksRequestType) (*GetIPTracksResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single IPTrack */ - UpdateIPTrack(request *UpdateIPTrackRequestType) (*UpdateIPTrackResponseType, error) - - UpdateIPTrackContext(ctx context.Context, request *UpdateIPTrackRequestType) (*UpdateIPTrackResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single IPTrack */ - DeleteOneIPTrack(request *DeleteOneIPTrackRequestType) (*DeleteOneIPTrackResponseType, error) - - DeleteOneIPTrackContext(ctx context.Context, request *DeleteOneIPTrackRequestType) (*DeleteOneIPTrackResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateIPTrack(request *ActivateIPTrackRequestType) (*ActivateIPTrackResponseType, error) - - ActivateIPTrackContext(ctx context.Context, request *ActivateIPTrackRequestType) (*ActivateIPTrackResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateIPTrack(request *DeactivateIPTrackRequestType) (*DeactivateIPTrackResponseType, error) - - DeactivateIPTrackContext(ctx context.Context, request *DeactivateIPTrackRequestType) (*DeactivateIPTrackResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new DNSSEC */ - CreateDNSSEC(request *CreateDNSSECRequestType) (*CreateDNSSECResponseType, error) - - CreateDNSSECContext(ctx context.Context, request *CreateDNSSECRequestType) (*CreateDNSSECResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single DNSSEC */ - GetOneDNSSEC(request *GetOneDNSSECRequestType) (*GetOneDNSSECResponseType, error) - - GetOneDNSSECContext(ctx context.Context, request *GetOneDNSSECRequestType) (*GetOneDNSSECResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every DNSSEC */ - GetDNSSECs(request *GetDNSSECsRequestType) (*GetDNSSECsResponseType, error) - - GetDNSSECsContext(ctx context.Context, request *GetDNSSECsRequestType) (*GetDNSSECsResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single DNSSEC */ - UpdateDNSSEC(request *UpdateDNSSECRequestType) (*UpdateDNSSECResponseType, error) - - UpdateDNSSECContext(ctx context.Context, request *UpdateDNSSECRequestType) (*UpdateDNSSECResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single DNSSEC */ - DeleteOneDNSSEC(request *DeleteOneDNSSECRequestType) (*DeleteOneDNSSECResponseType, error) - - DeleteOneDNSSECContext(ctx context.Context, request *DeleteOneDNSSECRequestType) (*DeleteOneDNSSECResponseType, error) - - // Error can be either of the following types: - // - // - fault - - ActivateDNSSEC(request *ActivateDNSSECRequestType) (*ActivateDNSSECResponseType, error) - - ActivateDNSSECContext(ctx context.Context, request *ActivateDNSSECRequestType) (*ActivateDNSSECResponseType, error) - - // Error can be either of the following types: - // - // - fault - - DeactivateDNSSEC(request *DeactivateDNSSECRequestType) (*DeactivateDNSSECResponseType, error) - - DeactivateDNSSECContext(ctx context.Context, request *DeactivateDNSSECRequestType) (*DeactivateDNSSECResponseType, error) - - // Error can be either of the following types: - // - // - fault - - GetDNSSECTimeline(request *GetDNSSECTimelineRequestType) (*GetDNSSECTimelineResponseType, error) - - GetDNSSECTimelineContext(ctx context.Context, request *GetDNSSECTimelineRequestType) (*GetDNSSECTimelineResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every Task */ - GetTasks(request *GetTasksRequestType) (*GetTasksResponseType, error) - - GetTasksContext(ctx context.Context, request *GetTasksRequestType) (*GetTasksResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single Task */ - GetOneTask(request *GetOneTaskRequestType) (*GetOneTaskResponseType, error) - - GetOneTaskContext(ctx context.Context, request *GetOneTaskRequestType) (*GetOneTaskResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Cancels a Task */ - CancelTask(request *CancelTaskRequestType) (*CancelTaskResponseType, error) - - CancelTaskContext(ctx context.Context, request *CancelTaskRequestType) (*CancelTaskResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Creates a new ExtNameserver */ - CreateExtNameserver(request *CreateExtNameserverRequestType) (*CreateExtNameserverResponseType, error) - - CreateExtNameserverContext(ctx context.Context, request *CreateExtNameserverRequestType) (*CreateExtNameserverResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds single ExtNameserver */ - GetOneExtNameserver(request *GetOneExtNameserverRequestType) (*GetOneExtNameserverResponseType, error) - - GetOneExtNameserverContext(ctx context.Context, request *GetOneExtNameserverRequestType) (*GetOneExtNameserverResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Finds every ExtNameserver */ - GetExtNameservers(request *GetExtNameserversRequestType) (*GetExtNameserversResponseType, error) - - GetExtNameserversContext(ctx context.Context, request *GetExtNameserversRequestType) (*GetExtNameserversResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Updates a single ExtNameserver */ - UpdateExtNameserver(request *UpdateExtNameserverRequestType) (*UpdateExtNameserverResponseType, error) - - UpdateExtNameserverContext(ctx context.Context, request *UpdateExtNameserverRequestType) (*UpdateExtNameserverResponseType, error) - - // Error can be either of the following types: - // - // - fault - /* Deletes a single ExtNameserver */ - DeleteOneExtNameserver(request *DeleteOneExtNameserverRequestType) (*DeleteOneExtNameserverResponseType, error) - - DeleteOneExtNameserverContext(ctx context.Context, request *DeleteOneExtNameserverRequestType) (*DeleteOneExtNameserverResponseType, error) -} - -type dynect struct { - client *soap.Client -} - -func NewDynect(client *soap.Client) Dynect { - return &dynect{ - client: client, - } -} - -func (service *dynect) GetJobContext(ctx context.Context, request *GetJobRequestType) (*GetJobResponseType, error) { - response := new(GetJobResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetJob(request *GetJobRequestType) (*GetJobResponseType, error) { - return service.GetJobContext( - context.Background(), - request, - ) -} - -func (service *dynect) SessionLoginContext(ctx context.Context, request *SessionLoginRequestType) (*SessionLoginResponseType, error) { - response := new(SessionLoginResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SessionLogin(request *SessionLoginRequestType) (*SessionLoginResponseType, error) { - return service.SessionLoginContext( - context.Background(), - request, - ) -} - -func (service *dynect) SessionLogoutContext(ctx context.Context, request *SessionLogoutRequestType) (*SessionLogoutResponseType, error) { - response := new(SessionLogoutResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SessionLogout(request *SessionLogoutRequestType) (*SessionLogoutResponseType, error) { - return service.SessionLogoutContext( - context.Background(), - request, - ) -} - -func (service *dynect) SessionIsAliveContext(ctx context.Context, request *SessionIsAliveRequestType) (*SessionIsAliveResponseType, error) { - response := new(SessionIsAliveResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SessionIsAlive(request *SessionIsAliveRequestType) (*SessionIsAliveResponseType, error) { - return service.SessionIsAliveContext( - context.Background(), - request, - ) -} - -func (service *dynect) SessionKeepAliveContext(ctx context.Context, request *SessionKeepAliveRequestType) (*SessionKeepAliveResponseType, error) { - response := new(SessionKeepAliveResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SessionKeepAlive(request *SessionKeepAliveRequestType) (*SessionKeepAliveResponseType, error) { - return service.SessionKeepAliveContext( - context.Background(), - request, - ) -} - -func (service *dynect) ScopeInContext(ctx context.Context, request *ScopeInRequestType) (*ScopeInResponseType, error) { - response := new(ScopeInResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ScopeIn(request *ScopeInRequestType) (*ScopeInResponseType, error) { - return service.ScopeInContext( - context.Background(), - request, - ) -} - -func (service *dynect) ScopeAsContext(ctx context.Context, request *ScopeAsRequestType) (*ScopeAsResponseType, error) { - response := new(ScopeAsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ScopeAs(request *ScopeAsRequestType) (*ScopeAsResponseType, error) { - return service.ScopeAsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UnscopeContext(ctx context.Context, request *UnscopeRequestType) (*UnscopeResponseType, error) { - response := new(UnscopeResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) Unscope(request *UnscopeRequestType) (*UnscopeResponseType, error) { - return service.UnscopeContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetQueryStatsContext(ctx context.Context, request *GetQueryStatsRequestType) (*GetQueryStatsResponseType, error) { - response := new(GetQueryStatsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetQueryStats(request *GetQueryStatsRequestType) (*GetQueryStatsResponseType, error) { - return service.GetQueryStatsContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateGeoContext(ctx context.Context, request *CreateGeoRequestType) (*CreateGeoResponseType, error) { - response := new(CreateGeoResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateGeo(request *CreateGeoRequestType) (*CreateGeoResponseType, error) { - return service.CreateGeoContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateGeoContext(ctx context.Context, request *UpdateGeoRequestType) (*UpdateGeoResponseType, error) { - response := new(UpdateGeoResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateGeo(request *UpdateGeoRequestType) (*UpdateGeoResponseType, error) { - return service.UpdateGeoContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetGeosContext(ctx context.Context, request *GetGeosRequestType) (*GetGeosResponseType, error) { - response := new(GetGeosResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetGeos(request *GetGeosRequestType) (*GetGeosResponseType, error) { - return service.GetGeosContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneGeoContext(ctx context.Context, request *GetOneGeoRequestType) (*GetOneGeoResponseType, error) { - response := new(GetOneGeoResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneGeo(request *GetOneGeoRequestType) (*GetOneGeoResponseType, error) { - return service.GetOneGeoContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneGeoContext(ctx context.Context, request *DeleteOneGeoRequestType) (*DeleteOneGeoResponseType, error) { - response := new(DeleteOneGeoResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneGeo(request *DeleteOneGeoRequestType) (*DeleteOneGeoResponseType, error) { - return service.DeleteOneGeoContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateGeoContext(ctx context.Context, request *ActivateGeoRequestType) (*ActivateGeoResponseType, error) { - response := new(ActivateGeoResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateGeo(request *ActivateGeoRequestType) (*ActivateGeoResponseType, error) { - return service.ActivateGeoContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateGeoContext(ctx context.Context, request *DeactivateGeoRequestType) (*DeactivateGeoResponseType, error) { - response := new(DeactivateGeoResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateGeo(request *DeactivateGeoRequestType) (*DeactivateGeoResponseType, error) { - return service.DeactivateGeoContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateGeoRegionGroupContext(ctx context.Context, request *CreateGeoRegionGroupRequestType) (*CreateGeoRegionGroupResponseType, error) { - response := new(CreateGeoRegionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateGeoRegionGroup(request *CreateGeoRegionGroupRequestType) (*CreateGeoRegionGroupResponseType, error) { - return service.CreateGeoRegionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateGeoRegionGroupContext(ctx context.Context, request *UpdateGeoRegionGroupRequestType) (*UpdateGeoRegionGroupResponseType, error) { - response := new(UpdateGeoRegionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateGeoRegionGroup(request *UpdateGeoRegionGroupRequestType) (*UpdateGeoRegionGroupResponseType, error) { - return service.UpdateGeoRegionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneGeoRegionGroupContext(ctx context.Context, request *DeleteOneGeoRegionGroupRequestType) (*DeleteOneGeoRegionGroupResponseType, error) { - response := new(DeleteOneGeoRegionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneGeoRegionGroup(request *DeleteOneGeoRegionGroupRequestType) (*DeleteOneGeoRegionGroupResponseType, error) { - return service.DeleteOneGeoRegionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetGeoRegionGroupsContext(ctx context.Context, request *GetGeoRegionGroupsRequestType) (*GetGeoRegionGroupsResponseType, error) { - response := new(GetGeoRegionGroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetGeoRegionGroups(request *GetGeoRegionGroupsRequestType) (*GetGeoRegionGroupsResponseType, error) { - return service.GetGeoRegionGroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneGeoRegionGroupContext(ctx context.Context, request *GetOneGeoRegionGroupRequestType) (*GetOneGeoRegionGroupResponseType, error) { - response := new(GetOneGeoRegionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneGeoRegionGroup(request *GetOneGeoRegionGroupRequestType) (*GetOneGeoRegionGroupResponseType, error) { - return service.GetOneGeoRegionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateGeoNodeContext(ctx context.Context, request *CreateGeoNodeRequestType) (*CreateGeoNodeResponseType, error) { - response := new(CreateGeoNodeResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateGeoNode(request *CreateGeoNodeRequestType) (*CreateGeoNodeResponseType, error) { - return service.CreateGeoNodeContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneGeoNodeContext(ctx context.Context, request *DeleteOneGeoNodeRequestType) (*DeleteOneGeoNodeResponseType, error) { - response := new(DeleteOneGeoNodeResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneGeoNode(request *DeleteOneGeoNodeRequestType) (*DeleteOneGeoNodeResponseType, error) { - return service.DeleteOneGeoNodeContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetGeoNodesContext(ctx context.Context, request *GetGeoNodesRequestType) (*GetGeoNodesResponseType, error) { - response := new(GetGeoNodesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetGeoNodes(request *GetGeoNodesRequestType) (*GetGeoNodesResponseType, error) { - return service.GetGeoNodesContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSFContext(ctx context.Context, request *CreateDSFRequestType) (*CreateDSFResponseType, error) { - response := new(CreateDSFResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSF(request *CreateDSFRequestType) (*CreateDSFResponseType, error) { - return service.CreateDSFContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFContext(ctx context.Context, request *UpdateDSFRequestType) (*UpdateDSFResponseType, error) { - response := new(UpdateDSFResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSF(request *UpdateDSFRequestType) (*UpdateDSFResponseType, error) { - return service.UpdateDSFContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFsContext(ctx context.Context, request *GetDSFsRequestType) (*GetDSFsResponseType, error) { - response := new(GetDSFsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFs(request *GetDSFsRequestType) (*GetDSFsResponseType, error) { - return service.GetDSFsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFNotifiersContext(ctx context.Context, request *GetDSFNotifiersRequestType) (*GetDSFNotifiersResponseType, error) { - response := new(GetDSFNotifiersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFNotifiers(request *GetDSFNotifiersRequestType) (*GetDSFNotifiersResponseType, error) { - return service.GetDSFNotifiersContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFContext(ctx context.Context, request *DeleteOneDSFRequestType) (*DeleteOneDSFResponseType, error) { - response := new(DeleteOneDSFResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSF(request *DeleteOneDSFRequestType) (*DeleteOneDSFResponseType, error) { - return service.DeleteOneDSFContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSFContext(ctx context.Context, request *GetOneDSFRequestType) (*GetOneDSFResponseType, error) { - response := new(GetOneDSFResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSF(request *GetOneDSFRequestType) (*GetOneDSFResponseType, error) { - return service.GetOneDSFContext( - context.Background(), - request, - ) -} - -func (service *dynect) RevertDSFContext(ctx context.Context, request *RevertDSFRequestType) (*RevertDSFResponseType, error) { - response := new(RevertDSFResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RevertDSF(request *RevertDSFRequestType) (*RevertDSFResponseType, error) { - return service.RevertDSFContext( - context.Background(), - request, - ) -} - -func (service *dynect) PublishDSFContext(ctx context.Context, request *PublishDSFRequestType) (*PublishDSFResponseType, error) { - response := new(PublishDSFResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) PublishDSF(request *PublishDSFRequestType) (*PublishDSFResponseType, error) { - return service.PublishDSFContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddDSFNotifierContext(ctx context.Context, request *AddDSFNotifierRequestType) (*AddDSFNotifierResponseType, error) { - response := new(AddDSFNotifierResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddDSFNotifier(request *AddDSFNotifierRequestType) (*AddDSFNotifierResponseType, error) { - return service.AddDSFNotifierContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemoveDSFNotifierContext(ctx context.Context, request *RemoveDSFNotifierRequestType) (*RemoveDSFNotifierResponseType, error) { - response := new(RemoveDSFNotifierResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemoveDSFNotifier(request *RemoveDSFNotifierRequestType) (*RemoveDSFNotifierResponseType, error) { - return service.RemoveDSFNotifierContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSFRulesetContext(ctx context.Context, request *CreateDSFRulesetRequestType) (*CreateDSFRulesetResponseType, error) { - response := new(CreateDSFRulesetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSFRuleset(request *CreateDSFRulesetRequestType) (*CreateDSFRulesetResponseType, error) { - return service.CreateDSFRulesetContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFRulesetContext(ctx context.Context, request *UpdateDSFRulesetRequestType) (*UpdateDSFRulesetResponseType, error) { - response := new(UpdateDSFRulesetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSFRuleset(request *UpdateDSFRulesetRequestType) (*UpdateDSFRulesetResponseType, error) { - return service.UpdateDSFRulesetContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFRulesetsContext(ctx context.Context, request *GetDSFRulesetsRequestType) (*GetDSFRulesetsResponseType, error) { - response := new(GetDSFRulesetsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFRulesets(request *GetDSFRulesetsRequestType) (*GetDSFRulesetsResponseType, error) { - return service.GetDSFRulesetsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSFRulesetContext(ctx context.Context, request *GetOneDSFRulesetRequestType) (*GetOneDSFRulesetResponseType, error) { - response := new(GetOneDSFRulesetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSFRuleset(request *GetOneDSFRulesetRequestType) (*GetOneDSFRulesetResponseType, error) { - return service.GetOneDSFRulesetContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFRulesetContext(ctx context.Context, request *DeleteOneDSFRulesetRequestType) (*DeleteOneDSFRulesetResponseType, error) { - response := new(DeleteOneDSFRulesetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSFRuleset(request *DeleteOneDSFRulesetRequestType) (*DeleteOneDSFRulesetResponseType, error) { - return service.DeleteOneDSFRulesetContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSFResponsePoolContext(ctx context.Context, request *CreateDSFResponsePoolRequestType) (*CreateDSFResponsePoolResponseType, error) { - response := new(CreateDSFResponsePoolResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSFResponsePool(request *CreateDSFResponsePoolRequestType) (*CreateDSFResponsePoolResponseType, error) { - return service.CreateDSFResponsePoolContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFResponsePoolContext(ctx context.Context, request *UpdateDSFResponsePoolRequestType) (*UpdateDSFResponsePoolResponseType, error) { - response := new(UpdateDSFResponsePoolResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSFResponsePool(request *UpdateDSFResponsePoolRequestType) (*UpdateDSFResponsePoolResponseType, error) { - return service.UpdateDSFResponsePoolContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFResponsePoolsContext(ctx context.Context, request *GetDSFResponsePoolsRequestType) (*GetDSFResponsePoolsResponseType, error) { - response := new(GetDSFResponsePoolsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFResponsePools(request *GetDSFResponsePoolsRequestType) (*GetDSFResponsePoolsResponseType, error) { - return service.GetDSFResponsePoolsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSFResponsePoolContext(ctx context.Context, request *GetOneDSFResponsePoolRequestType) (*GetOneDSFResponsePoolResponseType, error) { - response := new(GetOneDSFResponsePoolResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSFResponsePool(request *GetOneDSFResponsePoolRequestType) (*GetOneDSFResponsePoolResponseType, error) { - return service.GetOneDSFResponsePoolContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFResponsePoolContext(ctx context.Context, request *DeleteOneDSFResponsePoolRequestType) (*DeleteOneDSFResponsePoolResponseType, error) { - response := new(DeleteOneDSFResponsePoolResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSFResponsePool(request *DeleteOneDSFResponsePoolRequestType) (*DeleteOneDSFResponsePoolResponseType, error) { - return service.DeleteOneDSFResponsePoolContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSFRecordSetFailoverChainContext(ctx context.Context, request *CreateDSFRecordSetFailoverChainRequestType) (*CreateDSFRecordSetFailoverChainResponseType, error) { - response := new(CreateDSFRecordSetFailoverChainResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSFRecordSetFailoverChain(request *CreateDSFRecordSetFailoverChainRequestType) (*CreateDSFRecordSetFailoverChainResponseType, error) { - return service.CreateDSFRecordSetFailoverChainContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFRecordSetFailoverChainContext(ctx context.Context, request *UpdateDSFRecordSetFailoverChainRequestType) (*UpdateDSFRecordSetFailoverChainResponseType, error) { - response := new(UpdateDSFRecordSetFailoverChainResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSFRecordSetFailoverChain(request *UpdateDSFRecordSetFailoverChainRequestType) (*UpdateDSFRecordSetFailoverChainResponseType, error) { - return service.UpdateDSFRecordSetFailoverChainContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFRecordSetFailoverChainsContext(ctx context.Context, request *GetDSFRecordSetFailoverChainsRequestType) (*GetDSFRecordSetFailoverChainsResponseType, error) { - response := new(GetDSFRecordSetFailoverChainsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFRecordSetFailoverChains(request *GetDSFRecordSetFailoverChainsRequestType) (*GetDSFRecordSetFailoverChainsResponseType, error) { - return service.GetDSFRecordSetFailoverChainsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSFRecordSetFailoverChainContext(ctx context.Context, request *GetOneDSFRecordSetFailoverChainRequestType) (*GetOneDSFRecordSetFailoverChainResponseType, error) { - response := new(GetOneDSFRecordSetFailoverChainResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSFRecordSetFailoverChain(request *GetOneDSFRecordSetFailoverChainRequestType) (*GetOneDSFRecordSetFailoverChainResponseType, error) { - return service.GetOneDSFRecordSetFailoverChainContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFRecordSetFailoverChainContext(ctx context.Context, request *DeleteOneDSFRecordSetFailoverChainRequestType) (*DeleteOneDSFRecordSetFailoverChainResponseType, error) { - response := new(DeleteOneDSFRecordSetFailoverChainResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSFRecordSetFailoverChain(request *DeleteOneDSFRecordSetFailoverChainRequestType) (*DeleteOneDSFRecordSetFailoverChainResponseType, error) { - return service.DeleteOneDSFRecordSetFailoverChainContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSFRecordSetContext(ctx context.Context, request *CreateDSFRecordSetRequestType) (*CreateDSFRecordSetResponseType, error) { - response := new(CreateDSFRecordSetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSFRecordSet(request *CreateDSFRecordSetRequestType) (*CreateDSFRecordSetResponseType, error) { - return service.CreateDSFRecordSetContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFRecordSetContext(ctx context.Context, request *UpdateDSFRecordSetRequestType) (*UpdateDSFRecordSetResponseType, error) { - response := new(UpdateDSFRecordSetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSFRecordSet(request *UpdateDSFRecordSetRequestType) (*UpdateDSFRecordSetResponseType, error) { - return service.UpdateDSFRecordSetContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSFRecordSetContext(ctx context.Context, request *GetOneDSFRecordSetRequestType) (*GetOneDSFRecordSetResponseType, error) { - response := new(GetOneDSFRecordSetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSFRecordSet(request *GetOneDSFRecordSetRequestType) (*GetOneDSFRecordSetResponseType, error) { - return service.GetOneDSFRecordSetContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFRecordSetsContext(ctx context.Context, request *GetDSFRecordSetsRequestType) (*GetDSFRecordSetsResponseType, error) { - response := new(GetDSFRecordSetsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFRecordSets(request *GetDSFRecordSetsRequestType) (*GetDSFRecordSetsResponseType, error) { - return service.GetDSFRecordSetsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFRecordSetContext(ctx context.Context, request *DeleteOneDSFRecordSetRequestType) (*DeleteOneDSFRecordSetResponseType, error) { - response := new(DeleteOneDSFRecordSetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSFRecordSet(request *DeleteOneDSFRecordSetRequestType) (*DeleteOneDSFRecordSetResponseType, error) { - return service.DeleteOneDSFRecordSetContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSFRecordContext(ctx context.Context, request *CreateDSFRecordRequestType) (*CreateDSFRecordResponseType, error) { - response := new(CreateDSFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSFRecord(request *CreateDSFRecordRequestType) (*CreateDSFRecordResponseType, error) { - return service.CreateDSFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFRecordContext(ctx context.Context, request *UpdateDSFRecordRequestType) (*UpdateDSFRecordResponseType, error) { - response := new(UpdateDSFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSFRecord(request *UpdateDSFRecordRequestType) (*UpdateDSFRecordResponseType, error) { - return service.UpdateDSFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSFRecordContext(ctx context.Context, request *GetOneDSFRecordRequestType) (*GetOneDSFRecordResponseType, error) { - response := new(GetOneDSFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSFRecord(request *GetOneDSFRecordRequestType) (*GetOneDSFRecordResponseType, error) { - return service.GetOneDSFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFRecordsContext(ctx context.Context, request *GetDSFRecordsRequestType) (*GetDSFRecordsResponseType, error) { - response := new(GetDSFRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFRecords(request *GetDSFRecordsRequestType) (*GetDSFRecordsResponseType, error) { - return service.GetDSFRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFRecordContext(ctx context.Context, request *DeleteOneDSFRecordRequestType) (*DeleteOneDSFRecordResponseType, error) { - response := new(DeleteOneDSFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSFRecord(request *DeleteOneDSFRecordRequestType) (*DeleteOneDSFRecordResponseType, error) { - return service.DeleteOneDSFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddDSFNodeContext(ctx context.Context, request *AddDSFNodeRequestType) (*AddDSFNodeResponseType, error) { - response := new(AddDSFNodeResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddDSFNode(request *AddDSFNodeRequestType) (*AddDSFNodeResponseType, error) { - return service.AddDSFNodeContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFNodesContext(ctx context.Context, request *UpdateDSFNodesRequestType) (*UpdateDSFNodesResponseType, error) { - response := new(UpdateDSFNodesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSFNodes(request *UpdateDSFNodesRequestType) (*UpdateDSFNodesResponseType, error) { - return service.UpdateDSFNodesContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFNodesContext(ctx context.Context, request *GetDSFNodesRequestType) (*GetDSFNodesResponseType, error) { - response := new(GetDSFNodesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFNodes(request *GetDSFNodesRequestType) (*GetDSFNodesResponseType, error) { - return service.GetDSFNodesContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFNodeContext(ctx context.Context, request *DeleteOneDSFNodeRequestType) (*DeleteOneDSFNodeResponseType, error) { - response := new(DeleteOneDSFNodeResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSFNode(request *DeleteOneDSFNodeRequestType) (*DeleteOneDSFNodeResponseType, error) { - return service.DeleteOneDSFNodeContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSFMonitorContext(ctx context.Context, request *CreateDSFMonitorRequestType) (*CreateDSFMonitorResponseType, error) { - response := new(CreateDSFMonitorResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSFMonitor(request *CreateDSFMonitorRequestType) (*CreateDSFMonitorResponseType, error) { - return service.CreateDSFMonitorContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSFMonitorContext(ctx context.Context, request *UpdateDSFMonitorRequestType) (*UpdateDSFMonitorResponseType, error) { - response := new(UpdateDSFMonitorResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSFMonitor(request *UpdateDSFMonitorRequestType) (*UpdateDSFMonitorResponseType, error) { - return service.UpdateDSFMonitorContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSFMonitorContext(ctx context.Context, request *GetOneDSFMonitorRequestType) (*GetOneDSFMonitorResponseType, error) { - response := new(GetOneDSFMonitorResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSFMonitor(request *GetOneDSFMonitorRequestType) (*GetOneDSFMonitorResponseType, error) { - return service.GetOneDSFMonitorContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFMonitorsContext(ctx context.Context, request *GetDSFMonitorsRequestType) (*GetDSFMonitorsResponseType, error) { - response := new(GetDSFMonitorsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFMonitors(request *GetDSFMonitorsRequestType) (*GetDSFMonitorsResponseType, error) { - return service.GetDSFMonitorsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSFMonitorContext(ctx context.Context, request *DeleteOneDSFMonitorRequestType) (*DeleteOneDSFMonitorResponseType, error) { - response := new(DeleteOneDSFMonitorResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSFMonitor(request *DeleteOneDSFMonitorRequestType) (*DeleteOneDSFMonitorResponseType, error) { - return service.DeleteOneDSFMonitorContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddDSFMonitorNotifierContext(ctx context.Context, request *AddDSFMonitorNotifierRequestType) (*AddDSFMonitorNotifierResponseType, error) { - response := new(AddDSFMonitorNotifierResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddDSFMonitorNotifier(request *AddDSFMonitorNotifierRequestType) (*AddDSFMonitorNotifierResponseType, error) { - return service.AddDSFMonitorNotifierContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSFMonitorSitesContext(ctx context.Context, request *GetDSFMonitorSitesRequestType) (*GetDSFMonitorSitesResponseType, error) { - response := new(GetDSFMonitorSitesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSFMonitorSites(request *GetDSFMonitorSitesRequestType) (*GetDSFMonitorSitesResponseType, error) { - return service.GetDSFMonitorSitesContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateNotifierContext(ctx context.Context, request *CreateNotifierRequestType) (*CreateNotifierResponseType, error) { - response := new(CreateNotifierResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateNotifier(request *CreateNotifierRequestType) (*CreateNotifierResponseType, error) { - return service.CreateNotifierContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateNotifierContext(ctx context.Context, request *UpdateNotifierRequestType) (*UpdateNotifierResponseType, error) { - response := new(UpdateNotifierResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateNotifier(request *UpdateNotifierRequestType) (*UpdateNotifierResponseType, error) { - return service.UpdateNotifierContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneNotifierContext(ctx context.Context, request *GetOneNotifierRequestType) (*GetOneNotifierResponseType, error) { - response := new(GetOneNotifierResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneNotifier(request *GetOneNotifierRequestType) (*GetOneNotifierResponseType, error) { - return service.GetOneNotifierContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetNotifiersContext(ctx context.Context, request *GetNotifiersRequestType) (*GetNotifiersResponseType, error) { - response := new(GetNotifiersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetNotifiers(request *GetNotifiersRequestType) (*GetNotifiersResponseType, error) { - return service.GetNotifiersContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneNotifierContext(ctx context.Context, request *DeleteOneNotifierRequestType) (*DeleteOneNotifierResponseType, error) { - response := new(DeleteOneNotifierResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneNotifier(request *DeleteOneNotifierRequestType) (*DeleteOneNotifierResponseType, error) { - return service.DeleteOneNotifierContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateConfigLimitContext(ctx context.Context, request *CreateConfigLimitRequestType) (*CreateConfigLimitResponseType, error) { - response := new(CreateConfigLimitResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateConfigLimit(request *CreateConfigLimitRequestType) (*CreateConfigLimitResponseType, error) { - return service.CreateConfigLimitContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneConfigLimitContext(ctx context.Context, request *GetOneConfigLimitRequestType) (*GetOneConfigLimitResponseType, error) { - response := new(GetOneConfigLimitResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneConfigLimit(request *GetOneConfigLimitRequestType) (*GetOneConfigLimitResponseType, error) { - return service.GetOneConfigLimitContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetConfigLimitsContext(ctx context.Context, request *GetConfigLimitsRequestType) (*GetConfigLimitsResponseType, error) { - response := new(GetConfigLimitsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetConfigLimits(request *GetConfigLimitsRequestType) (*GetConfigLimitsResponseType, error) { - return service.GetConfigLimitsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateConfigLimitContext(ctx context.Context, request *UpdateConfigLimitRequestType) (*UpdateConfigLimitResponseType, error) { - response := new(UpdateConfigLimitResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateConfigLimit(request *UpdateConfigLimitRequestType) (*UpdateConfigLimitResponseType, error) { - return service.UpdateConfigLimitContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneConfigLimitContext(ctx context.Context, request *DeleteOneConfigLimitRequestType) (*DeleteOneConfigLimitResponseType, error) { - response := new(DeleteOneConfigLimitResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneConfigLimit(request *DeleteOneConfigLimitRequestType) (*DeleteOneConfigLimitResponseType, error) { - return service.DeleteOneConfigLimitContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreatePermissionGroupContext(ctx context.Context, request *CreatePermissionGroupRequestType) (*CreatePermissionGroupResponseType, error) { - response := new(CreatePermissionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreatePermissionGroup(request *CreatePermissionGroupRequestType) (*CreatePermissionGroupResponseType, error) { - return service.CreatePermissionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOnePermissionGroupContext(ctx context.Context, request *GetOnePermissionGroupRequestType) (*GetOnePermissionGroupResponseType, error) { - response := new(GetOnePermissionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOnePermissionGroup(request *GetOnePermissionGroupRequestType) (*GetOnePermissionGroupResponseType, error) { - return service.GetOnePermissionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetPermissionGroupsContext(ctx context.Context, request *GetPermissionGroupsRequestType) (*GetPermissionGroupsResponseType, error) { - response := new(GetPermissionGroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetPermissionGroups(request *GetPermissionGroupsRequestType) (*GetPermissionGroupsResponseType, error) { - return service.GetPermissionGroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOnePermissionGroupContext(ctx context.Context, request *DeleteOnePermissionGroupRequestType) (*DeleteOnePermissionGroupResponseType, error) { - response := new(DeleteOnePermissionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOnePermissionGroup(request *DeleteOnePermissionGroupRequestType) (*DeleteOnePermissionGroupResponseType, error) { - return service.DeleteOnePermissionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdatePermissionGroupContext(ctx context.Context, request *UpdatePermissionGroupRequestType) (*UpdatePermissionGroupResponseType, error) { - response := new(UpdatePermissionGroupResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdatePermissionGroup(request *UpdatePermissionGroupRequestType) (*UpdatePermissionGroupResponseType, error) { - return service.UpdatePermissionGroupContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCustomerPermissionsContext(ctx context.Context, request *GetCustomerPermissionsRequestType) (*GetCustomerPermissionsResponseType, error) { - response := new(GetCustomerPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCustomerPermissions(request *GetCustomerPermissionsRequestType) (*GetCustomerPermissionsResponseType, error) { - return service.GetCustomerPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetUserPermissionsContext(ctx context.Context, request *GetUserPermissionsRequestType) (*GetUserPermissionsResponseType, error) { - response := new(GetUserPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetUserPermissions(request *GetUserPermissionsRequestType) (*GetUserPermissionsResponseType, error) { - return service.GetUserPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) CheckPermissionsContext(ctx context.Context, request *CheckPermissionsRequestType) (*CheckPermissionsResponseType, error) { - response := new(CheckPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CheckPermissions(request *CheckPermissionsRequestType) (*CheckPermissionsResponseType, error) { - return service.CheckPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddPermissionGroupUsersContext(ctx context.Context, request *AddPermissionGroupUsersRequestType) (*AddPermissionGroupUsersResponseType, error) { - response := new(AddPermissionGroupUsersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddPermissionGroupUsers(request *AddPermissionGroupUsersRequestType) (*AddPermissionGroupUsersResponseType, error) { - return service.AddPermissionGroupUsersContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetPermissionGroupUsersContext(ctx context.Context, request *SetPermissionGroupUsersRequestType) (*SetPermissionGroupUsersResponseType, error) { - response := new(SetPermissionGroupUsersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetPermissionGroupUsers(request *SetPermissionGroupUsersRequestType) (*SetPermissionGroupUsersResponseType, error) { - return service.SetPermissionGroupUsersContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemovePermissionGroupUsersContext(ctx context.Context, request *RemovePermissionGroupUsersRequestType) (*RemovePermissionGroupUsersResponseType, error) { - response := new(RemovePermissionGroupUsersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemovePermissionGroupUsers(request *RemovePermissionGroupUsersRequestType) (*RemovePermissionGroupUsersResponseType, error) { - return service.RemovePermissionGroupUsersContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddPermissionGroupSubgroupsContext(ctx context.Context, request *AddPermissionGroupSubgroupsRequestType) (*AddPermissionGroupSubgroupsResponseType, error) { - response := new(AddPermissionGroupSubgroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddPermissionGroupSubgroups(request *AddPermissionGroupSubgroupsRequestType) (*AddPermissionGroupSubgroupsResponseType, error) { - return service.AddPermissionGroupSubgroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetPermissionGroupSubgroupsContext(ctx context.Context, request *SetPermissionGroupSubgroupsRequestType) (*SetPermissionGroupSubgroupsResponseType, error) { - response := new(SetPermissionGroupSubgroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetPermissionGroupSubgroups(request *SetPermissionGroupSubgroupsRequestType) (*SetPermissionGroupSubgroupsResponseType, error) { - return service.SetPermissionGroupSubgroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemovePermissionGroupSubgroupsContext(ctx context.Context, request *RemovePermissionGroupSubgroupsRequestType) (*RemovePermissionGroupSubgroupsResponseType, error) { - response := new(RemovePermissionGroupSubgroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemovePermissionGroupSubgroups(request *RemovePermissionGroupSubgroupsRequestType) (*RemovePermissionGroupSubgroupsResponseType, error) { - return service.RemovePermissionGroupSubgroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddPermissionGroupPermissionsContext(ctx context.Context, request *AddPermissionGroupPermissionsRequestType) (*AddPermissionGroupPermissionsResponseType, error) { - response := new(AddPermissionGroupPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddPermissionGroupPermissions(request *AddPermissionGroupPermissionsRequestType) (*AddPermissionGroupPermissionsResponseType, error) { - return service.AddPermissionGroupPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetPermissionGroupPermissionsContext(ctx context.Context, request *SetPermissionGroupPermissionsRequestType) (*SetPermissionGroupPermissionsResponseType, error) { - response := new(SetPermissionGroupPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetPermissionGroupPermissions(request *SetPermissionGroupPermissionsRequestType) (*SetPermissionGroupPermissionsResponseType, error) { - return service.SetPermissionGroupPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemovePermissionGroupPermissionsContext(ctx context.Context, request *RemovePermissionGroupPermissionsRequestType) (*RemovePermissionGroupPermissionsResponseType, error) { - response := new(RemovePermissionGroupPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemovePermissionGroupPermissions(request *RemovePermissionGroupPermissionsRequestType) (*RemovePermissionGroupPermissionsResponseType, error) { - return service.RemovePermissionGroupPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddPermissionGroupZonesContext(ctx context.Context, request *AddPermissionGroupZonesRequestType) (*AddPermissionGroupZonesResponseType, error) { - response := new(AddPermissionGroupZonesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddPermissionGroupZones(request *AddPermissionGroupZonesRequestType) (*AddPermissionGroupZonesResponseType, error) { - return service.AddPermissionGroupZonesContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetPermissionGroupZonesContext(ctx context.Context, request *SetPermissionGroupZonesRequestType) (*SetPermissionGroupZonesResponseType, error) { - response := new(SetPermissionGroupZonesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetPermissionGroupZones(request *SetPermissionGroupZonesRequestType) (*SetPermissionGroupZonesResponseType, error) { - return service.SetPermissionGroupZonesContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemovePermissionGroupZonesContext(ctx context.Context, request *RemovePermissionGroupZonesRequestType) (*RemovePermissionGroupZonesResponseType, error) { - response := new(RemovePermissionGroupZonesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemovePermissionGroupZones(request *RemovePermissionGroupZonesRequestType) (*RemovePermissionGroupZonesResponseType, error) { - return service.RemovePermissionGroupZonesContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddUserGroupsContext(ctx context.Context, request *AddUserGroupsRequestType) (*AddUserGroupsResponseType, error) { - response := new(AddUserGroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddUserGroups(request *AddUserGroupsRequestType) (*AddUserGroupsResponseType, error) { - return service.AddUserGroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetUserGroupsContext(ctx context.Context, request *SetUserGroupsRequestType) (*SetUserGroupsResponseType, error) { - response := new(SetUserGroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetUserGroups(request *SetUserGroupsRequestType) (*SetUserGroupsResponseType, error) { - return service.SetUserGroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemoveUserGroupsContext(ctx context.Context, request *RemoveUserGroupsRequestType) (*RemoveUserGroupsResponseType, error) { - response := new(RemoveUserGroupsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemoveUserGroups(request *RemoveUserGroupsRequestType) (*RemoveUserGroupsResponseType, error) { - return service.RemoveUserGroupsContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddUserZonesContext(ctx context.Context, request *AddUserZonesRequestType) (*AddUserZonesResponseType, error) { - response := new(AddUserZonesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddUserZones(request *AddUserZonesRequestType) (*AddUserZonesResponseType, error) { - return service.AddUserZonesContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetUserZonesContext(ctx context.Context, request *SetUserZonesRequestType) (*SetUserZonesResponseType, error) { - response := new(SetUserZonesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetUserZones(request *SetUserZonesRequestType) (*SetUserZonesResponseType, error) { - return service.SetUserZonesContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemoveUserZonesContext(ctx context.Context, request *RemoveUserZonesRequestType) (*RemoveUserZonesResponseType, error) { - response := new(RemoveUserZonesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemoveUserZones(request *RemoveUserZonesRequestType) (*RemoveUserZonesResponseType, error) { - return service.RemoveUserZonesContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddUserPermissionsContext(ctx context.Context, request *AddUserPermissionsRequestType) (*AddUserPermissionsResponseType, error) { - response := new(AddUserPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddUserPermissions(request *AddUserPermissionsRequestType) (*AddUserPermissionsResponseType, error) { - return service.AddUserPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetUserPermissionsContext(ctx context.Context, request *SetUserPermissionsRequestType) (*SetUserPermissionsResponseType, error) { - response := new(SetUserPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetUserPermissions(request *SetUserPermissionsRequestType) (*SetUserPermissionsResponseType, error) { - return service.SetUserPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemoveUserPermissionsContext(ctx context.Context, request *RemoveUserPermissionsRequestType) (*RemoveUserPermissionsResponseType, error) { - response := new(RemoveUserPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemoveUserPermissions(request *RemoveUserPermissionsRequestType) (*RemoveUserPermissionsResponseType, error) { - return service.RemoveUserPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddUserForbidsContext(ctx context.Context, request *AddUserForbidsRequestType) (*AddUserForbidsResponseType, error) { - response := new(AddUserForbidsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddUserForbids(request *AddUserForbidsRequestType) (*AddUserForbidsResponseType, error) { - return service.AddUserForbidsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetUserForbidsContext(ctx context.Context, request *SetUserForbidsRequestType) (*SetUserForbidsResponseType, error) { - response := new(SetUserForbidsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetUserForbids(request *SetUserForbidsRequestType) (*SetUserForbidsResponseType, error) { - return service.SetUserForbidsContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemoveUserForbidsContext(ctx context.Context, request *RemoveUserForbidsRequestType) (*RemoveUserForbidsResponseType, error) { - response := new(RemoveUserForbidsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemoveUserForbids(request *RemoveUserForbidsRequestType) (*RemoveUserForbidsResponseType, error) { - return service.RemoveUserForbidsContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddCustomerPermissionsContext(ctx context.Context, request *AddCustomerPermissionsRequestType) (*AddCustomerPermissionsResponseType, error) { - response := new(AddCustomerPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddCustomerPermissions(request *AddCustomerPermissionsRequestType) (*AddCustomerPermissionsResponseType, error) { - return service.AddCustomerPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetCustomerPermissionsContext(ctx context.Context, request *SetCustomerPermissionsRequestType) (*SetCustomerPermissionsResponseType, error) { - response := new(SetCustomerPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetCustomerPermissions(request *SetCustomerPermissionsRequestType) (*SetCustomerPermissionsResponseType, error) { - return service.SetCustomerPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemoveCustomerPermissionsContext(ctx context.Context, request *RemoveCustomerPermissionsRequestType) (*RemoveCustomerPermissionsResponseType, error) { - response := new(RemoveCustomerPermissionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemoveCustomerPermissions(request *RemoveCustomerPermissionsRequestType) (*RemoveCustomerPermissionsResponseType, error) { - return service.RemoveCustomerPermissionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddCustomerForbidsContext(ctx context.Context, request *AddCustomerForbidsRequestType) (*AddCustomerForbidsResponseType, error) { - response := new(AddCustomerForbidsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddCustomerForbids(request *AddCustomerForbidsRequestType) (*AddCustomerForbidsResponseType, error) { - return service.AddCustomerForbidsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetCustomerForbidsContext(ctx context.Context, request *SetCustomerForbidsRequestType) (*SetCustomerForbidsResponseType, error) { - response := new(SetCustomerForbidsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetCustomerForbids(request *SetCustomerForbidsRequestType) (*SetCustomerForbidsResponseType, error) { - return service.SetCustomerForbidsContext( - context.Background(), - request, - ) -} - -func (service *dynect) RemoveCustomerForbidsContext(ctx context.Context, request *RemoveCustomerForbidsRequestType) (*RemoveCustomerForbidsResponseType, error) { - response := new(RemoveCustomerForbidsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RemoveCustomerForbids(request *RemoveCustomerForbidsRequestType) (*RemoveCustomerForbidsResponseType, error) { - return service.RemoveCustomerForbidsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetHostStatsFlagsContext(ctx context.Context, request *GetHostStatsFlagsRequestType) (*GetHostStatsFlagsResponseType, error) { - response := new(GetHostStatsFlagsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetHostStatsFlags(request *GetHostStatsFlagsRequestType) (*GetHostStatsFlagsResponseType, error) { - return service.GetHostStatsFlagsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetHostStatsFlagsContext(ctx context.Context, request *SetHostStatsFlagsRequestType) (*SetHostStatsFlagsResponseType, error) { - response := new(SetHostStatsFlagsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetHostStatsFlags(request *SetHostStatsFlagsRequestType) (*SetHostStatsFlagsResponseType, error) { - return service.SetHostStatsFlagsContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateTSIGKeyContext(ctx context.Context, request *CreateTSIGKeyRequestType) (*CreateTSIGKeyResponseType, error) { - response := new(CreateTSIGKeyResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateTSIGKey(request *CreateTSIGKeyRequestType) (*CreateTSIGKeyResponseType, error) { - return service.CreateTSIGKeyContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneTSIGKeyContext(ctx context.Context, request *GetOneTSIGKeyRequestType) (*GetOneTSIGKeyResponseType, error) { - response := new(GetOneTSIGKeyResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneTSIGKey(request *GetOneTSIGKeyRequestType) (*GetOneTSIGKeyResponseType, error) { - return service.GetOneTSIGKeyContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetTSIGKeysContext(ctx context.Context, request *GetTSIGKeysRequestType) (*GetTSIGKeysResponseType, error) { - response := new(GetTSIGKeysResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetTSIGKeys(request *GetTSIGKeysRequestType) (*GetTSIGKeysResponseType, error) { - return service.GetTSIGKeysContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateTSIGKeyContext(ctx context.Context, request *UpdateTSIGKeyRequestType) (*UpdateTSIGKeyResponseType, error) { - response := new(UpdateTSIGKeyResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateTSIGKey(request *UpdateTSIGKeyRequestType) (*UpdateTSIGKeyResponseType, error) { - return service.UpdateTSIGKeyContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneTSIGKeyContext(ctx context.Context, request *DeleteOneTSIGKeyRequestType) (*DeleteOneTSIGKeyResponseType, error) { - response := new(DeleteOneTSIGKeyResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneTSIGKey(request *DeleteOneTSIGKeyRequestType) (*DeleteOneTSIGKeyResponseType, error) { - return service.DeleteOneTSIGKeyContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateZoneContext(ctx context.Context, request *CreateZoneRequestType) (*CreateZoneResponseType, error) { - response := new(CreateZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateZone(request *CreateZoneRequestType) (*CreateZoneResponseType, error) { - return service.CreateZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneZoneContext(ctx context.Context, request *GetOneZoneRequestType) (*GetOneZoneResponseType, error) { - response := new(GetOneZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneZone(request *GetOneZoneRequestType) (*GetOneZoneResponseType, error) { - return service.GetOneZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetZonesContext(ctx context.Context, request *GetZonesRequestType) (*GetZonesResponseType, error) { - response := new(GetZonesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetZones(request *GetZonesRequestType) (*GetZonesResponseType, error) { - return service.GetZonesContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneZoneContext(ctx context.Context, request *DeleteOneZoneRequestType) (*DeleteOneZoneResponseType, error) { - response := new(DeleteOneZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneZone(request *DeleteOneZoneRequestType) (*DeleteOneZoneResponseType, error) { - return service.DeleteOneZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateSecondaryZoneContext(ctx context.Context, request *CreateSecondaryZoneRequestType) (*CreateSecondaryZoneResponseType, error) { - response := new(CreateSecondaryZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateSecondaryZone(request *CreateSecondaryZoneRequestType) (*CreateSecondaryZoneResponseType, error) { - return service.CreateSecondaryZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateSecondaryContext(ctx context.Context, request *UpdateSecondaryRequestType) (*UpdateSecondaryResponseType, error) { - response := new(UpdateSecondaryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateSecondary(request *UpdateSecondaryRequestType) (*UpdateSecondaryResponseType, error) { - return service.UpdateSecondaryContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateSecondaryContext(ctx context.Context, request *ActivateSecondaryRequestType) (*ActivateSecondaryResponseType, error) { - response := new(ActivateSecondaryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateSecondary(request *ActivateSecondaryRequestType) (*ActivateSecondaryResponseType, error) { - return service.ActivateSecondaryContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateSecondaryContext(ctx context.Context, request *DeactivateSecondaryRequestType) (*DeactivateSecondaryResponseType, error) { - response := new(DeactivateSecondaryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateSecondary(request *DeactivateSecondaryRequestType) (*DeactivateSecondaryResponseType, error) { - return service.DeactivateSecondaryContext( - context.Background(), - request, - ) -} - -func (service *dynect) RetransferSecondaryContext(ctx context.Context, request *RetransferSecondaryRequestType) (*RetransferSecondaryResponseType, error) { - response := new(RetransferSecondaryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RetransferSecondary(request *RetransferSecondaryRequestType) (*RetransferSecondaryResponseType, error) { - return service.RetransferSecondaryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneSecondaryContext(ctx context.Context, request *GetOneSecondaryRequestType) (*GetOneSecondaryResponseType, error) { - response := new(GetOneSecondaryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneSecondary(request *GetOneSecondaryRequestType) (*GetOneSecondaryResponseType, error) { - return service.GetOneSecondaryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetSecondariesContext(ctx context.Context, request *GetSecondariesRequestType) (*GetSecondariesResponseType, error) { - response := new(GetSecondariesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetSecondaries(request *GetSecondariesRequestType) (*GetSecondariesResponseType, error) { - return service.GetSecondariesContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetZoneApexContext(ctx context.Context, request *GetZoneApexRequestType) (*GetZoneApexResponseType, error) { - response := new(GetZoneApexResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetZoneApex(request *GetZoneApexRequestType) (*GetZoneApexResponseType, error) { - return service.GetZoneApexContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateARecordContext(ctx context.Context, request *CreateARecordRequestType) (*CreateARecordResponseType, error) { - response := new(CreateARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateARecord(request *CreateARecordRequestType) (*CreateARecordResponseType, error) { - return service.CreateARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneARecordContext(ctx context.Context, request *GetOneARecordRequestType) (*GetOneARecordResponseType, error) { - response := new(GetOneARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneARecord(request *GetOneARecordRequestType) (*GetOneARecordResponseType, error) { - return service.GetOneARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetARecordsContext(ctx context.Context, request *GetARecordsRequestType) (*GetARecordsResponseType, error) { - response := new(GetARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetARecords(request *GetARecordsRequestType) (*GetARecordsResponseType, error) { - return service.GetARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateARecordContext(ctx context.Context, request *UpdateARecordRequestType) (*UpdateARecordResponseType, error) { - response := new(UpdateARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateARecord(request *UpdateARecordRequestType) (*UpdateARecordResponseType, error) { - return service.UpdateARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteARecordsContext(ctx context.Context, request *DeleteARecordsRequestType) (*DeleteARecordsResponseType, error) { - response := new(DeleteARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteARecords(request *DeleteARecordsRequestType) (*DeleteARecordsResponseType, error) { - return service.DeleteARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneARecordContext(ctx context.Context, request *DeleteOneARecordRequestType) (*DeleteOneARecordResponseType, error) { - response := new(DeleteOneARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneARecord(request *DeleteOneARecordRequestType) (*DeleteOneARecordResponseType, error) { - return service.DeleteOneARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateAAAARecordContext(ctx context.Context, request *CreateAAAARecordRequestType) (*CreateAAAARecordResponseType, error) { - response := new(CreateAAAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateAAAARecord(request *CreateAAAARecordRequestType) (*CreateAAAARecordResponseType, error) { - return service.CreateAAAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneAAAARecordContext(ctx context.Context, request *GetOneAAAARecordRequestType) (*GetOneAAAARecordResponseType, error) { - response := new(GetOneAAAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneAAAARecord(request *GetOneAAAARecordRequestType) (*GetOneAAAARecordResponseType, error) { - return service.GetOneAAAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetAAAARecordsContext(ctx context.Context, request *GetAAAARecordsRequestType) (*GetAAAARecordsResponseType, error) { - response := new(GetAAAARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetAAAARecords(request *GetAAAARecordsRequestType) (*GetAAAARecordsResponseType, error) { - return service.GetAAAARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateAAAARecordContext(ctx context.Context, request *UpdateAAAARecordRequestType) (*UpdateAAAARecordResponseType, error) { - response := new(UpdateAAAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateAAAARecord(request *UpdateAAAARecordRequestType) (*UpdateAAAARecordResponseType, error) { - return service.UpdateAAAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteAAAARecordsContext(ctx context.Context, request *DeleteAAAARecordsRequestType) (*DeleteAAAARecordsResponseType, error) { - response := new(DeleteAAAARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteAAAARecords(request *DeleteAAAARecordsRequestType) (*DeleteAAAARecordsResponseType, error) { - return service.DeleteAAAARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneAAAARecordContext(ctx context.Context, request *DeleteOneAAAARecordRequestType) (*DeleteOneAAAARecordResponseType, error) { - response := new(DeleteOneAAAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneAAAARecord(request *DeleteOneAAAARecordRequestType) (*DeleteOneAAAARecordResponseType, error) { - return service.DeleteOneAAAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateALIASRecordContext(ctx context.Context, request *CreateALIASRecordRequestType) (*CreateALIASRecordResponseType, error) { - response := new(CreateALIASRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateALIASRecord(request *CreateALIASRecordRequestType) (*CreateALIASRecordResponseType, error) { - return service.CreateALIASRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneALIASRecordContext(ctx context.Context, request *GetOneALIASRecordRequestType) (*GetOneALIASRecordResponseType, error) { - response := new(GetOneALIASRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneALIASRecord(request *GetOneALIASRecordRequestType) (*GetOneALIASRecordResponseType, error) { - return service.GetOneALIASRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetALIASRecordsContext(ctx context.Context, request *GetALIASRecordsRequestType) (*GetALIASRecordsResponseType, error) { - response := new(GetALIASRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetALIASRecords(request *GetALIASRecordsRequestType) (*GetALIASRecordsResponseType, error) { - return service.GetALIASRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateALIASRecordContext(ctx context.Context, request *UpdateALIASRecordRequestType) (*UpdateALIASRecordResponseType, error) { - response := new(UpdateALIASRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateALIASRecord(request *UpdateALIASRecordRequestType) (*UpdateALIASRecordResponseType, error) { - return service.UpdateALIASRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteALIASRecordsContext(ctx context.Context, request *DeleteALIASRecordsRequestType) (*DeleteALIASRecordsResponseType, error) { - response := new(DeleteALIASRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteALIASRecords(request *DeleteALIASRecordsRequestType) (*DeleteALIASRecordsResponseType, error) { - return service.DeleteALIASRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneALIASRecordContext(ctx context.Context, request *DeleteOneALIASRecordRequestType) (*DeleteOneALIASRecordResponseType, error) { - response := new(DeleteOneALIASRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneALIASRecord(request *DeleteOneALIASRecordRequestType) (*DeleteOneALIASRecordResponseType, error) { - return service.DeleteOneALIASRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCAARecordContext(ctx context.Context, request *CreateCAARecordRequestType) (*CreateCAARecordResponseType, error) { - response := new(CreateCAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCAARecord(request *CreateCAARecordRequestType) (*CreateCAARecordResponseType, error) { - return service.CreateCAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneCAARecordContext(ctx context.Context, request *GetOneCAARecordRequestType) (*GetOneCAARecordResponseType, error) { - response := new(GetOneCAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneCAARecord(request *GetOneCAARecordRequestType) (*GetOneCAARecordResponseType, error) { - return service.GetOneCAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCAARecordsContext(ctx context.Context, request *GetCAARecordsRequestType) (*GetCAARecordsResponseType, error) { - response := new(GetCAARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCAARecords(request *GetCAARecordsRequestType) (*GetCAARecordsResponseType, error) { - return service.GetCAARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCAARecordContext(ctx context.Context, request *UpdateCAARecordRequestType) (*UpdateCAARecordResponseType, error) { - response := new(UpdateCAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCAARecord(request *UpdateCAARecordRequestType) (*UpdateCAARecordResponseType, error) { - return service.UpdateCAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteCAARecordsContext(ctx context.Context, request *DeleteCAARecordsRequestType) (*DeleteCAARecordsResponseType, error) { - response := new(DeleteCAARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteCAARecords(request *DeleteCAARecordsRequestType) (*DeleteCAARecordsResponseType, error) { - return service.DeleteCAARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneCAARecordContext(ctx context.Context, request *DeleteOneCAARecordRequestType) (*DeleteOneCAARecordResponseType, error) { - response := new(DeleteOneCAARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneCAARecord(request *DeleteOneCAARecordRequestType) (*DeleteOneCAARecordResponseType, error) { - return service.DeleteOneCAARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCDNSKEYRecordContext(ctx context.Context, request *CreateCDNSKEYRecordRequestType) (*CreateCDNSKEYRecordResponseType, error) { - response := new(CreateCDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCDNSKEYRecord(request *CreateCDNSKEYRecordRequestType) (*CreateCDNSKEYRecordResponseType, error) { - return service.CreateCDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneCDNSKEYRecordContext(ctx context.Context, request *GetOneCDNSKEYRecordRequestType) (*GetOneCDNSKEYRecordResponseType, error) { - response := new(GetOneCDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneCDNSKEYRecord(request *GetOneCDNSKEYRecordRequestType) (*GetOneCDNSKEYRecordResponseType, error) { - return service.GetOneCDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCDNSKEYRecordsContext(ctx context.Context, request *GetCDNSKEYRecordsRequestType) (*GetCDNSKEYRecordsResponseType, error) { - response := new(GetCDNSKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCDNSKEYRecords(request *GetCDNSKEYRecordsRequestType) (*GetCDNSKEYRecordsResponseType, error) { - return service.GetCDNSKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCDNSKEYRecordContext(ctx context.Context, request *UpdateCDNSKEYRecordRequestType) (*UpdateCDNSKEYRecordResponseType, error) { - response := new(UpdateCDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCDNSKEYRecord(request *UpdateCDNSKEYRecordRequestType) (*UpdateCDNSKEYRecordResponseType, error) { - return service.UpdateCDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteCDNSKEYRecordsContext(ctx context.Context, request *DeleteCDNSKEYRecordsRequestType) (*DeleteCDNSKEYRecordsResponseType, error) { - response := new(DeleteCDNSKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteCDNSKEYRecords(request *DeleteCDNSKEYRecordsRequestType) (*DeleteCDNSKEYRecordsResponseType, error) { - return service.DeleteCDNSKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneCDNSKEYRecordContext(ctx context.Context, request *DeleteOneCDNSKEYRecordRequestType) (*DeleteOneCDNSKEYRecordResponseType, error) { - response := new(DeleteOneCDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneCDNSKEYRecord(request *DeleteOneCDNSKEYRecordRequestType) (*DeleteOneCDNSKEYRecordResponseType, error) { - return service.DeleteOneCDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCDSRecordContext(ctx context.Context, request *CreateCDSRecordRequestType) (*CreateCDSRecordResponseType, error) { - response := new(CreateCDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCDSRecord(request *CreateCDSRecordRequestType) (*CreateCDSRecordResponseType, error) { - return service.CreateCDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneCDSRecordContext(ctx context.Context, request *GetOneCDSRecordRequestType) (*GetOneCDSRecordResponseType, error) { - response := new(GetOneCDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneCDSRecord(request *GetOneCDSRecordRequestType) (*GetOneCDSRecordResponseType, error) { - return service.GetOneCDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCDSRecordsContext(ctx context.Context, request *GetCDSRecordsRequestType) (*GetCDSRecordsResponseType, error) { - response := new(GetCDSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCDSRecords(request *GetCDSRecordsRequestType) (*GetCDSRecordsResponseType, error) { - return service.GetCDSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCDSRecordContext(ctx context.Context, request *UpdateCDSRecordRequestType) (*UpdateCDSRecordResponseType, error) { - response := new(UpdateCDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCDSRecord(request *UpdateCDSRecordRequestType) (*UpdateCDSRecordResponseType, error) { - return service.UpdateCDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteCDSRecordsContext(ctx context.Context, request *DeleteCDSRecordsRequestType) (*DeleteCDSRecordsResponseType, error) { - response := new(DeleteCDSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteCDSRecords(request *DeleteCDSRecordsRequestType) (*DeleteCDSRecordsResponseType, error) { - return service.DeleteCDSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneCDSRecordContext(ctx context.Context, request *DeleteOneCDSRecordRequestType) (*DeleteOneCDSRecordResponseType, error) { - response := new(DeleteOneCDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneCDSRecord(request *DeleteOneCDSRecordRequestType) (*DeleteOneCDSRecordResponseType, error) { - return service.DeleteOneCDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCERTRecordContext(ctx context.Context, request *CreateCERTRecordRequestType) (*CreateCERTRecordResponseType, error) { - response := new(CreateCERTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCERTRecord(request *CreateCERTRecordRequestType) (*CreateCERTRecordResponseType, error) { - return service.CreateCERTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneCERTRecordContext(ctx context.Context, request *GetOneCERTRecordRequestType) (*GetOneCERTRecordResponseType, error) { - response := new(GetOneCERTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneCERTRecord(request *GetOneCERTRecordRequestType) (*GetOneCERTRecordResponseType, error) { - return service.GetOneCERTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCERTRecordsContext(ctx context.Context, request *GetCERTRecordsRequestType) (*GetCERTRecordsResponseType, error) { - response := new(GetCERTRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCERTRecords(request *GetCERTRecordsRequestType) (*GetCERTRecordsResponseType, error) { - return service.GetCERTRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCERTRecordContext(ctx context.Context, request *UpdateCERTRecordRequestType) (*UpdateCERTRecordResponseType, error) { - response := new(UpdateCERTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCERTRecord(request *UpdateCERTRecordRequestType) (*UpdateCERTRecordResponseType, error) { - return service.UpdateCERTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteCERTRecordsContext(ctx context.Context, request *DeleteCERTRecordsRequestType) (*DeleteCERTRecordsResponseType, error) { - response := new(DeleteCERTRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteCERTRecords(request *DeleteCERTRecordsRequestType) (*DeleteCERTRecordsResponseType, error) { - return service.DeleteCERTRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneCERTRecordContext(ctx context.Context, request *DeleteOneCERTRecordRequestType) (*DeleteOneCERTRecordResponseType, error) { - response := new(DeleteOneCERTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneCERTRecord(request *DeleteOneCERTRecordRequestType) (*DeleteOneCERTRecordResponseType, error) { - return service.DeleteOneCERTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCNAMERecordContext(ctx context.Context, request *CreateCNAMERecordRequestType) (*CreateCNAMERecordResponseType, error) { - response := new(CreateCNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCNAMERecord(request *CreateCNAMERecordRequestType) (*CreateCNAMERecordResponseType, error) { - return service.CreateCNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneCNAMERecordContext(ctx context.Context, request *GetOneCNAMERecordRequestType) (*GetOneCNAMERecordResponseType, error) { - response := new(GetOneCNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneCNAMERecord(request *GetOneCNAMERecordRequestType) (*GetOneCNAMERecordResponseType, error) { - return service.GetOneCNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCNAMERecordsContext(ctx context.Context, request *GetCNAMERecordsRequestType) (*GetCNAMERecordsResponseType, error) { - response := new(GetCNAMERecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCNAMERecords(request *GetCNAMERecordsRequestType) (*GetCNAMERecordsResponseType, error) { - return service.GetCNAMERecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCNAMERecordContext(ctx context.Context, request *UpdateCNAMERecordRequestType) (*UpdateCNAMERecordResponseType, error) { - response := new(UpdateCNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCNAMERecord(request *UpdateCNAMERecordRequestType) (*UpdateCNAMERecordResponseType, error) { - return service.UpdateCNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteCNAMERecordsContext(ctx context.Context, request *DeleteCNAMERecordsRequestType) (*DeleteCNAMERecordsResponseType, error) { - response := new(DeleteCNAMERecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteCNAMERecords(request *DeleteCNAMERecordsRequestType) (*DeleteCNAMERecordsResponseType, error) { - return service.DeleteCNAMERecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneCNAMERecordContext(ctx context.Context, request *DeleteOneCNAMERecordRequestType) (*DeleteOneCNAMERecordResponseType, error) { - response := new(DeleteOneCNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneCNAMERecord(request *DeleteOneCNAMERecordRequestType) (*DeleteOneCNAMERecordResponseType, error) { - return service.DeleteOneCNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCSYNCRecordContext(ctx context.Context, request *CreateCSYNCRecordRequestType) (*CreateCSYNCRecordResponseType, error) { - response := new(CreateCSYNCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCSYNCRecord(request *CreateCSYNCRecordRequestType) (*CreateCSYNCRecordResponseType, error) { - return service.CreateCSYNCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneCSYNCRecordContext(ctx context.Context, request *GetOneCSYNCRecordRequestType) (*GetOneCSYNCRecordResponseType, error) { - response := new(GetOneCSYNCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneCSYNCRecord(request *GetOneCSYNCRecordRequestType) (*GetOneCSYNCRecordResponseType, error) { - return service.GetOneCSYNCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCSYNCRecordsContext(ctx context.Context, request *GetCSYNCRecordsRequestType) (*GetCSYNCRecordsResponseType, error) { - response := new(GetCSYNCRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCSYNCRecords(request *GetCSYNCRecordsRequestType) (*GetCSYNCRecordsResponseType, error) { - return service.GetCSYNCRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCSYNCRecordContext(ctx context.Context, request *UpdateCSYNCRecordRequestType) (*UpdateCSYNCRecordResponseType, error) { - response := new(UpdateCSYNCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCSYNCRecord(request *UpdateCSYNCRecordRequestType) (*UpdateCSYNCRecordResponseType, error) { - return service.UpdateCSYNCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteCSYNCRecordsContext(ctx context.Context, request *DeleteCSYNCRecordsRequestType) (*DeleteCSYNCRecordsResponseType, error) { - response := new(DeleteCSYNCRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteCSYNCRecords(request *DeleteCSYNCRecordsRequestType) (*DeleteCSYNCRecordsResponseType, error) { - return service.DeleteCSYNCRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneCSYNCRecordContext(ctx context.Context, request *DeleteOneCSYNCRecordRequestType) (*DeleteOneCSYNCRecordResponseType, error) { - response := new(DeleteOneCSYNCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneCSYNCRecord(request *DeleteOneCSYNCRecordRequestType) (*DeleteOneCSYNCRecordResponseType, error) { - return service.DeleteOneCSYNCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDHCIDRecordContext(ctx context.Context, request *CreateDHCIDRecordRequestType) (*CreateDHCIDRecordResponseType, error) { - response := new(CreateDHCIDRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDHCIDRecord(request *CreateDHCIDRecordRequestType) (*CreateDHCIDRecordResponseType, error) { - return service.CreateDHCIDRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDHCIDRecordContext(ctx context.Context, request *GetOneDHCIDRecordRequestType) (*GetOneDHCIDRecordResponseType, error) { - response := new(GetOneDHCIDRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDHCIDRecord(request *GetOneDHCIDRecordRequestType) (*GetOneDHCIDRecordResponseType, error) { - return service.GetOneDHCIDRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDHCIDRecordsContext(ctx context.Context, request *GetDHCIDRecordsRequestType) (*GetDHCIDRecordsResponseType, error) { - response := new(GetDHCIDRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDHCIDRecords(request *GetDHCIDRecordsRequestType) (*GetDHCIDRecordsResponseType, error) { - return service.GetDHCIDRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDHCIDRecordContext(ctx context.Context, request *UpdateDHCIDRecordRequestType) (*UpdateDHCIDRecordResponseType, error) { - response := new(UpdateDHCIDRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDHCIDRecord(request *UpdateDHCIDRecordRequestType) (*UpdateDHCIDRecordResponseType, error) { - return service.UpdateDHCIDRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteDHCIDRecordsContext(ctx context.Context, request *DeleteDHCIDRecordsRequestType) (*DeleteDHCIDRecordsResponseType, error) { - response := new(DeleteDHCIDRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteDHCIDRecords(request *DeleteDHCIDRecordsRequestType) (*DeleteDHCIDRecordsResponseType, error) { - return service.DeleteDHCIDRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDHCIDRecordContext(ctx context.Context, request *DeleteOneDHCIDRecordRequestType) (*DeleteOneDHCIDRecordResponseType, error) { - response := new(DeleteOneDHCIDRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDHCIDRecord(request *DeleteOneDHCIDRecordRequestType) (*DeleteOneDHCIDRecordResponseType, error) { - return service.DeleteOneDHCIDRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDNAMERecordContext(ctx context.Context, request *CreateDNAMERecordRequestType) (*CreateDNAMERecordResponseType, error) { - response := new(CreateDNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDNAMERecord(request *CreateDNAMERecordRequestType) (*CreateDNAMERecordResponseType, error) { - return service.CreateDNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDNAMERecordContext(ctx context.Context, request *GetOneDNAMERecordRequestType) (*GetOneDNAMERecordResponseType, error) { - response := new(GetOneDNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDNAMERecord(request *GetOneDNAMERecordRequestType) (*GetOneDNAMERecordResponseType, error) { - return service.GetOneDNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDNAMERecordsContext(ctx context.Context, request *GetDNAMERecordsRequestType) (*GetDNAMERecordsResponseType, error) { - response := new(GetDNAMERecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDNAMERecords(request *GetDNAMERecordsRequestType) (*GetDNAMERecordsResponseType, error) { - return service.GetDNAMERecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDNAMERecordContext(ctx context.Context, request *UpdateDNAMERecordRequestType) (*UpdateDNAMERecordResponseType, error) { - response := new(UpdateDNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDNAMERecord(request *UpdateDNAMERecordRequestType) (*UpdateDNAMERecordResponseType, error) { - return service.UpdateDNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteDNAMERecordsContext(ctx context.Context, request *DeleteDNAMERecordsRequestType) (*DeleteDNAMERecordsResponseType, error) { - response := new(DeleteDNAMERecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteDNAMERecords(request *DeleteDNAMERecordsRequestType) (*DeleteDNAMERecordsResponseType, error) { - return service.DeleteDNAMERecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDNAMERecordContext(ctx context.Context, request *DeleteOneDNAMERecordRequestType) (*DeleteOneDNAMERecordResponseType, error) { - response := new(DeleteOneDNAMERecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDNAMERecord(request *DeleteOneDNAMERecordRequestType) (*DeleteOneDNAMERecordResponseType, error) { - return service.DeleteOneDNAMERecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDNSKEYRecordContext(ctx context.Context, request *CreateDNSKEYRecordRequestType) (*CreateDNSKEYRecordResponseType, error) { - response := new(CreateDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDNSKEYRecord(request *CreateDNSKEYRecordRequestType) (*CreateDNSKEYRecordResponseType, error) { - return service.CreateDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDNSKEYRecordContext(ctx context.Context, request *GetOneDNSKEYRecordRequestType) (*GetOneDNSKEYRecordResponseType, error) { - response := new(GetOneDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDNSKEYRecord(request *GetOneDNSKEYRecordRequestType) (*GetOneDNSKEYRecordResponseType, error) { - return service.GetOneDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDNSKEYRecordsContext(ctx context.Context, request *GetDNSKEYRecordsRequestType) (*GetDNSKEYRecordsResponseType, error) { - response := new(GetDNSKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDNSKEYRecords(request *GetDNSKEYRecordsRequestType) (*GetDNSKEYRecordsResponseType, error) { - return service.GetDNSKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDNSKEYRecordContext(ctx context.Context, request *UpdateDNSKEYRecordRequestType) (*UpdateDNSKEYRecordResponseType, error) { - response := new(UpdateDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDNSKEYRecord(request *UpdateDNSKEYRecordRequestType) (*UpdateDNSKEYRecordResponseType, error) { - return service.UpdateDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteDNSKEYRecordsContext(ctx context.Context, request *DeleteDNSKEYRecordsRequestType) (*DeleteDNSKEYRecordsResponseType, error) { - response := new(DeleteDNSKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteDNSKEYRecords(request *DeleteDNSKEYRecordsRequestType) (*DeleteDNSKEYRecordsResponseType, error) { - return service.DeleteDNSKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDNSKEYRecordContext(ctx context.Context, request *DeleteOneDNSKEYRecordRequestType) (*DeleteOneDNSKEYRecordResponseType, error) { - response := new(DeleteOneDNSKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDNSKEYRecord(request *DeleteOneDNSKEYRecordRequestType) (*DeleteOneDNSKEYRecordResponseType, error) { - return service.DeleteOneDNSKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDSRecordContext(ctx context.Context, request *CreateDSRecordRequestType) (*CreateDSRecordResponseType, error) { - response := new(CreateDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDSRecord(request *CreateDSRecordRequestType) (*CreateDSRecordResponseType, error) { - return service.CreateDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDSRecordContext(ctx context.Context, request *GetOneDSRecordRequestType) (*GetOneDSRecordResponseType, error) { - response := new(GetOneDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDSRecord(request *GetOneDSRecordRequestType) (*GetOneDSRecordResponseType, error) { - return service.GetOneDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDSRecordsContext(ctx context.Context, request *GetDSRecordsRequestType) (*GetDSRecordsResponseType, error) { - response := new(GetDSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDSRecords(request *GetDSRecordsRequestType) (*GetDSRecordsResponseType, error) { - return service.GetDSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDSRecordContext(ctx context.Context, request *UpdateDSRecordRequestType) (*UpdateDSRecordResponseType, error) { - response := new(UpdateDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDSRecord(request *UpdateDSRecordRequestType) (*UpdateDSRecordResponseType, error) { - return service.UpdateDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteDSRecordsContext(ctx context.Context, request *DeleteDSRecordsRequestType) (*DeleteDSRecordsResponseType, error) { - response := new(DeleteDSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteDSRecords(request *DeleteDSRecordsRequestType) (*DeleteDSRecordsResponseType, error) { - return service.DeleteDSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDSRecordContext(ctx context.Context, request *DeleteOneDSRecordRequestType) (*DeleteOneDSRecordResponseType, error) { - response := new(DeleteOneDSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDSRecord(request *DeleteOneDSRecordRequestType) (*DeleteOneDSRecordResponseType, error) { - return service.DeleteOneDSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateIPSECKEYRecordContext(ctx context.Context, request *CreateIPSECKEYRecordRequestType) (*CreateIPSECKEYRecordResponseType, error) { - response := new(CreateIPSECKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateIPSECKEYRecord(request *CreateIPSECKEYRecordRequestType) (*CreateIPSECKEYRecordResponseType, error) { - return service.CreateIPSECKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneIPSECKEYRecordContext(ctx context.Context, request *GetOneIPSECKEYRecordRequestType) (*GetOneIPSECKEYRecordResponseType, error) { - response := new(GetOneIPSECKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneIPSECKEYRecord(request *GetOneIPSECKEYRecordRequestType) (*GetOneIPSECKEYRecordResponseType, error) { - return service.GetOneIPSECKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetIPSECKEYRecordsContext(ctx context.Context, request *GetIPSECKEYRecordsRequestType) (*GetIPSECKEYRecordsResponseType, error) { - response := new(GetIPSECKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetIPSECKEYRecords(request *GetIPSECKEYRecordsRequestType) (*GetIPSECKEYRecordsResponseType, error) { - return service.GetIPSECKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateIPSECKEYRecordContext(ctx context.Context, request *UpdateIPSECKEYRecordRequestType) (*UpdateIPSECKEYRecordResponseType, error) { - response := new(UpdateIPSECKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateIPSECKEYRecord(request *UpdateIPSECKEYRecordRequestType) (*UpdateIPSECKEYRecordResponseType, error) { - return service.UpdateIPSECKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteIPSECKEYRecordsContext(ctx context.Context, request *DeleteIPSECKEYRecordsRequestType) (*DeleteIPSECKEYRecordsResponseType, error) { - response := new(DeleteIPSECKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteIPSECKEYRecords(request *DeleteIPSECKEYRecordsRequestType) (*DeleteIPSECKEYRecordsResponseType, error) { - return service.DeleteIPSECKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneIPSECKEYRecordContext(ctx context.Context, request *DeleteOneIPSECKEYRecordRequestType) (*DeleteOneIPSECKEYRecordResponseType, error) { - response := new(DeleteOneIPSECKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneIPSECKEYRecord(request *DeleteOneIPSECKEYRecordRequestType) (*DeleteOneIPSECKEYRecordResponseType, error) { - return service.DeleteOneIPSECKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateKEYRecordContext(ctx context.Context, request *CreateKEYRecordRequestType) (*CreateKEYRecordResponseType, error) { - response := new(CreateKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateKEYRecord(request *CreateKEYRecordRequestType) (*CreateKEYRecordResponseType, error) { - return service.CreateKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneKEYRecordContext(ctx context.Context, request *GetOneKEYRecordRequestType) (*GetOneKEYRecordResponseType, error) { - response := new(GetOneKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneKEYRecord(request *GetOneKEYRecordRequestType) (*GetOneKEYRecordResponseType, error) { - return service.GetOneKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetKEYRecordsContext(ctx context.Context, request *GetKEYRecordsRequestType) (*GetKEYRecordsResponseType, error) { - response := new(GetKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetKEYRecords(request *GetKEYRecordsRequestType) (*GetKEYRecordsResponseType, error) { - return service.GetKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateKEYRecordContext(ctx context.Context, request *UpdateKEYRecordRequestType) (*UpdateKEYRecordResponseType, error) { - response := new(UpdateKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateKEYRecord(request *UpdateKEYRecordRequestType) (*UpdateKEYRecordResponseType, error) { - return service.UpdateKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteKEYRecordsContext(ctx context.Context, request *DeleteKEYRecordsRequestType) (*DeleteKEYRecordsResponseType, error) { - response := new(DeleteKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteKEYRecords(request *DeleteKEYRecordsRequestType) (*DeleteKEYRecordsResponseType, error) { - return service.DeleteKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneKEYRecordContext(ctx context.Context, request *DeleteOneKEYRecordRequestType) (*DeleteOneKEYRecordResponseType, error) { - response := new(DeleteOneKEYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneKEYRecord(request *DeleteOneKEYRecordRequestType) (*DeleteOneKEYRecordResponseType, error) { - return service.DeleteOneKEYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateKXRecordContext(ctx context.Context, request *CreateKXRecordRequestType) (*CreateKXRecordResponseType, error) { - response := new(CreateKXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateKXRecord(request *CreateKXRecordRequestType) (*CreateKXRecordResponseType, error) { - return service.CreateKXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneKXRecordContext(ctx context.Context, request *GetOneKXRecordRequestType) (*GetOneKXRecordResponseType, error) { - response := new(GetOneKXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneKXRecord(request *GetOneKXRecordRequestType) (*GetOneKXRecordResponseType, error) { - return service.GetOneKXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetKXRecordsContext(ctx context.Context, request *GetKXRecordsRequestType) (*GetKXRecordsResponseType, error) { - response := new(GetKXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetKXRecords(request *GetKXRecordsRequestType) (*GetKXRecordsResponseType, error) { - return service.GetKXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateKXRecordContext(ctx context.Context, request *UpdateKXRecordRequestType) (*UpdateKXRecordResponseType, error) { - response := new(UpdateKXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateKXRecord(request *UpdateKXRecordRequestType) (*UpdateKXRecordResponseType, error) { - return service.UpdateKXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteKXRecordsContext(ctx context.Context, request *DeleteKXRecordsRequestType) (*DeleteKXRecordsResponseType, error) { - response := new(DeleteKXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteKXRecords(request *DeleteKXRecordsRequestType) (*DeleteKXRecordsResponseType, error) { - return service.DeleteKXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneKXRecordContext(ctx context.Context, request *DeleteOneKXRecordRequestType) (*DeleteOneKXRecordResponseType, error) { - response := new(DeleteOneKXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneKXRecord(request *DeleteOneKXRecordRequestType) (*DeleteOneKXRecordResponseType, error) { - return service.DeleteOneKXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateLOCRecordContext(ctx context.Context, request *CreateLOCRecordRequestType) (*CreateLOCRecordResponseType, error) { - response := new(CreateLOCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateLOCRecord(request *CreateLOCRecordRequestType) (*CreateLOCRecordResponseType, error) { - return service.CreateLOCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneLOCRecordContext(ctx context.Context, request *GetOneLOCRecordRequestType) (*GetOneLOCRecordResponseType, error) { - response := new(GetOneLOCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneLOCRecord(request *GetOneLOCRecordRequestType) (*GetOneLOCRecordResponseType, error) { - return service.GetOneLOCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetLOCRecordsContext(ctx context.Context, request *GetLOCRecordsRequestType) (*GetLOCRecordsResponseType, error) { - response := new(GetLOCRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetLOCRecords(request *GetLOCRecordsRequestType) (*GetLOCRecordsResponseType, error) { - return service.GetLOCRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateLOCRecordContext(ctx context.Context, request *UpdateLOCRecordRequestType) (*UpdateLOCRecordResponseType, error) { - response := new(UpdateLOCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateLOCRecord(request *UpdateLOCRecordRequestType) (*UpdateLOCRecordResponseType, error) { - return service.UpdateLOCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteLOCRecordsContext(ctx context.Context, request *DeleteLOCRecordsRequestType) (*DeleteLOCRecordsResponseType, error) { - response := new(DeleteLOCRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteLOCRecords(request *DeleteLOCRecordsRequestType) (*DeleteLOCRecordsResponseType, error) { - return service.DeleteLOCRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneLOCRecordContext(ctx context.Context, request *DeleteOneLOCRecordRequestType) (*DeleteOneLOCRecordResponseType, error) { - response := new(DeleteOneLOCRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneLOCRecord(request *DeleteOneLOCRecordRequestType) (*DeleteOneLOCRecordResponseType, error) { - return service.DeleteOneLOCRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateMXRecordContext(ctx context.Context, request *CreateMXRecordRequestType) (*CreateMXRecordResponseType, error) { - response := new(CreateMXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateMXRecord(request *CreateMXRecordRequestType) (*CreateMXRecordResponseType, error) { - return service.CreateMXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneMXRecordContext(ctx context.Context, request *GetOneMXRecordRequestType) (*GetOneMXRecordResponseType, error) { - response := new(GetOneMXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneMXRecord(request *GetOneMXRecordRequestType) (*GetOneMXRecordResponseType, error) { - return service.GetOneMXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetMXRecordsContext(ctx context.Context, request *GetMXRecordsRequestType) (*GetMXRecordsResponseType, error) { - response := new(GetMXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetMXRecords(request *GetMXRecordsRequestType) (*GetMXRecordsResponseType, error) { - return service.GetMXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateMXRecordContext(ctx context.Context, request *UpdateMXRecordRequestType) (*UpdateMXRecordResponseType, error) { - response := new(UpdateMXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateMXRecord(request *UpdateMXRecordRequestType) (*UpdateMXRecordResponseType, error) { - return service.UpdateMXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteMXRecordsContext(ctx context.Context, request *DeleteMXRecordsRequestType) (*DeleteMXRecordsResponseType, error) { - response := new(DeleteMXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteMXRecords(request *DeleteMXRecordsRequestType) (*DeleteMXRecordsResponseType, error) { - return service.DeleteMXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneMXRecordContext(ctx context.Context, request *DeleteOneMXRecordRequestType) (*DeleteOneMXRecordResponseType, error) { - response := new(DeleteOneMXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneMXRecord(request *DeleteOneMXRecordRequestType) (*DeleteOneMXRecordResponseType, error) { - return service.DeleteOneMXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateNAPTRRecordContext(ctx context.Context, request *CreateNAPTRRecordRequestType) (*CreateNAPTRRecordResponseType, error) { - response := new(CreateNAPTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateNAPTRRecord(request *CreateNAPTRRecordRequestType) (*CreateNAPTRRecordResponseType, error) { - return service.CreateNAPTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneNAPTRRecordContext(ctx context.Context, request *GetOneNAPTRRecordRequestType) (*GetOneNAPTRRecordResponseType, error) { - response := new(GetOneNAPTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneNAPTRRecord(request *GetOneNAPTRRecordRequestType) (*GetOneNAPTRRecordResponseType, error) { - return service.GetOneNAPTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetNAPTRRecordsContext(ctx context.Context, request *GetNAPTRRecordsRequestType) (*GetNAPTRRecordsResponseType, error) { - response := new(GetNAPTRRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetNAPTRRecords(request *GetNAPTRRecordsRequestType) (*GetNAPTRRecordsResponseType, error) { - return service.GetNAPTRRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateNAPTRRecordContext(ctx context.Context, request *UpdateNAPTRRecordRequestType) (*UpdateNAPTRRecordResponseType, error) { - response := new(UpdateNAPTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateNAPTRRecord(request *UpdateNAPTRRecordRequestType) (*UpdateNAPTRRecordResponseType, error) { - return service.UpdateNAPTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteNAPTRRecordsContext(ctx context.Context, request *DeleteNAPTRRecordsRequestType) (*DeleteNAPTRRecordsResponseType, error) { - response := new(DeleteNAPTRRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteNAPTRRecords(request *DeleteNAPTRRecordsRequestType) (*DeleteNAPTRRecordsResponseType, error) { - return service.DeleteNAPTRRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneNAPTRRecordContext(ctx context.Context, request *DeleteOneNAPTRRecordRequestType) (*DeleteOneNAPTRRecordResponseType, error) { - response := new(DeleteOneNAPTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneNAPTRRecord(request *DeleteOneNAPTRRecordRequestType) (*DeleteOneNAPTRRecordResponseType, error) { - return service.DeleteOneNAPTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateNSAPRecordContext(ctx context.Context, request *CreateNSAPRecordRequestType) (*CreateNSAPRecordResponseType, error) { - response := new(CreateNSAPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateNSAPRecord(request *CreateNSAPRecordRequestType) (*CreateNSAPRecordResponseType, error) { - return service.CreateNSAPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneNSAPRecordContext(ctx context.Context, request *GetOneNSAPRecordRequestType) (*GetOneNSAPRecordResponseType, error) { - response := new(GetOneNSAPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneNSAPRecord(request *GetOneNSAPRecordRequestType) (*GetOneNSAPRecordResponseType, error) { - return service.GetOneNSAPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetNSAPRecordsContext(ctx context.Context, request *GetNSAPRecordsRequestType) (*GetNSAPRecordsResponseType, error) { - response := new(GetNSAPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetNSAPRecords(request *GetNSAPRecordsRequestType) (*GetNSAPRecordsResponseType, error) { - return service.GetNSAPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateNSAPRecordContext(ctx context.Context, request *UpdateNSAPRecordRequestType) (*UpdateNSAPRecordResponseType, error) { - response := new(UpdateNSAPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateNSAPRecord(request *UpdateNSAPRecordRequestType) (*UpdateNSAPRecordResponseType, error) { - return service.UpdateNSAPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteNSAPRecordsContext(ctx context.Context, request *DeleteNSAPRecordsRequestType) (*DeleteNSAPRecordsResponseType, error) { - response := new(DeleteNSAPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteNSAPRecords(request *DeleteNSAPRecordsRequestType) (*DeleteNSAPRecordsResponseType, error) { - return service.DeleteNSAPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneNSAPRecordContext(ctx context.Context, request *DeleteOneNSAPRecordRequestType) (*DeleteOneNSAPRecordResponseType, error) { - response := new(DeleteOneNSAPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneNSAPRecord(request *DeleteOneNSAPRecordRequestType) (*DeleteOneNSAPRecordResponseType, error) { - return service.DeleteOneNSAPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreatePOLICYRecordContext(ctx context.Context, request *CreatePOLICYRecordRequestType) (*CreatePOLICYRecordResponseType, error) { - response := new(CreatePOLICYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreatePOLICYRecord(request *CreatePOLICYRecordRequestType) (*CreatePOLICYRecordResponseType, error) { - return service.CreatePOLICYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOnePOLICYRecordContext(ctx context.Context, request *GetOnePOLICYRecordRequestType) (*GetOnePOLICYRecordResponseType, error) { - response := new(GetOnePOLICYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOnePOLICYRecord(request *GetOnePOLICYRecordRequestType) (*GetOnePOLICYRecordResponseType, error) { - return service.GetOnePOLICYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetPOLICYRecordsContext(ctx context.Context, request *GetPOLICYRecordsRequestType) (*GetPOLICYRecordsResponseType, error) { - response := new(GetPOLICYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetPOLICYRecords(request *GetPOLICYRecordsRequestType) (*GetPOLICYRecordsResponseType, error) { - return service.GetPOLICYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdatePOLICYRecordContext(ctx context.Context, request *UpdatePOLICYRecordRequestType) (*UpdatePOLICYRecordResponseType, error) { - response := new(UpdatePOLICYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdatePOLICYRecord(request *UpdatePOLICYRecordRequestType) (*UpdatePOLICYRecordResponseType, error) { - return service.UpdatePOLICYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeletePOLICYRecordsContext(ctx context.Context, request *DeletePOLICYRecordsRequestType) (*DeletePOLICYRecordsResponseType, error) { - response := new(DeletePOLICYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeletePOLICYRecords(request *DeletePOLICYRecordsRequestType) (*DeletePOLICYRecordsResponseType, error) { - return service.DeletePOLICYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOnePOLICYRecordContext(ctx context.Context, request *DeleteOnePOLICYRecordRequestType) (*DeleteOnePOLICYRecordResponseType, error) { - response := new(DeleteOnePOLICYRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOnePOLICYRecord(request *DeleteOnePOLICYRecordRequestType) (*DeleteOnePOLICYRecordResponseType, error) { - return service.DeleteOnePOLICYRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreatePTRRecordContext(ctx context.Context, request *CreatePTRRecordRequestType) (*CreatePTRRecordResponseType, error) { - response := new(CreatePTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreatePTRRecord(request *CreatePTRRecordRequestType) (*CreatePTRRecordResponseType, error) { - return service.CreatePTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOnePTRRecordContext(ctx context.Context, request *GetOnePTRRecordRequestType) (*GetOnePTRRecordResponseType, error) { - response := new(GetOnePTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOnePTRRecord(request *GetOnePTRRecordRequestType) (*GetOnePTRRecordResponseType, error) { - return service.GetOnePTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetPTRRecordsContext(ctx context.Context, request *GetPTRRecordsRequestType) (*GetPTRRecordsResponseType, error) { - response := new(GetPTRRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetPTRRecords(request *GetPTRRecordsRequestType) (*GetPTRRecordsResponseType, error) { - return service.GetPTRRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdatePTRRecordContext(ctx context.Context, request *UpdatePTRRecordRequestType) (*UpdatePTRRecordResponseType, error) { - response := new(UpdatePTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdatePTRRecord(request *UpdatePTRRecordRequestType) (*UpdatePTRRecordResponseType, error) { - return service.UpdatePTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeletePTRRecordsContext(ctx context.Context, request *DeletePTRRecordsRequestType) (*DeletePTRRecordsResponseType, error) { - response := new(DeletePTRRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeletePTRRecords(request *DeletePTRRecordsRequestType) (*DeletePTRRecordsResponseType, error) { - return service.DeletePTRRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOnePTRRecordContext(ctx context.Context, request *DeleteOnePTRRecordRequestType) (*DeleteOnePTRRecordResponseType, error) { - response := new(DeleteOnePTRRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOnePTRRecord(request *DeleteOnePTRRecordRequestType) (*DeleteOnePTRRecordResponseType, error) { - return service.DeleteOnePTRRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreatePXRecordContext(ctx context.Context, request *CreatePXRecordRequestType) (*CreatePXRecordResponseType, error) { - response := new(CreatePXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreatePXRecord(request *CreatePXRecordRequestType) (*CreatePXRecordResponseType, error) { - return service.CreatePXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOnePXRecordContext(ctx context.Context, request *GetOnePXRecordRequestType) (*GetOnePXRecordResponseType, error) { - response := new(GetOnePXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOnePXRecord(request *GetOnePXRecordRequestType) (*GetOnePXRecordResponseType, error) { - return service.GetOnePXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetPXRecordsContext(ctx context.Context, request *GetPXRecordsRequestType) (*GetPXRecordsResponseType, error) { - response := new(GetPXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetPXRecords(request *GetPXRecordsRequestType) (*GetPXRecordsResponseType, error) { - return service.GetPXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdatePXRecordContext(ctx context.Context, request *UpdatePXRecordRequestType) (*UpdatePXRecordResponseType, error) { - response := new(UpdatePXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdatePXRecord(request *UpdatePXRecordRequestType) (*UpdatePXRecordResponseType, error) { - return service.UpdatePXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeletePXRecordsContext(ctx context.Context, request *DeletePXRecordsRequestType) (*DeletePXRecordsResponseType, error) { - response := new(DeletePXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeletePXRecords(request *DeletePXRecordsRequestType) (*DeletePXRecordsResponseType, error) { - return service.DeletePXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOnePXRecordContext(ctx context.Context, request *DeleteOnePXRecordRequestType) (*DeleteOnePXRecordResponseType, error) { - response := new(DeleteOnePXRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOnePXRecord(request *DeleteOnePXRecordRequestType) (*DeleteOnePXRecordResponseType, error) { - return service.DeleteOnePXRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateRPRecordContext(ctx context.Context, request *CreateRPRecordRequestType) (*CreateRPRecordResponseType, error) { - response := new(CreateRPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateRPRecord(request *CreateRPRecordRequestType) (*CreateRPRecordResponseType, error) { - return service.CreateRPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneRPRecordContext(ctx context.Context, request *GetOneRPRecordRequestType) (*GetOneRPRecordResponseType, error) { - response := new(GetOneRPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneRPRecord(request *GetOneRPRecordRequestType) (*GetOneRPRecordResponseType, error) { - return service.GetOneRPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetRPRecordsContext(ctx context.Context, request *GetRPRecordsRequestType) (*GetRPRecordsResponseType, error) { - response := new(GetRPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetRPRecords(request *GetRPRecordsRequestType) (*GetRPRecordsResponseType, error) { - return service.GetRPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateRPRecordContext(ctx context.Context, request *UpdateRPRecordRequestType) (*UpdateRPRecordResponseType, error) { - response := new(UpdateRPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateRPRecord(request *UpdateRPRecordRequestType) (*UpdateRPRecordResponseType, error) { - return service.UpdateRPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteRPRecordsContext(ctx context.Context, request *DeleteRPRecordsRequestType) (*DeleteRPRecordsResponseType, error) { - response := new(DeleteRPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteRPRecords(request *DeleteRPRecordsRequestType) (*DeleteRPRecordsResponseType, error) { - return service.DeleteRPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneRPRecordContext(ctx context.Context, request *DeleteOneRPRecordRequestType) (*DeleteOneRPRecordResponseType, error) { - response := new(DeleteOneRPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneRPRecord(request *DeleteOneRPRecordRequestType) (*DeleteOneRPRecordResponseType, error) { - return service.DeleteOneRPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateSPFRecordContext(ctx context.Context, request *CreateSPFRecordRequestType) (*CreateSPFRecordResponseType, error) { - response := new(CreateSPFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateSPFRecord(request *CreateSPFRecordRequestType) (*CreateSPFRecordResponseType, error) { - return service.CreateSPFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneSPFRecordContext(ctx context.Context, request *GetOneSPFRecordRequestType) (*GetOneSPFRecordResponseType, error) { - response := new(GetOneSPFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneSPFRecord(request *GetOneSPFRecordRequestType) (*GetOneSPFRecordResponseType, error) { - return service.GetOneSPFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetSPFRecordsContext(ctx context.Context, request *GetSPFRecordsRequestType) (*GetSPFRecordsResponseType, error) { - response := new(GetSPFRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetSPFRecords(request *GetSPFRecordsRequestType) (*GetSPFRecordsResponseType, error) { - return service.GetSPFRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateSPFRecordContext(ctx context.Context, request *UpdateSPFRecordRequestType) (*UpdateSPFRecordResponseType, error) { - response := new(UpdateSPFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateSPFRecord(request *UpdateSPFRecordRequestType) (*UpdateSPFRecordResponseType, error) { - return service.UpdateSPFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteSPFRecordsContext(ctx context.Context, request *DeleteSPFRecordsRequestType) (*DeleteSPFRecordsResponseType, error) { - response := new(DeleteSPFRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteSPFRecords(request *DeleteSPFRecordsRequestType) (*DeleteSPFRecordsResponseType, error) { - return service.DeleteSPFRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneSPFRecordContext(ctx context.Context, request *DeleteOneSPFRecordRequestType) (*DeleteOneSPFRecordResponseType, error) { - response := new(DeleteOneSPFRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneSPFRecord(request *DeleteOneSPFRecordRequestType) (*DeleteOneSPFRecordResponseType, error) { - return service.DeleteOneSPFRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateSRVRecordContext(ctx context.Context, request *CreateSRVRecordRequestType) (*CreateSRVRecordResponseType, error) { - response := new(CreateSRVRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateSRVRecord(request *CreateSRVRecordRequestType) (*CreateSRVRecordResponseType, error) { - return service.CreateSRVRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneSRVRecordContext(ctx context.Context, request *GetOneSRVRecordRequestType) (*GetOneSRVRecordResponseType, error) { - response := new(GetOneSRVRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneSRVRecord(request *GetOneSRVRecordRequestType) (*GetOneSRVRecordResponseType, error) { - return service.GetOneSRVRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetSRVRecordsContext(ctx context.Context, request *GetSRVRecordsRequestType) (*GetSRVRecordsResponseType, error) { - response := new(GetSRVRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetSRVRecords(request *GetSRVRecordsRequestType) (*GetSRVRecordsResponseType, error) { - return service.GetSRVRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateSRVRecordContext(ctx context.Context, request *UpdateSRVRecordRequestType) (*UpdateSRVRecordResponseType, error) { - response := new(UpdateSRVRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateSRVRecord(request *UpdateSRVRecordRequestType) (*UpdateSRVRecordResponseType, error) { - return service.UpdateSRVRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteSRVRecordsContext(ctx context.Context, request *DeleteSRVRecordsRequestType) (*DeleteSRVRecordsResponseType, error) { - response := new(DeleteSRVRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteSRVRecords(request *DeleteSRVRecordsRequestType) (*DeleteSRVRecordsResponseType, error) { - return service.DeleteSRVRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneSRVRecordContext(ctx context.Context, request *DeleteOneSRVRecordRequestType) (*DeleteOneSRVRecordResponseType, error) { - response := new(DeleteOneSRVRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneSRVRecord(request *DeleteOneSRVRecordRequestType) (*DeleteOneSRVRecordResponseType, error) { - return service.DeleteOneSRVRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateSSHFPRecordContext(ctx context.Context, request *CreateSSHFPRecordRequestType) (*CreateSSHFPRecordResponseType, error) { - response := new(CreateSSHFPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateSSHFPRecord(request *CreateSSHFPRecordRequestType) (*CreateSSHFPRecordResponseType, error) { - return service.CreateSSHFPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneSSHFPRecordContext(ctx context.Context, request *GetOneSSHFPRecordRequestType) (*GetOneSSHFPRecordResponseType, error) { - response := new(GetOneSSHFPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneSSHFPRecord(request *GetOneSSHFPRecordRequestType) (*GetOneSSHFPRecordResponseType, error) { - return service.GetOneSSHFPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetSSHFPRecordsContext(ctx context.Context, request *GetSSHFPRecordsRequestType) (*GetSSHFPRecordsResponseType, error) { - response := new(GetSSHFPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetSSHFPRecords(request *GetSSHFPRecordsRequestType) (*GetSSHFPRecordsResponseType, error) { - return service.GetSSHFPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateSSHFPRecordContext(ctx context.Context, request *UpdateSSHFPRecordRequestType) (*UpdateSSHFPRecordResponseType, error) { - response := new(UpdateSSHFPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateSSHFPRecord(request *UpdateSSHFPRecordRequestType) (*UpdateSSHFPRecordResponseType, error) { - return service.UpdateSSHFPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteSSHFPRecordsContext(ctx context.Context, request *DeleteSSHFPRecordsRequestType) (*DeleteSSHFPRecordsResponseType, error) { - response := new(DeleteSSHFPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteSSHFPRecords(request *DeleteSSHFPRecordsRequestType) (*DeleteSSHFPRecordsResponseType, error) { - return service.DeleteSSHFPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneSSHFPRecordContext(ctx context.Context, request *DeleteOneSSHFPRecordRequestType) (*DeleteOneSSHFPRecordResponseType, error) { - response := new(DeleteOneSSHFPRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneSSHFPRecord(request *DeleteOneSSHFPRecordRequestType) (*DeleteOneSSHFPRecordResponseType, error) { - return service.DeleteOneSSHFPRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateTLSARecordContext(ctx context.Context, request *CreateTLSARecordRequestType) (*CreateTLSARecordResponseType, error) { - response := new(CreateTLSARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateTLSARecord(request *CreateTLSARecordRequestType) (*CreateTLSARecordResponseType, error) { - return service.CreateTLSARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneTLSARecordContext(ctx context.Context, request *GetOneTLSARecordRequestType) (*GetOneTLSARecordResponseType, error) { - response := new(GetOneTLSARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneTLSARecord(request *GetOneTLSARecordRequestType) (*GetOneTLSARecordResponseType, error) { - return service.GetOneTLSARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetTLSARecordsContext(ctx context.Context, request *GetTLSARecordsRequestType) (*GetTLSARecordsResponseType, error) { - response := new(GetTLSARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetTLSARecords(request *GetTLSARecordsRequestType) (*GetTLSARecordsResponseType, error) { - return service.GetTLSARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateTLSARecordContext(ctx context.Context, request *UpdateTLSARecordRequestType) (*UpdateTLSARecordResponseType, error) { - response := new(UpdateTLSARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateTLSARecord(request *UpdateTLSARecordRequestType) (*UpdateTLSARecordResponseType, error) { - return service.UpdateTLSARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteTLSARecordsContext(ctx context.Context, request *DeleteTLSARecordsRequestType) (*DeleteTLSARecordsResponseType, error) { - response := new(DeleteTLSARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteTLSARecords(request *DeleteTLSARecordsRequestType) (*DeleteTLSARecordsResponseType, error) { - return service.DeleteTLSARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneTLSARecordContext(ctx context.Context, request *DeleteOneTLSARecordRequestType) (*DeleteOneTLSARecordResponseType, error) { - response := new(DeleteOneTLSARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneTLSARecord(request *DeleteOneTLSARecordRequestType) (*DeleteOneTLSARecordResponseType, error) { - return service.DeleteOneTLSARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateTXTRecordContext(ctx context.Context, request *CreateTXTRecordRequestType) (*CreateTXTRecordResponseType, error) { - response := new(CreateTXTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateTXTRecord(request *CreateTXTRecordRequestType) (*CreateTXTRecordResponseType, error) { - return service.CreateTXTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneTXTRecordContext(ctx context.Context, request *GetOneTXTRecordRequestType) (*GetOneTXTRecordResponseType, error) { - response := new(GetOneTXTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneTXTRecord(request *GetOneTXTRecordRequestType) (*GetOneTXTRecordResponseType, error) { - return service.GetOneTXTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetTXTRecordsContext(ctx context.Context, request *GetTXTRecordsRequestType) (*GetTXTRecordsResponseType, error) { - response := new(GetTXTRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetTXTRecords(request *GetTXTRecordsRequestType) (*GetTXTRecordsResponseType, error) { - return service.GetTXTRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateTXTRecordContext(ctx context.Context, request *UpdateTXTRecordRequestType) (*UpdateTXTRecordResponseType, error) { - response := new(UpdateTXTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateTXTRecord(request *UpdateTXTRecordRequestType) (*UpdateTXTRecordResponseType, error) { - return service.UpdateTXTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteTXTRecordsContext(ctx context.Context, request *DeleteTXTRecordsRequestType) (*DeleteTXTRecordsResponseType, error) { - response := new(DeleteTXTRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteTXTRecords(request *DeleteTXTRecordsRequestType) (*DeleteTXTRecordsResponseType, error) { - return service.DeleteTXTRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneTXTRecordContext(ctx context.Context, request *DeleteOneTXTRecordRequestType) (*DeleteOneTXTRecordResponseType, error) { - response := new(DeleteOneTXTRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneTXTRecord(request *DeleteOneTXTRecordRequestType) (*DeleteOneTXTRecordResponseType, error) { - return service.DeleteOneTXTRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneSOARecordContext(ctx context.Context, request *GetOneSOARecordRequestType) (*GetOneSOARecordResponseType, error) { - response := new(GetOneSOARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneSOARecord(request *GetOneSOARecordRequestType) (*GetOneSOARecordResponseType, error) { - return service.GetOneSOARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetSOARecordsContext(ctx context.Context, request *GetSOARecordsRequestType) (*GetSOARecordsResponseType, error) { - response := new(GetSOARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetSOARecords(request *GetSOARecordsRequestType) (*GetSOARecordsResponseType, error) { - return service.GetSOARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateSOARecordContext(ctx context.Context, request *UpdateSOARecordRequestType) (*UpdateSOARecordResponseType, error) { - response := new(UpdateSOARecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateSOARecord(request *UpdateSOARecordRequestType) (*UpdateSOARecordResponseType, error) { - return service.UpdateSOARecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateNSRecordContext(ctx context.Context, request *CreateNSRecordRequestType) (*CreateNSRecordResponseType, error) { - response := new(CreateNSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateNSRecord(request *CreateNSRecordRequestType) (*CreateNSRecordResponseType, error) { - return service.CreateNSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneNSRecordContext(ctx context.Context, request *GetOneNSRecordRequestType) (*GetOneNSRecordResponseType, error) { - response := new(GetOneNSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneNSRecord(request *GetOneNSRecordRequestType) (*GetOneNSRecordResponseType, error) { - return service.GetOneNSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetNSRecordsContext(ctx context.Context, request *GetNSRecordsRequestType) (*GetNSRecordsResponseType, error) { - response := new(GetNSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetNSRecords(request *GetNSRecordsRequestType) (*GetNSRecordsResponseType, error) { - return service.GetNSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateNSRecordContext(ctx context.Context, request *UpdateNSRecordRequestType) (*UpdateNSRecordResponseType, error) { - response := new(UpdateNSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateNSRecord(request *UpdateNSRecordRequestType) (*UpdateNSRecordResponseType, error) { - return service.UpdateNSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteNSRecordsContext(ctx context.Context, request *DeleteNSRecordsRequestType) (*DeleteNSRecordsResponseType, error) { - response := new(DeleteNSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteNSRecords(request *DeleteNSRecordsRequestType) (*DeleteNSRecordsResponseType, error) { - return service.DeleteNSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneNSRecordContext(ctx context.Context, request *DeleteOneNSRecordRequestType) (*DeleteOneNSRecordResponseType, error) { - response := new(DeleteOneNSRecordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneNSRecord(request *DeleteOneNSRecordRequestType) (*DeleteOneNSRecordResponseType, error) { - return service.DeleteOneNSRecordContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceARecordsContext(ctx context.Context, request *ReplaceARecordsRequestType) (*ReplaceARecordsResponseType, error) { - response := new(ReplaceARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceARecords(request *ReplaceARecordsRequestType) (*ReplaceARecordsResponseType, error) { - return service.ReplaceARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceAAAARecordsContext(ctx context.Context, request *ReplaceAAAARecordsRequestType) (*ReplaceAAAARecordsResponseType, error) { - response := new(ReplaceAAAARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceAAAARecords(request *ReplaceAAAARecordsRequestType) (*ReplaceAAAARecordsResponseType, error) { - return service.ReplaceAAAARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceALIASRecordsContext(ctx context.Context, request *ReplaceALIASRecordsRequestType) (*ReplaceALIASRecordsResponseType, error) { - response := new(ReplaceALIASRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceALIASRecords(request *ReplaceALIASRecordsRequestType) (*ReplaceALIASRecordsResponseType, error) { - return service.ReplaceALIASRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceCAARecordsContext(ctx context.Context, request *ReplaceCAARecordsRequestType) (*ReplaceCAARecordsResponseType, error) { - response := new(ReplaceCAARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceCAARecords(request *ReplaceCAARecordsRequestType) (*ReplaceCAARecordsResponseType, error) { - return service.ReplaceCAARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceCDNSKEYRecordsContext(ctx context.Context, request *ReplaceCDNSKEYRecordsRequestType) (*ReplaceCDNSKEYRecordsResponseType, error) { - response := new(ReplaceCDNSKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceCDNSKEYRecords(request *ReplaceCDNSKEYRecordsRequestType) (*ReplaceCDNSKEYRecordsResponseType, error) { - return service.ReplaceCDNSKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceCDSRecordsContext(ctx context.Context, request *ReplaceCDSRecordsRequestType) (*ReplaceCDSRecordsResponseType, error) { - response := new(ReplaceCDSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceCDSRecords(request *ReplaceCDSRecordsRequestType) (*ReplaceCDSRecordsResponseType, error) { - return service.ReplaceCDSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceCERTRecordsContext(ctx context.Context, request *ReplaceCERTRecordsRequestType) (*ReplaceCERTRecordsResponseType, error) { - response := new(ReplaceCERTRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceCERTRecords(request *ReplaceCERTRecordsRequestType) (*ReplaceCERTRecordsResponseType, error) { - return service.ReplaceCERTRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceCNAMERecordsContext(ctx context.Context, request *ReplaceCNAMERecordsRequestType) (*ReplaceCNAMERecordsResponseType, error) { - response := new(ReplaceCNAMERecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceCNAMERecords(request *ReplaceCNAMERecordsRequestType) (*ReplaceCNAMERecordsResponseType, error) { - return service.ReplaceCNAMERecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceCSYNCRecordsContext(ctx context.Context, request *ReplaceCSYNCRecordsRequestType) (*ReplaceCSYNCRecordsResponseType, error) { - response := new(ReplaceCSYNCRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceCSYNCRecords(request *ReplaceCSYNCRecordsRequestType) (*ReplaceCSYNCRecordsResponseType, error) { - return service.ReplaceCSYNCRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceDHCIDRecordsContext(ctx context.Context, request *ReplaceDHCIDRecordsRequestType) (*ReplaceDHCIDRecordsResponseType, error) { - response := new(ReplaceDHCIDRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceDHCIDRecords(request *ReplaceDHCIDRecordsRequestType) (*ReplaceDHCIDRecordsResponseType, error) { - return service.ReplaceDHCIDRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceDNAMERecordsContext(ctx context.Context, request *ReplaceDNAMERecordsRequestType) (*ReplaceDNAMERecordsResponseType, error) { - response := new(ReplaceDNAMERecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceDNAMERecords(request *ReplaceDNAMERecordsRequestType) (*ReplaceDNAMERecordsResponseType, error) { - return service.ReplaceDNAMERecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceDNSKEYRecordsContext(ctx context.Context, request *ReplaceDNSKEYRecordsRequestType) (*ReplaceDNSKEYRecordsResponseType, error) { - response := new(ReplaceDNSKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceDNSKEYRecords(request *ReplaceDNSKEYRecordsRequestType) (*ReplaceDNSKEYRecordsResponseType, error) { - return service.ReplaceDNSKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceDSRecordsContext(ctx context.Context, request *ReplaceDSRecordsRequestType) (*ReplaceDSRecordsResponseType, error) { - response := new(ReplaceDSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceDSRecords(request *ReplaceDSRecordsRequestType) (*ReplaceDSRecordsResponseType, error) { - return service.ReplaceDSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceIPSECKEYRecordsContext(ctx context.Context, request *ReplaceIPSECKEYRecordsRequestType) (*ReplaceIPSECKEYRecordsResponseType, error) { - response := new(ReplaceIPSECKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceIPSECKEYRecords(request *ReplaceIPSECKEYRecordsRequestType) (*ReplaceIPSECKEYRecordsResponseType, error) { - return service.ReplaceIPSECKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceKEYRecordsContext(ctx context.Context, request *ReplaceKEYRecordsRequestType) (*ReplaceKEYRecordsResponseType, error) { - response := new(ReplaceKEYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceKEYRecords(request *ReplaceKEYRecordsRequestType) (*ReplaceKEYRecordsResponseType, error) { - return service.ReplaceKEYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceKXRecordsContext(ctx context.Context, request *ReplaceKXRecordsRequestType) (*ReplaceKXRecordsResponseType, error) { - response := new(ReplaceKXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceKXRecords(request *ReplaceKXRecordsRequestType) (*ReplaceKXRecordsResponseType, error) { - return service.ReplaceKXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceLOCRecordsContext(ctx context.Context, request *ReplaceLOCRecordsRequestType) (*ReplaceLOCRecordsResponseType, error) { - response := new(ReplaceLOCRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceLOCRecords(request *ReplaceLOCRecordsRequestType) (*ReplaceLOCRecordsResponseType, error) { - return service.ReplaceLOCRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceMXRecordsContext(ctx context.Context, request *ReplaceMXRecordsRequestType) (*ReplaceMXRecordsResponseType, error) { - response := new(ReplaceMXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceMXRecords(request *ReplaceMXRecordsRequestType) (*ReplaceMXRecordsResponseType, error) { - return service.ReplaceMXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceNAPTRRecordsContext(ctx context.Context, request *ReplaceNAPTRRecordsRequestType) (*ReplaceNAPTRRecordsResponseType, error) { - response := new(ReplaceNAPTRRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceNAPTRRecords(request *ReplaceNAPTRRecordsRequestType) (*ReplaceNAPTRRecordsResponseType, error) { - return service.ReplaceNAPTRRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceNSAPRecordsContext(ctx context.Context, request *ReplaceNSAPRecordsRequestType) (*ReplaceNSAPRecordsResponseType, error) { - response := new(ReplaceNSAPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceNSAPRecords(request *ReplaceNSAPRecordsRequestType) (*ReplaceNSAPRecordsResponseType, error) { - return service.ReplaceNSAPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplacePOLICYRecordsContext(ctx context.Context, request *ReplacePOLICYRecordsRequestType) (*ReplacePOLICYRecordsResponseType, error) { - response := new(ReplacePOLICYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplacePOLICYRecords(request *ReplacePOLICYRecordsRequestType) (*ReplacePOLICYRecordsResponseType, error) { - return service.ReplacePOLICYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplacePTRRecordsContext(ctx context.Context, request *ReplacePTRRecordsRequestType) (*ReplacePTRRecordsResponseType, error) { - response := new(ReplacePTRRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplacePTRRecords(request *ReplacePTRRecordsRequestType) (*ReplacePTRRecordsResponseType, error) { - return service.ReplacePTRRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplacePXRecordsContext(ctx context.Context, request *ReplacePXRecordsRequestType) (*ReplacePXRecordsResponseType, error) { - response := new(ReplacePXRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplacePXRecords(request *ReplacePXRecordsRequestType) (*ReplacePXRecordsResponseType, error) { - return service.ReplacePXRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceRPRecordsContext(ctx context.Context, request *ReplaceRPRecordsRequestType) (*ReplaceRPRecordsResponseType, error) { - response := new(ReplaceRPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceRPRecords(request *ReplaceRPRecordsRequestType) (*ReplaceRPRecordsResponseType, error) { - return service.ReplaceRPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceSPFRecordsContext(ctx context.Context, request *ReplaceSPFRecordsRequestType) (*ReplaceSPFRecordsResponseType, error) { - response := new(ReplaceSPFRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceSPFRecords(request *ReplaceSPFRecordsRequestType) (*ReplaceSPFRecordsResponseType, error) { - return service.ReplaceSPFRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceSRVRecordsContext(ctx context.Context, request *ReplaceSRVRecordsRequestType) (*ReplaceSRVRecordsResponseType, error) { - response := new(ReplaceSRVRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceSRVRecords(request *ReplaceSRVRecordsRequestType) (*ReplaceSRVRecordsResponseType, error) { - return service.ReplaceSRVRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceSSHFPRecordsContext(ctx context.Context, request *ReplaceSSHFPRecordsRequestType) (*ReplaceSSHFPRecordsResponseType, error) { - response := new(ReplaceSSHFPRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceSSHFPRecords(request *ReplaceSSHFPRecordsRequestType) (*ReplaceSSHFPRecordsResponseType, error) { - return service.ReplaceSSHFPRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceTLSARecordsContext(ctx context.Context, request *ReplaceTLSARecordsRequestType) (*ReplaceTLSARecordsResponseType, error) { - response := new(ReplaceTLSARecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceTLSARecords(request *ReplaceTLSARecordsRequestType) (*ReplaceTLSARecordsResponseType, error) { - return service.ReplaceTLSARecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceTXTRecordsContext(ctx context.Context, request *ReplaceTXTRecordsRequestType) (*ReplaceTXTRecordsResponseType, error) { - response := new(ReplaceTXTRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceTXTRecords(request *ReplaceTXTRecordsRequestType) (*ReplaceTXTRecordsResponseType, error) { - return service.ReplaceTXTRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) ReplaceNSRecordsContext(ctx context.Context, request *ReplaceNSRecordsRequestType) (*ReplaceNSRecordsResponseType, error) { - response := new(ReplaceNSRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ReplaceNSRecords(request *ReplaceNSRecordsRequestType) (*ReplaceNSRecordsResponseType, error) { - return service.ReplaceNSRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetANYRecordsContext(ctx context.Context, request *GetANYRecordsRequestType) (*GetANYRecordsResponseType, error) { - response := new(GetANYRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetANYRecords(request *GetANYRecordsRequestType) (*GetANYRecordsResponseType, error) { - return service.GetANYRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetAllRecordsContext(ctx context.Context, request *GetAllRecordsRequestType) (*GetAllRecordsResponseType, error) { - response := new(GetAllRecordsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetAllRecords(request *GetAllRecordsRequestType) (*GetAllRecordsResponseType, error) { - return service.GetAllRecordsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetAllAliasQNamesContext(ctx context.Context, request *GetAllAliasQNamesRequestType) (*GetAllAliasQNamesResponseType, error) { - response := new(GetAllAliasQNamesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetAllAliasQNames(request *GetAllAliasQNamesRequestType) (*GetAllAliasQNamesResponseType, error) { - return service.GetAllAliasQNamesContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneUserContext(ctx context.Context, request *GetOneUserRequestType) (*GetOneUserResponseType, error) { - response := new(GetOneUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneUser(request *GetOneUserRequestType) (*GetOneUserResponseType, error) { - return service.GetOneUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneUserContext(ctx context.Context, request *DeleteOneUserRequestType) (*DeleteOneUserResponseType, error) { - response := new(DeleteOneUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneUser(request *DeleteOneUserRequestType) (*DeleteOneUserResponseType, error) { - return service.DeleteOneUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateUserContext(ctx context.Context, request *CreateUserRequestType) (*CreateUserResponseType, error) { - response := new(CreateUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateUser(request *CreateUserRequestType) (*CreateUserResponseType, error) { - return service.CreateUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateUserContext(ctx context.Context, request *UpdateUserRequestType) (*UpdateUserResponseType, error) { - response := new(UpdateUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateUser(request *UpdateUserRequestType) (*UpdateUserResponseType, error) { - return service.UpdateUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetUsersContext(ctx context.Context, request *GetUsersRequestType) (*GetUsersResponseType, error) { - response := new(GetUsersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetUsers(request *GetUsersRequestType) (*GetUsersResponseType, error) { - return service.GetUsersContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetUpdateUsersContext(ctx context.Context, request *GetUpdateUsersRequestType) (*GetUpdateUsersResponseType, error) { - response := new(GetUpdateUsersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetUpdateUsers(request *GetUpdateUsersRequestType) (*GetUpdateUsersResponseType, error) { - return service.GetUpdateUsersContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateUpdateUserContext(ctx context.Context, request *UpdateUpdateUserRequestType) (*UpdateUpdateUserResponseType, error) { - response := new(UpdateUpdateUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateUpdateUser(request *UpdateUpdateUserRequestType) (*UpdateUpdateUserResponseType, error) { - return service.UpdateUpdateUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneUpdateUserContext(ctx context.Context, request *DeleteOneUpdateUserRequestType) (*DeleteOneUpdateUserResponseType, error) { - response := new(DeleteOneUpdateUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneUpdateUser(request *DeleteOneUpdateUserRequestType) (*DeleteOneUpdateUserResponseType, error) { - return service.DeleteOneUpdateUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateUserPasswordContext(ctx context.Context, request *UpdateUserPasswordRequestType) (*UpdateUserPasswordResponseType, error) { - response := new(UpdateUserPasswordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateUserPassword(request *UpdateUserPasswordRequestType) (*UpdateUserPasswordResponseType, error) { - return service.UpdateUserPasswordContext( - context.Background(), - request, - ) -} - -func (service *dynect) BlockUserContext(ctx context.Context, request *BlockUserRequestType) (*BlockUserResponseType, error) { - response := new(BlockUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) BlockUser(request *BlockUserRequestType) (*BlockUserResponseType, error) { - return service.BlockUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) UnblockUserContext(ctx context.Context, request *UnblockUserRequestType) (*UnblockUserResponseType, error) { - response := new(UnblockUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UnblockUser(request *UnblockUserRequestType) (*UnblockUserResponseType, error) { - return service.UnblockUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateContactContext(ctx context.Context, request *CreateContactRequestType) (*CreateContactResponseType, error) { - response := new(CreateContactResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateContact(request *CreateContactRequestType) (*CreateContactResponseType, error) { - return service.CreateContactContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneContactContext(ctx context.Context, request *GetOneContactRequestType) (*GetOneContactResponseType, error) { - response := new(GetOneContactResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneContact(request *GetOneContactRequestType) (*GetOneContactResponseType, error) { - return service.GetOneContactContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetContactsContext(ctx context.Context, request *GetContactsRequestType) (*GetContactsResponseType, error) { - response := new(GetContactsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetContacts(request *GetContactsRequestType) (*GetContactsResponseType, error) { - return service.GetContactsContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneContactContext(ctx context.Context, request *DeleteOneContactRequestType) (*DeleteOneContactResponseType, error) { - response := new(DeleteOneContactResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneContact(request *DeleteOneContactRequestType) (*DeleteOneContactResponseType, error) { - return service.DeleteOneContactContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateContactContext(ctx context.Context, request *UpdateContactRequestType) (*UpdateContactResponseType, error) { - response := new(UpdateContactResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateContact(request *UpdateContactRequestType) (*UpdateContactResponseType, error) { - return service.UpdateContactContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCustomerContext(ctx context.Context, request *CreateCustomerRequestType) (*CreateCustomerResponseType, error) { - response := new(CreateCustomerResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCustomer(request *CreateCustomerRequestType) (*CreateCustomerResponseType, error) { - return service.CreateCustomerContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCustomerContext(ctx context.Context, request *UpdateCustomerRequestType) (*UpdateCustomerResponseType, error) { - response := new(UpdateCustomerResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCustomer(request *UpdateCustomerRequestType) (*UpdateCustomerResponseType, error) { - return service.UpdateCustomerContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneCustomerContext(ctx context.Context, request *GetOneCustomerRequestType) (*GetOneCustomerResponseType, error) { - response := new(GetOneCustomerResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneCustomer(request *GetOneCustomerRequestType) (*GetOneCustomerResponseType, error) { - return service.GetOneCustomerContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCustomersContext(ctx context.Context, request *GetCustomersRequestType) (*GetCustomersResponseType, error) { - response := new(GetCustomersResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCustomers(request *GetCustomersRequestType) (*GetCustomersResponseType, error) { - return service.GetCustomersContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneCustomerContext(ctx context.Context, request *DeleteOneCustomerRequestType) (*DeleteOneCustomerResponseType, error) { - response := new(DeleteOneCustomerResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneCustomer(request *DeleteOneCustomerRequestType) (*DeleteOneCustomerResponseType, error) { - return service.DeleteOneCustomerContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCustomerPrefsContext(ctx context.Context, request *GetCustomerPrefsRequestType) (*GetCustomerPrefsResponseType, error) { - response := new(GetCustomerPrefsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCustomerPrefs(request *GetCustomerPrefsRequestType) (*GetCustomerPrefsResponseType, error) { - return service.GetCustomerPrefsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetCustomerPrefsContext(ctx context.Context, request *SetCustomerPrefsRequestType) (*SetCustomerPrefsResponseType, error) { - response := new(SetCustomerPrefsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetCustomerPrefs(request *SetCustomerPrefsRequestType) (*SetCustomerPrefsResponseType, error) { - return service.SetCustomerPrefsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCustomerIPACLContext(ctx context.Context, request *GetCustomerIPACLRequestType) (*GetCustomerIPACLResponseType, error) { - response := new(GetCustomerIPACLResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCustomerIPACL(request *GetCustomerIPACLRequestType) (*GetCustomerIPACLResponseType, error) { - return service.GetCustomerIPACLContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetCustomerIPACLContext(ctx context.Context, request *SetCustomerIPACLRequestType) (*SetCustomerIPACLResponseType, error) { - response := new(SetCustomerIPACLResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetCustomerIPACL(request *SetCustomerIPACLRequestType) (*SetCustomerIPACLResponseType, error) { - return service.SetCustomerIPACLContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateCustomerOracleMetadataContext(ctx context.Context, request *CreateCustomerOracleMetadataRequestType) (*CreateCustomerOracleMetadataResponseType, error) { - response := new(CreateCustomerOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateCustomerOracleMetadata(request *CreateCustomerOracleMetadataRequestType) (*CreateCustomerOracleMetadataResponseType, error) { - return service.CreateCustomerOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateCustomerOracleMetadataContext(ctx context.Context, request *UpdateCustomerOracleMetadataRequestType) (*UpdateCustomerOracleMetadataResponseType, error) { - response := new(UpdateCustomerOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateCustomerOracleMetadata(request *UpdateCustomerOracleMetadataRequestType) (*UpdateCustomerOracleMetadataResponseType, error) { - return service.UpdateCustomerOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetCustomerOracleMetadataContext(ctx context.Context, request *GetCustomerOracleMetadataRequestType) (*GetCustomerOracleMetadataResponseType, error) { - response := new(GetCustomerOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetCustomerOracleMetadata(request *GetCustomerOracleMetadataRequestType) (*GetCustomerOracleMetadataResponseType, error) { - return service.GetCustomerOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteCustomerOracleMetadataContext(ctx context.Context, request *DeleteCustomerOracleMetadataRequestType) (*DeleteCustomerOracleMetadataResponseType, error) { - response := new(DeleteCustomerOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteCustomerOracleMetadata(request *DeleteCustomerOracleMetadataRequestType) (*DeleteCustomerOracleMetadataResponseType, error) { - return service.DeleteCustomerOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateZoneOracleMetadataContext(ctx context.Context, request *CreateZoneOracleMetadataRequestType) (*CreateZoneOracleMetadataResponseType, error) { - response := new(CreateZoneOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateZoneOracleMetadata(request *CreateZoneOracleMetadataRequestType) (*CreateZoneOracleMetadataResponseType, error) { - return service.CreateZoneOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateZoneOracleMetadataContext(ctx context.Context, request *UpdateZoneOracleMetadataRequestType) (*UpdateZoneOracleMetadataResponseType, error) { - response := new(UpdateZoneOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateZoneOracleMetadata(request *UpdateZoneOracleMetadataRequestType) (*UpdateZoneOracleMetadataResponseType, error) { - return service.UpdateZoneOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetZoneOracleMetadataContext(ctx context.Context, request *GetZoneOracleMetadataRequestType) (*GetZoneOracleMetadataResponseType, error) { - response := new(GetZoneOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetZoneOracleMetadata(request *GetZoneOracleMetadataRequestType) (*GetZoneOracleMetadataResponseType, error) { - return service.GetZoneOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteZoneOracleMetadataContext(ctx context.Context, request *DeleteZoneOracleMetadataRequestType) (*DeleteZoneOracleMetadataResponseType, error) { - response := new(DeleteZoneOracleMetadataResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteZoneOracleMetadata(request *DeleteZoneOracleMetadataRequestType) (*DeleteZoneOracleMetadataResponseType, error) { - return service.DeleteZoneOracleMetadataContext( - context.Background(), - request, - ) -} - -func (service *dynect) OCIMigrateContext(ctx context.Context, request *OCIMigrateRequestType) (*OCIMigrateResponseType, error) { - response := new(OCIMigrateResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) OCIMigrate(request *OCIMigrateRequestType) (*OCIMigrateResponseType, error) { - return service.OCIMigrateContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDDNSContext(ctx context.Context, request *CreateDDNSRequestType) (*CreateDDNSResponseType, error) { - response := new(CreateDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDDNS(request *CreateDDNSRequestType) (*CreateDDNSResponseType, error) { - return service.CreateDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDDNSContext(ctx context.Context, request *GetOneDDNSRequestType) (*GetOneDDNSResponseType, error) { - response := new(GetOneDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDDNS(request *GetOneDDNSRequestType) (*GetOneDDNSResponseType, error) { - return service.GetOneDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDDNSsContext(ctx context.Context, request *GetDDNSsRequestType) (*GetDDNSsResponseType, error) { - response := new(GetDDNSsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDDNSs(request *GetDDNSsRequestType) (*GetDDNSsResponseType, error) { - return service.GetDDNSsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDDNSContext(ctx context.Context, request *UpdateDDNSRequestType) (*UpdateDDNSResponseType, error) { - response := new(UpdateDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDDNS(request *UpdateDDNSRequestType) (*UpdateDDNSResponseType, error) { - return service.UpdateDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDDNSContext(ctx context.Context, request *DeleteOneDDNSRequestType) (*DeleteOneDDNSResponseType, error) { - response := new(DeleteOneDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDDNS(request *DeleteOneDDNSRequestType) (*DeleteOneDDNSResponseType, error) { - return service.DeleteOneDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateDDNSContext(ctx context.Context, request *ActivateDDNSRequestType) (*ActivateDDNSResponseType, error) { - response := new(ActivateDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateDDNS(request *ActivateDDNSRequestType) (*ActivateDDNSResponseType, error) { - return service.ActivateDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateDDNSContext(ctx context.Context, request *DeactivateDDNSRequestType) (*DeactivateDDNSResponseType, error) { - response := new(DeactivateDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateDDNS(request *DeactivateDDNSRequestType) (*DeactivateDDNSResponseType, error) { - return service.DeactivateDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) ResetDDNSContext(ctx context.Context, request *ResetDDNSRequestType) (*ResetDDNSResponseType, error) { - response := new(ResetDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ResetDDNS(request *ResetDDNSRequestType) (*ResetDDNSResponseType, error) { - return service.ResetDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetUpdateUserPasswordContext(ctx context.Context, request *GetUpdateUserPasswordRequestType) (*GetUpdateUserPasswordResponseType, error) { - response := new(GetUpdateUserPasswordResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetUpdateUserPassword(request *GetUpdateUserPasswordRequestType) (*GetUpdateUserPasswordResponseType, error) { - return service.GetUpdateUserPasswordContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDDNSHostContext(ctx context.Context, request *CreateDDNSHostRequestType) (*CreateDDNSHostResponseType, error) { - response := new(CreateDDNSHostResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDDNSHost(request *CreateDDNSHostRequestType) (*CreateDDNSHostResponseType, error) { - return service.CreateDDNSHostContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateUpdateUserContext(ctx context.Context, request *CreateUpdateUserRequestType) (*CreateUpdateUserResponseType, error) { - response := new(CreateUpdateUserResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateUpdateUser(request *CreateUpdateUserRequestType) (*CreateUpdateUserResponseType, error) { - return service.CreateUpdateUserContext( - context.Background(), - request, - ) -} - -func (service *dynect) AddDDNSContext(ctx context.Context, request *AddDDNSRequestType) (*AddDDNSResponseType, error) { - response := new(AddDDNSResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) AddDDNS(request *AddDDNSRequestType) (*AddDDNSResponseType, error) { - return service.AddDDNSContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateFailoverContext(ctx context.Context, request *CreateFailoverRequestType) (*CreateFailoverResponseType, error) { - response := new(CreateFailoverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateFailover(request *CreateFailoverRequestType) (*CreateFailoverResponseType, error) { - return service.CreateFailoverContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneFailoverContext(ctx context.Context, request *GetOneFailoverRequestType) (*GetOneFailoverResponseType, error) { - response := new(GetOneFailoverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneFailover(request *GetOneFailoverRequestType) (*GetOneFailoverResponseType, error) { - return service.GetOneFailoverContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetFailoversContext(ctx context.Context, request *GetFailoversRequestType) (*GetFailoversResponseType, error) { - response := new(GetFailoversResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetFailovers(request *GetFailoversRequestType) (*GetFailoversResponseType, error) { - return service.GetFailoversContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateFailoverContext(ctx context.Context, request *UpdateFailoverRequestType) (*UpdateFailoverResponseType, error) { - response := new(UpdateFailoverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateFailover(request *UpdateFailoverRequestType) (*UpdateFailoverResponseType, error) { - return service.UpdateFailoverContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneFailoverContext(ctx context.Context, request *DeleteOneFailoverRequestType) (*DeleteOneFailoverResponseType, error) { - response := new(DeleteOneFailoverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneFailover(request *DeleteOneFailoverRequestType) (*DeleteOneFailoverResponseType, error) { - return service.DeleteOneFailoverContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateFailoverContext(ctx context.Context, request *ActivateFailoverRequestType) (*ActivateFailoverResponseType, error) { - response := new(ActivateFailoverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateFailover(request *ActivateFailoverRequestType) (*ActivateFailoverResponseType, error) { - return service.ActivateFailoverContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateFailoverContext(ctx context.Context, request *DeactivateFailoverRequestType) (*DeactivateFailoverResponseType, error) { - response := new(DeactivateFailoverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateFailover(request *DeactivateFailoverRequestType) (*DeactivateFailoverResponseType, error) { - return service.DeactivateFailoverContext( - context.Background(), - request, - ) -} - -func (service *dynect) RecoverFailoverContext(ctx context.Context, request *RecoverFailoverRequestType) (*RecoverFailoverResponseType, error) { - response := new(RecoverFailoverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RecoverFailover(request *RecoverFailoverRequestType) (*RecoverFailoverResponseType, error) { - return service.RecoverFailoverContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateLoadBalanceContext(ctx context.Context, request *CreateLoadBalanceRequestType) (*CreateLoadBalanceResponseType, error) { - response := new(CreateLoadBalanceResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateLoadBalance(request *CreateLoadBalanceRequestType) (*CreateLoadBalanceResponseType, error) { - return service.CreateLoadBalanceContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneLoadBalanceContext(ctx context.Context, request *GetOneLoadBalanceRequestType) (*GetOneLoadBalanceResponseType, error) { - response := new(GetOneLoadBalanceResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneLoadBalance(request *GetOneLoadBalanceRequestType) (*GetOneLoadBalanceResponseType, error) { - return service.GetOneLoadBalanceContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetLoadBalancesContext(ctx context.Context, request *GetLoadBalancesRequestType) (*GetLoadBalancesResponseType, error) { - response := new(GetLoadBalancesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetLoadBalances(request *GetLoadBalancesRequestType) (*GetLoadBalancesResponseType, error) { - return service.GetLoadBalancesContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateLoadBalanceContext(ctx context.Context, request *UpdateLoadBalanceRequestType) (*UpdateLoadBalanceResponseType, error) { - response := new(UpdateLoadBalanceResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateLoadBalance(request *UpdateLoadBalanceRequestType) (*UpdateLoadBalanceResponseType, error) { - return service.UpdateLoadBalanceContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneLoadBalanceContext(ctx context.Context, request *DeleteOneLoadBalanceRequestType) (*DeleteOneLoadBalanceResponseType, error) { - response := new(DeleteOneLoadBalanceResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneLoadBalance(request *DeleteOneLoadBalanceRequestType) (*DeleteOneLoadBalanceResponseType, error) { - return service.DeleteOneLoadBalanceContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateLoadBalanceContext(ctx context.Context, request *ActivateLoadBalanceRequestType) (*ActivateLoadBalanceResponseType, error) { - response := new(ActivateLoadBalanceResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateLoadBalance(request *ActivateLoadBalanceRequestType) (*ActivateLoadBalanceResponseType, error) { - return service.ActivateLoadBalanceContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateLoadBalanceContext(ctx context.Context, request *DeactivateLoadBalanceRequestType) (*DeactivateLoadBalanceResponseType, error) { - response := new(DeactivateLoadBalanceResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateLoadBalance(request *DeactivateLoadBalanceRequestType) (*DeactivateLoadBalanceResponseType, error) { - return service.DeactivateLoadBalanceContext( - context.Background(), - request, - ) -} - -func (service *dynect) RecoverLoadBalanceContext(ctx context.Context, request *RecoverLoadBalanceRequestType) (*RecoverLoadBalanceResponseType, error) { - response := new(RecoverLoadBalanceResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RecoverLoadBalance(request *RecoverLoadBalanceRequestType) (*RecoverLoadBalanceResponseType, error) { - return service.RecoverLoadBalanceContext( - context.Background(), - request, - ) -} - -func (service *dynect) RecoverLoadBalanceIPContext(ctx context.Context, request *RecoverLoadBalanceIPRequestType) (*RecoverLoadBalanceIPResponseType, error) { - response := new(RecoverLoadBalanceIPResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RecoverLoadBalanceIP(request *RecoverLoadBalanceIPRequestType) (*RecoverLoadBalanceIPResponseType, error) { - return service.RecoverLoadBalanceIPContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateLoadBalancePoolEntryContext(ctx context.Context, request *CreateLoadBalancePoolEntryRequestType) (*CreateLoadBalancePoolEntryResponseType, error) { - response := new(CreateLoadBalancePoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateLoadBalancePoolEntry(request *CreateLoadBalancePoolEntryRequestType) (*CreateLoadBalancePoolEntryResponseType, error) { - return service.CreateLoadBalancePoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateLoadBalancePoolEntryContext(ctx context.Context, request *UpdateLoadBalancePoolEntryRequestType) (*UpdateLoadBalancePoolEntryResponseType, error) { - response := new(UpdateLoadBalancePoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateLoadBalancePoolEntry(request *UpdateLoadBalancePoolEntryRequestType) (*UpdateLoadBalancePoolEntryResponseType, error) { - return service.UpdateLoadBalancePoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneLoadBalancePoolEntryContext(ctx context.Context, request *GetOneLoadBalancePoolEntryRequestType) (*GetOneLoadBalancePoolEntryResponseType, error) { - response := new(GetOneLoadBalancePoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneLoadBalancePoolEntry(request *GetOneLoadBalancePoolEntryRequestType) (*GetOneLoadBalancePoolEntryResponseType, error) { - return service.GetOneLoadBalancePoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetLoadBalancePoolEntriesContext(ctx context.Context, request *GetLoadBalancePoolEntriesRequestType) (*GetLoadBalancePoolEntriesResponseType, error) { - response := new(GetLoadBalancePoolEntriesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetLoadBalancePoolEntries(request *GetLoadBalancePoolEntriesRequestType) (*GetLoadBalancePoolEntriesResponseType, error) { - return service.GetLoadBalancePoolEntriesContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneLoadBalancePoolEntryContext(ctx context.Context, request *DeleteOneLoadBalancePoolEntryRequestType) (*DeleteOneLoadBalancePoolEntryResponseType, error) { - response := new(DeleteOneLoadBalancePoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneLoadBalancePoolEntry(request *DeleteOneLoadBalancePoolEntryRequestType) (*DeleteOneLoadBalancePoolEntryResponseType, error) { - return service.DeleteOneLoadBalancePoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateGSLBContext(ctx context.Context, request *CreateGSLBRequestType) (*CreateGSLBResponseType, error) { - response := new(CreateGSLBResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateGSLB(request *CreateGSLBRequestType) (*CreateGSLBResponseType, error) { - return service.CreateGSLBContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneGSLBContext(ctx context.Context, request *GetOneGSLBRequestType) (*GetOneGSLBResponseType, error) { - response := new(GetOneGSLBResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneGSLB(request *GetOneGSLBRequestType) (*GetOneGSLBResponseType, error) { - return service.GetOneGSLBContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetGSLBsContext(ctx context.Context, request *GetGSLBsRequestType) (*GetGSLBsResponseType, error) { - response := new(GetGSLBsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetGSLBs(request *GetGSLBsRequestType) (*GetGSLBsResponseType, error) { - return service.GetGSLBsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateGSLBContext(ctx context.Context, request *UpdateGSLBRequestType) (*UpdateGSLBResponseType, error) { - response := new(UpdateGSLBResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateGSLB(request *UpdateGSLBRequestType) (*UpdateGSLBResponseType, error) { - return service.UpdateGSLBContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneGSLBContext(ctx context.Context, request *DeleteOneGSLBRequestType) (*DeleteOneGSLBResponseType, error) { - response := new(DeleteOneGSLBResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneGSLB(request *DeleteOneGSLBRequestType) (*DeleteOneGSLBResponseType, error) { - return service.DeleteOneGSLBContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateGSLBContext(ctx context.Context, request *ActivateGSLBRequestType) (*ActivateGSLBResponseType, error) { - response := new(ActivateGSLBResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateGSLB(request *ActivateGSLBRequestType) (*ActivateGSLBResponseType, error) { - return service.ActivateGSLBContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateGSLBContext(ctx context.Context, request *DeactivateGSLBRequestType) (*DeactivateGSLBResponseType, error) { - response := new(DeactivateGSLBResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateGSLB(request *DeactivateGSLBRequestType) (*DeactivateGSLBResponseType, error) { - return service.DeactivateGSLBContext( - context.Background(), - request, - ) -} - -func (service *dynect) RecoverGSLBContext(ctx context.Context, request *RecoverGSLBRequestType) (*RecoverGSLBResponseType, error) { - response := new(RecoverGSLBResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RecoverGSLB(request *RecoverGSLBRequestType) (*RecoverGSLBResponseType, error) { - return service.RecoverGSLBContext( - context.Background(), - request, - ) -} - -func (service *dynect) RecoverGSLBIPContext(ctx context.Context, request *RecoverGSLBIPRequestType) (*RecoverGSLBIPResponseType, error) { - response := new(RecoverGSLBIPResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RecoverGSLBIP(request *RecoverGSLBIPRequestType) (*RecoverGSLBIPResponseType, error) { - return service.RecoverGSLBIPContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateGSLBRegionContext(ctx context.Context, request *CreateGSLBRegionRequestType) (*CreateGSLBRegionResponseType, error) { - response := new(CreateGSLBRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateGSLBRegion(request *CreateGSLBRegionRequestType) (*CreateGSLBRegionResponseType, error) { - return service.CreateGSLBRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneGSLBRegionContext(ctx context.Context, request *GetOneGSLBRegionRequestType) (*GetOneGSLBRegionResponseType, error) { - response := new(GetOneGSLBRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneGSLBRegion(request *GetOneGSLBRegionRequestType) (*GetOneGSLBRegionResponseType, error) { - return service.GetOneGSLBRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetGSLBRegionsContext(ctx context.Context, request *GetGSLBRegionsRequestType) (*GetGSLBRegionsResponseType, error) { - response := new(GetGSLBRegionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetGSLBRegions(request *GetGSLBRegionsRequestType) (*GetGSLBRegionsResponseType, error) { - return service.GetGSLBRegionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateGSLBRegionContext(ctx context.Context, request *UpdateGSLBRegionRequestType) (*UpdateGSLBRegionResponseType, error) { - response := new(UpdateGSLBRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateGSLBRegion(request *UpdateGSLBRegionRequestType) (*UpdateGSLBRegionResponseType, error) { - return service.UpdateGSLBRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneGSLBRegionContext(ctx context.Context, request *DeleteOneGSLBRegionRequestType) (*DeleteOneGSLBRegionResponseType, error) { - response := new(DeleteOneGSLBRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneGSLBRegion(request *DeleteOneGSLBRegionRequestType) (*DeleteOneGSLBRegionResponseType, error) { - return service.DeleteOneGSLBRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateGSLBRegionPoolEntryContext(ctx context.Context, request *CreateGSLBRegionPoolEntryRequestType) (*CreateGSLBRegionPoolEntryResponseType, error) { - response := new(CreateGSLBRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateGSLBRegionPoolEntry(request *CreateGSLBRegionPoolEntryRequestType) (*CreateGSLBRegionPoolEntryResponseType, error) { - return service.CreateGSLBRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateGSLBRegionPoolEntryContext(ctx context.Context, request *UpdateGSLBRegionPoolEntryRequestType) (*UpdateGSLBRegionPoolEntryResponseType, error) { - response := new(UpdateGSLBRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateGSLBRegionPoolEntry(request *UpdateGSLBRegionPoolEntryRequestType) (*UpdateGSLBRegionPoolEntryResponseType, error) { - return service.UpdateGSLBRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneGSLBRegionPoolEntryContext(ctx context.Context, request *GetOneGSLBRegionPoolEntryRequestType) (*GetOneGSLBRegionPoolEntryResponseType, error) { - response := new(GetOneGSLBRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneGSLBRegionPoolEntry(request *GetOneGSLBRegionPoolEntryRequestType) (*GetOneGSLBRegionPoolEntryResponseType, error) { - return service.GetOneGSLBRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetGSLBRegionPoolEntriesContext(ctx context.Context, request *GetGSLBRegionPoolEntriesRequestType) (*GetGSLBRegionPoolEntriesResponseType, error) { - response := new(GetGSLBRegionPoolEntriesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetGSLBRegionPoolEntries(request *GetGSLBRegionPoolEntriesRequestType) (*GetGSLBRegionPoolEntriesResponseType, error) { - return service.GetGSLBRegionPoolEntriesContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneGSLBRegionPoolEntryContext(ctx context.Context, request *DeleteOneGSLBRegionPoolEntryRequestType) (*DeleteOneGSLBRegionPoolEntryResponseType, error) { - response := new(DeleteOneGSLBRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneGSLBRegionPoolEntry(request *DeleteOneGSLBRegionPoolEntryRequestType) (*DeleteOneGSLBRegionPoolEntryResponseType, error) { - return service.DeleteOneGSLBRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateRTTMContext(ctx context.Context, request *CreateRTTMRequestType) (*CreateRTTMResponseType, error) { - response := new(CreateRTTMResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateRTTM(request *CreateRTTMRequestType) (*CreateRTTMResponseType, error) { - return service.CreateRTTMContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneRTTMContext(ctx context.Context, request *GetOneRTTMRequestType) (*GetOneRTTMResponseType, error) { - response := new(GetOneRTTMResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneRTTM(request *GetOneRTTMRequestType) (*GetOneRTTMResponseType, error) { - return service.GetOneRTTMContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetRTTMsContext(ctx context.Context, request *GetRTTMsRequestType) (*GetRTTMsResponseType, error) { - response := new(GetRTTMsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetRTTMs(request *GetRTTMsRequestType) (*GetRTTMsResponseType, error) { - return service.GetRTTMsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateRTTMContext(ctx context.Context, request *UpdateRTTMRequestType) (*UpdateRTTMResponseType, error) { - response := new(UpdateRTTMResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateRTTM(request *UpdateRTTMRequestType) (*UpdateRTTMResponseType, error) { - return service.UpdateRTTMContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneRTTMContext(ctx context.Context, request *DeleteOneRTTMRequestType) (*DeleteOneRTTMResponseType, error) { - response := new(DeleteOneRTTMResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneRTTM(request *DeleteOneRTTMRequestType) (*DeleteOneRTTMResponseType, error) { - return service.DeleteOneRTTMContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateRTTMContext(ctx context.Context, request *ActivateRTTMRequestType) (*ActivateRTTMResponseType, error) { - response := new(ActivateRTTMResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateRTTM(request *ActivateRTTMRequestType) (*ActivateRTTMResponseType, error) { - return service.ActivateRTTMContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateRTTMContext(ctx context.Context, request *DeactivateRTTMRequestType) (*DeactivateRTTMResponseType, error) { - response := new(DeactivateRTTMResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateRTTM(request *DeactivateRTTMRequestType) (*DeactivateRTTMResponseType, error) { - return service.DeactivateRTTMContext( - context.Background(), - request, - ) -} - -func (service *dynect) RecoverRTTMContext(ctx context.Context, request *RecoverRTTMRequestType) (*RecoverRTTMResponseType, error) { - response := new(RecoverRTTMResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RecoverRTTM(request *RecoverRTTMRequestType) (*RecoverRTTMResponseType, error) { - return service.RecoverRTTMContext( - context.Background(), - request, - ) -} - -func (service *dynect) RecoverRTTMIPContext(ctx context.Context, request *RecoverRTTMIPRequestType) (*RecoverRTTMIPResponseType, error) { - response := new(RecoverRTTMIPResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RecoverRTTMIP(request *RecoverRTTMIPRequestType) (*RecoverRTTMIPResponseType, error) { - return service.RecoverRTTMIPContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetRTTMLogsContext(ctx context.Context, request *GetRTTMLogsRequestType) (*GetRTTMLogsResponseType, error) { - response := new(GetRTTMLogsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetRTTMLogs(request *GetRTTMLogsRequestType) (*GetRTTMLogsResponseType, error) { - return service.GetRTTMLogsContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetRTTMRRSetsContext(ctx context.Context, request *GetRTTMRRSetsRequestType) (*GetRTTMRRSetsResponseType, error) { - response := new(GetRTTMRRSetsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetRTTMRRSets(request *GetRTTMRRSetsRequestType) (*GetRTTMRRSetsResponseType, error) { - return service.GetRTTMRRSetsContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateRTTMRegionContext(ctx context.Context, request *CreateRTTMRegionRequestType) (*CreateRTTMRegionResponseType, error) { - response := new(CreateRTTMRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateRTTMRegion(request *CreateRTTMRegionRequestType) (*CreateRTTMRegionResponseType, error) { - return service.CreateRTTMRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneRTTMRegionContext(ctx context.Context, request *GetOneRTTMRegionRequestType) (*GetOneRTTMRegionResponseType, error) { - response := new(GetOneRTTMRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneRTTMRegion(request *GetOneRTTMRegionRequestType) (*GetOneRTTMRegionResponseType, error) { - return service.GetOneRTTMRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetRTTMRegionsContext(ctx context.Context, request *GetRTTMRegionsRequestType) (*GetRTTMRegionsResponseType, error) { - response := new(GetRTTMRegionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetRTTMRegions(request *GetRTTMRegionsRequestType) (*GetRTTMRegionsResponseType, error) { - return service.GetRTTMRegionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateRTTMRegionContext(ctx context.Context, request *UpdateRTTMRegionRequestType) (*UpdateRTTMRegionResponseType, error) { - response := new(UpdateRTTMRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateRTTMRegion(request *UpdateRTTMRegionRequestType) (*UpdateRTTMRegionResponseType, error) { - return service.UpdateRTTMRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneRTTMRegionContext(ctx context.Context, request *DeleteOneRTTMRegionRequestType) (*DeleteOneRTTMRegionResponseType, error) { - response := new(DeleteOneRTTMRegionResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneRTTMRegion(request *DeleteOneRTTMRegionRequestType) (*DeleteOneRTTMRegionResponseType, error) { - return service.DeleteOneRTTMRegionContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateRTTMRegionPoolEntryContext(ctx context.Context, request *CreateRTTMRegionPoolEntryRequestType) (*CreateRTTMRegionPoolEntryResponseType, error) { - response := new(CreateRTTMRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateRTTMRegionPoolEntry(request *CreateRTTMRegionPoolEntryRequestType) (*CreateRTTMRegionPoolEntryResponseType, error) { - return service.CreateRTTMRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateRTTMRegionPoolEntryContext(ctx context.Context, request *UpdateRTTMRegionPoolEntryRequestType) (*UpdateRTTMRegionPoolEntryResponseType, error) { - response := new(UpdateRTTMRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateRTTMRegionPoolEntry(request *UpdateRTTMRegionPoolEntryRequestType) (*UpdateRTTMRegionPoolEntryResponseType, error) { - return service.UpdateRTTMRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneRTTMRegionPoolEntryContext(ctx context.Context, request *GetOneRTTMRegionPoolEntryRequestType) (*GetOneRTTMRegionPoolEntryResponseType, error) { - response := new(GetOneRTTMRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneRTTMRegionPoolEntry(request *GetOneRTTMRegionPoolEntryRequestType) (*GetOneRTTMRegionPoolEntryResponseType, error) { - return service.GetOneRTTMRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetRTTMRegionPoolEntriesContext(ctx context.Context, request *GetRTTMRegionPoolEntriesRequestType) (*GetRTTMRegionPoolEntriesResponseType, error) { - response := new(GetRTTMRegionPoolEntriesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetRTTMRegionPoolEntries(request *GetRTTMRegionPoolEntriesRequestType) (*GetRTTMRegionPoolEntriesResponseType, error) { - return service.GetRTTMRegionPoolEntriesContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneRTTMRegionPoolEntryContext(ctx context.Context, request *DeleteOneRTTMRegionPoolEntryRequestType) (*DeleteOneRTTMRegionPoolEntryResponseType, error) { - response := new(DeleteOneRTTMRegionPoolEntryResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneRTTMRegionPoolEntry(request *DeleteOneRTTMRegionPoolEntryRequestType) (*DeleteOneRTTMRegionPoolEntryResponseType, error) { - return service.DeleteOneRTTMRegionPoolEntryContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateHTTPRedirectContext(ctx context.Context, request *CreateHTTPRedirectRequestType) (*CreateHTTPRedirectResponseType, error) { - response := new(CreateHTTPRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateHTTPRedirect(request *CreateHTTPRedirectRequestType) (*CreateHTTPRedirectResponseType, error) { - return service.CreateHTTPRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneHTTPRedirectContext(ctx context.Context, request *GetOneHTTPRedirectRequestType) (*GetOneHTTPRedirectResponseType, error) { - response := new(GetOneHTTPRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneHTTPRedirect(request *GetOneHTTPRedirectRequestType) (*GetOneHTTPRedirectResponseType, error) { - return service.GetOneHTTPRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetHTTPRedirectsContext(ctx context.Context, request *GetHTTPRedirectsRequestType) (*GetHTTPRedirectsResponseType, error) { - response := new(GetHTTPRedirectsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetHTTPRedirects(request *GetHTTPRedirectsRequestType) (*GetHTTPRedirectsResponseType, error) { - return service.GetHTTPRedirectsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateHTTPRedirectContext(ctx context.Context, request *UpdateHTTPRedirectRequestType) (*UpdateHTTPRedirectResponseType, error) { - response := new(UpdateHTTPRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateHTTPRedirect(request *UpdateHTTPRedirectRequestType) (*UpdateHTTPRedirectResponseType, error) { - return service.UpdateHTTPRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneHTTPRedirectContext(ctx context.Context, request *DeleteOneHTTPRedirectRequestType) (*DeleteOneHTTPRedirectResponseType, error) { - response := new(DeleteOneHTTPRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneHTTPRedirect(request *DeleteOneHTTPRedirectRequestType) (*DeleteOneHTTPRedirectResponseType, error) { - return service.DeleteOneHTTPRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateAdvRedirectRuleContext(ctx context.Context, request *CreateAdvRedirectRuleRequestType) (*CreateAdvRedirectRuleResponseType, error) { - response := new(CreateAdvRedirectRuleResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateAdvRedirectRule(request *CreateAdvRedirectRuleRequestType) (*CreateAdvRedirectRuleResponseType, error) { - return service.CreateAdvRedirectRuleContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateAdvRedirectRuleContext(ctx context.Context, request *UpdateAdvRedirectRuleRequestType) (*UpdateAdvRedirectRuleResponseType, error) { - response := new(UpdateAdvRedirectRuleResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateAdvRedirectRule(request *UpdateAdvRedirectRuleRequestType) (*UpdateAdvRedirectRuleResponseType, error) { - return service.UpdateAdvRedirectRuleContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneAdvRedirectRuleContext(ctx context.Context, request *GetOneAdvRedirectRuleRequestType) (*GetOneAdvRedirectRuleResponseType, error) { - response := new(GetOneAdvRedirectRuleResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneAdvRedirectRule(request *GetOneAdvRedirectRuleRequestType) (*GetOneAdvRedirectRuleResponseType, error) { - return service.GetOneAdvRedirectRuleContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetAdvRedirectRulesContext(ctx context.Context, request *GetAdvRedirectRulesRequestType) (*GetAdvRedirectRulesResponseType, error) { - response := new(GetAdvRedirectRulesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetAdvRedirectRules(request *GetAdvRedirectRulesRequestType) (*GetAdvRedirectRulesResponseType, error) { - return service.GetAdvRedirectRulesContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneAdvRedirectRuleContext(ctx context.Context, request *DeleteOneAdvRedirectRuleRequestType) (*DeleteOneAdvRedirectRuleResponseType, error) { - response := new(DeleteOneAdvRedirectRuleResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneAdvRedirectRule(request *DeleteOneAdvRedirectRuleRequestType) (*DeleteOneAdvRedirectRuleResponseType, error) { - return service.DeleteOneAdvRedirectRuleContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateAdvRedirectContext(ctx context.Context, request *CreateAdvRedirectRequestType) (*CreateAdvRedirectResponseType, error) { - response := new(CreateAdvRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateAdvRedirect(request *CreateAdvRedirectRequestType) (*CreateAdvRedirectResponseType, error) { - return service.CreateAdvRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneAdvRedirectContext(ctx context.Context, request *GetOneAdvRedirectRequestType) (*GetOneAdvRedirectResponseType, error) { - response := new(GetOneAdvRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneAdvRedirect(request *GetOneAdvRedirectRequestType) (*GetOneAdvRedirectResponseType, error) { - return service.GetOneAdvRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetAdvRedirectsContext(ctx context.Context, request *GetAdvRedirectsRequestType) (*GetAdvRedirectsResponseType, error) { - response := new(GetAdvRedirectsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetAdvRedirects(request *GetAdvRedirectsRequestType) (*GetAdvRedirectsResponseType, error) { - return service.GetAdvRedirectsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateAdvRedirectContext(ctx context.Context, request *UpdateAdvRedirectRequestType) (*UpdateAdvRedirectResponseType, error) { - response := new(UpdateAdvRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateAdvRedirect(request *UpdateAdvRedirectRequestType) (*UpdateAdvRedirectResponseType, error) { - return service.UpdateAdvRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneAdvRedirectContext(ctx context.Context, request *DeleteOneAdvRedirectRequestType) (*DeleteOneAdvRedirectResponseType, error) { - response := new(DeleteOneAdvRedirectResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneAdvRedirect(request *DeleteOneAdvRedirectRequestType) (*DeleteOneAdvRedirectResponseType, error) { - return service.DeleteOneAdvRedirectContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetNodeListContext(ctx context.Context, request *GetNodeListRequestType) (*GetNodeListResponseType, error) { - response := new(GetNodeListResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetNodeList(request *GetNodeListRequestType) (*GetNodeListResponseType, error) { - return service.GetNodeListContext( - context.Background(), - request, - ) -} - -func (service *dynect) PublishZoneContext(ctx context.Context, request *PublishZoneRequestType) (*PublishZoneResponseType, error) { - response := new(PublishZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) PublishZone(request *PublishZoneRequestType) (*PublishZoneResponseType, error) { - return service.PublishZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) PruneZoneContext(ctx context.Context, request *PruneZoneRequestType) (*PruneZoneResponseType, error) { - response := new(PruneZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) PruneZone(request *PruneZoneRequestType) (*PruneZoneResponseType, error) { - return service.PruneZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) FreezeZoneContext(ctx context.Context, request *FreezeZoneRequestType) (*FreezeZoneResponseType, error) { - response := new(FreezeZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) FreezeZone(request *FreezeZoneRequestType) (*FreezeZoneResponseType, error) { - return service.FreezeZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) ThawZoneContext(ctx context.Context, request *ThawZoneRequestType) (*ThawZoneResponseType, error) { - response := new(ThawZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ThawZone(request *ThawZoneRequestType) (*ThawZoneResponseType, error) { - return service.ThawZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) RestoreZoneContext(ctx context.Context, request *RestoreZoneRequestType) (*RestoreZoneResponseType, error) { - response := new(RestoreZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) RestoreZone(request *RestoreZoneRequestType) (*RestoreZoneResponseType, error) { - return service.RestoreZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) BlockZoneContext(ctx context.Context, request *BlockZoneRequestType) (*BlockZoneResponseType, error) { - response := new(BlockZoneResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) BlockZone(request *BlockZoneRequestType) (*BlockZoneResponseType, error) { - return service.BlockZoneContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteZoneChangesetContext(ctx context.Context, request *DeleteZoneChangesetRequestType) (*DeleteZoneChangesetResponseType, error) { - response := new(DeleteZoneChangesetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteZoneChangeset(request *DeleteZoneChangesetRequestType) (*DeleteZoneChangesetResponseType, error) { - return service.DeleteZoneChangesetContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetZoneChangesetContext(ctx context.Context, request *GetZoneChangesetRequestType) (*GetZoneChangesetResponseType, error) { - response := new(GetZoneChangesetResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetZoneChangeset(request *GetZoneChangesetRequestType) (*GetZoneChangesetResponseType, error) { - return service.GetZoneChangesetContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetZoneNotesContext(ctx context.Context, request *GetZoneNotesRequestType) (*GetZoneNotesResponseType, error) { - response := new(GetZoneNotesResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetZoneNotes(request *GetZoneNotesRequestType) (*GetZoneNotesResponseType, error) { - return service.GetZoneNotesContext( - context.Background(), - request, - ) -} - -func (service *dynect) UploadZoneFileContext(ctx context.Context, request *UploadZoneFileRequestType) (*UploadZoneFileResponseType, error) { - response := new(UploadZoneFileResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UploadZoneFile(request *UploadZoneFileRequestType) (*UploadZoneFileResponseType, error) { - return service.UploadZoneFileContext( - context.Background(), - request, - ) -} - -func (service *dynect) TransferZoneInContext(ctx context.Context, request *TransferZoneInRequestType) (*TransferZoneInResponseType, error) { - response := new(TransferZoneInResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) TransferZoneIn(request *TransferZoneInRequestType) (*TransferZoneInResponseType, error) { - return service.TransferZoneInContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetTransferStatusContext(ctx context.Context, request *GetTransferStatusRequestType) (*GetTransferStatusResponseType, error) { - response := new(GetTransferStatusResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetTransferStatus(request *GetTransferStatusRequestType) (*GetTransferStatusResponseType, error) { - return service.GetTransferStatusContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetZoneConfigOptionsContext(ctx context.Context, request *GetZoneConfigOptionsRequestType) (*GetZoneConfigOptionsResponseType, error) { - response := new(GetZoneConfigOptionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetZoneConfigOptions(request *GetZoneConfigOptionsRequestType) (*GetZoneConfigOptionsResponseType, error) { - return service.GetZoneConfigOptionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) SetZoneConfigOptionsContext(ctx context.Context, request *SetZoneConfigOptionsRequestType) (*SetZoneConfigOptionsResponseType, error) { - response := new(SetZoneConfigOptionsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) SetZoneConfigOptions(request *SetZoneConfigOptionsRequestType) (*SetZoneConfigOptionsResponseType, error) { - return service.SetZoneConfigOptionsContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateIPTrackContext(ctx context.Context, request *CreateIPTrackRequestType) (*CreateIPTrackResponseType, error) { - response := new(CreateIPTrackResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateIPTrack(request *CreateIPTrackRequestType) (*CreateIPTrackResponseType, error) { - return service.CreateIPTrackContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneIPTrackContext(ctx context.Context, request *GetOneIPTrackRequestType) (*GetOneIPTrackResponseType, error) { - response := new(GetOneIPTrackResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneIPTrack(request *GetOneIPTrackRequestType) (*GetOneIPTrackResponseType, error) { - return service.GetOneIPTrackContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetIPTracksContext(ctx context.Context, request *GetIPTracksRequestType) (*GetIPTracksResponseType, error) { - response := new(GetIPTracksResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetIPTracks(request *GetIPTracksRequestType) (*GetIPTracksResponseType, error) { - return service.GetIPTracksContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateIPTrackContext(ctx context.Context, request *UpdateIPTrackRequestType) (*UpdateIPTrackResponseType, error) { - response := new(UpdateIPTrackResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateIPTrack(request *UpdateIPTrackRequestType) (*UpdateIPTrackResponseType, error) { - return service.UpdateIPTrackContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneIPTrackContext(ctx context.Context, request *DeleteOneIPTrackRequestType) (*DeleteOneIPTrackResponseType, error) { - response := new(DeleteOneIPTrackResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneIPTrack(request *DeleteOneIPTrackRequestType) (*DeleteOneIPTrackResponseType, error) { - return service.DeleteOneIPTrackContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateIPTrackContext(ctx context.Context, request *ActivateIPTrackRequestType) (*ActivateIPTrackResponseType, error) { - response := new(ActivateIPTrackResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateIPTrack(request *ActivateIPTrackRequestType) (*ActivateIPTrackResponseType, error) { - return service.ActivateIPTrackContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateIPTrackContext(ctx context.Context, request *DeactivateIPTrackRequestType) (*DeactivateIPTrackResponseType, error) { - response := new(DeactivateIPTrackResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateIPTrack(request *DeactivateIPTrackRequestType) (*DeactivateIPTrackResponseType, error) { - return service.DeactivateIPTrackContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateDNSSECContext(ctx context.Context, request *CreateDNSSECRequestType) (*CreateDNSSECResponseType, error) { - response := new(CreateDNSSECResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateDNSSEC(request *CreateDNSSECRequestType) (*CreateDNSSECResponseType, error) { - return service.CreateDNSSECContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneDNSSECContext(ctx context.Context, request *GetOneDNSSECRequestType) (*GetOneDNSSECResponseType, error) { - response := new(GetOneDNSSECResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneDNSSEC(request *GetOneDNSSECRequestType) (*GetOneDNSSECResponseType, error) { - return service.GetOneDNSSECContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDNSSECsContext(ctx context.Context, request *GetDNSSECsRequestType) (*GetDNSSECsResponseType, error) { - response := new(GetDNSSECsResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDNSSECs(request *GetDNSSECsRequestType) (*GetDNSSECsResponseType, error) { - return service.GetDNSSECsContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateDNSSECContext(ctx context.Context, request *UpdateDNSSECRequestType) (*UpdateDNSSECResponseType, error) { - response := new(UpdateDNSSECResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateDNSSEC(request *UpdateDNSSECRequestType) (*UpdateDNSSECResponseType, error) { - return service.UpdateDNSSECContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneDNSSECContext(ctx context.Context, request *DeleteOneDNSSECRequestType) (*DeleteOneDNSSECResponseType, error) { - response := new(DeleteOneDNSSECResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneDNSSEC(request *DeleteOneDNSSECRequestType) (*DeleteOneDNSSECResponseType, error) { - return service.DeleteOneDNSSECContext( - context.Background(), - request, - ) -} - -func (service *dynect) ActivateDNSSECContext(ctx context.Context, request *ActivateDNSSECRequestType) (*ActivateDNSSECResponseType, error) { - response := new(ActivateDNSSECResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) ActivateDNSSEC(request *ActivateDNSSECRequestType) (*ActivateDNSSECResponseType, error) { - return service.ActivateDNSSECContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeactivateDNSSECContext(ctx context.Context, request *DeactivateDNSSECRequestType) (*DeactivateDNSSECResponseType, error) { - response := new(DeactivateDNSSECResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeactivateDNSSEC(request *DeactivateDNSSECRequestType) (*DeactivateDNSSECResponseType, error) { - return service.DeactivateDNSSECContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetDNSSECTimelineContext(ctx context.Context, request *GetDNSSECTimelineRequestType) (*GetDNSSECTimelineResponseType, error) { - response := new(GetDNSSECTimelineResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetDNSSECTimeline(request *GetDNSSECTimelineRequestType) (*GetDNSSECTimelineResponseType, error) { - return service.GetDNSSECTimelineContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetTasksContext(ctx context.Context, request *GetTasksRequestType) (*GetTasksResponseType, error) { - response := new(GetTasksResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetTasks(request *GetTasksRequestType) (*GetTasksResponseType, error) { - return service.GetTasksContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneTaskContext(ctx context.Context, request *GetOneTaskRequestType) (*GetOneTaskResponseType, error) { - response := new(GetOneTaskResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneTask(request *GetOneTaskRequestType) (*GetOneTaskResponseType, error) { - return service.GetOneTaskContext( - context.Background(), - request, - ) -} - -func (service *dynect) CancelTaskContext(ctx context.Context, request *CancelTaskRequestType) (*CancelTaskResponseType, error) { - response := new(CancelTaskResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CancelTask(request *CancelTaskRequestType) (*CancelTaskResponseType, error) { - return service.CancelTaskContext( - context.Background(), - request, - ) -} - -func (service *dynect) CreateExtNameserverContext(ctx context.Context, request *CreateExtNameserverRequestType) (*CreateExtNameserverResponseType, error) { - response := new(CreateExtNameserverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) CreateExtNameserver(request *CreateExtNameserverRequestType) (*CreateExtNameserverResponseType, error) { - return service.CreateExtNameserverContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetOneExtNameserverContext(ctx context.Context, request *GetOneExtNameserverRequestType) (*GetOneExtNameserverResponseType, error) { - response := new(GetOneExtNameserverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetOneExtNameserver(request *GetOneExtNameserverRequestType) (*GetOneExtNameserverResponseType, error) { - return service.GetOneExtNameserverContext( - context.Background(), - request, - ) -} - -func (service *dynect) GetExtNameserversContext(ctx context.Context, request *GetExtNameserversRequestType) (*GetExtNameserversResponseType, error) { - response := new(GetExtNameserversResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) GetExtNameservers(request *GetExtNameserversRequestType) (*GetExtNameserversResponseType, error) { - return service.GetExtNameserversContext( - context.Background(), - request, - ) -} - -func (service *dynect) UpdateExtNameserverContext(ctx context.Context, request *UpdateExtNameserverRequestType) (*UpdateExtNameserverResponseType, error) { - response := new(UpdateExtNameserverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) UpdateExtNameserver(request *UpdateExtNameserverRequestType) (*UpdateExtNameserverResponseType, error) { - return service.UpdateExtNameserverContext( - context.Background(), - request, - ) -} - -func (service *dynect) DeleteOneExtNameserverContext(ctx context.Context, request *DeleteOneExtNameserverRequestType) (*DeleteOneExtNameserverResponseType, error) { - response := new(DeleteOneExtNameserverResponseType) - err := service.client.CallContext(ctx, "https://api2.dynect.net/SOAP/", request, response) - if err != nil { - return nil, err - } - - return response, nil -} - -func (service *dynect) DeleteOneExtNameserver(request *DeleteOneExtNameserverRequestType) (*DeleteOneExtNameserverResponseType, error) { - return service.DeleteOneExtNameserverContext( - context.Background(), - request, - ) -} diff --git a/provider/rcode0/rcode0.go b/provider/rcode0/rcode0.go deleted file mode 100644 index 03edc73c3..000000000 --- a/provider/rcode0/rcode0.go +++ /dev/null @@ -1,313 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -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 rcode0 - -import ( - "context" - "fmt" - "net/url" - "os" - "strings" - - rc0 "github.com/nic-at/rc0go" - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" -) - -// RcodeZeroProvider implements the DNS provider for RcodeZero Anycast DNS. -type RcodeZeroProvider struct { - provider.BaseProvider - Client *rc0.Client - - DomainFilter endpoint.DomainFilter - DryRun bool - TXTEncrypt bool - Key []byte -} - -// NewRcodeZeroProvider creates a new RcodeZero Anycast DNS provider. -// -// Returns the provider or an error if a provider could not be created. -func NewRcodeZeroProvider(domainFilter endpoint.DomainFilter, dryRun bool, txtEnc bool) (*RcodeZeroProvider, error) { - client, err := rc0.NewClient(os.Getenv("RC0_API_KEY")) - if err != nil { - return nil, err - } - - value := os.Getenv("RC0_BASE_URL") - if len(value) != 0 { - client.BaseURL, err = url.Parse(os.Getenv("RC0_BASE_URL")) - } - - if err != nil { - return nil, fmt.Errorf("failed to initialize rcodezero provider: %v", err) - } - - provider := &RcodeZeroProvider{ - Client: client, - DomainFilter: domainFilter, - DryRun: dryRun, - TXTEncrypt: txtEnc, - } - - if txtEnc { - provider.Key = []byte(os.Getenv("RC0_ENC_KEY")) - } - - return provider, nil -} - -// Zones returns filtered zones if filter is set -func (p *RcodeZeroProvider) Zones() ([]*rc0.Zone, error) { - var result []*rc0.Zone - - zones, err := p.fetchZones() - if err != nil { - return nil, err - } - - for _, zone := range zones { - if p.DomainFilter.Match(zone.Domain) { - result = append(result, zone) - } - } - - return result, nil -} - -// Records returns resource records -// -// Decrypts TXT records if TXT-Encrypt flag is set and key is provided -func (p *RcodeZeroProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { - zones, err := p.Zones() - if err != nil { - return nil, err - } - - var endpoints []*endpoint.Endpoint - - for _, zone := range zones { - rrset, err := p.fetchRecords(zone.Domain) - if err != nil { - return nil, err - } - - for _, r := range rrset { - if provider.SupportedRecordType(r.Type) { - if p.TXTEncrypt && (p.Key != nil) && strings.EqualFold(r.Type, "TXT") { - p.Client.RRSet.DecryptTXT(p.Key, r) - } - if len(r.Records) > 1 { - for _, _r := range r.Records { - if !_r.Disabled { - endpoints = append(endpoints, endpoint.NewEndpointWithTTL(r.Name, r.Type, endpoint.TTL(r.TTL), _r.Content)) - } - } - } else if !r.Records[0].Disabled { - endpoints = append(endpoints, endpoint.NewEndpointWithTTL(r.Name, r.Type, endpoint.TTL(r.TTL), r.Records[0].Content)) - } - } - } - } - - return endpoints, nil -} - -// ApplyChanges applies a given set of changes in a given zone. -func (p *RcodeZeroProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { - combinedChanges := make([]*rc0.RRSetChange, 0, len(changes.Create)+len(changes.UpdateNew)+len(changes.Delete)) - - combinedChanges = append(combinedChanges, p.NewRcodezeroChanges(rc0.ChangeTypeADD, changes.Create)...) - combinedChanges = append(combinedChanges, p.NewRcodezeroChanges(rc0.ChangeTypeUPDATE, changes.UpdateNew)...) - combinedChanges = append(combinedChanges, p.NewRcodezeroChanges(rc0.ChangeTypeDELETE, changes.Delete)...) - - return p.submitChanges(combinedChanges) -} - -// Helper function -func rcodezeroChangesByZone(zones []*rc0.Zone, changeSet []*rc0.RRSetChange) map[string][]*rc0.RRSetChange { - changes := make(map[string][]*rc0.RRSetChange) - zoneNameIDMapper := provider.ZoneIDName{} - for _, z := range zones { - zoneNameIDMapper.Add(z.Domain, z.Domain) - changes[z.Domain] = []*rc0.RRSetChange{} - } - - for _, c := range changeSet { - zone, _ := zoneNameIDMapper.FindZone(c.Name) - if zone == "" { - log.Debugf("Skipping record %s because no hosted zone matching record DNS Name was detected", c.Name) - continue - } - changes[zone] = append(changes[zone], c) - } - - return changes -} - -// Helper function -func (p *RcodeZeroProvider) fetchRecords(zoneName string) ([]*rc0.RRType, error) { - var allRecords []*rc0.RRType - - listOptions := rc0.NewListOptions() - - for { - records, page, err := p.Client.RRSet.List(zoneName, listOptions) - if err != nil { - return nil, err - } - - allRecords = append(allRecords, records...) - - if page == nil || (page.CurrentPage == page.LastPage) { - break - } - - listOptions.SetPageNumber(page.CurrentPage + 1) - } - - return allRecords, nil -} - -// Helper function -func (p *RcodeZeroProvider) fetchZones() ([]*rc0.Zone, error) { - var allZones []*rc0.Zone - - listOptions := rc0.NewListOptions() - - for { - zones, page, err := p.Client.Zones.List(listOptions) - if err != nil { - return nil, err - } - allZones = append(allZones, zones...) - - if page == nil || page.IsLastPage() { - break - } - - listOptions.SetPageNumber(page.CurrentPage + 1) - } - - return allZones, nil -} - -// Helper function to submit changes. -// -// Changes are submitted by change type. -func (p *RcodeZeroProvider) submitChanges(changes []*rc0.RRSetChange) error { - if len(changes) == 0 { - return nil - } - - zones, err := p.Zones() - if err != nil { - return err - } - - // separate into per-zone change sets to be passed to the API. - changesByZone := rcodezeroChangesByZone(zones, changes) - for zoneName, changes := range changesByZone { - for _, change := range changes { - logFields := log.Fields{ - "record": change.Name, - "content": change.Records[0].Content, - "type": change.Type, - "action": change.ChangeType, - "zone": zoneName, - } - - log.WithFields(logFields).Info("Changing record.") - - if p.DryRun { - continue - } - - // to avoid accidentally adding extra dot if already present - change.Name = strings.TrimSuffix(change.Name, ".") + "." - - switch change.ChangeType { - case rc0.ChangeTypeADD: - sr, err := p.Client.RRSet.Create(zoneName, []*rc0.RRSetChange{change}) - if err != nil { - return err - } - - if sr.HasError() { - return fmt.Errorf("adding new RR resulted in an error: %v", sr.Message) - } - - case rc0.ChangeTypeUPDATE: - sr, err := p.Client.RRSet.Edit(zoneName, []*rc0.RRSetChange{change}) - if err != nil { - return err - } - - if sr.HasError() { - return fmt.Errorf("updating existing RR resulted in an error: %v", sr.Message) - } - - case rc0.ChangeTypeDELETE: - sr, err := p.Client.RRSet.Delete(zoneName, []*rc0.RRSetChange{change}) - if err != nil { - return err - } - - if sr.HasError() { - return fmt.Errorf("deleting existing RR resulted in an error: %v", sr.Message) - } - - default: - return fmt.Errorf("unsupported changeType submitted: %v", change.ChangeType) - } - } - } - return nil -} - -// NewRcodezeroChanges returns a RcodeZero specific array with rrset change objects. -func (p *RcodeZeroProvider) NewRcodezeroChanges(action string, endpoints []*endpoint.Endpoint) []*rc0.RRSetChange { - changes := make([]*rc0.RRSetChange, 0, len(endpoints)) - - for _, _endpoint := range endpoints { - changes = append(changes, p.NewRcodezeroChange(action, _endpoint)) - } - - return changes -} - -// NewRcodezeroChange returns a RcodeZero specific rrset change object. -func (p *RcodeZeroProvider) NewRcodezeroChange(action string, endpoint *endpoint.Endpoint) *rc0.RRSetChange { - change := &rc0.RRSetChange{ - Type: endpoint.RecordType, - ChangeType: action, - Name: endpoint.DNSName, - Records: []*rc0.Record{{ - Disabled: false, - Content: endpoint.Targets[0], - }}, - } - - if p.TXTEncrypt && (p.Key != nil) && strings.EqualFold(endpoint.RecordType, "TXT") { - p.Client.RRSet.EncryptTXT(p.Key, change) - } - - return change -} diff --git a/provider/rcode0/rcode0_test.go b/provider/rcode0/rcode0_test.go deleted file mode 100644 index 2887c8980..000000000 --- a/provider/rcode0/rcode0_test.go +++ /dev/null @@ -1,394 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -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 rcode0 - -import ( - "context" - "fmt" - "os" - "testing" - - rc0 "github.com/nic-at/rc0go" - "github.com/stretchr/testify/require" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" -) - -const ( - testZoneOne = "testzone1.at" - testZoneTwo = "testzone2.at" - - rrsetChangesUnsupportedChangeType = 0 -) - -type mockRcodeZeroClient rc0.Client - -type mockZoneManagementService struct { - TestNilZonesReturned bool - TestErrorReturned bool -} - -type mockRRSetService struct { - TestErrorReturned bool -} - -func (m *mockZoneManagementService) resetTestConditions() { - m.TestNilZonesReturned = false - m.TestErrorReturned = false -} - -func TestRcodeZeroProvider_Records(t *testing.T) { - mockRRSetService := &mockRRSetService{} - mockZoneManagementService := &mockZoneManagementService{} - - provider := &RcodeZeroProvider{ - Client: (*rc0.Client)(&mockRcodeZeroClient{ - Zones: mockZoneManagementService, - RRSet: mockRRSetService, - }), - } - - ctx := context.Background() - - endpoints, err := provider.Records(ctx) // should return 6 rrs - if err != nil { - t.Errorf("should not fail, %s", err) - } - require.Equal(t, 10, len(endpoints)) - - mockRRSetService.TestErrorReturned = true - - _, err = provider.Records(ctx) - if err == nil { - t.Errorf("expected to fail, %s", err) - } -} - -func TestRcodeZeroProvider_ApplyChanges(t *testing.T) { - mockRRSetService := &mockRRSetService{} - mockZoneManagementService := &mockZoneManagementService{} - - provider := &RcodeZeroProvider{ - Client: (*rc0.Client)(&mockRcodeZeroClient{ - Zones: mockZoneManagementService, - RRSet: mockRRSetService, - }), - DomainFilter: endpoint.NewDomainFilter([]string{testZoneOne}), - } - - changes := mockChanges() - - err := provider.ApplyChanges(context.Background(), changes) - if err != nil { - t.Errorf("should not fail, %s", err) - } -} - -func TestRcodeZeroProvider_NewRcodezeroChanges(t *testing.T) { - provider := &RcodeZeroProvider{} - - changes := mockChanges() - - createChanges := provider.NewRcodezeroChanges(testZoneOne, changes.Create) - require.Equal(t, 4, len(createChanges)) - - deleteChanges := provider.NewRcodezeroChanges(testZoneOne, changes.Delete) - require.Equal(t, 1, len(deleteChanges)) - - updateOldChanges := provider.NewRcodezeroChanges(testZoneOne, changes.UpdateOld) - require.Equal(t, 1, len(updateOldChanges)) - - updateNewChanges := provider.NewRcodezeroChanges(testZoneOne, changes.UpdateNew) - require.Equal(t, 1, len(updateNewChanges)) -} - -func TestRcodeZeroProvider_NewRcodezeroChange(t *testing.T) { - _endpoint := &endpoint.Endpoint{ - RecordType: "A", - DNSName: "app." + testZoneOne, - RecordTTL: 300, - Targets: endpoint.Targets{"target"}, - } - - provider := &RcodeZeroProvider{} - - rrsetChange := provider.NewRcodezeroChange(testZoneOne, _endpoint) - - require.Equal(t, _endpoint.RecordType, rrsetChange.Type) - require.Equal(t, _endpoint.DNSName, rrsetChange.Name) - require.Equal(t, _endpoint.Targets[0], rrsetChange.Records[0].Content) - // require.Equal(t, endpoint.RecordTTL, rrsetChange.TTL) -} - -func Test_submitChanges(t *testing.T) { - mockRRSetService := &mockRRSetService{} - mockZoneManagementService := &mockZoneManagementService{} - - provider := &RcodeZeroProvider{ - Client: (*rc0.Client)(&mockRcodeZeroClient{ - Zones: mockZoneManagementService, - RRSet: mockRRSetService, - }), - DomainFilter: endpoint.NewDomainFilter([]string{testZoneOne}), - } - - changes := mockRRSetChanges(rrsetChangesUnsupportedChangeType) - - err := provider.submitChanges(changes) - - if err == nil { - t.Errorf("expected to fail, %s", err) - } -} - -func mockRRSetChanges(condition int) []*rc0.RRSetChange { - switch condition { - case rrsetChangesUnsupportedChangeType: - return []*rc0.RRSetChange{ - { - Name: testZoneOne, - Type: "A", - ChangeType: "UNSUPPORTED", - Records: []*rc0.Record{{Content: "fail"}}, - }, - } - default: - return nil - } -} - -func mockChanges() *plan.Changes { - changes := &plan.Changes{} - - changes.Create = []*endpoint.Endpoint{ - {DNSName: "new.ext-dns-test." + testZoneOne, Targets: endpoint.Targets{"target"}, RecordType: "A"}, - {DNSName: "new.ext-dns-test-with-ttl." + testZoneOne, Targets: endpoint.Targets{"target"}, RecordType: "A", RecordTTL: 100}, - {DNSName: "new.ext-dns-test.unexpected.com", Targets: endpoint.Targets{"target"}, RecordType: "AAAA"}, - {DNSName: testZoneOne, Targets: endpoint.Targets{"target"}, RecordType: "CNAME"}, - } - changes.Delete = []*endpoint.Endpoint{{DNSName: "foobar.ext-dns-test." + testZoneOne, Targets: endpoint.Targets{"target"}}} - changes.UpdateOld = []*endpoint.Endpoint{{DNSName: "foobar.ext-dns-test." + testZoneOne, Targets: endpoint.Targets{"target-old"}}} - changes.UpdateNew = []*endpoint.Endpoint{{DNSName: "foobar.ext-dns-test." + testZoneOne, Targets: endpoint.Targets{"target-new"}, RecordType: "CNAME", RecordTTL: 100}} - - return changes -} - -func TestRcodeZeroProvider_Zones(t *testing.T) { - mockRRSetService := &mockRRSetService{} - mockZoneManagementService := &mockZoneManagementService{} - - provider := &RcodeZeroProvider{ - Client: (*rc0.Client)(&mockRcodeZeroClient{ - Zones: mockZoneManagementService, - RRSet: mockRRSetService, - }), - } - - mockZoneManagementService.TestNilZonesReturned = true - - zones, err := provider.Zones() - if err != nil { - t.Fatal(err) - } - require.Equal(t, 0, len(zones)) - mockZoneManagementService.resetTestConditions() - - mockZoneManagementService.TestErrorReturned = true - - _, err = provider.Zones() - if err == nil { - t.Errorf("expected to fail, %s", err) - } -} - -func TestNewRcodeZeroProvider(t *testing.T) { - _ = os.Setenv("RC0_API_KEY", "123") - p, err := NewRcodeZeroProvider(endpoint.NewDomainFilter([]string{"ext-dns-test." + testZoneOne + "."}), true, true) - if err != nil { - t.Errorf("should not fail, %s", err) - } - - require.Equal(t, true, p.DryRun) - require.Equal(t, true, p.TXTEncrypt) - require.Equal(t, true, p.DomainFilter.IsConfigured()) - require.Equal(t, false, p.DomainFilter.Match("ext-dns-test."+testZoneTwo+".")) // filter is set, so it should match only provided domains - - p, err = NewRcodeZeroProvider(endpoint.DomainFilter{}, false, false) - - if err != nil { - t.Errorf("should not fail, %s", err) - } - - require.Equal(t, false, p.DryRun) - require.Equal(t, false, p.DomainFilter.IsConfigured()) - require.Equal(t, true, p.DomainFilter.Match("ext-dns-test."+testZoneOne+".")) // filter is not set, so it should match any - - _ = os.Unsetenv("RC0_API_KEY") - _, err = NewRcodeZeroProvider(endpoint.DomainFilter{}, false, false) - - if err == nil { - t.Errorf("expected to fail") - } -} - -/* mocking mockRRSetServiceInterface */ - -func (m *mockRRSetService) List(zone string, options *rc0.ListOptions) ([]*rc0.RRType, *rc0.Page, error) { - if m.TestErrorReturned { - return nil, nil, fmt.Errorf("operation RRSet.List failed") - } - - return mockRRSet(zone), nil, nil -} - -func mockRRSet(zone string) []*rc0.RRType { - return []*rc0.RRType{ - { - Name: "app." + zone + ".", - Type: "TXT", - TTL: 300, - Records: []*rc0.Record{ - { - Content: "\"heritage=external-dns,external-dns/owner=default,external-dns/resource=ingress/default/app\"", - Disabled: false, - }, - }, - }, - { - Name: "app." + zone + ".", - Type: "A", - TTL: 300, - Records: []*rc0.Record{ - { - Content: "127.0.0.1", - Disabled: false, - }, - }, - }, - { - Name: "www." + zone + ".", - Type: "A", - TTL: 300, - Records: []*rc0.Record{ - { - Content: "127.0.0.1", - Disabled: false, - }, - }, - }, - { - Name: zone + ".", - Type: "SOA", - TTL: 3600, - Records: []*rc0.Record{ - { - Content: "sec1.rcode0.net. rcodezero-soa.ipcom.at. 2019011616 10800 3600 604800 3600", - Disabled: false, - }, - }, - }, - { - Name: zone + ".", - Type: "NS", - TTL: 3600, - Records: []*rc0.Record{ - { - Content: "sec2.rcode0.net.", - Disabled: false, - }, - { - Content: "sec1.rcode0.net.", - Disabled: false, - }, - }, - }, - } -} - -func (m *mockRRSetService) Create(zone string, rrsetCreate []*rc0.RRSetChange) (*rc0.StatusResponse, error) { - return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil -} - -func (m *mockRRSetService) Edit(zone string, rrsetEdit []*rc0.RRSetChange) (*rc0.StatusResponse, error) { - return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil -} - -func (m *mockRRSetService) Delete(zone string, rrsetDelete []*rc0.RRSetChange) (*rc0.StatusResponse, error) { - return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil -} - -func (m *mockRRSetService) SubmitChangeSet(zone string, changeSet []*rc0.RRSetChange) (*rc0.StatusResponse, error) { - return &rc0.StatusResponse{Status: "ok", Message: "pass"}, nil -} - -func (m *mockRRSetService) EncryptTXT(key []byte, rrType *rc0.RRSetChange) {} - -func (m *mockRRSetService) DecryptTXT(key []byte, rrType *rc0.RRType) {} - -/* mocking ZoneManagementServiceInterface */ - -func (m *mockZoneManagementService) List(options *rc0.ListOptions) ([]*rc0.Zone, *rc0.Page, error) { - if m.TestNilZonesReturned { - return nil, nil, nil - } - - if m.TestErrorReturned { - return nil, nil, fmt.Errorf("operation Zone.List failed") - } - - zones := []*rc0.Zone{ - { - Domain: testZoneOne, - Type: "SLAVE", - // "dnssec": "yes", @todo: add this - // "created": "2018-04-09T09:27:31Z", @todo: add this - LastCheck: "", - Serial: 20180411, - Masters: []string{ - "193.0.2.2", - "2001:db8::2", - }, - }, - { - Domain: testZoneTwo, - Type: "MASTER", - // "dnssec": "no", @todo: add this - // "created": "2019-01-15T13:20:10Z", @todo: add this - LastCheck: "", - Serial: 2019011616, - Masters: []string{ - "", - }, - }, - } - - return zones, nil, nil -} - -func (m *mockZoneManagementService) Get(zone string) (*rc0.Zone, error) { return nil, nil } -func (m *mockZoneManagementService) Create(zoneCreate *rc0.ZoneCreate) (*rc0.StatusResponse, error) { - return nil, nil -} - -func (m *mockZoneManagementService) Edit(zone string, zoneEdit *rc0.ZoneEdit) (*rc0.StatusResponse, error) { - return nil, nil -} -func (m *mockZoneManagementService) Delete(zone string) (*rc0.StatusResponse, error) { return nil, nil } -func (m *mockZoneManagementService) Transfer(zone string) (*rc0.StatusResponse, error) { - return nil, nil -} diff --git a/provider/safedns/safedns.go b/provider/safedns/safedns.go deleted file mode 100644 index 829f7c14b..000000000 --- a/provider/safedns/safedns.go +++ /dev/null @@ -1,242 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -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 safedns - -import ( - "context" - "fmt" - "os" - - ansClient "github.com/ans-group/sdk-go/pkg/client" - ansConnection "github.com/ans-group/sdk-go/pkg/connection" - "github.com/ans-group/sdk-go/pkg/service/safedns" - log "github.com/sirupsen/logrus" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" -) - -// SafeDNS is an interface that is a subset of the SafeDNS service API that are actually used. -// Signatures must match exactly. -type SafeDNS interface { - CreateZoneRecord(zoneName string, req safedns.CreateRecordRequest) (int, error) - DeleteZoneRecord(zoneName string, recordID int) error - GetZone(zoneName string) (safedns.Zone, error) - GetZoneRecord(zoneName string, recordID int) (safedns.Record, error) - GetZoneRecords(zoneName string, parameters ansConnection.APIRequestParameters) ([]safedns.Record, error) - GetZones(parameters ansConnection.APIRequestParameters) ([]safedns.Zone, error) - PatchZoneRecord(zoneName string, recordID int, patch safedns.PatchRecordRequest) (int, error) - UpdateZoneRecord(zoneName string, record safedns.Record) (int, error) -} - -// SafeDNSProvider implements the DNS provider spec for UKFast SafeDNS. -type SafeDNSProvider struct { - provider.BaseProvider - Client SafeDNS - // Only consider hosted zones managing domains ending in this suffix - domainFilter endpoint.DomainFilter - DryRun bool - APIRequestParams ansConnection.APIRequestParameters -} - -// ZoneRecord is a datatype to simplify management of a record in a zone. -type ZoneRecord struct { - ID int - Name string - Type safedns.RecordType - TTL safedns.RecordTTL - Zone string - Content string -} - -func NewSafeDNSProvider(domainFilter endpoint.DomainFilter, dryRun bool) (*SafeDNSProvider, error) { - token, ok := os.LookupEnv("SAFEDNS_TOKEN") - if !ok { - return nil, fmt.Errorf("no SAFEDNS_TOKEN found in environment") - } - - ukfAPIConnection := ansConnection.NewAPIKeyCredentialsAPIConnection(token) - ansClient := ansClient.NewClient(ukfAPIConnection) - safeDNS := ansClient.SafeDNSService() - - provider := &SafeDNSProvider{ - Client: safeDNS, - domainFilter: domainFilter, - DryRun: dryRun, - APIRequestParams: *ansConnection.NewAPIRequestParameters(), - } - return provider, nil -} - -// Zones returns the list of hosted zones in the SafeDNS account -func (p *SafeDNSProvider) Zones(ctx context.Context) ([]safedns.Zone, error) { - var zones []safedns.Zone - - allZones, err := p.Client.GetZones(p.APIRequestParams) - if err != nil { - return nil, err - } - - // Check each found zone to see whether they match the domain filter provided. If they do, append it to the array of - // zones defined above. If not, continue to the next item in the loop. - for _, zone := range allZones { - if p.domainFilter.Match(zone.Name) { - zones = append(zones, zone) - } else { - continue - } - } - return zones, nil -} - -func (p *SafeDNSProvider) ZoneRecords(ctx context.Context) ([]ZoneRecord, error) { - zones, err := p.Zones(ctx) - if err != nil { - return nil, err - } - - var zoneRecords []ZoneRecord - for _, zone := range zones { - // For each zone in the zonelist, get all records of an ExternalDNS supported type. - records, err := p.Client.GetZoneRecords(zone.Name, p.APIRequestParams) - if err != nil { - return nil, err - } - for _, r := range records { - zoneRecord := ZoneRecord{ - ID: r.ID, - Name: r.Name, - Type: r.Type, - TTL: r.TTL, - Zone: zone.Name, - Content: r.Content, - } - zoneRecords = append(zoneRecords, zoneRecord) - } - } - return zoneRecords, nil -} - -// Records returns a list of Endpoint resources created from all records in supported zones. -func (p *SafeDNSProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { - var endpoints []*endpoint.Endpoint - zoneRecords, err := p.ZoneRecords(ctx) - if err != nil { - return nil, err - } - for _, r := range zoneRecords { - if provider.SupportedRecordType(string(r.Type)) { - endpoints = append(endpoints, endpoint.NewEndpointWithTTL(r.Name, string(r.Type), endpoint.TTL(r.TTL), r.Content)) - } - } - return endpoints, nil -} - -// ApplyChanges applies a given set of changes in a given zone. -func (p *SafeDNSProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { - // Identify the zone name for each record - zoneNameIDMapper := provider.ZoneIDName{} - - zones, err := p.Zones(ctx) - if err != nil { - return err - } - for _, zone := range zones { - zoneNameIDMapper.Add(zone.Name, zone.Name) - } - - zoneRecords, err := p.ZoneRecords(ctx) - if err != nil { - return err - } - - for _, endpoint := range changes.Create { - _, ZoneName := zoneNameIDMapper.FindZone(endpoint.DNSName) - for _, target := range endpoint.Targets { - request := safedns.CreateRecordRequest{ - Name: endpoint.DNSName, - Type: endpoint.RecordType, - Content: target, - } - log.WithFields(log.Fields{ - "zoneID": ZoneName, - "dnsName": endpoint.DNSName, - "recordType": endpoint.RecordType, - "Value": target, - }).Info("Creating record") - _, err := p.Client.CreateZoneRecord(ZoneName, request) - if err != nil { - return err - } - } - } - for _, endpoint := range changes.UpdateNew { - // Currently iterates over each zoneRecord in ZoneRecords for each Endpoint - // in UpdateNew; the same will go for Delete. As it's double-iteration, - // that's O(n^2), which isn't great. No performance issues have been noted - // thus far. - var zoneRecord ZoneRecord - for _, target := range endpoint.Targets { - for _, zr := range zoneRecords { - if zr.Name == endpoint.DNSName && zr.Content == target { - zoneRecord = zr - break - } - } - - newTTL := safedns.RecordTTL(int(endpoint.RecordTTL)) - newRecord := safedns.PatchRecordRequest{ - Name: endpoint.DNSName, - Content: target, - TTL: &newTTL, - Type: endpoint.RecordType, - } - log.WithFields(log.Fields{ - "zoneID": zoneRecord.Zone, - "dnsName": newRecord.Name, - "recordType": newRecord.Type, - "Value": newRecord.Content, - "Priority": newRecord.Priority, - }).Info("Patching record") - _, err = p.Client.PatchZoneRecord(zoneRecord.Zone, zoneRecord.ID, newRecord) - if err != nil { - return err - } - } - } - for _, endpoint := range changes.Delete { - // As above, currently iterates in O(n^2). May be a good start for optimisations. - var zoneRecord ZoneRecord - for _, zr := range zoneRecords { - if zr.Name == endpoint.DNSName && string(zr.Type) == endpoint.RecordType { - zoneRecord = zr - break - } - } - log.WithFields(log.Fields{ - "zoneID": zoneRecord.Zone, - "dnsName": zoneRecord.Name, - "recordType": zoneRecord.Type, - }).Info("Deleting record") - err := p.Client.DeleteZoneRecord(zoneRecord.Zone, zoneRecord.ID) - if err != nil { - return err - } - } - return nil -} diff --git a/provider/safedns/safedns_test.go b/provider/safedns/safedns_test.go deleted file mode 100644 index e066f75e8..000000000 --- a/provider/safedns/safedns_test.go +++ /dev/null @@ -1,366 +0,0 @@ -/* -Copyright 2021 The Kubernetes Authors. - -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 safedns - -import ( - "context" - "os" - "testing" - - ansConnection "github.com/ans-group/sdk-go/pkg/connection" - "github.com/ans-group/sdk-go/pkg/service/safedns" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" -) - -// Create an implementation of the SafeDNS interface for Mocking -type MockSafeDNSService struct { - mock.Mock -} - -func (m *MockSafeDNSService) CreateZoneRecord(zoneName string, req safedns.CreateRecordRequest) (int, error) { - args := m.Called(zoneName, req) - return args.Int(0), args.Error(1) -} - -func (m *MockSafeDNSService) DeleteZoneRecord(zoneName string, recordID int) error { - args := m.Called(zoneName, recordID) - return args.Error(0) -} - -func (m *MockSafeDNSService) GetZone(zoneName string) (safedns.Zone, error) { - args := m.Called(zoneName) - return args.Get(0).(safedns.Zone), args.Error(1) -} - -func (m *MockSafeDNSService) GetZoneRecord(zoneName string, recordID int) (safedns.Record, error) { - args := m.Called(zoneName, recordID) - return args.Get(0).(safedns.Record), args.Error(1) -} - -func (m *MockSafeDNSService) GetZoneRecords(zoneName string, parameters ansConnection.APIRequestParameters) ([]safedns.Record, error) { - args := m.Called(zoneName, parameters) - return args.Get(0).([]safedns.Record), args.Error(1) -} - -func (m *MockSafeDNSService) GetZones(parameters ansConnection.APIRequestParameters) ([]safedns.Zone, error) { - args := m.Called(parameters) - return args.Get(0).([]safedns.Zone), args.Error(1) -} - -func (m *MockSafeDNSService) PatchZoneRecord(zoneName string, recordID int, patch safedns.PatchRecordRequest) (int, error) { - args := m.Called(zoneName, recordID, patch) - return args.Int(0), args.Error(1) -} - -func (m *MockSafeDNSService) UpdateZoneRecord(zoneName string, record safedns.Record) (int, error) { - args := m.Called(zoneName, record) - return args.Int(0), args.Error(1) -} - -// Utility functions -func createZones() []safedns.Zone { - return []safedns.Zone{ - {Name: "foo.com", Description: "Foo dot com"}, - {Name: "bar.io", Description: ""}, - {Name: "baz.org", Description: "Org"}, - } -} - -func createFooRecords() []safedns.Record { - return []safedns.Record{ - { - ID: 11, - Type: safedns.RecordTypeA, - Name: "foo.com", - Content: "targetFoo", - TTL: safedns.RecordTTL(3600), - }, - { - ID: 12, - Type: safedns.RecordTypeTXT, - Name: "foo.com", - Content: "text", - TTL: safedns.RecordTTL(3600), - }, - { - ID: 13, - Type: safedns.RecordTypeCAA, - Name: "foo.com", - Content: "", - TTL: safedns.RecordTTL(3600), - }, - } -} - -func createBarRecords() []safedns.Record { - return []safedns.Record{} -} - -func createBazRecords() []safedns.Record { - return []safedns.Record{ - { - ID: 31, - Type: safedns.RecordTypeA, - Name: "baz.org", - Content: "targetBaz", - TTL: safedns.RecordTTL(3600), - }, - { - ID: 32, - Type: safedns.RecordTypeTXT, - Name: "baz.org", - Content: "text", - TTL: safedns.RecordTTL(3600), - }, - { - ID: 33, - Type: safedns.RecordTypeA, - Name: "api.baz.org", - Content: "targetBazAPI", - TTL: safedns.RecordTTL(3600), - }, - { - ID: 34, - Type: safedns.RecordTypeTXT, - Name: "api.baz.org", - Content: "text", - TTL: safedns.RecordTTL(3600), - }, - } -} - -// Actual tests -func TestNewSafeDNSProvider(t *testing.T) { - _ = os.Setenv("SAFEDNS_TOKEN", "DUMMYVALUE") - _, err := NewSafeDNSProvider(endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true) - require.NoError(t, err) - - _ = os.Unsetenv("SAFEDNS_TOKEN") - _, err = NewSafeDNSProvider(endpoint.NewDomainFilter([]string{"ext-dns-test.zalando.to."}), true) - require.Error(t, err) -} - -func TestRecords(t *testing.T) { - mockSafeDNSService := MockSafeDNSService{} - - provider := &SafeDNSProvider{ - Client: &mockSafeDNSService, - domainFilter: endpoint.NewDomainFilter([]string{}), - DryRun: false, - } - - mockSafeDNSService.On( - "GetZones", - mock.Anything, - ).Return(createZones(), nil).Once() - - mockSafeDNSService.On( - "GetZoneRecords", - "foo.com", - mock.Anything, - ).Return(createFooRecords(), nil).Once() - - mockSafeDNSService.On( - "GetZoneRecords", - "bar.io", - mock.Anything, - ).Return(createBarRecords(), nil).Once() - - mockSafeDNSService.On( - "GetZoneRecords", - "baz.org", - mock.Anything, - ).Return(createBazRecords(), nil).Once() - - actual, err := provider.Records(context.Background()) - require.NoError(t, err) - - expected := []*endpoint.Endpoint{ - { - DNSName: "foo.com", - Targets: []string{"targetFoo"}, - RecordType: "A", - RecordTTL: 3600, - Labels: endpoint.NewLabels(), - }, - { - DNSName: "foo.com", - Targets: []string{"text"}, - RecordType: "TXT", - RecordTTL: 3600, - Labels: endpoint.NewLabels(), - }, - { - DNSName: "baz.org", - Targets: []string{"targetBaz"}, - RecordType: "A", - RecordTTL: 3600, - Labels: endpoint.NewLabels(), - }, - { - DNSName: "baz.org", - Targets: []string{"text"}, - RecordType: "TXT", - RecordTTL: 3600, - Labels: endpoint.NewLabels(), - }, - { - DNSName: "api.baz.org", - Targets: []string{"targetBazAPI"}, - RecordType: "A", - RecordTTL: 3600, - Labels: endpoint.NewLabels(), - }, - { - DNSName: "api.baz.org", - Targets: []string{"text"}, - RecordType: "TXT", - RecordTTL: 3600, - Labels: endpoint.NewLabels(), - }, - } - - mockSafeDNSService.AssertExpectations(t) - assert.Equal(t, expected, actual) -} - -func TestSafeDNSApplyChanges(t *testing.T) { - mockSafeDNSService := MockSafeDNSService{} - - provider := &SafeDNSProvider{ - Client: &mockSafeDNSService, - domainFilter: endpoint.NewDomainFilter([]string{}), - DryRun: false, - } - - // Dummy data - mockSafeDNSService.On( - "GetZones", - mock.Anything, - ).Return(createZones(), nil).Once() - mockSafeDNSService.On( - "GetZones", - mock.Anything, - ).Return(createZones(), nil).Once() - - mockSafeDNSService.On( - "GetZoneRecords", - "foo.com", - mock.Anything, - ).Return(createFooRecords(), nil).Once() - - mockSafeDNSService.On( - "GetZoneRecords", - "bar.io", - mock.Anything, - ).Return(createBarRecords(), nil).Once() - - mockSafeDNSService.On( - "GetZoneRecords", - "baz.org", - mock.Anything, - ).Return(createBazRecords(), nil).Once() - - // Apply actions - mockSafeDNSService.On( - "DeleteZoneRecord", - "baz.org", - 33, - ).Return(nil).Once() - mockSafeDNSService.On( - "DeleteZoneRecord", - "baz.org", - 34, - ).Return(nil).Once() - - TTL300 := safedns.RecordTTL(300) - mockSafeDNSService.On( - "PatchZoneRecord", - "foo.com", - 11, - safedns.PatchRecordRequest{ - Type: "A", - Name: "foo.com", - Content: "targetFoo", - TTL: &TTL300, - }, - ).Return(123, nil).Once() - - mockSafeDNSService.On( - "CreateZoneRecord", - "bar.io", - safedns.CreateRecordRequest{ - Type: "A", - Name: "create.bar.io", - Content: "targetBar", - }, - ).Return(246, nil).Once() - - mockSafeDNSService.On( - "CreateZoneRecord", - "bar.io", - safedns.CreateRecordRequest{ - Type: "A", - Name: "bar.io", - Content: "targetBar", - }, - ).Return(369, nil).Once() - - err := provider.ApplyChanges(context.Background(), &plan.Changes{ - Create: []*endpoint.Endpoint{ - { - DNSName: "create.bar.io", - RecordType: "A", - Targets: []string{"targetBar"}, - RecordTTL: 3600, - }, - { - DNSName: "bar.io", - RecordType: "A", - Targets: []string{"targetBar"}, - RecordTTL: 3600, - }, - }, - Delete: []*endpoint.Endpoint{ - { - DNSName: "api.baz.org", - RecordType: "A", - }, - { - DNSName: "api.baz.org", - RecordType: "TXT", - }, - }, - UpdateNew: []*endpoint.Endpoint{ - { - DNSName: "foo.com", - RecordType: "A", - RecordTTL: 300, - Targets: []string{"targetFoo"}, - }, - }, - UpdateOld: []*endpoint.Endpoint{}, - }) - require.NoError(t, err) - - mockSafeDNSService.AssertExpectations(t) -} diff --git a/provider/vinyldns/vinyldns.go b/provider/vinyldns/vinyldns.go deleted file mode 100644 index fefc56e6e..000000000 --- a/provider/vinyldns/vinyldns.go +++ /dev/null @@ -1,272 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -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 vinyldns - -import ( - "context" - "fmt" - "os" - "strings" - - log "github.com/sirupsen/logrus" - "github.com/vinyldns/go-vinyldns/vinyldns" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" -) - -const ( - vinyldnsCreate = "CREATE" - vinyldnsDelete = "DELETE" - vinyldnsUpdate = "UPDATE" - - vinyldnsRecordTTL = 300 -) - -type vinyldnsZoneInterface interface { - Zones() ([]vinyldns.Zone, error) - RecordSets(id string) ([]vinyldns.RecordSet, error) - RecordSet(zoneID, recordSetID string) (vinyldns.RecordSet, error) - RecordSetCreate(rs *vinyldns.RecordSet) (*vinyldns.RecordSetUpdateResponse, error) - RecordSetUpdate(rs *vinyldns.RecordSet) (*vinyldns.RecordSetUpdateResponse, error) - RecordSetDelete(zoneID, recordSetID string) (*vinyldns.RecordSetUpdateResponse, error) -} - -type vinyldnsProvider struct { - provider.BaseProvider - client vinyldnsZoneInterface - zoneFilter provider.ZoneIDFilter - domainFilter endpoint.DomainFilter - dryRun bool -} - -type vinyldnsChange struct { - Action string - ResourceRecordSet vinyldns.RecordSet -} - -// NewVinylDNSProvider provides support for VinylDNS records -func NewVinylDNSProvider(domainFilter endpoint.DomainFilter, zoneFilter provider.ZoneIDFilter, dryRun bool) (provider.Provider, error) { - _, ok := os.LookupEnv("VINYLDNS_ACCESS_KEY") - if !ok { - return nil, fmt.Errorf("no vinyldns access key found") - } - - client := vinyldns.NewClientFromEnv() - - return &vinyldnsProvider{ - client: client, - dryRun: dryRun, - zoneFilter: zoneFilter, - domainFilter: domainFilter, - }, nil -} - -func (p *vinyldnsProvider) Records(ctx context.Context) (endpoints []*endpoint.Endpoint, _ error) { - zones, err := p.client.Zones() - if err != nil { - return nil, err - } - - for _, zone := range zones { - if !p.zoneFilter.Match(zone.ID) { - continue - } - - if !p.domainFilter.Match(zone.Name) { - continue - } - - log.Infof("Zone: [%s:%s]", zone.ID, zone.Name) - records, err := p.client.RecordSets(zone.ID) - if err != nil { - return nil, err - } - - for _, r := range records { - if provider.SupportedRecordType(r.Type) { - recordsCount := len(r.Records) - log.Debugf("%s.%s.%d.%s", r.Name, r.Type, recordsCount, zone.Name) - - // TODO: AAAA Records - if len(r.Records) > 0 { - targets := make([]string, len(r.Records)) - for idx, rr := range r.Records { - switch r.Type { - case "A": - targets[idx] = rr.Address - case "CNAME": - targets[idx] = rr.CName - case "TXT": - targets[idx] = rr.Text - } - } - - endpoints = append(endpoints, endpoint.NewEndpointWithTTL(r.Name+"."+zone.Name, r.Type, endpoint.TTL(r.TTL), targets...)) - } - } - } - } - - return endpoints, nil -} - -func vinyldnsSuitableZone(hostname string, zones []vinyldns.Zone) *vinyldns.Zone { - var zone *vinyldns.Zone - for _, z := range zones { - log.Debugf("hostname: %s and zoneName: %s", hostname, z.Name) - // Adding a . as vinyl appends it to each zone record - if strings.HasSuffix(hostname+".", z.Name) { - zone = &z - break - } - } - return zone -} - -func (p *vinyldnsProvider) submitChanges(changes []*vinyldnsChange) error { - if len(changes) == 0 { - log.Infof("All records are already up to date") - return nil - } - - zones, err := p.client.Zones() - if err != nil { - return err - } - - for _, change := range changes { - zone := vinyldnsSuitableZone(change.ResourceRecordSet.Name, zones) - if zone == nil { - log.Debugf("Skipping record %s because no hosted zone matching record DNS Name was detected", change.ResourceRecordSet.Name) - continue - } - - change.ResourceRecordSet.Name = strings.TrimSuffix(change.ResourceRecordSet.Name+".", "."+zone.Name) - change.ResourceRecordSet.ZoneID = zone.ID - log.Infof("Changing records: %s %v in zone: %s", change.Action, change.ResourceRecordSet, zone.Name) - - if !p.dryRun { - switch change.Action { - case vinyldnsCreate: - _, err := p.client.RecordSetCreate(&change.ResourceRecordSet) - if err != nil { - return err - } - case vinyldnsUpdate: - recordID, err := p.findRecordSetID(zone.ID, change.ResourceRecordSet.Name) - if err != nil { - return err - } - change.ResourceRecordSet.ID = recordID - _, err = p.client.RecordSetUpdate(&change.ResourceRecordSet) - if err != nil { - return err - } - case vinyldnsDelete: - recordID, err := p.findRecordSetID(zone.ID, change.ResourceRecordSet.Name) - if err != nil { - return err - } - _, err = p.client.RecordSetDelete(zone.ID, recordID) - if err != nil { - return err - } - } - } - } - - return nil -} - -func (p *vinyldnsProvider) findRecordSetID(zoneID string, recordSetName string) (recordID string, err error) { - records, err := p.client.RecordSets(zoneID) - if err != nil { - return "", err - } - - for _, r := range records { - if r.Name == recordSetName { - return r.ID, nil - } - } - - return "", fmt.Errorf("record not found") -} - -func (p *vinyldnsProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { - combinedChanges := make([]*vinyldnsChange, 0, len(changes.Create)+len(changes.UpdateNew)+len(changes.Delete)) - - combinedChanges = append(combinedChanges, newVinylDNSChanges(vinyldnsCreate, changes.Create)...) - combinedChanges = append(combinedChanges, newVinylDNSChanges(vinyldnsUpdate, changes.UpdateNew)...) - combinedChanges = append(combinedChanges, newVinylDNSChanges(vinyldnsDelete, changes.Delete)...) - - return p.submitChanges(combinedChanges) -} - -// newVinylDNSChanges returns a collection of Changes based on the given records and action. -func newVinylDNSChanges(action string, endpoints []*endpoint.Endpoint) []*vinyldnsChange { - changes := make([]*vinyldnsChange, 0, len(endpoints)) - - for _, e := range endpoints { - changes = append(changes, newVinylDNSChange(action, e)) - } - - return changes -} - -func newVinylDNSChange(action string, endpoint *endpoint.Endpoint) *vinyldnsChange { - ttl := vinyldnsRecordTTL - if endpoint.RecordTTL.IsConfigured() { - ttl = int(endpoint.RecordTTL) - } - - records := []vinyldns.Record{} - - // TODO: AAAA - if endpoint.RecordType == "CNAME" { - records = []vinyldns.Record{ - { - CName: endpoint.Targets[0], - }, - } - } else if endpoint.RecordType == "TXT" { - records = []vinyldns.Record{ - { - Text: endpoint.Targets[0], - }, - } - } else if endpoint.RecordType == "A" { - records = []vinyldns.Record{ - { - Address: endpoint.Targets[0], - }, - } - } - - change := &vinyldnsChange{ - Action: action, - ResourceRecordSet: vinyldns.RecordSet{ - Name: endpoint.DNSName, - Type: endpoint.RecordType, - TTL: ttl, - Records: records, - }, - } - return change -} diff --git a/provider/vinyldns/vinyldns_test.go b/provider/vinyldns/vinyldns_test.go deleted file mode 100644 index 1afd831b8..000000000 --- a/provider/vinyldns/vinyldns_test.go +++ /dev/null @@ -1,225 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -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 vinyldns - -import ( - "context" - "fmt" - "os" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/vinyldns/go-vinyldns/vinyldns" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" -) - -type mockVinyldnsZoneInterface struct { - mock.Mock -} - -var mockVinylDNSProvider vinyldnsProvider - -var ( - vinylDNSZones []vinyldns.Zone - vinylDNSRecords []vinyldns.RecordSet - vinylDNSRecordSetUpdateResponse *vinyldns.RecordSetUpdateResponse -) - -func TestVinylDNSServices(t *testing.T) { - firstZone := vinyldns.Zone{ - ID: "0", - Name: "example.com.", - } - secondZone := vinyldns.Zone{ - ID: "1", - Name: "example-beta.com.", - } - vinylDNSZones = []vinyldns.Zone{firstZone, secondZone} - - firstRecord := vinyldns.RecordSet{ - ZoneID: "0", - Name: "example.com.", - TTL: 300, - Type: "CNAME", - Records: []vinyldns.Record{ - { - CName: "vinyldns.com", - }, - }, - } - vinylDNSRecords = []vinyldns.RecordSet{firstRecord} - - vinylDNSRecordSetUpdateResponse = &vinyldns.RecordSetUpdateResponse{ - Zone: firstZone, - RecordSet: firstRecord, - ChangeID: "123", - Status: "Active", - } - - mockVinylDNS := &mockVinyldnsZoneInterface{} - mockVinylDNS.On("Zones").Return(vinylDNSZones, nil) - mockVinylDNS.On("RecordSets", "0").Return(vinylDNSRecords, nil) - mockVinylDNS.On("RecordSets", "1").Return(nil, nil) - mockVinylDNS.On("RecordSets", "2").Return(nil, fmt.Errorf("Record not found")) - mockVinylDNS.On("RecordSetCreate", &firstRecord).Return(vinylDNSRecordSetUpdateResponse, nil) - mockVinylDNS.On("RecordSetUpdate", &firstRecord).Return(vinylDNSRecordSetUpdateResponse, nil) - mockVinylDNS.On("RecordSetDelete", "0", "").Return(nil, nil) - - mockVinylDNSProvider = vinyldnsProvider{client: mockVinylDNS} - - // Run tests on mock services - t.Run("Records", testVinylDNSProviderRecords) - t.Run("ApplyChanges", testVinylDNSProviderApplyChanges) - t.Run("SuitableZone", testVinylDNSSuitableZone) - t.Run("GetRecordID", testVinylDNSFindRecordSetID) -} - -func testVinylDNSProviderRecords(t *testing.T) { - ctx := context.Background() - - mockVinylDNSProvider.domainFilter = endpoint.NewDomainFilter([]string{"example.com"}) - result, err := mockVinylDNSProvider.Records(ctx) - assert.Nil(t, err) - assert.Equal(t, len(vinylDNSRecords), len(result)) - - mockVinylDNSProvider.zoneFilter = provider.NewZoneIDFilter([]string{"0"}) - result, err = mockVinylDNSProvider.Records(ctx) - assert.Nil(t, err) - assert.Equal(t, len(vinylDNSRecords), len(result)) - - mockVinylDNSProvider.zoneFilter = provider.NewZoneIDFilter([]string{"1"}) - result, err = mockVinylDNSProvider.Records(ctx) - assert.Nil(t, err) - assert.Equal(t, 0, len(result)) -} - -func testVinylDNSProviderApplyChanges(t *testing.T) { - changes := &plan.Changes{} - changes.Create = []*endpoint.Endpoint{ - {DNSName: "example.com", Targets: endpoint.Targets{"vinyldns.com"}, RecordType: endpoint.RecordTypeCNAME}, - } - changes.UpdateNew = []*endpoint.Endpoint{ - {DNSName: "example.com", Targets: endpoint.Targets{"vinyldns.com"}, RecordType: endpoint.RecordTypeCNAME}, - } - changes.Delete = []*endpoint.Endpoint{{DNSName: "example.com", Targets: endpoint.Targets{"vinyldns.com"}, RecordType: endpoint.RecordTypeCNAME}} - - mockVinylDNSProvider.zoneFilter = provider.NewZoneIDFilter([]string{"1"}) - err := mockVinylDNSProvider.ApplyChanges(context.Background(), changes) - if err != nil { - t.Errorf("Failed to apply changes: %v", err) - } -} - -func testVinylDNSSuitableZone(t *testing.T) { - mockVinylDNSProvider.zoneFilter = provider.NewZoneIDFilter([]string{"0"}) - - zone := vinyldnsSuitableZone("example.com", vinylDNSZones) - assert.Equal(t, zone.Name, "example.com.") -} - -func TestNewVinylDNSProvider(t *testing.T) { - os.Setenv("VINYLDNS_ACCESS_KEY", "xxxxxxxxxxxxxxxxxxxxxxxxxx") - _, err := NewVinylDNSProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{"0"}), true) - assert.Nil(t, err) - - os.Unsetenv("VINYLDNS_ACCESS_KEY") - _, err = NewVinylDNSProvider(endpoint.NewDomainFilter([]string{"example.com"}), provider.NewZoneIDFilter([]string{"0"}), true) - assert.NotNil(t, err) - if err == nil { - t.Errorf("Expected to fail new provider on empty token") - } -} - -func testVinylDNSFindRecordSetID(t *testing.T) { - mockVinylDNSProvider.zoneFilter = provider.NewZoneIDFilter([]string{"0"}) - result, err := mockVinylDNSProvider.findRecordSetID("0", "example.com.") - assert.Nil(t, err) - assert.Equal(t, "", result) - - _, err = mockVinylDNSProvider.findRecordSetID("2", "example-beta") - assert.NotNil(t, err) -} - -func (m *mockVinyldnsZoneInterface) Zones() ([]vinyldns.Zone, error) { - args := m.Called() - var r0 []vinyldns.Zone - - if args.Get(0) != nil { - r0 = args.Get(0).([]vinyldns.Zone) - } - - return r0, args.Error(1) -} - -func (m *mockVinyldnsZoneInterface) RecordSet(zoneID, recordSet string) (vinyldns.RecordSet, error) { - args := m.Called(zoneID, recordSet) - var r0 vinyldns.RecordSet - - if args.Get(0) != nil { - r0 = args.Get(0).(vinyldns.RecordSet) - } - - return r0, args.Error(1) -} - -func (m *mockVinyldnsZoneInterface) RecordSets(id string) ([]vinyldns.RecordSet, error) { - args := m.Called(id) - var r0 []vinyldns.RecordSet - - if args.Get(0) != nil { - r0 = args.Get(0).([]vinyldns.RecordSet) - } - - return r0, args.Error(1) -} - -func (m *mockVinyldnsZoneInterface) RecordSetCreate(rs *vinyldns.RecordSet) (*vinyldns.RecordSetUpdateResponse, error) { - args := m.Called(rs) - var r0 *vinyldns.RecordSetUpdateResponse - - if args.Get(0) != nil { - r0 = args.Get(0).(*vinyldns.RecordSetUpdateResponse) - } - - return r0, args.Error(1) -} - -func (m *mockVinyldnsZoneInterface) RecordSetUpdate(rs *vinyldns.RecordSet) (*vinyldns.RecordSetUpdateResponse, error) { - args := m.Called(rs) - var r0 *vinyldns.RecordSetUpdateResponse - - if args.Get(0) != nil { - r0 = args.Get(0).(*vinyldns.RecordSetUpdateResponse) - } - - return r0, args.Error(1) -} - -func (m *mockVinyldnsZoneInterface) RecordSetDelete(zoneID, recordSetID string) (*vinyldns.RecordSetUpdateResponse, error) { - args := m.Called(zoneID, recordSetID) - var r0 *vinyldns.RecordSetUpdateResponse - - if args.Get(0) != nil { - r0 = args.Get(0).(*vinyldns.RecordSetUpdateResponse) - } - - return r0, args.Error(1) -} diff --git a/provider/vultr/vultr.go b/provider/vultr/vultr.go deleted file mode 100644 index e9d5187c2..000000000 --- a/provider/vultr/vultr.go +++ /dev/null @@ -1,304 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -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 vultr - -import ( - "context" - "fmt" - "os" - "strings" - - log "github.com/sirupsen/logrus" - "github.com/vultr/govultr/v2" - "golang.org/x/oauth2" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" - "sigs.k8s.io/external-dns/provider" -) - -const ( - vultrCreate = "CREATE" - vultrDelete = "DELETE" - vultrUpdate = "UPDATE" - vultrTTL = 3600 -) - -// VultrProvider is an implementation of Provider for Vultr DNS. -type VultrProvider struct { - provider.BaseProvider - client govultr.Client - - domainFilter endpoint.DomainFilter - DryRun bool -} - -// VultrChanges differentiates between ChangActions. -type VultrChanges struct { - Action string - - ResourceRecordSet *govultr.DomainRecordReq -} - -// NewVultrProvider initializes a new Vultr BNS based provider -func NewVultrProvider(ctx context.Context, domainFilter endpoint.DomainFilter, dryRun bool) (*VultrProvider, error) { - apiKey, ok := os.LookupEnv("VULTR_API_KEY") - if !ok { - return nil, fmt.Errorf("no token found") - } - - oauthClient := oauth2.NewClient(ctx, oauth2.StaticTokenSource(&oauth2.Token{ - AccessToken: apiKey, - })) - client := govultr.NewClient(oauthClient) - client.SetUserAgent(fmt.Sprintf("ExternalDNS/%s", client.UserAgent)) - - p := &VultrProvider{ - client: *client, - domainFilter: domainFilter, - DryRun: dryRun, - } - - return p, nil -} - -// Zones returns list of hosted zones -func (p *VultrProvider) Zones(ctx context.Context) ([]govultr.Domain, error) { - zones, err := p.fetchZones(ctx) - if err != nil { - return nil, err - } - - return zones, nil -} - -// Records returns the list of records. -func (p *VultrProvider) Records(ctx context.Context) ([]*endpoint.Endpoint, error) { - zones, err := p.Zones(ctx) - if err != nil { - return nil, err - } - - var endpoints []*endpoint.Endpoint - - for _, zone := range zones { - records, err := p.fetchRecords(ctx, zone.Domain) - if err != nil { - return nil, err - } - - for _, r := range records { - if provider.SupportedRecordType(r.Type) { - name := fmt.Sprintf("%s.%s", r.Name, zone.Domain) - - // root name is identified by the empty string and should be - // translated to zone name for the endpoint entry. - if r.Name == "" { - name = zone.Domain - } - - endpoints = append(endpoints, endpoint.NewEndpointWithTTL(name, r.Type, endpoint.TTL(r.TTL), r.Data)) - } - } - } - - return endpoints, nil -} - -func (p *VultrProvider) fetchRecords(ctx context.Context, domain string) ([]govultr.DomainRecord, error) { - var allRecords []govultr.DomainRecord - listOptions := &govultr.ListOptions{} - - for { - records, meta, err := p.client.DomainRecord.List(ctx, domain, listOptions) - if err != nil { - return nil, err - } - - allRecords = append(allRecords, records...) - - if meta.Links.Next == "" { - break - } else { - listOptions.Cursor = meta.Links.Next - continue - } - } - - return allRecords, nil -} - -func (p *VultrProvider) fetchZones(ctx context.Context) ([]govultr.Domain, error) { - var zones []govultr.Domain - listOptions := &govultr.ListOptions{} - - for { - allZones, meta, err := p.client.Domain.List(ctx, listOptions) - if err != nil { - return nil, err - } - - for _, zone := range allZones { - if p.domainFilter.Match(zone.Domain) { - zones = append(zones, zone) - } - } - - if meta.Links.Next == "" { - break - } else { - listOptions.Cursor = meta.Links.Next - continue - } - } - - return zones, nil -} - -func (p *VultrProvider) submitChanges(ctx context.Context, changes []*VultrChanges) error { - if len(changes) == 0 { - log.Infof("All records are already up to date") - return nil - } - - zones, err := p.Zones(ctx) - if err != nil { - return err - } - - zoneChanges := separateChangesByZone(zones, changes) - - for zoneName, changes := range zoneChanges { - for _, change := range changes { - log.WithFields(log.Fields{ - "record": change.ResourceRecordSet.Name, - "type": change.ResourceRecordSet.Type, - "ttl": change.ResourceRecordSet.TTL, - "action": change.Action, - "zone": zoneName, - }).Info("Changing record.") - - switch change.Action { - case vultrCreate: - if _, err := p.client.DomainRecord.Create(ctx, zoneName, change.ResourceRecordSet); err != nil { - return err - } - case vultrDelete: - id, err := p.getRecordID(ctx, zoneName, change.ResourceRecordSet) - if err != nil { - return err - } - - if err := p.client.DomainRecord.Delete(ctx, zoneName, id); err != nil { - return err - } - case vultrUpdate: - id, err := p.getRecordID(ctx, zoneName, change.ResourceRecordSet) - if err != nil { - return err - } - if err := p.client.DomainRecord.Update(ctx, zoneName, id, change.ResourceRecordSet); err != nil { - return err - } - } - } - } - return nil -} - -// ApplyChanges applies a given set of changes in a given zone. -func (p *VultrProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) error { - combinedChanges := make([]*VultrChanges, 0, len(changes.Create)+len(changes.UpdateNew)+len(changes.Delete)) - - combinedChanges = append(combinedChanges, newVultrChanges(vultrCreate, changes.Create)...) - combinedChanges = append(combinedChanges, newVultrChanges(vultrUpdate, changes.UpdateNew)...) - combinedChanges = append(combinedChanges, newVultrChanges(vultrDelete, changes.Delete)...) - - return p.submitChanges(ctx, combinedChanges) -} - -func newVultrChanges(action string, endpoints []*endpoint.Endpoint) []*VultrChanges { - changes := make([]*VultrChanges, 0, len(endpoints)) - ttl := vultrTTL - for _, e := range endpoints { - if e.RecordTTL.IsConfigured() { - ttl = int(e.RecordTTL) - } - - change := &VultrChanges{ - Action: action, - ResourceRecordSet: &govultr.DomainRecordReq{ - Type: e.RecordType, - Name: e.DNSName, - Data: e.Targets[0], - TTL: ttl, - }, - } - - changes = append(changes, change) - } - return changes -} - -func separateChangesByZone(zones []govultr.Domain, changes []*VultrChanges) map[string][]*VultrChanges { - change := make(map[string][]*VultrChanges) - zoneNameID := provider.ZoneIDName{} - - for _, z := range zones { - zoneNameID.Add(z.Domain, z.Domain) - change[z.Domain] = []*VultrChanges{} - } - - for _, c := range changes { - zone, _ := zoneNameID.FindZone(c.ResourceRecordSet.Name) - if zone == "" { - log.Debugf("Skipping record %s because no hosted zone matching record DNS Name was detected", c.ResourceRecordSet.Name) - continue - } - change[zone] = append(change[zone], c) - } - return change -} - -func (p *VultrProvider) getRecordID(ctx context.Context, zone string, record *govultr.DomainRecordReq) (recordID string, err error) { - listOptions := &govultr.ListOptions{} - for { - records, meta, err := p.client.DomainRecord.List(ctx, zone, listOptions) - if err != nil { - return "0", err - } - - for _, r := range records { - strippedName := strings.TrimSuffix(record.Name, "."+zone) - if record.Name == zone { - strippedName = "" - } - - if r.Name == strippedName && r.Type == record.Type { - return r.ID, nil - } - } - if meta.Links.Next == "" { - break - } else { - listOptions.Cursor = meta.Links.Next - continue - } - } - - return "", fmt.Errorf("no record was found") -} diff --git a/provider/vultr/vultr_test.go b/provider/vultr/vultr_test.go deleted file mode 100644 index e3beb44ea..000000000 --- a/provider/vultr/vultr_test.go +++ /dev/null @@ -1,213 +0,0 @@ -/* -Copyright 2020 The Kubernetes Authors. - -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 vultr - -import ( - "context" - "os" - "reflect" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/vultr/govultr/v2" - - "sigs.k8s.io/external-dns/endpoint" - "sigs.k8s.io/external-dns/plan" -) - -type mockVultrDomain struct { - client *govultr.Client -} - -func (m mockVultrDomain) Create(ctx context.Context, domainReq *govultr.DomainReq) (*govultr.Domain, error) { - return nil, nil -} - -func (m mockVultrDomain) Get(ctx context.Context, domain string) (*govultr.Domain, error) { - return nil, nil -} - -func (m mockVultrDomain) Update(ctx context.Context, domain, dnsSec string) error { - return nil -} - -func (m mockVultrDomain) Delete(ctx context.Context, domain string) error { - return nil -} - -func (m mockVultrDomain) List(ctx context.Context, options *govultr.ListOptions) ([]govultr.Domain, *govultr.Meta, error) { - return []govultr.Domain{{Domain: "test.com", DateCreated: "1234"}}, &govultr.Meta{ - Total: 1, - Links: &govultr.Links{ - Next: "", - Prev: "", - }, - }, nil -} - -func (m mockVultrDomain) GetSoa(ctx context.Context, domain string) (*govultr.Soa, error) { - return nil, nil -} - -func (m mockVultrDomain) UpdateSoa(ctx context.Context, domain string, soaReq *govultr.Soa) error { - return nil -} - -func (m mockVultrDomain) GetDNSSec(ctx context.Context, domain string) ([]string, error) { - return nil, nil -} - -type mockVultrRecord struct { - client *govultr.Client -} - -func (m mockVultrRecord) Create(ctx context.Context, domain string, domainRecordReq *govultr.DomainRecordReq) (*govultr.DomainRecord, error) { - return nil, nil -} - -func (m mockVultrRecord) Get(ctx context.Context, domain, recordID string) (*govultr.DomainRecord, error) { - return nil, nil -} - -func (m mockVultrRecord) Update(ctx context.Context, domain, recordID string, domainRecordReq *govultr.DomainRecordReq) error { - return nil -} - -func (m mockVultrRecord) Delete(ctx context.Context, domain, recordID string) error { - return nil -} - -func (m mockVultrRecord) List(ctx context.Context, domain string, options *govultr.ListOptions) ([]govultr.DomainRecord, *govultr.Meta, error) { - return []govultr.DomainRecord{{ID: "123", Type: "A", Name: "test", Data: "192.168.1.1", TTL: 300}}, &govultr.Meta{ - Total: 1, - Links: &govultr.Links{ - Next: "", - Prev: "", - }, - }, nil -} - -func TestNewVultrProvider(t *testing.T) { - _ = os.Setenv("VULTR_API_KEY", "") - _, err := NewVultrProvider(context.Background(), endpoint.NewDomainFilter([]string{"test.vultr.com"}), true) - if err != nil { - t.Errorf("failed : %s", err) - } - - _ = os.Unsetenv("VULTR_API_KEY") - _, err = NewVultrProvider(context.Background(), endpoint.NewDomainFilter([]string{"test.vultr.com"}), true) - if err == nil { - t.Errorf("expected to fail") - } -} - -func TestVultrProvider_Zones(t *testing.T) { - mocked := mockVultrDomain{nil} - provider := &VultrProvider{ - client: govultr.Client{ - Domain: &mocked, - }, - } - - expected, _, err := provider.client.Domain.List(context.Background(), nil) - if err != nil { - t.Fatal(err) - } - - provider.Zones(context.Background()) - zones, err := provider.Zones(context.Background()) - if err != nil { - t.Fatal(err) - } - - if !reflect.DeepEqual(expected, zones) { - t.Fatal(err) - } -} - -func TestVultrProvider_Records(t *testing.T) { - mocked := mockVultrRecord{nil} - mockedDomain := mockVultrDomain{nil} - - provider := &VultrProvider{ - client: govultr.Client{ - DomainRecord: &mocked, - Domain: &mockedDomain, - }, - } - - expected, _, _ := provider.client.DomainRecord.List(context.Background(), "test.com", nil) - records, err := provider.Records(context.Background()) - if err != nil { - t.Fatal(err) - } - - for _, v := range records { - assert.Equal(t, strings.TrimSuffix(v.DNSName, ".test.com"), expected[0].Name) - assert.Equal(t, v.RecordType, expected[0].Type) - assert.Equal(t, int(v.RecordTTL), expected[0].TTL) - } -} - -func TestVultrProvider_ApplyChanges(t *testing.T) { - changes := &plan.Changes{} - mocked := mockVultrRecord{nil} - mockedDomain := mockVultrDomain{nil} - - provider := &VultrProvider{ - client: govultr.Client{ - DomainRecord: &mocked, - Domain: &mockedDomain, - }, - } - - changes.Create = []*endpoint.Endpoint{ - {DNSName: "test.com", Targets: endpoint.Targets{"target"}}, - {DNSName: "ttl.test.com", Targets: endpoint.Targets{"target"}, RecordTTL: 100}, - } - - changes.UpdateNew = []*endpoint.Endpoint{{DNSName: "test.test.com", Targets: endpoint.Targets{"target-new"}, RecordType: "A", RecordTTL: 100}} - changes.Delete = []*endpoint.Endpoint{{DNSName: "test.test.com", Targets: endpoint.Targets{"target"}, RecordType: "A"}} - err := provider.ApplyChanges(context.Background(), changes) - if err != nil { - t.Errorf("should not fail, %s", err) - } -} - -func TestVultrProvider_getRecordID(t *testing.T) { - mocked := mockVultrRecord{nil} - mockedDomain := mockVultrDomain{nil} - - provider := &VultrProvider{ - client: govultr.Client{ - DomainRecord: &mocked, - Domain: &mockedDomain, - }, - } - - record := &govultr.DomainRecordReq{ - Type: "A", - Name: "test.test.com", - } - id, err := provider.getRecordID(context.Background(), "test.com", record) - if err != nil { - t.Fatal(err) - } - - assert.Equal(t, id, "123") -} From 9ceca8fa811e66a37dd65920e9c71f21f0091cd6 Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Wed, 4 Sep 2024 13:51:29 +0200 Subject: [PATCH 66/78] review with Raffo --- README.md | 6 - charts/external-dns/README.md | 1 - charts/external-dns/README.md.gotmpl | 1 - docs/ttl.md | 4 - docs/tutorials/vinyldns.md | 190 --------------- docs/tutorials/vultr.md | 225 ------------------ pkg/apis/externaldns/types.go | 2 +- .../externaldns/validation/validation_test.go | 6 - 8 files changed, 1 insertion(+), 434 deletions(-) delete mode 100644 docs/tutorials/vinyldns.md delete mode 100644 docs/tutorials/vultr.md diff --git a/README.md b/README.md index 31ca79865..c13327094 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,6 @@ ExternalDNS allows you to keep selected zones (via `--domain-filter`) synchroniz * [RFC2136](https://tools.ietf.org/html/rfc2136) * [NS1](https://ns1.com/) * [TransIP](https://www.transip.eu/domain-name/) -* [VinylDNS](https://www.vinyldns.io) -* [Vultr](https://www.vultr.com) * [OVH](https://www.ovh.com) * [Scaleway](https://www.scaleway.com) * [Akamai Edge DNS](https://learn.akamai.com/en-us/products/cloud_security/edge_dns.html) @@ -125,11 +123,9 @@ The following table clarifies the current status of the providers according to t | RFC2136 | Alpha | | | NS1 | Alpha | | | TransIP | Alpha | | -| VinylDNS | Alpha | | | RancherDNS | Alpha | | | OVH | Alpha | | | Scaleway DNS | Alpha | @Sh4d1 | -| Vultr | Alpha | | | UltraDNS | Alpha | | | GoDaddy | Alpha | | | Gandi | Alpha | @packi | @@ -193,10 +189,8 @@ The following tutorials are provided: * [RancherDNS (RDNS)](docs/tutorials/rdns.md) * [RFC2136](docs/tutorials/rfc2136.md) * [TransIP](docs/tutorials/transip.md) -* [VinylDNS](docs/tutorials/vinyldns.md) * [OVH](docs/tutorials/ovh.md) * [Scaleway](docs/tutorials/scaleway.md) -* [Vultr](docs/tutorials/vultr.md) * [UltraDNS](docs/tutorials/ultradns.md) * [GoDaddy](docs/tutorials/godaddy.md) * [Gandi](docs/tutorials/gandi.md) diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 6af6463ad..2c05f478b 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -52,7 +52,6 @@ For set up for a specific provider using the Helm chart, see the following links - [godaddy](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/godaddy.md#using-helm) - [ns1](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/ns1.md#using-helm) - [plural](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/plural.md#using-helm) -- [vultr](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/vultr.md#using-helm) ## Namespaced Scoped Installation diff --git a/charts/external-dns/README.md.gotmpl b/charts/external-dns/README.md.gotmpl index dc6103144..e313a2ba2 100644 --- a/charts/external-dns/README.md.gotmpl +++ b/charts/external-dns/README.md.gotmpl @@ -47,7 +47,6 @@ For set up for a specific provider using the Helm chart, see the following links - [godaddy](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/godaddy.md#using-helm) - [ns1](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/ns1.md#using-helm) - [plural](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/plural.md#using-helm) -- [vultr](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/vultr.md#using-helm) ## Namespaced Scoped Installation diff --git a/docs/ttl.md b/docs/ttl.md index 8a03f424f..7dc52c50b 100644 --- a/docs/ttl.md +++ b/docs/ttl.md @@ -45,7 +45,6 @@ Providers - [x] Linode - [x] TransIP - [x] RFC2136 -- [x] Vultr - [x] UltraDNS PRs welcome! @@ -86,8 +85,5 @@ The Linode Provider default TTL is used when the TTL is 0. The default is 24 hou ### TransIP Provider The TransIP Provider minimal TTL is used when the TTL is 0. The minimal TTL is 60s. -### Vultr Provider -The Vultr provider minimal TTL is used when the TTL is 0. The default is 1 hour. - ### UltraDNS The UltraDNS provider minimal TTL is used when the TTL is not provided. The default TTL is account level default TTL, if defined, otherwise 24 hours. diff --git a/docs/tutorials/vinyldns.md b/docs/tutorials/vinyldns.md deleted file mode 100644 index da191eaaf..000000000 --- a/docs/tutorials/vinyldns.md +++ /dev/null @@ -1,190 +0,0 @@ -# Setting up ExternalDNS for VinylDNS - -This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using VinylDNS. - -The environment vars `VINYLDNS_ACCESS_KEY`, `VINYLDNS_SECRET_KEY`, and `VINYLDNS_HOST` will be needed to run ExternalDNS with VinylDNS. - -## Create a sample deployment and service for external-dns to use - -Run an application and expose it via a Kubernetes Service: - -```console -$ kubectl run nginx --image=nginx --replicas=1 --port=80 -$ kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer -``` - -Annotate the Service with your desired external DNS name. Make sure to change `example.org` to your domain. - -```console -$ kubectl annotate service nginx "external-dns.alpha.kubernetes.io/hostname=nginx.example.org." -``` - -After the service is up and running, it should get an EXTERNAL-IP. At first this may showing as `` - -```console -$ kubectl get svc -NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE -kubernetes 10.0.0.1 443/TCP 1h -nginx 10.0.0.115 80:30543/TCP 10s -``` - -Once it's available - -```console -% kubectl get svc -NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE -kubernetes 10.0.0.1 443/TCP 1h -nginx 10.0.0.115 34.x.x.x 80:30543/TCP 2m -``` - -## Deploy ExternalDNS to Kubernetes - -Connect your `kubectl` client to the cluster you want to test ExternalDNS with. -Then apply one of the following manifests file to deploy ExternalDNS. - -**Note for examples below** - -When using `registry=txt` option, make sure to also use the `txt-prefix` and `txt-owner-id` options as well. If you try to create a `TXT` record in VinylDNS without a prefix, it will try to create a `TXT` record with the same name as your actual DNS record and fail (creating a stranded record `external-dns` cannot manage). - -### Manifest (for clusters without RBAC enabled) - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --provider=vinyldns - - --source=service - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --registry=txt - - --txt-owner-id=grizz - - --txt-prefix=txt- - env: - - name: VINYLDNS_HOST - value: "YOUR_VINYLDNS_HOST" - - name: VINYLDNS_ACCESS_KEY - value: "YOUR_VINYLDNS_ACCESS_KEY" - - name: VINYLDNS_SECRET_KEY - value: "YOUR_VINYLDNS_SECRET_KEY" -``` - -### Manifest (for clusters with RBAC enabled) - -```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns -rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: -- kind: ServiceAccount - name: external-dns - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --provider=vinyldns - - --source=service - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --registry=txt - - --txt-owner-id=grizz - - --txt-prefix=txt- - env: - env: - - name: VINYLDNS_HOST - value: "YOUR_VINYLDNS_HOST" - - name: VINYLDNS_ACCESS_KEY - value: "YOUR_VINYLDNS_ACCESS_KEY" - - name: VINYLDNS_SECRET_KEY - value: "YOUR_VINYLDNS_SECRET_KEYY -``` - -## Running a locally built version pointed to the above nginx service -Make sure your kubectl is configured correctly. Assuming you have the sources, build and run it like below. - -The vinyl access details needs to exported to the environment before running. - -```bash -make -# output skipped - -export VINYLDNS_HOST= -export VINYLDNS_ACCESS_KEY= -export VINYLDNS_SECRET_KEY= - -./build/external-dns \ - --provider=vinyldns \ - --source=service \ - --domain-filter=elements.capsps.comcast.net. \ - --zone-id-filter=20e8bfd2-3a70-4e1b-8e11-c9c1948528d3 \ - --registry=txt \ - --txt-owner-id=grizz \ - --txt-prefix=txt- \ - --namespace=default \ - --once \ - --dry-run \ - --log-level debug - -INFO[0000] running in dry-run mode. No changes to DNS records will be made. -INFO[0000] Created Kubernetes client https://some-k8s-cluster.example.com -INFO[0001] Zone: [nginx.example.org.] -# output skipped -``` - -Having `--dry-run=true` and `--log-level=debug` is a great way to see _exactly_ what VinylDNS is doing or is about to do. diff --git a/docs/tutorials/vultr.md b/docs/tutorials/vultr.md deleted file mode 100644 index 546619d30..000000000 --- a/docs/tutorials/vultr.md +++ /dev/null @@ -1,225 +0,0 @@ -# Setting up ExternalDNS for Services on Vultr - -This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Vultr DNS. - -Make sure to use **>=0.6** version of ExternalDNS for this tutorial. - -## Managing DNS with Vultr - -If you want to read up on vultr DNS service you can read the following tutorial: -[Introduction to Vultr DNS](https://www.vultr.com/docs/introduction-to-vultr-dns) - -Create a new DNS Zone where you want to create your records in. For the examples we will be using `example.com` - -## Creating Vultr Credentials - -You will need to create a new API Key which can be found on the [Vultr Dashboard](https://my.vultr.com/settings/#settingsapi). - -The environment variable `VULTR_API_KEY` will be needed to run ExternalDNS with Vultr. - -## Deploy ExternalDNS - -Connect your `kubectl` client to the cluster you want to test ExternalDNS with. - -Begin by creating a Kubernetes secret to securely store your Akamai Edge DNS Access Tokens. This key will enable ExternalDNS to authenticate with Akamai Edge DNS: - -```shell -kubectl create secret generic VULTR_API_KEY --from-literal=VULTR_API_KEY=YOUR_VULTR_API_KEY -``` - -Ensure to replace YOUR_VULTR_API_KEY, with your actual Vultr API key. - - -Then apply one of the following manifests file to deploy ExternalDNS. - -### Using Helm - -reate a values.yaml file to configure ExternalDNS to use Akamai Edge DNS as the DNS provider. This file should include the necessary environment variables: - -```shell -provider: - name: akamai -env: - - name: VULTR_API_KEY - valueFrom: - secretKeyRef: - name: VULTR_API_KEY - key: VULTR_API_KEY -``` - -Finally, install the ExternalDNS chart with Helm using the configuration specified in your values.yaml file: - -```shell -helm upgrade --install external-dns external-dns/external-dns --values values.yaml -``` - -### Manifest (for clusters without RBAC enabled) - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --provider=vultr - env: - - name: VULTR_API_KEY - valueFrom: - secretKeyRef: - name: VULTR_API_KEY - key: VULTR_API_KEY -``` - -### Manifest (for clusters with RBAC enabled) - -```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns -rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: -- kind: ServiceAccount - name: external-dns - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --provider=vultr - env: - - name: VULTR_API_KEY - valueFrom: - secretKeyRef: - name: VULTR_API_KEY - key: VULTR_API_KEY -``` - -## Deploying a Nginx Service - -Create a service file called 'nginx.yaml' with the following contents: - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx -spec: - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - image: nginx - name: nginx - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx - annotations: - external-dns.alpha.kubernetes.io/hostname: my-app.example.com -spec: - selector: - app: nginx - type: LoadBalancer - ports: - - protocol: TCP - port: 80 - targetPort: 80 -``` - -Note the annotation on the service; use the same hostname as the Vultr DNS zone created above. - -ExternalDNS uses this annotation to determine what services should be registered with DNS. Removing the annotation will cause ExternalDNS to remove the corresponding DNS records. - -Create the deployment and service: - -```console -$ kubectl create -f nginx.yaml -``` - -Depending where you run your service it can take a little while for your cloud provider to create an external IP for the service. - -Once the service has an external IP assigned, ExternalDNS will notice the new service IP address and synchronize the Vultr DNS records. - -## Verifying Vultr DNS records - -Check your [Vultr UI](https://my.vultr.com/dns/) to view the records for your Vultr DNS zone. - -Click on the zone for the one created above if a different domain was used. - -This should show the external IP address of the service as the A record for your domain. - -## Cleanup - -Now that we have verified that ExternalDNS will automatically manage Vultr DNS records, we can delete the tutorial's example: - -``` -$ kubectl delete service -f nginx.yaml -$ kubectl delete service -f externaldns.yaml -``` diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index 97a939a88..edc34f06b 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -440,7 +440,7 @@ func (cfg *Config) ParseFlags(args []string) error { app.Flag("traefik-disable-new", "Disable listeners on Resources under the traefik.io API Group").Default(strconv.FormatBool(defaultConfig.TraefikDisableNew)).BoolVar(&cfg.TraefikDisableNew) // Flags related to providers - providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rdns", "rfc2136", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "vinyldns", "vultr", "webhook"} + providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rdns", "rfc2136", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "webhook"} app.Flag("provider", "The DNS provider where the DNS records will be created (required, options: "+strings.Join(providers, ", ")+")").Required().PlaceHolder("provider").EnumVar(&cfg.Provider, providers...) app.Flag("provider-cache-time", "The time to cache the DNS provider record list requests.").Default(defaultConfig.ProviderCacheTime.String()).DurationVar(&cfg.ProviderCacheTime) app.Flag("domain-filter", "Limit possible target zones by a domain suffix; specify multiple times for multiple domains (optional)").Default("").StringsVar(&cfg.DomainFilter) diff --git a/pkg/apis/externaldns/validation/validation_test.go b/pkg/apis/externaldns/validation/validation_test.go index 03ae42df7..7f4f33c73 100644 --- a/pkg/apis/externaldns/validation/validation_test.go +++ b/pkg/apis/externaldns/validation/validation_test.go @@ -64,12 +64,6 @@ func newValidConfig(t *testing.T) *externaldns.Config { return cfg } -func addRequiredFieldsForDyn(cfg *externaldns.Config) { - cfg.LogFormat = "json" - cfg.Sources = []string{"ingress"} - cfg.Provider = "dyn" -} - func TestValidateBadIgnoreHostnameAnnotationsConfig(t *testing.T) { cfg := externaldns.NewConfig() cfg.IgnoreHostnameAnnotation = true From 7ae03cdfc7c9ccbc501f10a8fba51191e28f3a8a Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Thu, 5 Sep 2024 09:09:48 +0200 Subject: [PATCH 67/78] docs: refactor title and organisation --- README.md | 14 +++--- docs/sources/{sources.md => about.md} | 2 +- .../f5-virtualserver.md | 4 +- docs/{tutorials => sources}/gateway-api.md | 2 +- docs/{tutorials => sources}/gloo-proxy.md | 2 +- docs/{tutorials => sources}/istio.md | 13 ++++-- docs/{tutorials => sources}/kong.md | 4 +- docs/{tutorials => sources}/mx-record.md | 2 +- docs/{tutorials => sources}/nodes.md | 2 +- docs/{tutorials => sources}/ns-record.md | 2 +- docs/{tutorials => sources}/openshift.md | 3 +- docs/{tutorials => sources}/traefik-proxy.md | 4 +- docs/tutorials/akamai-edgedns.md | 2 +- docs/tutorials/alibabacloud.md | 2 +- .../tutorials/aws-load-balancer-controller.md | 2 +- ...ute53.md => aws-public-private-route53.md} | 6 +-- docs/tutorials/aws-sd.md | 2 +- docs/tutorials/aws.md | 4 +- docs/tutorials/azure-private-dns.md | 2 +- docs/tutorials/azure.md | 3 +- docs/tutorials/civo.md | 4 +- docs/tutorials/cloudflare.md | 2 +- docs/tutorials/contour.md | 2 +- docs/tutorials/coredns.md | 46 ++++++++++++++----- docs/tutorials/designate.md | 2 +- docs/tutorials/digitalocean.md | 2 +- docs/tutorials/dnsimple.md | 2 +- docs/tutorials/exoscale.md | 2 +- docs/tutorials/externalname.md | 2 +- docs/tutorials/gandi.md | 2 +- .../{nginx-ingress.md => gke-nginx.md} | 2 +- docs/tutorials/gke.md | 2 +- docs/tutorials/godaddy.md | 2 +- docs/tutorials/hostport.md | 2 +- docs/tutorials/ibmcloud.md | 4 +- docs/tutorials/kops-dns-controller.md | 4 +- docs/tutorials/kube-ingress-aws.md | 2 +- docs/tutorials/linode.md | 2 +- docs/tutorials/ns1.md | 2 +- docs/tutorials/oracle.md | 2 +- docs/tutorials/ovh.md | 2 +- docs/tutorials/pdns.md | 2 +- docs/tutorials/pihole.md | 2 +- docs/tutorials/plural.md | 2 +- docs/tutorials/rdns.md | 5 +- docs/tutorials/rfc2136.md | 13 ++++-- docs/tutorials/scaleway.md | 2 +- docs/tutorials/security-context.md | 32 ------------- docs/tutorials/tencentcloud.md | 14 +++--- docs/tutorials/transip.md | 2 +- docs/tutorials/ultradns.md | 2 +- mkdocs.yml | 7 +-- 52 files changed, 128 insertions(+), 124 deletions(-) rename docs/sources/{sources.md => about.md} (99%) rename docs/{tutorials => sources}/f5-virtualserver.md (93%) rename docs/{tutorials => sources}/gateway-api.md (98%) rename docs/{tutorials => sources}/gloo-proxy.md (97%) rename docs/{tutorials => sources}/istio.md (98%) rename docs/{tutorials => sources}/kong.md (97%) rename docs/{tutorials => sources}/mx-record.md (96%) rename docs/{tutorials => sources}/nodes.md (98%) rename docs/{tutorials => sources}/ns-record.md (93%) rename docs/{tutorials => sources}/openshift.md (99%) rename docs/{tutorials => sources}/traefik-proxy.md (98%) rename docs/tutorials/{public-private-route53.md => aws-public-private-route53.md} (97%) rename docs/tutorials/{nginx-ingress.md => gke-nginx.md} (99%) delete mode 100644 docs/tutorials/security-context.md diff --git a/README.md b/README.md index c13327094..2aea7367a 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ The following tutorials are provided: * AWS * [AWS Load Balancer Controller](docs/tutorials/aws-load-balancer-controller.md) * [Route53](docs/tutorials/aws.md) - * [Same domain for public and private Route53 zones](docs/tutorials/public-private-route53.md) + * [Same domain for public and private Route53 zones](docs/tutorials/aws-public-private-route53.md) * [Cloud Map](docs/tutorials/aws-sd.md) * [Kube Ingress AWS Controller](docs/tutorials/kube-ingress-aws.md) * [Azure DNS](docs/tutorials/azure.md) @@ -174,15 +174,13 @@ The following tutorials are provided: * [ExternalName Services](docs/tutorials/externalname.md) * Google Kubernetes Engine * [Using Google's Default Ingress Controller](docs/tutorials/gke.md) - * [Using the Nginx Ingress Controller](docs/tutorials/nginx-ingress.md) + * [Using the Nginx Ingress Controller](docs/tutorials/gke-nginx.md) * [Headless Services](docs/tutorials/hostport.md) -* [Istio Gateway Source](docs/tutorials/istio.md) -* [Kubernetes Security Context](docs/tutorials/security-context.md) +* [Istio Gateway Source](docs/sources/istio.md) * [Linode](docs/tutorials/linode.md) -* [Nginx Ingress Controller](docs/tutorials/nginx-ingress.md) * [NS1](docs/tutorials/ns1.md) -* [NS Record Creation with CRD Source](docs/tutorials/ns-record.md) -* [MX Record Creation with CRD Source](docs/tutorials/mx-record.md) +* [NS Record Creation with CRD Source](docs/sources/ns-record.md) +* [MX Record Creation with CRD Source](docs/sources/mx-record.md) * [OpenStack Designate](docs/tutorials/designate.md) * [Oracle Cloud Infrastructure (OCI) DNS](docs/tutorials/oracle.md) * [PowerDNS](docs/tutorials/pdns.md) @@ -195,7 +193,7 @@ The following tutorials are provided: * [GoDaddy](docs/tutorials/godaddy.md) * [Gandi](docs/tutorials/gandi.md) * [IBM Cloud](docs/tutorials/ibmcloud.md) -* [Nodes as source](docs/tutorials/nodes.md) +* [Nodes as source](docs/sources/nodes.md) * [TencentCloud](docs/tutorials/tencentcloud.md) * [Plural](docs/tutorials/plural.md) * [Pi-hole](docs/tutorials/pihole.md) diff --git a/docs/sources/sources.md b/docs/sources/about.md similarity index 99% rename from docs/sources/sources.md rename to docs/sources/about.md index 5f262bb40..5a7a6d3bf 100644 --- a/docs/sources/sources.md +++ b/docs/sources/about.md @@ -1,4 +1,4 @@ -# Sources +# About | Source | Resources | annotation-filter | label-filter | |---------------------------------|-------------------------------------------------------------------------------|-------------------|--------------| diff --git a/docs/tutorials/f5-virtualserver.md b/docs/sources/f5-virtualserver.md similarity index 93% rename from docs/tutorials/f5-virtualserver.md rename to docs/sources/f5-virtualserver.md index f91acabec..5df99cdf3 100644 --- a/docs/tutorials/f5-virtualserver.md +++ b/docs/sources/f5-virtualserver.md @@ -1,4 +1,4 @@ -# Configuring ExternalDNS to use the F5 Networks VirtualServer Source +# F5 Networks VirtualServer Source This tutorial describes how to configure ExternalDNS to use the F5 Networks VirtualServer Source. It is meant to supplement the other provider-specific setup tutorials. The F5 Networks VirtualServer CRD is part of [this](https://github.com/F5Networks/k8s-bigip-ctlr) project. See more in-depth info regarding the VirtualServer CRD [here](https://github.com/F5Networks/k8s-bigip-ctlr/blob/master/docs/config_examples/customResource/CustomResource.md#virtualserver). @@ -30,4 +30,4 @@ Note that, in case you're not installing via Helm, you'll need the following in - get - list - watch -``` \ No newline at end of file +``` diff --git a/docs/tutorials/gateway-api.md b/docs/sources/gateway-api.md similarity index 98% rename from docs/tutorials/gateway-api.md rename to docs/sources/gateway-api.md index 647ca76fc..3f1530978 100644 --- a/docs/tutorials/gateway-api.md +++ b/docs/sources/gateway-api.md @@ -1,4 +1,4 @@ -# Configuring ExternalDNS to use Gateway API Route Sources +# Gateway API Route Sources This describes how to configure ExternalDNS to use Gateway API Route sources. It is meant to supplement the other provider-specific setup tutorials. diff --git a/docs/tutorials/gloo-proxy.md b/docs/sources/gloo-proxy.md similarity index 97% rename from docs/tutorials/gloo-proxy.md rename to docs/sources/gloo-proxy.md index 077372c78..ceb41419f 100644 --- a/docs/tutorials/gloo-proxy.md +++ b/docs/sources/gloo-proxy.md @@ -1,4 +1,4 @@ -# Configuring ExternalDNS to use the Gloo Proxy Source +# Gloo Proxy Source This tutorial describes how to configure ExternalDNS to use the Gloo Proxy source. It is meant to supplement the other provider-specific setup tutorials. diff --git a/docs/tutorials/istio.md b/docs/sources/istio.md similarity index 98% rename from docs/tutorials/istio.md rename to docs/sources/istio.md index f46876ba2..9459a3361 100644 --- a/docs/tutorials/istio.md +++ b/docs/sources/istio.md @@ -1,4 +1,5 @@ -# Configuring ExternalDNS to use the Istio Gateway and/or Istio Virtual Service Source +# Istio Gateway / Virtual Service Source + This tutorial describes how to configure ExternalDNS to use the Istio Gateway source. It is meant to supplement the other provider-specific setup tutorials. @@ -43,6 +44,7 @@ spec: ``` ### Manifest (for clusters with RBAC enabled) + ```yaml apiVersion: v1 kind: ServiceAccount @@ -58,7 +60,7 @@ rules: resources: ["services","endpoints","pods"] verbs: ["get","watch","list"] - apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] + resources: ["ingresses"] verbs: ["get","watch","list"] - apiGroups: [""] resources: ["nodes"] @@ -134,7 +136,7 @@ kubectl patch clusterrole external-dns --type='json' \ ### Verify that Istio Gateway/VirtualService Source works -Follow the [Istio ingress traffic tutorial](https://istio.io/docs/tasks/traffic-management/ingress/) +Follow the [Istio ingress traffic tutorial](https://istio.io/docs/tasks/traffic-management/ingress/) to deploy a sample service that will be exposed outside of the service mesh. The following are relevant snippets from that tutorial. @@ -150,7 +152,9 @@ $ kubectl apply -f <(istioctl kube-inject -f https://raw.githubusercontent.com/i ``` #### Using a Gateway as a source + ##### Create an Istio Gateway: + ```bash $ cat <=0.5.6** version of ExternalDNS for this tutorial diff --git a/docs/tutorials/aws-load-balancer-controller.md b/docs/tutorials/aws-load-balancer-controller.md index 98bc5da69..7cd6285e7 100644 --- a/docs/tutorials/aws-load-balancer-controller.md +++ b/docs/tutorials/aws-load-balancer-controller.md @@ -1,4 +1,4 @@ -# Using ExternalDNS with aws-load-balancer-controller +# AWS Load Balancer Controller This tutorial describes how to use ExternalDNS with the [aws-load-balancer-controller][1]. diff --git a/docs/tutorials/public-private-route53.md b/docs/tutorials/aws-public-private-route53.md similarity index 97% rename from docs/tutorials/public-private-route53.md rename to docs/tutorials/aws-public-private-route53.md index a93d4e4d9..033bd32af 100644 --- a/docs/tutorials/public-private-route53.md +++ b/docs/tutorials/aws-public-private-route53.md @@ -1,10 +1,10 @@ -# Setting up ExternalDNS using the same domain for public and private Route53 zones +# AWS Route53 with same domain for public and private zones This tutorial describes how to setup ExternalDNS using the same domain for public and private Route53 zones and [nginx-ingress-controller](https://github.com/kubernetes/ingress-nginx). It also outlines how to use [cert-manager](https://github.com/jetstack/cert-manager) to automatically issue SSL certificates from [Let's Encrypt](https://letsencrypt.org/) for both public and private records. ## Deploy public nginx-ingress-controller -Consult [External DNS nginx ingress docs](nginx-ingress.md) for installation guidelines. +You may be interested with [GKE with nginx ingress](gke-nginx.md) for installation guidelines. Specify `ingress-class` in nginx-ingress-controller container args: @@ -107,8 +107,6 @@ spec: ## Deploy private nginx-ingress-controller -Consult [External DNS nginx ingress docs](nginx-ingress.md) for installation guidelines. - Make sure to specify `ingress-class` in nginx-ingress-controller container args: ```yaml diff --git a/docs/tutorials/aws-sd.md b/docs/tutorials/aws-sd.md index 9741b5f9d..b09513246 100644 --- a/docs/tutorials/aws-sd.md +++ b/docs/tutorials/aws-sd.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS using AWS Cloud Map API +# AWS Cloud Map API This tutorial describes how to set up ExternalDNS for usage within a Kubernetes cluster with [AWS Cloud Map API](https://docs.aws.amazon.com/cloud-map/). diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 98826dd55..013a62c35 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on AWS +# AWS This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster on AWS. Make sure to use **>=0.15.0** version of ExternalDNS for this tutorial @@ -525,7 +525,7 @@ Annotations which are specific to AWS. ### alias -`external-dns.alpha.kubernetes.io/alias` if set to `true` on an ingress, it will create an ALIAS record when the target is an ALIAS as well. To make the target an alias, the ingress needs to be configured correctly as described in [the docs](./nginx-ingress.md#with-a-separate-tcp-load-balancer). In particular, the argument `--publish-service=default/nginx-ingress-controller` has to be set on the `nginx-ingress-controller` container. If one uses the `nginx-ingress` Helm chart, this flag can be set with the `controller.publishService.enabled` configuration option. +`external-dns.alpha.kubernetes.io/alias` if set to `true` on an ingress, it will create an ALIAS record when the target is an ALIAS as well. To make the target an alias, the ingress needs to be configured correctly as described in [the docs](./gke-nginx.md#with-a-separate-tcp-load-balancer). In particular, the argument `--publish-service=default/nginx-ingress-controller` has to be set on the `nginx-ingress-controller` container. If one uses the `nginx-ingress` Helm chart, this flag can be set with the `controller.publishService.enabled` configuration option. ### target-hosted-zone diff --git a/docs/tutorials/azure-private-dns.md b/docs/tutorials/azure-private-dns.md index bd1505611..831ea132a 100644 --- a/docs/tutorials/azure-private-dns.md +++ b/docs/tutorials/azure-private-dns.md @@ -1,4 +1,4 @@ -# Set up ExternalDNS for Azure Private DNS +# Azure Private DNS This tutorial describes how to set up ExternalDNS for managing records in Azure Private DNS. diff --git a/docs/tutorials/azure.md b/docs/tutorials/azure.md index ab6ad77f9..592e2086b 100644 --- a/docs/tutorials/azure.md +++ b/docs/tutorials/azure.md @@ -1,5 +1,4 @@ - -# Setting up ExternalDNS for Services on Azure +# Azure DNS This tutorial describes how to setup ExternalDNS for [Azure DNS](https://azure.microsoft.com/services/dns/) with [Azure Kubernetes Service](https://docs.microsoft.com/azure/aks/). diff --git a/docs/tutorials/civo.md b/docs/tutorials/civo.md index 057a12694..5e008311d 100644 --- a/docs/tutorials/civo.md +++ b/docs/tutorials/civo.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on Civo +# Civo DNS This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Civo DNS Manager. @@ -183,4 +183,4 @@ Now that we have verified that ExternalDNS will automatically manage Civo DNS re ``` $ kubectl delete service -f nginx.yaml $ kubectl delete service -f externaldns.yaml -``` \ No newline at end of file +``` diff --git a/docs/tutorials/cloudflare.md b/docs/tutorials/cloudflare.md index dcf8e85f0..88b76f1b6 100644 --- a/docs/tutorials/cloudflare.md +++ b/docs/tutorials/cloudflare.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on Cloudflare +# Cloudflare DNS This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Cloudflare DNS. diff --git a/docs/tutorials/contour.md b/docs/tutorials/contour.md index c2f85d8a1..eceaa2af2 100644 --- a/docs/tutorials/contour.md +++ b/docs/tutorials/contour.md @@ -1,4 +1,4 @@ -# Setting up External DNS with Contour +# Contour HTTPProxy This tutorial describes how to configure External DNS to use the Contour `HTTPProxy` source. Using the `HTTPProxy` resource with External DNS requires Contour version 1.5 or greater. diff --git a/docs/tutorials/coredns.md b/docs/tutorials/coredns.md index 38d8f5b7d..b2765e92b 100644 --- a/docs/tutorials/coredns.md +++ b/docs/tutorials/coredns.md @@ -1,39 +1,52 @@ -# Setting up ExternalDNS for CoreDNS with minikube +# CoreDNS with minikube + This tutorial describes how to setup ExternalDNS for usage within a [minikube](https://github.com/kubernetes/minikube) cluster that makes use of [CoreDNS](https://github.com/coredns/coredns) and [nginx ingress controller](https://github.com/kubernetes/ingress-nginx). + You need to: + * install CoreDNS with [etcd](https://github.com/etcd-io/etcd) enabled * install external-dns with coredns as a provider * enable ingress controller for the minikube cluster - ## Creating a cluster -``` + +```shell minikube start ``` ## Installing CoreDNS with etcd enabled + Helm chart is used to install etcd and CoreDNS. + ### Initializing helm chart -``` + +```shell helm init ``` + ### Installing etcd + [etcd operator](https://github.com/coreos/etcd-operator) is used to manage etcd clusters. ``` helm install stable/etcd-operator --name my-etcd-op ``` + etcd cluster is installed with example yaml from etcd operator website. -``` + +```shell kubectl apply -f https://raw.githubusercontent.com/coreos/etcd-operator/HEAD/example/example-etcd-cluster.yaml ``` ### Installing CoreDNS + In order to make CoreDNS work with etcd backend, values.yaml of the chart should be changed with corresponding configurations. + ``` wget https://raw.githubusercontent.com/helm/charts/HEAD/stable/coredns/values.yaml ``` You need to edit/patch the file with below diff + ```diff diff --git a/values.yaml b/values.yaml index 964e72b..e2fa934 100644 @@ -68,23 +81,29 @@ index 964e72b..e2fa934 100644 # Complete example with all the options: # - zones: # the `zones` block can be left out entirely, defaults to "." ``` + **Note**: + * IP address of etcd's endpoint should be get from etcd client service. It should be "example-etcd-cluster-client" in this example. This IP address is used through this document for etcd endpoint configuration. -``` + +```shell $ kubectl get svc example-etcd-cluster-client NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-etcd-cluster-client ClusterIP 10.105.68.165 2379/TCP 16m ``` + * Parameters should configure your own domain. "example.org" is used in this example. - After configuration done in values.yaml, you can install coredns chart. -``` + +```shell helm install --name my-coredns --values values.yaml stable/coredns ``` ## Installing ExternalDNS + ### Install external ExternalDNS + ETCD_URLS is configured to etcd client service address. Optionally, you can configure ETCD_USERNAME and ETCD_PASSWORD for authenticating to etcd. It is also possible to connect to the etcd cluster via HTTPS using the following environment variables: ETCD_CA_FILE, ETCD_CERT_FILE, ETCD_KEY_FILE, ETCD_TLS_SERVER_NAME, ETCD_TLS_INSECURE. @@ -187,13 +206,16 @@ spec: ``` ## Enable the ingress controller + You can use the ingress controller in minikube cluster. It needs to enable ingress addon in the cluster. -``` + +```shell minikube addons enable ingress ``` ## Testing ingress example -``` + +```shell $ cat ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress @@ -213,9 +235,9 @@ $ kubectl apply -f ingress.yaml ingress.extensions "nginx" created ``` - Wait a moment until DNS has the ingress IP. The DNS service IP is from CoreDNS service. It is "my-coredns-coredns" in this example. -``` + +```shell $ kubectl get svc my-coredns-coredns NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-coredns-coredns ClusterIP 10.100.4.143 53/UDP 12m diff --git a/docs/tutorials/designate.md b/docs/tutorials/designate.md index 9d84c6130..97e5e06ab 100644 --- a/docs/tutorials/designate.md +++ b/docs/tutorials/designate.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on OpenStack Designate +# Designate DNS from OpenStack This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using OpenStack Designate DNS. diff --git a/docs/tutorials/digitalocean.md b/docs/tutorials/digitalocean.md index 705c8f433..e6f331408 100644 --- a/docs/tutorials/digitalocean.md +++ b/docs/tutorials/digitalocean.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on DigitalOcean +# DigitalOcean DNS This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using DigitalOcean DNS. diff --git a/docs/tutorials/dnsimple.md b/docs/tutorials/dnsimple.md index dee483a72..5014a29af 100644 --- a/docs/tutorials/dnsimple.md +++ b/docs/tutorials/dnsimple.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on DNSimple +# DNSimple This tutorial describes how to setup ExternalDNS for usage with DNSimple. diff --git a/docs/tutorials/exoscale.md b/docs/tutorials/exoscale.md index 6b991e7de..960556122 100644 --- a/docs/tutorials/exoscale.md +++ b/docs/tutorials/exoscale.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Exoscale +# Exoscale ## Prerequisites diff --git a/docs/tutorials/externalname.md b/docs/tutorials/externalname.md index 0dd8e5ebe..f4f6ef458 100644 --- a/docs/tutorials/externalname.md +++ b/docs/tutorials/externalname.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for ExternalName Services +# ExternalName Services This tutorial describes how to setup ExternalDNS for usage in conjunction with an ExternalName service. diff --git a/docs/tutorials/gandi.md b/docs/tutorials/gandi.md index 52c674858..ff65893dd 100644 --- a/docs/tutorials/gandi.md +++ b/docs/tutorials/gandi.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on Gandi +# Gandi This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Gandi. diff --git a/docs/tutorials/nginx-ingress.md b/docs/tutorials/gke-nginx.md similarity index 99% rename from docs/tutorials/nginx-ingress.md rename to docs/tutorials/gke-nginx.md index ca67a6a64..0b2e82bc1 100644 --- a/docs/tutorials/nginx-ingress.md +++ b/docs/tutorials/gke-nginx.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS on GKE with nginx-ingress-controller +# GKE with nginx-ingress-controller This tutorial describes how to setup ExternalDNS for usage within a GKE cluster that doesn't make use of Google's [default ingress controller](https://github.com/kubernetes/ingress-gce) but rather uses [nginx-ingress-controller](https://github.com/kubernetes/ingress-nginx) for that task. diff --git a/docs/tutorials/gke.md b/docs/tutorials/gke.md index 8e89d4326..1f6050c63 100644 --- a/docs/tutorials/gke.md +++ b/docs/tutorials/gke.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS on Google Kubernetes Engine +# GKE with default controller This tutorial describes how to setup ExternalDNS for usage within a [GKE](https://cloud.google.com/kubernetes-engine) ([Google Kuberentes Engine](https://cloud.google.com/kubernetes-engine)) cluster. Make sure to use **>=0.11.0** version of ExternalDNS for this tutorial diff --git a/docs/tutorials/godaddy.md b/docs/tutorials/godaddy.md index de74c749c..7e036f02b 100644 --- a/docs/tutorials/godaddy.md +++ b/docs/tutorials/godaddy.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on GoDaddy +# GoDaddy This tutorial describes how to setup ExternalDNS for use within a Kubernetes cluster using GoDaddy DNS. diff --git a/docs/tutorials/hostport.md b/docs/tutorials/hostport.md index 67c9e2fb3..208411729 100644 --- a/docs/tutorials/hostport.md +++ b/docs/tutorials/hostport.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Headless Services +# Headless Services This tutorial describes how to setup ExternalDNS for usage in conjunction with a Headless service. diff --git a/docs/tutorials/ibmcloud.md b/docs/tutorials/ibmcloud.md index 926435c77..9df1bd7dd 100644 --- a/docs/tutorials/ibmcloud.md +++ b/docs/tutorials/ibmcloud.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on IBMCloud +# IBMCloud This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using IBMCloud DNS. @@ -259,4 +259,4 @@ Using the `external-dns.alpha.kubernetes.io/ibmcloud-proxied: "true"` annotation By default, IBMCloud DNS Services don't active your private zone with new zone added, with externale DNS, you can use `external-dns.alpha.kubernetes.io/ibmcloud-vpc: "crn:v1:bluemix:public:is:us-south:a/bcf1865e99742d38d2d5fc3fb80a5496::vpc:r006-74353823-a60d-42e4-97c5-5e2551278435"` annotation on your ingress or service, it will active your private zone with in specific VPC for that record created in. this setting won't work if the private zone was active already. -Note: the annotaion value is the VPC CRN, every IBM Cloud service have a valid CRN. \ No newline at end of file +Note: the annotaion value is the VPC CRN, every IBM Cloud service have a valid CRN. diff --git a/docs/tutorials/kops-dns-controller.md b/docs/tutorials/kops-dns-controller.md index 04da968bf..d2facdad1 100644 --- a/docs/tutorials/kops-dns-controller.md +++ b/docs/tutorials/kops-dns-controller.md @@ -1,4 +1,4 @@ -# kOps dns-controller compatibility mode +# kOps dns-controller kOps includes a dns-controller that is primarily used to bootstrap the cluster, but can also be used for provisioning DNS entries for Services and Ingress. @@ -34,4 +34,4 @@ Annotations added to Pods will always result in an A record being created. * For a Service of Type=LoadBalancer, ExternalDNS looks at Status.LoadBalancer.Ingress. It will create CNAMEs to hostnames, and A records for IP addresses. It will do this for both internal and external names -* For a Service of Type=NodePort, ExternalDNS will create A records for the Node's internal/external IP addresses, as appropriate. \ No newline at end of file +* For a Service of Type=NodePort, ExternalDNS will create A records for the Node's internal/external IP addresses, as appropriate. diff --git a/docs/tutorials/kube-ingress-aws.md b/docs/tutorials/kube-ingress-aws.md index 5cf37d4ec..ee9ecd212 100644 --- a/docs/tutorials/kube-ingress-aws.md +++ b/docs/tutorials/kube-ingress-aws.md @@ -1,4 +1,4 @@ -# Using ExternalDNS with kube-ingress-aws-controller +# kube-ingress-aws-controller This tutorial describes how to use ExternalDNS with the [kube-ingress-aws-controller][1]. diff --git a/docs/tutorials/linode.md b/docs/tutorials/linode.md index bc5ad7dc2..00b3a7f3c 100644 --- a/docs/tutorials/linode.md +++ b/docs/tutorials/linode.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on Linode +# Linode This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Linode DNS Manager. diff --git a/docs/tutorials/ns1.md b/docs/tutorials/ns1.md index 7d3057b67..48659a1fa 100644 --- a/docs/tutorials/ns1.md +++ b/docs/tutorials/ns1.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on NS1 +# NS1 This tutorial describes how to setup ExternalDNS for use within a Kubernetes cluster using NS1 DNS. diff --git a/docs/tutorials/oracle.md b/docs/tutorials/oracle.md index 2365f2243..92321236a 100644 --- a/docs/tutorials/oracle.md +++ b/docs/tutorials/oracle.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Oracle Cloud Infrastructure (OCI) +# Oracle Cloud Infrastructure This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using OCI DNS. diff --git a/docs/tutorials/ovh.md b/docs/tutorials/ovh.md index dcf1a0265..f364d95b6 100644 --- a/docs/tutorials/ovh.md +++ b/docs/tutorials/ovh.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on OVH +# OVHcloud This tutorial describes how to setup ExternalDNS for use within a Kubernetes cluster using OVH DNS. diff --git a/docs/tutorials/pdns.md b/docs/tutorials/pdns.md index 72aa3fc85..b973cfa5d 100644 --- a/docs/tutorials/pdns.md +++ b/docs/tutorials/pdns.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for PowerDNS +# PowerDNS ## Prerequisites diff --git a/docs/tutorials/pihole.md b/docs/tutorials/pihole.md index b4e473e47..fdfa7118e 100644 --- a/docs/tutorials/pihole.md +++ b/docs/tutorials/pihole.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Pi-hole +# Pi-hole This tutorial describes how to setup ExternalDNS to sync records with Pi-hole's Custom DNS. Pi-hole has an internal list it checks last when resolving requests. This list can contain any number of arbitrary A, AAAA or CNAME records. diff --git a/docs/tutorials/plural.md b/docs/tutorials/plural.md index cd6afc974..74f36c42f 100644 --- a/docs/tutorials/plural.md +++ b/docs/tutorials/plural.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on Plural +# Plural This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Plural DNS. diff --git a/docs/tutorials/rdns.md b/docs/tutorials/rdns.md index 59b5f5684..803e44785 100644 --- a/docs/tutorials/rdns.md +++ b/docs/tutorials/rdns.md @@ -1,6 +1,9 @@ -# Setting up ExternalDNS for RancherDNS(RDNS) with kubernetes +# RancherDNS + This tutorial describes how to setup ExternalDNS for usage within a kubernetes cluster that makes use of [RDNS](https://github.com/rancher/rdns-server) and [nginx ingress controller](https://github.com/kubernetes/ingress-nginx). + You need to: + * install RDNS with [etcd](https://github.com/etcd-io/etcd) enabled * install external-dns with rdns as a provider diff --git a/docs/tutorials/rfc2136.md b/docs/tutorials/rfc2136.md index 0135e107e..ca0987e76 100644 --- a/docs/tutorials/rfc2136.md +++ b/docs/tutorials/rfc2136.md @@ -1,17 +1,21 @@ -# Configuring RFC2136 provider +# RFC2136 provider + This tutorial describes how to use the RFC2136 with either BIND or Windows DNS. ## Using with BIND + To use external-dns with BIND: generate/procure a key, configure DNS and add a deployment of external-dns. ### Server credentials: + - RFC2136 was developed for and tested with [BIND](https://www.isc.org/downloads/bind/) DNS server. This documentation assumes that you already have a configured and working server. If you don't, please check BIND documents or tutorials. - If your DNS is provided for you, ask for a TSIG key authorized to update and transfer the zone you wish to update. The key will look something like below. Skip the next steps wrt BIND setup. + ```text key "externaldns-key" { algorithm hmac-sha256; @@ -25,6 +29,7 @@ a key printed to standard out like above (or in the case of dnssec-keygen in a file called `Kexternaldns......key`). ### BIND Configuration: + If you do not administer your own DNS, skip to RFC provider configuration - Edit your named.conf file (or appropriate included file) and add/change the @@ -75,9 +80,11 @@ following. ### Using external-dns + To use external-dns add an ingress or a LoadBalancer service with a host that is part of the domain-filter. For example both of the following would produce A records. + ```text apiVersion: v1 kind: Service @@ -133,8 +140,8 @@ tutorial and are covered in the main documentation. ### Generate reverse DNS records -If you want to generate reverse DNS records for your services, you have to enable the functionality using the `--rfc2136-create-ptr` -flag. You have also to add the zone to the list of zones managed by ExternalDNS via the `--rfc2136-zone` and `--domain-filter` flags. +If you want to generate reverse DNS records for your services, you have to enable the functionality using the `--rfc2136-create-ptr` +flag. You have also to add the zone to the list of zones managed by ExternalDNS via the `--rfc2136-zone` and `--domain-filter` flags. An example of a valid configuration is the following: ```--domain-filter=157.168.192.in-addr.arpa --rfc2136-zone=157.168.192.in-addr.arpa``` diff --git a/docs/tutorials/scaleway.md b/docs/tutorials/scaleway.md index 7a948285e..237879dbc 100644 --- a/docs/tutorials/scaleway.md +++ b/docs/tutorials/scaleway.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on Scaleway +# Scaleway This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Scaleway DNS. diff --git a/docs/tutorials/security-context.md b/docs/tutorials/security-context.md deleted file mode 100644 index e34acf426..000000000 --- a/docs/tutorials/security-context.md +++ /dev/null @@ -1,32 +0,0 @@ -# Running ExternalDNS with limited privileges - -You can run ExternalDNS with reduced privileges since `v0.5.6` using the following `SecurityContext`. - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - ... # your arguments here - securityContext: - runAsNonRoot: true - runAsUser: 65534 - readOnlyRootFilesystem: true - capabilities: - drop: ["ALL"] -``` diff --git a/docs/tutorials/tencentcloud.md b/docs/tutorials/tencentcloud.md index b9ff0b566..0624e2c07 100644 --- a/docs/tutorials/tencentcloud.md +++ b/docs/tutorials/tencentcloud.md @@ -1,6 +1,7 @@ -# Setting up ExternalDNS for Tencent Cloud +# Tencent Cloud ## External Dns Version + * Make sure to use **>=0.13.1** version of ExternalDNS for this tutorial ## Set up PrivateDns or DNSPod @@ -8,17 +9,18 @@ Tencent Cloud DNSPod Service is the domain name resolution and management service for public access. Tencent Cloud PrivateDNS Service is the domain name resolution and management service for VPC internal access. -* If you want to use internal dns service in Tencent Cloud. -1. Set up the args `--tencent-cloud-zone-type=private` +* If you want to use internal dns service in Tencent Cloud. +1. Set up the args `--tencent-cloud-zone-type=private` 2. Create a DNS domain in PrivateDNS console. DNS domain which will contain the managed DNS records. * If you want to use public dns service in Tencent Cloud. -1. Set up the args `--tencent-cloud-zone-type=public` +1. Set up the args `--tencent-cloud-zone-type=public` 2. Create a Domain in DnsPod console. DNS domain which will contain the managed DNS records. ## Set up CAM for API Key In Tencent CAM Console. you may get the secretId and secretKey pair. make sure the key pair has those Policy. + ```json { "version": "2.0", @@ -72,7 +74,7 @@ rules: resources: ["services","endpoints","pods"] verbs: ["get","watch","list"] - apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] + resources: ["ingresses"] verbs: ["get","watch","list"] - apiGroups: [""] resources: ["nodes"] @@ -99,7 +101,7 @@ data: tencent-cloud.json: | { "regionId": "ap-shanghai", - "secretId": "******", + "secretId": "******", "secretKey": "******", "vpcId": "vpc-******", "internetEndpoint": false # Default: false. Access the Tencent API through the intranet. If you need to deploy on the public network, you need to change to true diff --git a/docs/tutorials/transip.md b/docs/tutorials/transip.md index f9eeedcb5..b5bdb1598 100644 --- a/docs/tutorials/transip.md +++ b/docs/tutorials/transip.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on TransIP +# TransIP This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using TransIP. diff --git a/docs/tutorials/ultradns.md b/docs/tutorials/ultradns.md index 68f37aa03..6a9530a84 100644 --- a/docs/tutorials/ultradns.md +++ b/docs/tutorials/ultradns.md @@ -1,4 +1,4 @@ -# Setting up ExternalDNS for Services on UltraDNS +# UltraDNS This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using UltraDNS. diff --git a/mkdocs.yml b/mkdocs.yml index 0b4bbe54a..4b11f645b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,7 +2,6 @@ site_name: external-dns site_author: external-dns maintainers repo_name: kubernetes-sigs/external-dns repo_url: https://github.com/kubernetes-sigs/external-dns/ -trademark: https://www.linuxfoundation.org/legal/trademark-usage docs_dir: . @@ -19,11 +18,7 @@ nav: - Tutorials: docs/tutorials/* - Annotations: - About: docs/annotations/annotations.md - - Sources: - - About: docs/sources/sources.md - - Gateway: docs/sources/gateway.md - - Ingress: docs/sources/ingress.md - - Service: docs/sources/service.md + - Sources: docs/sources/* - Registries: - About: docs/registry/registry.md - TXT: docs/registry/txt.md From 50a53c8868a64a0afe10975105459604201edfc1 Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Thu, 5 Sep 2024 09:15:49 +0200 Subject: [PATCH 68/78] add deprecation notice on coredns tutorial --- docs/tutorials/coredns.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/tutorials/coredns.md b/docs/tutorials/coredns.md index b2765e92b..398ae2133 100644 --- a/docs/tutorials/coredns.md +++ b/docs/tutorials/coredns.md @@ -1,5 +1,9 @@ # CoreDNS with minikube +:warning: This tutorial is out of date. + +:information_source: PRs to update it are welcome ! + This tutorial describes how to setup ExternalDNS for usage within a [minikube](https://github.com/kubernetes/minikube) cluster that makes use of [CoreDNS](https://github.com/coredns/coredns) and [nginx ingress controller](https://github.com/kubernetes/ingress-nginx). You need to: From 25223cc2f17a90fb0b26147684f3fe959ddf9a39 Mon Sep 17 00:00:00 2001 From: Raffaele Di Fazio Date: Thu, 5 Sep 2024 19:34:47 +0200 Subject: [PATCH 69/78] bump kustomize version to v0.15.0 Signed-off-by: Raffaele Di Fazio --- kustomize/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kustomize/kustomization.yaml b/kustomize/kustomization.yaml index 37ea99655..679d56974 100644 --- a/kustomize/kustomization.yaml +++ b/kustomize/kustomization.yaml @@ -3,7 +3,7 @@ kind: Kustomization images: - name: registry.k8s.io/external-dns/external-dns - newTag: v0.14.2 + newTag: v0.15.0 resources: - ./external-dns-deployment.yaml From 2313af8bd29d1548a3a97a029a3554dba1c046ed Mon Sep 17 00:00:00 2001 From: Raffaele Di Fazio Date: Thu, 5 Sep 2024 19:37:57 +0200 Subject: [PATCH 70/78] update the docs to v0.15.0 Signed-off-by: Raffaele Di Fazio --- docs/faq.md | 2 +- docs/registry/dynamodb.md | 2 +- docs/release.md | 2 +- docs/tutorials/akamai-edgedns.md | 4 ++-- docs/tutorials/alibabacloud.md | 4 ++-- docs/tutorials/aws-sd.md | 4 ++-- docs/tutorials/aws.md | 4 ++-- docs/tutorials/azure-private-dns.md | 6 +++--- docs/tutorials/azure.md | 6 +++--- docs/tutorials/civo.md | 4 ++-- docs/tutorials/cloudflare.md | 4 ++-- docs/tutorials/contour.md | 4 ++-- docs/tutorials/coredns.md | 4 ++-- docs/tutorials/designate.md | 4 ++-- docs/tutorials/digitalocean.md | 4 ++-- docs/tutorials/dnsimple.md | 4 ++-- docs/tutorials/exoscale.md | 2 +- docs/tutorials/externalname.md | 2 +- docs/tutorials/gandi.md | 4 ++-- docs/tutorials/gateway-api.md | 2 +- docs/tutorials/gke.md | 2 +- docs/tutorials/gloo-proxy.md | 4 ++-- docs/tutorials/godaddy.md | 4 ++-- docs/tutorials/hostport.md | 4 ++-- docs/tutorials/ibmcloud.md | 4 ++-- docs/tutorials/istio.md | 4 ++-- docs/tutorials/kong.md | 4 ++-- docs/tutorials/linode.md | 4 ++-- docs/tutorials/nginx-ingress.md | 4 ++-- docs/tutorials/nodes.md | 4 ++-- docs/tutorials/ns1.md | 4 ++-- docs/tutorials/openshift.md | 4 ++-- docs/tutorials/oracle.md | 2 +- docs/tutorials/ovh.md | 4 ++-- docs/tutorials/pdns.md | 2 +- docs/tutorials/pihole.md | 2 +- docs/tutorials/plural.md | 4 ++-- docs/tutorials/public-private-route53.md | 4 ++-- docs/tutorials/rdns.md | 4 ++-- docs/tutorials/rfc2136.md | 4 ++-- docs/tutorials/scaleway.md | 4 ++-- docs/tutorials/security-context.md | 2 +- docs/tutorials/tencentcloud.md | 2 +- docs/tutorials/traefik-proxy.md | 4 ++-- docs/tutorials/transip.md | 4 ++-- docs/tutorials/ultradns.md | 4 ++-- 46 files changed, 82 insertions(+), 82 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 4f1fa26bc..d8666f363 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -221,7 +221,7 @@ $ docker run \ -e EXTERNAL_DNS_SOURCE=$'service\ningress' \ -e EXTERNAL_DNS_PROVIDER=google \ -e EXTERNAL_DNS_DOMAIN_FILTER=$'foo.com\nbar.com' \ - registry.k8s.io/external-dns/external-dns:v0.14.2 + registry.k8s.io/external-dns/external-dns:v0.15.0 time="2017-08-08T14:10:26Z" level=info msg="config: &{APIServerURL: KubeConfig: Sources:[service ingress] Namespace: ... ``` diff --git a/docs/registry/dynamodb.md b/docs/registry/dynamodb.md index cc565b9b5..545e09e16 100644 --- a/docs/registry/dynamodb.md +++ b/docs/registry/dynamodb.md @@ -81,7 +81,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.1 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/release.md b/docs/release.md index c053df04c..16c3fa791 100644 --- a/docs/release.md +++ b/docs/release.md @@ -31,7 +31,7 @@ You must be an official maintainer of the project to be able to do a release. - Branch out from the default branch and run `scripts/kustomize-version-updater.sh` to update the image tag used in the kustomization.yaml. - Create an issue to release the corresponding Helm chart via the chart release process (below) assigned to a chart maintainer - Create a PR with the kustomize change. -- Create a PR to replace all versions for docker images in the tutorials. A possible script to use is `sd registry.k8s.io/external-dns/external-dns:.* registry.k8s.io/external-dns/external-dns:v0.14.2 $(fd --type file)` which uses the `fd` and `sd` utilities. +- Create a PR to replace all versions for docker images in the tutorials. A possible script to use is `sd registry.k8s.io/external-dns/external-dns:v0.15.0 - Once the PR is merged, all is done :-) ## How to release a new chart version diff --git a/docs/tutorials/akamai-edgedns.md b/docs/tutorials/akamai-edgedns.md index 97ac33b37..12cd5dd9e 100644 --- a/docs/tutorials/akamai-edgedns.md +++ b/docs/tutorials/akamai-edgedns.md @@ -104,7 +104,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # or ingress or both - --provider=akamai @@ -190,7 +190,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # or ingress or both - --provider=akamai diff --git a/docs/tutorials/alibabacloud.md b/docs/tutorials/alibabacloud.md index 6fec8dde6..673cef715 100644 --- a/docs/tutorials/alibabacloud.md +++ b/docs/tutorials/alibabacloud.md @@ -113,7 +113,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -187,7 +187,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/tutorials/aws-sd.md b/docs/tutorials/aws-sd.md index 9741b5f9d..bc103b755 100644 --- a/docs/tutorials/aws-sd.md +++ b/docs/tutorials/aws-sd.md @@ -81,7 +81,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 env: - name: AWS_REGION value: us-east-1 # put your CloudMap NameSpace region @@ -148,7 +148,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 env: - name: AWS_REGION value: us-east-1 # put your CloudMap NameSpace region diff --git a/docs/tutorials/aws.md b/docs/tutorials/aws.md index 98826dd55..66e714049 100644 --- a/docs/tutorials/aws.md +++ b/docs/tutorials/aws.md @@ -442,7 +442,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -951,7 +951,7 @@ A simple way to implement randomised startup is with an init container: spec: initContainers: - name: init-jitter - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 command: - /bin/sh - -c diff --git a/docs/tutorials/azure-private-dns.md b/docs/tutorials/azure-private-dns.md index bd1505611..ba4038942 100644 --- a/docs/tutorials/azure-private-dns.md +++ b/docs/tutorials/azure-private-dns.md @@ -130,7 +130,7 @@ spec: spec: containers: - name: externaldns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -201,7 +201,7 @@ spec: serviceAccountName: externaldns containers: - name: externaldns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -272,7 +272,7 @@ spec: serviceAccountName: externaldns containers: - name: externaldns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/tutorials/azure.md b/docs/tutorials/azure.md index ab6ad77f9..27c4c2e6d 100644 --- a/docs/tutorials/azure.md +++ b/docs/tutorials/azure.md @@ -518,7 +518,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -586,7 +586,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -657,7 +657,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/tutorials/civo.md b/docs/tutorials/civo.md index 057a12694..a4fea9a32 100644 --- a/docs/tutorials/civo.md +++ b/docs/tutorials/civo.md @@ -40,7 +40,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -104,7 +104,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/cloudflare.md b/docs/tutorials/cloudflare.md index dcf8e85f0..a5d670fe2 100644 --- a/docs/tutorials/cloudflare.md +++ b/docs/tutorials/cloudflare.md @@ -121,7 +121,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -196,7 +196,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/contour.md b/docs/tutorials/contour.md index c2f85d8a1..0ffc9c398 100644 --- a/docs/tutorials/contour.md +++ b/docs/tutorials/contour.md @@ -24,7 +24,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -93,7 +93,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/tutorials/coredns.md b/docs/tutorials/coredns.md index 38d8f5b7d..67d32c615 100644 --- a/docs/tutorials/coredns.md +++ b/docs/tutorials/coredns.md @@ -109,7 +109,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=ingress - --provider=coredns @@ -176,7 +176,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=ingress - --provider=coredns diff --git a/docs/tutorials/designate.md b/docs/tutorials/designate.md index 9d84c6130..d5b3a703d 100644 --- a/docs/tutorials/designate.md +++ b/docs/tutorials/designate.md @@ -59,7 +59,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -136,7 +136,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/digitalocean.md b/docs/tutorials/digitalocean.md index 705c8f433..06bbd4551 100644 --- a/docs/tutorials/digitalocean.md +++ b/docs/tutorials/digitalocean.md @@ -68,7 +68,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -135,7 +135,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/dnsimple.md b/docs/tutorials/dnsimple.md index dee483a72..b3baabb7c 100644 --- a/docs/tutorials/dnsimple.md +++ b/docs/tutorials/dnsimple.md @@ -39,7 +39,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone you create in DNSimple. @@ -108,7 +108,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone you create in DNSimple. diff --git a/docs/tutorials/exoscale.md b/docs/tutorials/exoscale.md index 6b991e7de..92b708856 100644 --- a/docs/tutorials/exoscale.md +++ b/docs/tutorials/exoscale.md @@ -40,7 +40,7 @@ spec: # serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=ingress # or service or both - --provider=exoscale diff --git a/docs/tutorials/externalname.md b/docs/tutorials/externalname.md index 0dd8e5ebe..f9f449cff 100644 --- a/docs/tutorials/externalname.md +++ b/docs/tutorials/externalname.md @@ -27,7 +27,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --log-level=debug - --source=service diff --git a/docs/tutorials/gandi.md b/docs/tutorials/gandi.md index 52c674858..54ce12afe 100644 --- a/docs/tutorials/gandi.md +++ b/docs/tutorials/gandi.md @@ -41,7 +41,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -105,7 +105,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/gateway-api.md b/docs/tutorials/gateway-api.md index 647ca76fc..1eadf934c 100644 --- a/docs/tutorials/gateway-api.md +++ b/docs/tutorials/gateway-api.md @@ -87,7 +87,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: # Add desired Gateway API Route sources. - --source=gateway-httproute diff --git a/docs/tutorials/gke.md b/docs/tutorials/gke.md index 8e89d4326..07a3953d0 100644 --- a/docs/tutorials/gke.md +++ b/docs/tutorials/gke.md @@ -375,7 +375,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/tutorials/gloo-proxy.md b/docs/tutorials/gloo-proxy.md index 077372c78..60defbd6e 100644 --- a/docs/tutorials/gloo-proxy.md +++ b/docs/tutorials/gloo-proxy.md @@ -22,7 +22,7 @@ spec: containers: - name: external-dns # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=gloo-proxy - --gloo-namespace=custom-gloo-system # gloo system namespace. Specify multiple times for multiple namespaces. Omit to use the default (gloo-system) @@ -90,7 +90,7 @@ spec: containers: - name: external-dns # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=gloo-proxy - --gloo-namespace=custom-gloo-system # gloo system namespace. Specify multiple times for multiple namespaces. Omit to use the default (gloo-system) diff --git a/docs/tutorials/godaddy.md b/docs/tutorials/godaddy.md index de74c749c..9b24bc625 100644 --- a/docs/tutorials/godaddy.md +++ b/docs/tutorials/godaddy.md @@ -64,7 +64,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -135,7 +135,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/hostport.md b/docs/tutorials/hostport.md index 67c9e2fb3..d9a7bfdc5 100644 --- a/docs/tutorials/hostport.md +++ b/docs/tutorials/hostport.md @@ -31,7 +31,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --log-level=debug - --source=service @@ -96,7 +96,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --log-level=debug - --source=service diff --git a/docs/tutorials/ibmcloud.md b/docs/tutorials/ibmcloud.md index 926435c77..b1a207d0c 100644 --- a/docs/tutorials/ibmcloud.md +++ b/docs/tutorials/ibmcloud.md @@ -69,7 +69,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -142,7 +142,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/istio.md b/docs/tutorials/istio.md index f46876ba2..a2dff8439 100644 --- a/docs/tutorials/istio.md +++ b/docs/tutorials/istio.md @@ -28,7 +28,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress @@ -98,7 +98,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/tutorials/kong.md b/docs/tutorials/kong.md index 286fd9685..4b69289a1 100644 --- a/docs/tutorials/kong.md +++ b/docs/tutorials/kong.md @@ -22,7 +22,7 @@ spec: containers: - name: external-dns # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=kong-tcpingress - --provider=aws @@ -86,7 +86,7 @@ spec: containers: - name: external-dns # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=kong-tcpingress - --provider=aws diff --git a/docs/tutorials/linode.md b/docs/tutorials/linode.md index bc5ad7dc2..d638df80e 100644 --- a/docs/tutorials/linode.md +++ b/docs/tutorials/linode.md @@ -41,7 +41,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -105,7 +105,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/nginx-ingress.md b/docs/tutorials/nginx-ingress.md index ca67a6a64..9de62ecfb 100644 --- a/docs/tutorials/nginx-ingress.md +++ b/docs/tutorials/nginx-ingress.md @@ -273,7 +273,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=ingress - --domain-filter=external-dns-test.gcp.zalan.do @@ -568,7 +568,7 @@ spec: - --google-project=zalando-external-dns-test - --registry=txt - --txt-owner-id=my-identifier - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 name: external-dns securityContext: fsGroup: 65534 diff --git a/docs/tutorials/nodes.md b/docs/tutorials/nodes.md index 671601519..eadef482e 100644 --- a/docs/tutorials/nodes.md +++ b/docs/tutorials/nodes.md @@ -29,7 +29,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=node # will use nodes as source - --provider=aws @@ -100,7 +100,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=node # will use nodes as source - --provider=aws diff --git a/docs/tutorials/ns1.md b/docs/tutorials/ns1.md index 7d3057b67..241cbec4a 100644 --- a/docs/tutorials/ns1.md +++ b/docs/tutorials/ns1.md @@ -92,7 +92,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -159,7 +159,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/openshift.md b/docs/tutorials/openshift.md index be9d60d67..14518ebbe 100644 --- a/docs/tutorials/openshift.md +++ b/docs/tutorials/openshift.md @@ -66,7 +66,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=openshift-route - --domain-filter=external-dns-test.my-org.com # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones @@ -133,7 +133,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=openshift-route - --domain-filter=external-dns-test.my-org.com # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones diff --git a/docs/tutorials/oracle.md b/docs/tutorials/oracle.md index 2365f2243..4ed5096cb 100644 --- a/docs/tutorials/oracle.md +++ b/docs/tutorials/oracle.md @@ -170,7 +170,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress diff --git a/docs/tutorials/ovh.md b/docs/tutorials/ovh.md index dcf1a0265..da513831f 100644 --- a/docs/tutorials/ovh.md +++ b/docs/tutorials/ovh.md @@ -91,7 +91,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -165,7 +165,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/pdns.md b/docs/tutorials/pdns.md index 72aa3fc85..582516118 100644 --- a/docs/tutorials/pdns.md +++ b/docs/tutorials/pdns.md @@ -42,7 +42,7 @@ spec: # serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # or ingress or both - --provider=pdns diff --git a/docs/tutorials/pihole.md b/docs/tutorials/pihole.md index b4e473e47..75f337099 100644 --- a/docs/tutorials/pihole.md +++ b/docs/tutorials/pihole.md @@ -81,7 +81,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 # If authentication is disabled and/or you didn't create # a secret, you can remove this block. envFrom: diff --git a/docs/tutorials/plural.md b/docs/tutorials/plural.md index cd6afc974..65981b3c8 100644 --- a/docs/tutorials/plural.md +++ b/docs/tutorials/plural.md @@ -61,7 +61,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -131,7 +131,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/public-private-route53.md b/docs/tutorials/public-private-route53.md index a93d4e4d9..7786d10fb 100644 --- a/docs/tutorials/public-private-route53.md +++ b/docs/tutorials/public-private-route53.md @@ -243,7 +243,7 @@ spec: - --txt-owner-id=external-dns - --ingress-class=external-ingress - --aws-zone-type=public - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 name: external-dns-public ``` @@ -281,7 +281,7 @@ spec: - --txt-owner-id=dev.k8s.nexus - --ingress-class=internal-ingress - --aws-zone-type=private - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 name: external-dns-private ``` diff --git a/docs/tutorials/rdns.md b/docs/tutorials/rdns.md index 59b5f5684..40deb04da 100644 --- a/docs/tutorials/rdns.md +++ b/docs/tutorials/rdns.md @@ -54,7 +54,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=ingress - --provider=rdns @@ -123,7 +123,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=ingress - --provider=rdns diff --git a/docs/tutorials/rfc2136.md b/docs/tutorials/rfc2136.md index 0135e107e..3dc3a7b3d 100644 --- a/docs/tutorials/rfc2136.md +++ b/docs/tutorials/rfc2136.md @@ -231,7 +231,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --registry=txt - --txt-prefix=external-dns- @@ -274,7 +274,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --registry=txt - --txt-prefix=external-dns- diff --git a/docs/tutorials/scaleway.md b/docs/tutorials/scaleway.md index 7a948285e..621ae64ad 100644 --- a/docs/tutorials/scaleway.md +++ b/docs/tutorials/scaleway.md @@ -60,7 +60,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. @@ -140,7 +140,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. diff --git a/docs/tutorials/security-context.md b/docs/tutorials/security-context.md index e34acf426..cb2f3710d 100644 --- a/docs/tutorials/security-context.md +++ b/docs/tutorials/security-context.md @@ -20,7 +20,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - ... # your arguments here securityContext: diff --git a/docs/tutorials/tencentcloud.md b/docs/tutorials/tencentcloud.md index b9ff0b566..cdab4cee9 100644 --- a/docs/tutorials/tencentcloud.md +++ b/docs/tutorials/tencentcloud.md @@ -129,7 +129,7 @@ spec: - --policy=sync # set `upsert-only` would prevent ExternalDNS from deleting any records - --tencent-cloud-zone-type=private # only look at private hosted zones. set `public` to use the public dns service. - --tencent-cloud-config-file=/etc/kubernetes/tencent-cloud.json - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 imagePullPolicy: Always name: external-dns resources: {} diff --git a/docs/tutorials/traefik-proxy.md b/docs/tutorials/traefik-proxy.md index fb5935450..4e20d828f 100644 --- a/docs/tutorials/traefik-proxy.md +++ b/docs/tutorials/traefik-proxy.md @@ -24,7 +24,7 @@ spec: containers: - name: external-dns # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=traefik-proxy - --provider=aws @@ -87,7 +87,7 @@ spec: containers: - name: external-dns # update this to the desired external-dns version - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=traefik-proxy - --provider=aws diff --git a/docs/tutorials/transip.md b/docs/tutorials/transip.md index f9eeedcb5..afb3d3ac2 100644 --- a/docs/tutorials/transip.md +++ b/docs/tutorials/transip.md @@ -36,7 +36,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains @@ -107,7 +107,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service # ingress is also possible - --domain-filter=example.com # (optional) limit to only example.com domains diff --git a/docs/tutorials/ultradns.md b/docs/tutorials/ultradns.md index 68f37aa03..40c6dfb75 100644 --- a/docs/tutorials/ultradns.md +++ b/docs/tutorials/ultradns.md @@ -44,7 +44,7 @@ spec: spec: containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress # ingress is also possible @@ -116,7 +116,7 @@ spec: serviceAccountName: external-dns containers: - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 + image: registry.k8s.io/external-dns/external-dns:v0.15.0 args: - --source=service - --source=ingress From c2117b9713ca38661a135f952eb269ba7a9a5a41 Mon Sep 17 00:00:00 2001 From: Raffaele Di Fazio Date: Fri, 6 Sep 2024 12:00:53 +0200 Subject: [PATCH 71/78] Update docs/release.md Co-authored-by: Michel Loiseleur <97035654+mloiseleur@users.noreply.github.com> --- docs/release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/release.md b/docs/release.md index 16c3fa791..2470712cb 100644 --- a/docs/release.md +++ b/docs/release.md @@ -31,7 +31,7 @@ You must be an official maintainer of the project to be able to do a release. - Branch out from the default branch and run `scripts/kustomize-version-updater.sh` to update the image tag used in the kustomization.yaml. - Create an issue to release the corresponding Helm chart via the chart release process (below) assigned to a chart maintainer - Create a PR with the kustomize change. -- Create a PR to replace all versions for docker images in the tutorials. A possible script to use is `sd registry.k8s.io/external-dns/external-dns:v0.15.0 +- Create a PR to replace all versions for docker images in the tutorials. A possible script to use is `sd registry.k8s.io/external-dns/external-dns:v0.15.0` - Once the PR is merged, all is done :-) ## How to release a new chart version From ce1ab808f29139b3dfb23b60f3127953df1ff847 Mon Sep 17 00:00:00 2001 From: Michael Shen Date: Mon, 29 Jul 2024 00:13:18 -0400 Subject: [PATCH 72/78] Refactor DynamoDB registry to aws-sdk-go-v2 Signed-off-by: Michael Shen --- go.mod | 17 ++++ go.sum | 34 +++++++ main.go | 13 +-- provider/aws/session.go | 60 +++++++++++++ provider/aws/session_test.go | 40 +++++++++ registry/dynamodb.go | 166 +++++++++++++++++++++-------------- registry/dynamodb_test.go | 150 +++++++++++++++++-------------- 7 files changed, 342 insertions(+), 138 deletions(-) diff --git a/go.mod b/go.mod index da536da00..543b2ebdf 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,12 @@ require ( github.com/alecthomas/kingpin/v2 v2.4.0 github.com/aliyun/alibaba-cloud-sdk-go v1.63.0 github.com/aws/aws-sdk-go v1.55.5 + github.com/aws/aws-sdk-go-v2 v1.30.3 + github.com/aws/aws-sdk-go-v2/config v1.27.27 + github.com/aws/aws-sdk-go-v2/credentials v1.17.27 + github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.14.10 + github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.4 + github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 github.com/bodgit/tsig v1.2.2 github.com/cenkalti/backoff/v4 v4.3.0 github.com/civo/civogo v0.3.73 @@ -85,6 +91,17 @@ require ( github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect + github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.22.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 // indirect + github.com/aws/smithy-go v1.20.3 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect diff --git a/go.sum b/go.sum index 1e7d64fc8..1798b3272 100644 --- a/go.sum +++ b/go.sum @@ -119,6 +119,40 @@ github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= +github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc= +github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90= +github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg= +github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI= +github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4= +github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.14.10 h1:orAIBscNu5aIjDOnKIrjO+IUFPMLKj3Lp0bPf4chiPc= +github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.14.10/go.mod h1:GNjJ8daGhv10hmQYCnmkV8HuY6xXOXV4vzBssSjEIlU= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.4 h1:utG3S4T+X7nONPIpRoi1tVcQdAdJxntiVS2yolPJyXc= +github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.4/go.mod h1:q9vzW3Xr1KEXa8n4waHiFt1PrppNDlMymlYP+xpsFbY= +github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.22.3 h1:r27/FnxLPixKBRIlslsvhqscBuMK8uysCYG9Kfgm098= +github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.22.3/go.mod h1:jqOFyN+QSWSoQC+ppyc4weiO8iNQXbzRbxDjQ1ayYd4= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16 h1:lhAX5f7KpgwyieXjbDnRTjPEUI0l3emSRyxXj1PXP8w= +github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16/go.mod h1:AblAlCwvi7Q/SFowvckgN+8M3uFPlopSYeLlbNDArhA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM= +github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ= +github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE= +github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= diff --git a/main.go b/main.go index dfdde6692..27f91877c 100644 --- a/main.go +++ b/main.go @@ -25,8 +25,7 @@ import ( "syscall" "time" - awsSDK "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/aws/aws-sdk-go-v2/service/dynamodb" "github.com/aws/aws-sdk-go/service/route53" sd "github.com/aws/aws-sdk-go/service/servicediscovery" "github.com/go-logr/logr" @@ -383,11 +382,15 @@ func main() { var r registry.Registry switch cfg.Registry { case "dynamodb": - config := awsSDK.NewConfig() + var dynamodbOpts []func(*dynamodb.Options) if cfg.AWSDynamoDBRegion != "" { - config = config.WithRegion(cfg.AWSDynamoDBRegion) + dynamodbOpts = []func(*dynamodb.Options){ + func(opts *dynamodb.Options) { + opts.Region = cfg.AWSDynamoDBRegion + }, + } } - r, err = registry.NewDynamoDBRegistry(p, cfg.TXTOwnerID, dynamodb.New(aws.CreateDefaultSession(cfg), config), cfg.AWSDynamoDBTable, cfg.TXTPrefix, cfg.TXTSuffix, cfg.TXTWildcardReplacement, cfg.ManagedDNSRecordTypes, cfg.ExcludeDNSRecordTypes, []byte(cfg.TXTEncryptAESKey), cfg.TXTCacheInterval) + r, err = registry.NewDynamoDBRegistry(p, cfg.TXTOwnerID, dynamodb.NewFromConfig(aws.CreateDefaultV2Config(cfg), dynamodbOpts...), cfg.AWSDynamoDBTable, cfg.TXTPrefix, cfg.TXTSuffix, cfg.TXTWildcardReplacement, cfg.ManagedDNSRecordTypes, cfg.ExcludeDNSRecordTypes, []byte(cfg.TXTEncryptAESKey), cfg.TXTCacheInterval) case "noop": r, err = registry.NewNoopRegistry(p) case "txt": diff --git a/provider/aws/session.go b/provider/aws/session.go index da578b292..8de5d0f40 100644 --- a/provider/aws/session.go +++ b/provider/aws/session.go @@ -17,9 +17,16 @@ limitations under the License. package aws import ( + "context" "fmt" + "net/http" "strings" + awsv2 "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/aws/retry" + "github.com/aws/aws-sdk-go-v2/config" + stscredsv2 "github.com/aws/aws-sdk-go-v2/credentials/stscreds" + "github.com/aws/aws-sdk-go-v2/service/sts" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials/stscreds" "github.com/aws/aws-sdk-go/aws/request" @@ -38,6 +45,20 @@ type AWSSessionConfig struct { Profile string } +func CreateDefaultV2Config(cfg *externaldns.Config) awsv2.Config { + result, err := newV2Config( + AWSSessionConfig{ + AssumeRole: cfg.AWSAssumeRole, + AssumeRoleExternalID: cfg.AWSAssumeRoleExternalID, + APIRetries: cfg.AWSAPIRetries, + }, + ) + if err != nil { + logrus.Fatal(err) + } + return result +} + func CreateDefaultSession(cfg *externaldns.Config) *session.Session { result, err := newSession( AWSSessionConfig{ @@ -123,3 +144,42 @@ func newSession(awsConfig AWSSessionConfig) (*session.Session, error) { return session, nil } + +func newV2Config(awsConfig AWSSessionConfig) (awsv2.Config, error) { + defaultOpts := []func(*config.LoadOptions) error{ + config.WithRetryer(func() awsv2.Retryer { + return retry.AddWithMaxAttempts(retry.NewStandard(), awsConfig.APIRetries) + }), + config.WithHTTPClient(instrumented_http.NewClient(&http.Client{}, &instrumented_http.Callbacks{ + PathProcessor: func(path string) string { + parts := strings.Split(path, "/") + return parts[len(parts)-1] + }, + })), + config.WithSharedConfigProfile(awsConfig.Profile), + } + + cfg, err := config.LoadDefaultConfig(context.Background(), defaultOpts...) + if err != nil { + return awsv2.Config{}, fmt.Errorf("instantiating AWS config: %w", err) + } + + if awsConfig.AssumeRole != "" { + stsSvc := sts.NewFromConfig(cfg) + var assumeRoleOpts []func(*stscredsv2.AssumeRoleOptions) + if awsConfig.AssumeRoleExternalID != "" { + logrus.Infof("Assuming role: %s with external id %s", awsConfig.AssumeRole, awsConfig.AssumeRoleExternalID) + assumeRoleOpts = []func(*stscredsv2.AssumeRoleOptions){ + func(opts *stscredsv2.AssumeRoleOptions) { + opts.ExternalID = &awsConfig.AssumeRoleExternalID + }, + } + } else { + logrus.Infof("Assuming role: %s", awsConfig.AssumeRole) + } + creds := stscredsv2.NewAssumeRoleProvider(stsSvc, awsConfig.AssumeRole, assumeRoleOpts...) + cfg.Credentials = awsv2.NewCredentialsCache(creds) + } + + return cfg, nil +} diff --git a/provider/aws/session_test.go b/provider/aws/session_test.go index 206fcf940..b73485c03 100644 --- a/provider/aws/session_test.go +++ b/provider/aws/session_test.go @@ -17,6 +17,7 @@ limitations under the License. package aws import ( + "context" "os" "testing" @@ -63,6 +64,45 @@ func Test_newSession(t *testing.T) { }) } +func Test_newV2Config(t *testing.T) { + t.Run("should use profile from credentials file", func(t *testing.T) { + // setup + credsFile, err := prepareCredentialsFile(t) + defer os.Remove(credsFile.Name()) + require.NoError(t, err) + os.Setenv("AWS_SHARED_CREDENTIALS_FILE", credsFile.Name()) + defer os.Unsetenv("AWS_SHARED_CREDENTIALS_FILE") + + // when + cfg, err := newV2Config(AWSSessionConfig{Profile: "profile2"}) + require.NoError(t, err) + creds, err := cfg.Credentials.Retrieve(context.Background()) + + // then + assert.NoError(t, err) + assert.Equal(t, "AKID2345", creds.AccessKeyID) + assert.Equal(t, "SECRET2", creds.SecretAccessKey) + }) + + t.Run("should respect env variables without profile", func(t *testing.T) { + // setup + os.Setenv("AWS_ACCESS_KEY_ID", "AKIAIOSFODNN7EXAMPLE") + os.Setenv("AWS_SECRET_ACCESS_KEY", "topsecret") + defer os.Unsetenv("AWS_ACCESS_KEY_ID") + defer os.Unsetenv("AWS_SECRET_ACCESS_KEY") + + // when + cfg, err := newV2Config(AWSSessionConfig{}) + require.NoError(t, err) + creds, err := cfg.Credentials.Retrieve(context.Background()) + + // then + assert.NoError(t, err) + assert.Equal(t, "AKIAIOSFODNN7EXAMPLE", creds.AccessKeyID) + assert.Equal(t, "topsecret", creds.SecretAccessKey) + }) +} + func prepareCredentialsFile(t *testing.T) (*os.File, error) { credsFile, err := os.CreateTemp("", "aws-*.creds") require.NoError(t, err) diff --git a/registry/dynamodb.go b/registry/dynamodb.go index b13d55ce9..805985f34 100644 --- a/registry/dynamodb.go +++ b/registry/dynamodb.go @@ -23,9 +23,10 @@ import ( "strings" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue" + "github.com/aws/aws-sdk-go-v2/service/dynamodb" + dynamodbtypes "github.com/aws/aws-sdk-go-v2/service/dynamodb/types" log "github.com/sirupsen/logrus" "k8s.io/apimachinery/pkg/util/sets" @@ -34,11 +35,11 @@ import ( "sigs.k8s.io/external-dns/provider" ) -// DynamoDBAPI is the subset of the AWS Route53 API that we actually use. Add methods as required. Signatures must match exactly. +// DynamoDBAPI is the subset of the AWS DynamoDB API that we actually use. Add methods as required. Signatures must match exactly. type DynamoDBAPI interface { - DescribeTableWithContext(ctx aws.Context, input *dynamodb.DescribeTableInput, opts ...request.Option) (*dynamodb.DescribeTableOutput, error) - ScanPagesWithContext(ctx aws.Context, input *dynamodb.ScanInput, fn func(*dynamodb.ScanOutput, bool) bool, opts ...request.Option) error - BatchExecuteStatementWithContext(aws.Context, *dynamodb.BatchExecuteStatementInput, ...request.Option) (*dynamodb.BatchExecuteStatementOutput, error) + DescribeTable(context.Context, *dynamodb.DescribeTableInput, ...func(*dynamodb.Options)) (*dynamodb.DescribeTableOutput, error) + Scan(context.Context, *dynamodb.ScanInput, ...func(*dynamodb.Options)) (*dynamodb.ScanOutput, error) + BatchExecuteStatement(context.Context, *dynamodb.BatchExecuteStatementInput, ...func(*dynamodb.Options)) (*dynamodb.BatchExecuteStatementOutput, error) } // DynamoDBRegistry implements registry interface with ownership implemented via an AWS DynamoDB table. @@ -225,7 +226,7 @@ func (im *DynamoDBRegistry) ApplyChanges(ctx context.Context, changes *plan.Chan Delete: endpoint.FilterEndpointsByOwnerID(im.ownerID, changes.Delete), } - statements := make([]*dynamodb.BatchStatementRequest, 0, len(filteredChanges.Create)+len(filteredChanges.UpdateNew)) + statements := make([]dynamodbtypes.BatchStatementRequest, 0, len(filteredChanges.Create)+len(filteredChanges.UpdateNew)) for _, r := range filteredChanges.Create { if r.Labels == nil { r.Labels = make(map[string]string) @@ -286,12 +287,15 @@ func (im *DynamoDBRegistry) ApplyChanges(ctx context.Context, changes *plan.Chan } } - err := im.executeStatements(ctx, statements, func(request *dynamodb.BatchStatementRequest, response *dynamodb.BatchStatementResponse) error { + err := im.executeStatements(ctx, statements, func(request dynamodbtypes.BatchStatementRequest, response dynamodbtypes.BatchStatementResponse) error { var context string if strings.HasPrefix(*request.Statement, "INSERT") { - if aws.StringValue(response.Error.Code) == "DuplicateItem" { + if response.Error.Code == dynamodbtypes.BatchStatementErrorCodeEnumDuplicateItem { // We lost a race with a different owner or another owner has an orphaned ownership record. - key := fromDynamoKey(request.Parameters[0]) + key, err := fromDynamoKey(request.Parameters[0]) + if err != nil { + return err + } for i, endpoint := range filteredChanges.Create { if endpoint.Key() == key { log.Infof("Skipping endpoint %v because owner does not match", endpoint) @@ -303,11 +307,19 @@ func (im *DynamoDBRegistry) ApplyChanges(ctx context.Context, changes *plan.Chan } } } - context = fmt.Sprintf("inserting dynamodb record %q", aws.StringValue(request.Parameters[0].S)) + var record string + if err := attributevalue.Unmarshal(request.Parameters[0], &record); err != nil { + return fmt.Errorf("inserting dynamodb record: %w", err) + } + context = fmt.Sprintf("inserting dynamodb record %q", record) } else { - context = fmt.Sprintf("updating dynamodb record %q", aws.StringValue(request.Parameters[1].S)) + var record string + if err := attributevalue.Unmarshal(request.Parameters[1], &record); err != nil { + return fmt.Errorf("inserting dynamodb record: %w", err) + } + context = fmt.Sprintf("updating dynamodb record %q", record) } - return fmt.Errorf("%s: %s: %s", context, aws.StringValue(response.Error.Code), aws.StringValue(response.Error.Message)) + return fmt.Errorf("%s: %s: %s", context, response.Error.Code, *response.Error.Message) }) if err != nil { im.recordsCache = nil @@ -326,7 +338,7 @@ func (im *DynamoDBRegistry) ApplyChanges(ctx context.Context, changes *plan.Chan return err } - statements = make([]*dynamodb.BatchStatementRequest, 0, len(filteredChanges.Delete)+len(im.orphanedLabels)) + statements = make([]dynamodbtypes.BatchStatementRequest, 0, len(filteredChanges.Delete)+len(im.orphanedLabels)) for _, r := range filteredChanges.Delete { statements = im.appendDelete(statements, r.Key()) } @@ -335,9 +347,13 @@ func (im *DynamoDBRegistry) ApplyChanges(ctx context.Context, changes *plan.Chan delete(im.labels, r) } im.orphanedLabels = nil - return im.executeStatements(ctx, statements, func(request *dynamodb.BatchStatementRequest, response *dynamodb.BatchStatementResponse) error { + return im.executeStatements(ctx, statements, func(request dynamodbtypes.BatchStatementRequest, response dynamodbtypes.BatchStatementResponse) error { im.labels = nil - return fmt.Errorf("deleting dynamodb record %q: %s: %s", aws.StringValue(request.Parameters[0].S), aws.StringValue(response.Error.Code), aws.StringValue(response.Error.Message)) + record, err := fromDynamoKey(request.Parameters[0]) + if err != nil { + return fmt.Errorf("deleting dynamodb record: %w", err) + } + return fmt.Errorf("deleting dynamodb record %q: %s: %s", record, response.Error.Code, *response.Error.Message) }) } @@ -347,7 +363,7 @@ func (im *DynamoDBRegistry) AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]* } func (im *DynamoDBRegistry) readLabels(ctx context.Context) error { - table, err := im.dynamodbAPI.DescribeTableWithContext(ctx, &dynamodb.DescribeTableInput{ + table, err := im.dynamodbAPI.DescribeTable(ctx, &dynamodb.DescribeTableInput{ TableName: aws.String(im.table), }) if err != nil { @@ -356,8 +372,8 @@ func (im *DynamoDBRegistry) readLabels(ctx context.Context) error { foundKey := false for _, def := range table.Table.AttributeDefinitions { - if aws.StringValue(def.AttributeName) == "k" { - if aws.StringValue(def.AttributeType) != "S" { + if *def.AttributeName == "k" { + if def.AttributeType != dynamodbtypes.ScalarAttributeTypeS { return fmt.Errorf("table %q attribute \"k\" must have type \"S\"", im.table) } foundKey = true @@ -367,7 +383,7 @@ func (im *DynamoDBRegistry) readLabels(ctx context.Context) error { return fmt.Errorf("table %q must have attribute \"k\" of type \"S\"", im.table) } - if aws.StringValue(table.Table.KeySchema[0].AttributeName) != "k" { + if *table.Table.KeySchema[0].AttributeName != "k" { return fmt.Errorf("table %q must have hash key \"k\"", im.table) } if len(table.Table.KeySchema) > 1 { @@ -375,76 +391,92 @@ func (im *DynamoDBRegistry) readLabels(ctx context.Context) error { } labels := map[endpoint.EndpointKey]endpoint.Labels{} - err = im.dynamodbAPI.ScanPagesWithContext(ctx, &dynamodb.ScanInput{ + scanPaginator := dynamodb.NewScanPaginator(im.dynamodbAPI, &dynamodb.ScanInput{ TableName: aws.String(im.table), FilterExpression: aws.String("o = :ownerval"), - ExpressionAttributeValues: map[string]*dynamodb.AttributeValue{ - ":ownerval": {S: aws.String(im.ownerID)}, + ExpressionAttributeValues: map[string]dynamodbtypes.AttributeValue{ + ":ownerval": &dynamodbtypes.AttributeValueMemberS{Value: im.ownerID}, }, ProjectionExpression: aws.String("k,l"), ConsistentRead: aws.Bool(true), - }, func(output *dynamodb.ScanOutput, last bool) bool { - for _, item := range output.Items { - labels[fromDynamoKey(item["k"])] = fromDynamoLabels(item["l"], im.ownerID) - } - return true }) - if err != nil { - return fmt.Errorf("querying dynamodb: %w", err) + for scanPaginator.HasMorePages() { + output, err := scanPaginator.NextPage(ctx) + if err != nil { + return fmt.Errorf("scanning table %q: %w", im.table, err) + } + for _, item := range output.Items { + k, err := fromDynamoKey(item["k"]) + if err != nil { + return fmt.Errorf("querying dynamodb for key: %w", err) + } + l, err := fromDynamoLabels(item["l"], im.ownerID) + if err != nil { + return fmt.Errorf("querying dynamodb for labels: %w", err) + } + + labels[k] = l + } } im.labels = labels return nil } -func fromDynamoKey(key *dynamodb.AttributeValue) endpoint.EndpointKey { - split := strings.SplitN(aws.StringValue(key.S), "#", 3) +func fromDynamoKey(key dynamodbtypes.AttributeValue) (endpoint.EndpointKey, error) { + var ep string + if err := attributevalue.Unmarshal(key, &ep); err != nil { + return endpoint.EndpointKey{}, fmt.Errorf("unmarshalling endpoint key: %w", err) + } + split := strings.SplitN(ep, "#", 3) return endpoint.EndpointKey{ DNSName: split[0], RecordType: split[1], SetIdentifier: split[2], + }, nil +} + +func toDynamoKey(key endpoint.EndpointKey) dynamodbtypes.AttributeValue { + return &dynamodbtypes.AttributeValueMemberS{ + Value: fmt.Sprintf("%s#%s#%s", key.DNSName, key.RecordType, key.SetIdentifier), } } -func toDynamoKey(key endpoint.EndpointKey) *dynamodb.AttributeValue { - return &dynamodb.AttributeValue{ - S: aws.String(fmt.Sprintf("%s#%s#%s", key.DNSName, key.RecordType, key.SetIdentifier)), - } -} - -func fromDynamoLabels(label *dynamodb.AttributeValue, owner string) endpoint.Labels { +func fromDynamoLabels(label dynamodbtypes.AttributeValue, owner string) (endpoint.Labels, error) { labels := endpoint.NewLabels() - for k, v := range label.M { - labels[k] = aws.StringValue(v.S) + if err := attributevalue.Unmarshal(label, &labels); err != nil { + return endpoint.Labels{}, fmt.Errorf("unmarshalling labels: %w", err) } labels[endpoint.OwnerLabelKey] = owner - return labels + return labels, nil } -func toDynamoLabels(labels endpoint.Labels) *dynamodb.AttributeValue { - labelMap := make(map[string]*dynamodb.AttributeValue, len(labels)) +func toDynamoLabels(labels endpoint.Labels) dynamodbtypes.AttributeValue { + labelMap := make(map[string]dynamodbtypes.AttributeValue, len(labels)) for k, v := range labels { if k == endpoint.OwnerLabelKey { continue } - labelMap[k] = &dynamodb.AttributeValue{S: aws.String(v)} + labelMap[k] = &dynamodbtypes.AttributeValueMemberS{Value: v} } - return &dynamodb.AttributeValue{M: labelMap} + return &dynamodbtypes.AttributeValueMemberM{Value: labelMap} } -func (im *DynamoDBRegistry) appendInsert(statements []*dynamodb.BatchStatementRequest, key endpoint.EndpointKey, new endpoint.Labels) []*dynamodb.BatchStatementRequest { - return append(statements, &dynamodb.BatchStatementRequest{ - Statement: aws.String(fmt.Sprintf("INSERT INTO %q VALUE {'k':?, 'o':?, 'l':?}", im.table)), - Parameters: []*dynamodb.AttributeValue{ +func (im *DynamoDBRegistry) appendInsert(statements []dynamodbtypes.BatchStatementRequest, key endpoint.EndpointKey, new endpoint.Labels) []dynamodbtypes.BatchStatementRequest { + return append(statements, dynamodbtypes.BatchStatementRequest{ + Statement: aws.String(fmt.Sprintf("INSERT INTO %q VALUE {'k':?, 'o':?, 'l':?}", im.table)), + ConsistentRead: aws.Bool(true), + Parameters: []dynamodbtypes.AttributeValue{ toDynamoKey(key), - {S: aws.String(im.ownerID)}, + &dynamodbtypes.AttributeValueMemberS{ + Value: im.ownerID, + }, toDynamoLabels(new), }, - ConsistentRead: aws.Bool(true), }) } -func (im *DynamoDBRegistry) appendUpdate(statements []*dynamodb.BatchStatementRequest, key endpoint.EndpointKey, old endpoint.Labels, new endpoint.Labels) []*dynamodb.BatchStatementRequest { +func (im *DynamoDBRegistry) appendUpdate(statements []dynamodbtypes.BatchStatementRequest, key endpoint.EndpointKey, old endpoint.Labels, new endpoint.Labels) []dynamodbtypes.BatchStatementRequest { if len(old) == len(new) { equal := true for k, v := range old { @@ -458,28 +490,28 @@ func (im *DynamoDBRegistry) appendUpdate(statements []*dynamodb.BatchStatementRe } } - return append(statements, &dynamodb.BatchStatementRequest{ + return append(statements, dynamodbtypes.BatchStatementRequest{ Statement: aws.String(fmt.Sprintf("UPDATE %q SET \"l\"=? WHERE \"k\"=?", im.table)), - Parameters: []*dynamodb.AttributeValue{ + Parameters: []dynamodbtypes.AttributeValue{ toDynamoLabels(new), toDynamoKey(key), }, }) } -func (im *DynamoDBRegistry) appendDelete(statements []*dynamodb.BatchStatementRequest, key endpoint.EndpointKey) []*dynamodb.BatchStatementRequest { - return append(statements, &dynamodb.BatchStatementRequest{ +func (im *DynamoDBRegistry) appendDelete(statements []dynamodbtypes.BatchStatementRequest, key endpoint.EndpointKey) []dynamodbtypes.BatchStatementRequest { + return append(statements, dynamodbtypes.BatchStatementRequest{ Statement: aws.String(fmt.Sprintf("DELETE FROM %q WHERE \"k\"=? AND \"o\"=?", im.table)), - Parameters: []*dynamodb.AttributeValue{ + Parameters: []dynamodbtypes.AttributeValue{ toDynamoKey(key), - {S: aws.String(im.ownerID)}, + &dynamodbtypes.AttributeValueMemberS{Value: im.ownerID}, }, }) } -func (im *DynamoDBRegistry) executeStatements(ctx context.Context, statements []*dynamodb.BatchStatementRequest, handleErr func(request *dynamodb.BatchStatementRequest, response *dynamodb.BatchStatementResponse) error) error { +func (im *DynamoDBRegistry) executeStatements(ctx context.Context, statements []dynamodbtypes.BatchStatementRequest, handleErr func(request dynamodbtypes.BatchStatementRequest, response dynamodbtypes.BatchStatementResponse) error) error { for len(statements) > 0 { - var chunk []*dynamodb.BatchStatementRequest + var chunk []dynamodbtypes.BatchStatementRequest if len(statements) > int(dynamodbMaxBatchSize) { chunk = statements[:dynamodbMaxBatchSize] statements = statements[dynamodbMaxBatchSize:] @@ -488,7 +520,7 @@ func (im *DynamoDBRegistry) executeStatements(ctx context.Context, statements [] statements = nil } - output, err := im.dynamodbAPI.BatchExecuteStatementWithContext(ctx, &dynamodb.BatchExecuteStatementInput{ + output, err := im.dynamodbAPI.BatchExecuteStatement(ctx, &dynamodb.BatchExecuteStatementInput{ Statements: chunk, }) if err != nil { @@ -501,9 +533,13 @@ func (im *DynamoDBRegistry) executeStatements(ctx context.Context, statements [] op, _, _ := strings.Cut(*request.Statement, " ") var key string if op == "UPDATE" { - key = *request.Parameters[1].S + if err := attributevalue.Unmarshal(request.Parameters[1], &key); err != nil { + return err + } } else { - key = *request.Parameters[0].S + if err := attributevalue.Unmarshal(request.Parameters[0], &key); err != nil { + return err + } } log.Infof("%s dynamodb record %q", op, key) } else { diff --git a/registry/dynamodb_test.go b/registry/dynamodb_test.go index 1cadd7dcd..c280554fe 100644 --- a/registry/dynamodb_test.go +++ b/registry/dynamodb_test.go @@ -22,9 +22,10 @@ import ( "testing" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/dynamodb" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue" + "github.com/aws/aws-sdk-go-v2/service/dynamodb" + dynamodbtypes "github.com/aws/aws-sdk-go-v2/service/dynamodb/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "k8s.io/apimachinery/pkg/util/sets" @@ -69,40 +70,40 @@ func TestDynamoDBRegistryNew(t *testing.T) { func TestDynamoDBRegistryRecordsBadTable(t *testing.T) { for _, tc := range []struct { name string - setup func(desc *dynamodb.TableDescription) + setup func(desc *dynamodbtypes.TableDescription) expected string }{ { name: "missing attribute k", - setup: func(desc *dynamodb.TableDescription) { + setup: func(desc *dynamodbtypes.TableDescription) { desc.AttributeDefinitions[0].AttributeName = aws.String("wrong") }, expected: "table \"test-table\" must have attribute \"k\" of type \"S\"", }, { name: "wrong attribute type", - setup: func(desc *dynamodb.TableDescription) { - desc.AttributeDefinitions[0].AttributeType = aws.String("SS") + setup: func(desc *dynamodbtypes.TableDescription) { + desc.AttributeDefinitions[0].AttributeType = "SS" }, expected: "table \"test-table\" attribute \"k\" must have type \"S\"", }, { name: "wrong key", - setup: func(desc *dynamodb.TableDescription) { + setup: func(desc *dynamodbtypes.TableDescription) { desc.KeySchema[0].AttributeName = aws.String("wrong") }, expected: "table \"test-table\" must have hash key \"k\"", }, { name: "has range key", - setup: func(desc *dynamodb.TableDescription) { - desc.AttributeDefinitions = append(desc.AttributeDefinitions, &dynamodb.AttributeDefinition{ + setup: func(desc *dynamodbtypes.TableDescription) { + desc.AttributeDefinitions = append(desc.AttributeDefinitions, dynamodbtypes.AttributeDefinition{ AttributeName: aws.String("o"), - AttributeType: aws.String("S"), + AttributeType: dynamodbtypes.ScalarAttributeTypeS, }) - desc.KeySchema = append(desc.KeySchema, &dynamodb.KeySchemaElement{ + desc.KeySchema = append(desc.KeySchema, dynamodbtypes.KeySchemaElement{ AttributeName: aws.String("o"), - KeyType: aws.String("RANGE"), + KeyType: dynamodbtypes.KeyTypeRange, }) }, expected: "table \"test-table\" must not have a range key", @@ -559,8 +560,8 @@ func TestDynamoDBRegistryApplyChanges(t *testing.T) { }, }, stubConfig: DynamoDBStubConfig{ - ExpectInsertError: map[string]string{ - "new.test-zone.example.org#CNAME#set-new": "DuplicateItem", + ExpectInsertError: map[string]dynamodbtypes.BatchStatementErrorCodeEnum{ + "new.test-zone.example.org#CNAME#set-new": dynamodbtypes.BatchStatementErrorCodeEnumDuplicateItem, }, ExpectDelete: sets.New("quux.test-zone.example.org#A#set-2"), }, @@ -620,7 +621,7 @@ func TestDynamoDBRegistryApplyChanges(t *testing.T) { }, }, stubConfig: DynamoDBStubConfig{ - ExpectInsertError: map[string]string{ + ExpectInsertError: map[string]dynamodbtypes.BatchStatementErrorCodeEnum{ "new.test-zone.example.org#CNAME#set-new": "TestingError", }, }, @@ -928,7 +929,7 @@ func TestDynamoDBRegistryApplyChanges(t *testing.T) { }, }, stubConfig: DynamoDBStubConfig{ - ExpectUpdateError: map[string]string{ + ExpectUpdateError: map[string]dynamodbtypes.BatchStatementErrorCodeEnum{ "bar.test-zone.example.org#CNAME#": "TestingError", }, }, @@ -1073,15 +1074,15 @@ func TestDynamoDBRegistryApplyChanges(t *testing.T) { type DynamoDBStub struct { t *testing.T stubConfig *DynamoDBStubConfig - tableDescription dynamodb.TableDescription + tableDescription dynamodbtypes.TableDescription changesApplied bool } type DynamoDBStubConfig struct { ExpectInsert map[string]map[string]string - ExpectInsertError map[string]string + ExpectInsertError map[string]dynamodbtypes.BatchStatementErrorCodeEnum ExpectUpdate map[string]map[string]string - ExpectUpdateError map[string]string + ExpectUpdateError map[string]dynamodbtypes.BatchStatementErrorCodeEnum ExpectDelete sets.Set[string] } @@ -1100,17 +1101,17 @@ func newDynamoDBAPIStub(t *testing.T, stubConfig *DynamoDBStubConfig) (*DynamoDB stub := &DynamoDBStub{ t: t, stubConfig: stubConfig, - tableDescription: dynamodb.TableDescription{ - AttributeDefinitions: []*dynamodb.AttributeDefinition{ + tableDescription: dynamodbtypes.TableDescription{ + AttributeDefinitions: []dynamodbtypes.AttributeDefinition{ { AttributeName: aws.String("k"), - AttributeType: aws.String("S"), + AttributeType: dynamodbtypes.ScalarAttributeTypeS, }, }, - KeySchema: []*dynamodb.KeySchemaElement{ + KeySchema: []dynamodbtypes.KeySchemaElement{ { AttributeName: aws.String("k"), - KeyType: aws.String("HASH"), + KeyType: dynamodbtypes.KeyTypeHash, }, }, }, @@ -1131,7 +1132,7 @@ func newDynamoDBAPIStub(t *testing.T, stubConfig *DynamoDBStubConfig) (*DynamoDB } } -func (r *DynamoDBStub) DescribeTableWithContext(ctx aws.Context, input *dynamodb.DescribeTableInput, opts ...request.Option) (*dynamodb.DescribeTableOutput, error) { +func (r *DynamoDBStub) DescribeTable(ctx context.Context, input *dynamodb.DescribeTableInput, opts ...func(*dynamodb.Options)) (*dynamodb.DescribeTableOutput, error) { assert.NotNil(r.t, ctx) assert.Equal(r.t, "test-table", *input.TableName, "table name") return &dynamodb.DescribeTableOutput{ @@ -1139,75 +1140,80 @@ func (r *DynamoDBStub) DescribeTableWithContext(ctx aws.Context, input *dynamodb }, nil } -func (r *DynamoDBStub) ScanPagesWithContext(ctx aws.Context, input *dynamodb.ScanInput, fn func(*dynamodb.ScanOutput, bool) bool, opts ...request.Option) error { +func (r *DynamoDBStub) Scan(ctx context.Context, input *dynamodb.ScanInput, opts ...func(*dynamodb.Options)) (*dynamodb.ScanOutput, error) { assert.NotNil(r.t, ctx) assert.Equal(r.t, "test-table", *input.TableName, "table name") assert.Equal(r.t, "o = :ownerval", *input.FilterExpression) assert.Len(r.t, input.ExpressionAttributeValues, 1) - assert.Equal(r.t, "test-owner", *input.ExpressionAttributeValues[":ownerval"].S) + var owner string + assert.Nil(r.t, attributevalue.Unmarshal(input.ExpressionAttributeValues[":ownerval"], &owner)) + assert.Equal(r.t, "test-owner", owner) assert.Equal(r.t, "k,l", *input.ProjectionExpression) assert.True(r.t, *input.ConsistentRead) - fn(&dynamodb.ScanOutput{ - Items: []map[string]*dynamodb.AttributeValue{ + return &dynamodb.ScanOutput{ + Items: []map[string]dynamodbtypes.AttributeValue{ { - "k": &dynamodb.AttributeValue{S: aws.String("bar.test-zone.example.org#CNAME#")}, - "l": &dynamodb.AttributeValue{M: map[string]*dynamodb.AttributeValue{ - endpoint.ResourceLabelKey: {S: aws.String("ingress/default/my-ingress")}, + "k": &dynamodbtypes.AttributeValueMemberS{Value: "bar.test-zone.example.org#CNAME#"}, + "l": &dynamodbtypes.AttributeValueMemberM{Value: map[string]dynamodbtypes.AttributeValue{ + endpoint.ResourceLabelKey: &dynamodbtypes.AttributeValueMemberS{Value: "ingress/default/my-ingress"}, }}, }, { - "k": &dynamodb.AttributeValue{S: aws.String("baz.test-zone.example.org#A#set-1")}, - "l": &dynamodb.AttributeValue{M: map[string]*dynamodb.AttributeValue{ - endpoint.ResourceLabelKey: {S: aws.String("ingress/default/my-ingress")}, + "k": &dynamodbtypes.AttributeValueMemberS{Value: "baz.test-zone.example.org#A#set-1"}, + "l": &dynamodbtypes.AttributeValueMemberM{Value: map[string]dynamodbtypes.AttributeValue{ + endpoint.ResourceLabelKey: &dynamodbtypes.AttributeValueMemberS{Value: "ingress/default/my-ingress"}, }}, }, { - "k": &dynamodb.AttributeValue{S: aws.String("baz.test-zone.example.org#A#set-2")}, - "l": &dynamodb.AttributeValue{M: map[string]*dynamodb.AttributeValue{ - endpoint.ResourceLabelKey: {S: aws.String("ingress/default/other-ingress")}, + "k": &dynamodbtypes.AttributeValueMemberS{Value: "baz.test-zone.example.org#A#set-2"}, + "l": &dynamodbtypes.AttributeValueMemberM{Value: map[string]dynamodbtypes.AttributeValue{ + endpoint.ResourceLabelKey: &dynamodbtypes.AttributeValueMemberS{Value: "ingress/default/other-ingress"}, }}, }, { - "k": &dynamodb.AttributeValue{S: aws.String("quux.test-zone.example.org#A#set-2")}, - "l": &dynamodb.AttributeValue{M: map[string]*dynamodb.AttributeValue{ - endpoint.ResourceLabelKey: {S: aws.String("ingress/default/quux-ingress")}, + "k": &dynamodbtypes.AttributeValueMemberS{Value: "quux.test-zone.example.org#A#set-2"}, + "l": &dynamodbtypes.AttributeValueMemberM{Value: map[string]dynamodbtypes.AttributeValue{ + endpoint.ResourceLabelKey: &dynamodbtypes.AttributeValueMemberS{Value: "ingress/default/quux-ingress"}, }}, }, }, - }, true) - return nil + }, nil } -func (r *DynamoDBStub) BatchExecuteStatementWithContext(context aws.Context, input *dynamodb.BatchExecuteStatementInput, option ...request.Option) (*dynamodb.BatchExecuteStatementOutput, error) { +func (r *DynamoDBStub) BatchExecuteStatement(context context.Context, input *dynamodb.BatchExecuteStatementInput, option ...func(*dynamodb.Options)) (*dynamodb.BatchExecuteStatementOutput, error) { assert.NotNil(r.t, context) - hasDelete := strings.HasPrefix(strings.ToLower(aws.StringValue(input.Statements[0].Statement)), "delete") + hasDelete := strings.HasPrefix(strings.ToLower(*input.Statements[0].Statement), "delete") assert.Equal(r.t, hasDelete, r.changesApplied, "delete after provider changes, everything else before") assert.LessOrEqual(r.t, len(input.Statements), 25) - responses := make([]*dynamodb.BatchStatementResponse, 0, len(input.Statements)) + responses := make([]dynamodbtypes.BatchStatementResponse, 0, len(input.Statements)) for _, statement := range input.Statements { - assert.Equal(r.t, hasDelete, strings.HasPrefix(strings.ToLower(aws.StringValue(statement.Statement)), "delete")) - switch aws.StringValue(statement.Statement) { + assert.Equal(r.t, hasDelete, strings.HasPrefix(strings.ToLower(*statement.Statement), "delete")) + switch *statement.Statement { case "DELETE FROM \"test-table\" WHERE \"k\"=? AND \"o\"=?": assert.True(r.t, r.changesApplied, "unexpected delete before provider changes") - key := aws.StringValue(statement.Parameters[0].S) + var key string + assert.Nil(r.t, attributevalue.Unmarshal(statement.Parameters[0], &key)) assert.True(r.t, r.stubConfig.ExpectDelete.Has(key), "unexpected delete for key %q", key) r.stubConfig.ExpectDelete.Delete(key) - assert.Equal(r.t, "test-owner", aws.StringValue(statement.Parameters[1].S)) + var testOwner string + assert.Nil(r.t, attributevalue.Unmarshal(statement.Parameters[1], &testOwner)) + assert.Equal(r.t, "test-owner", testOwner) - responses = append(responses, &dynamodb.BatchStatementResponse{}) + responses = append(responses, dynamodbtypes.BatchStatementResponse{}) case "INSERT INTO \"test-table\" VALUE {'k':?, 'o':?, 'l':?}": assert.False(r.t, r.changesApplied, "unexpected insert after provider changes") - key := aws.StringValue(statement.Parameters[0].S) + var key string + assert.Nil(r.t, attributevalue.Unmarshal(statement.Parameters[0], &key)) if code, exists := r.stubConfig.ExpectInsertError[key]; exists { delete(r.stubConfig.ExpectInsertError, key) - responses = append(responses, &dynamodb.BatchStatementResponse{ - Error: &dynamodb.BatchStatementError{ - Code: aws.String(code), + responses = append(responses, dynamodbtypes.BatchStatementResponse{ + Error: &dynamodbtypes.BatchStatementError{ + Code: code, Message: aws.String("testing error"), }, }) @@ -1218,10 +1224,15 @@ func (r *DynamoDBStub) BatchExecuteStatementWithContext(context aws.Context, inp assert.True(r.t, found, "unexpected insert for key %q", key) delete(r.stubConfig.ExpectInsert, key) - assert.Equal(r.t, "test-owner", aws.StringValue(statement.Parameters[1].S)) + var testOwner string + assert.Nil(r.t, attributevalue.Unmarshal(statement.Parameters[1], &testOwner)) + assert.Equal(r.t, "test-owner", testOwner) - for label, attribute := range statement.Parameters[2].M { - value := aws.StringValue(attribute.S) + var labels map[string]string + err := attributevalue.Unmarshal(statement.Parameters[2], &labels) + assert.Nil(r.t, err) + + for label, value := range labels { expectedValue, found := expectedLabels[label] assert.True(r.t, found, "insert for key %q has unexpected label %q", key, label) delete(expectedLabels, label) @@ -1232,17 +1243,18 @@ func (r *DynamoDBStub) BatchExecuteStatementWithContext(context aws.Context, inp r.t.Errorf("insert for key %q did not get expected label %q", key, label) } - responses = append(responses, &dynamodb.BatchStatementResponse{}) + responses = append(responses, dynamodbtypes.BatchStatementResponse{}) case "UPDATE \"test-table\" SET \"l\"=? WHERE \"k\"=?": assert.False(r.t, r.changesApplied, "unexpected update after provider changes") - key := aws.StringValue(statement.Parameters[1].S) + var key string + assert.Nil(r.t, attributevalue.Unmarshal(statement.Parameters[1], &key)) if code, exists := r.stubConfig.ExpectUpdateError[key]; exists { delete(r.stubConfig.ExpectInsertError, key) - responses = append(responses, &dynamodb.BatchStatementResponse{ - Error: &dynamodb.BatchStatementError{ - Code: aws.String(code), + responses = append(responses, dynamodbtypes.BatchStatementResponse{ + Error: &dynamodbtypes.BatchStatementError{ + Code: code, Message: aws.String("testing error"), }, }) @@ -1253,8 +1265,10 @@ func (r *DynamoDBStub) BatchExecuteStatementWithContext(context aws.Context, inp assert.True(r.t, found, "unexpected update for key %q", key) delete(r.stubConfig.ExpectUpdate, key) - for label, attribute := range statement.Parameters[0].M { - value := aws.StringValue(attribute.S) + var labels map[string]string + assert.Nil(r.t, attributevalue.Unmarshal(statement.Parameters[0], &labels)) + + for label, value := range labels { expectedValue, found := expectedLabels[label] assert.True(r.t, found, "update for key %q has unexpected label %q", key, label) delete(expectedLabels, label) @@ -1265,10 +1279,10 @@ func (r *DynamoDBStub) BatchExecuteStatementWithContext(context aws.Context, inp r.t.Errorf("update for key %q did not get expected label %q", key, label) } - responses = append(responses, &dynamodb.BatchStatementResponse{}) + responses = append(responses, dynamodbtypes.BatchStatementResponse{}) default: - r.t.Errorf("unexpected statement: %s", aws.StringValue(statement.Statement)) + r.t.Errorf("unexpected statement: %s", *statement.Statement) } } From c4a18a9cb642a09e0501fa4fe86fd71f7c4370fb Mon Sep 17 00:00:00 2001 From: Michael Shen Date: Mon, 29 Jul 2024 22:19:02 -0400 Subject: [PATCH 73/78] Refactor AWS Cloud Map provider to aws-sdk-go-v2 Signed-off-by: Michael Shen --- go.mod | 1 + go.sum | 2 + main.go | 4 +- provider/awssd/aws_sd.go | 272 +++++++++------------ provider/awssd/aws_sd_test.go | 437 ++++++++++++++++++---------------- 5 files changed, 358 insertions(+), 358 deletions(-) diff --git a/go.mod b/go.mod index 543b2ebdf..57e6856cb 100644 --- a/go.mod +++ b/go.mod @@ -22,6 +22,7 @@ require ( github.com/aws/aws-sdk-go-v2/credentials v1.17.27 github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.14.10 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.4 + github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.3 github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 github.com/bodgit/tsig v1.2.2 github.com/cenkalti/backoff/v4 v4.3.0 diff --git a/go.sum b/go.sum index 1798b3272..c500ada73 100644 --- a/go.sum +++ b/go.sum @@ -145,6 +145,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16 h1:lhAX github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16/go.mod h1:AblAlCwvi7Q/SFowvckgN+8M3uFPlopSYeLlbNDArhA= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.3 h1:EthA93BNgTnk36FoI9DCKtv4S0m63WzdGDYlBp/CvHQ= +github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.3/go.mod h1:4xh/h0pevPhBkA4b2iYosZaqrThccxFREQxiGuZpJlc= github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM= github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE= diff --git a/main.go b/main.go index 27f91877c..e75b6795a 100644 --- a/main.go +++ b/main.go @@ -26,8 +26,8 @@ import ( "time" "github.com/aws/aws-sdk-go-v2/service/dynamodb" + sd "github.com/aws/aws-sdk-go-v2/service/servicediscovery" "github.com/aws/aws-sdk-go/service/route53" - sd "github.com/aws/aws-sdk-go/service/servicediscovery" "github.com/go-logr/logr" "github.com/prometheus/client_golang/prometheus/promhttp" log "github.com/sirupsen/logrus" @@ -235,7 +235,7 @@ func main() { log.Infof("Registry \"%s\" cannot be used with AWS Cloud Map. Switching to \"aws-sd\".", cfg.Registry) cfg.Registry = "aws-sd" } - p, err = awssd.NewAWSSDProvider(domainFilter, cfg.AWSZoneType, cfg.DryRun, cfg.AWSSDServiceCleanup, cfg.TXTOwnerID, sd.New(aws.CreateDefaultSession(cfg))) + p, err = awssd.NewAWSSDProvider(domainFilter, cfg.AWSZoneType, cfg.DryRun, cfg.AWSSDServiceCleanup, cfg.TXTOwnerID, sd.NewFromConfig(aws.CreateDefaultV2Config(cfg))) case "azure-dns", "azure": p, err = azure.NewAzureProvider(cfg.AzureConfigFile, domainFilter, zoneNameFilter, zoneIDFilter, cfg.AzureSubscriptionID, cfg.AzureResourceGroup, cfg.AzureUserAssignedIdentityClientID, cfg.AzureActiveDirectoryAuthorityHost, cfg.DryRun) case "azure-private-dns": diff --git a/provider/awssd/aws_sd.go b/provider/awssd/aws_sd.go index 8c41e5f86..14a977873 100644 --- a/provider/awssd/aws_sd.go +++ b/provider/awssd/aws_sd.go @@ -24,9 +24,9 @@ import ( "regexp" "strings" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - sd "github.com/aws/aws-sdk-go/service/servicediscovery" + "github.com/aws/aws-sdk-go-v2/aws" + sd "github.com/aws/aws-sdk-go-v2/service/servicediscovery" + sdtypes "github.com/aws/aws-sdk-go-v2/service/servicediscovery/types" log "github.com/sirupsen/logrus" "sigs.k8s.io/external-dns/endpoint" @@ -54,16 +54,16 @@ var ( ) // AWSSDClient is the subset of the AWS Cloud Map API that we actually use. Add methods as required. -// Signatures must match exactly. Taken from https://github.com/aws/aws-sdk-go/blob/HEAD/service/servicediscovery/api.go +// Signatures must match exactly. Taken from https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/servicediscovery type AWSSDClient interface { - CreateService(input *sd.CreateServiceInput) (*sd.CreateServiceOutput, error) - DeregisterInstance(input *sd.DeregisterInstanceInput) (*sd.DeregisterInstanceOutput, error) - DiscoverInstancesWithContext(ctx aws.Context, input *sd.DiscoverInstancesInput, opts ...request.Option) (*sd.DiscoverInstancesOutput, error) - ListNamespacesPages(input *sd.ListNamespacesInput, fn func(*sd.ListNamespacesOutput, bool) bool) error - ListServicesPages(input *sd.ListServicesInput, fn func(*sd.ListServicesOutput, bool) bool) error - RegisterInstance(input *sd.RegisterInstanceInput) (*sd.RegisterInstanceOutput, error) - UpdateService(input *sd.UpdateServiceInput) (*sd.UpdateServiceOutput, error) - DeleteService(input *sd.DeleteServiceInput) (*sd.DeleteServiceOutput, error) + CreateService(ctx context.Context, params *sd.CreateServiceInput, optFns ...func(*sd.Options)) (*sd.CreateServiceOutput, error) + DeregisterInstance(ctx context.Context, params *sd.DeregisterInstanceInput, optFns ...func(*sd.Options)) (*sd.DeregisterInstanceOutput, error) + DiscoverInstances(ctx context.Context, params *sd.DiscoverInstancesInput, optFns ...func(*sd.Options)) (*sd.DiscoverInstancesOutput, error) + ListNamespaces(ctx context.Context, params *sd.ListNamespacesInput, optFns ...func(*sd.Options)) (*sd.ListNamespacesOutput, error) + ListServices(ctx context.Context, params *sd.ListServicesInput, optFns ...func(*sd.Options)) (*sd.ListServicesOutput, error) + RegisterInstance(ctx context.Context, params *sd.RegisterInstanceInput, optFns ...func(*sd.Options)) (*sd.RegisterInstanceOutput, error) + UpdateService(ctx context.Context, params *sd.UpdateServiceInput, optFns ...func(*sd.Options)) (*sd.UpdateServiceOutput, error) + DeleteService(ctx context.Context, params *sd.DeleteServiceInput, optFns ...func(*sd.Options)) (*sd.DeleteServiceOutput, error) } // AWSSDProvider is an implementation of Provider for AWS Cloud Map. @@ -74,7 +74,7 @@ type AWSSDProvider struct { // only consider namespaces ending in this suffix namespaceFilter endpoint.DomainFilter // filter namespace by type (private or public) - namespaceTypeFilter *sd.NamespaceFilter + namespaceTypeFilter sdtypes.NamespaceFilter // enables service without instances cleanup cleanEmptyService bool // filter services for removal @@ -83,7 +83,7 @@ type AWSSDProvider struct { // NewAWSSDProvider initializes a new AWS Cloud Map based Provider. func NewAWSSDProvider(domainFilter endpoint.DomainFilter, namespaceType string, dryRun, cleanEmptyService bool, ownerID string, client AWSSDClient) (*AWSSDProvider, error) { - provider := &AWSSDProvider{ + p := &AWSSDProvider{ client: client, dryRun: dryRun, namespaceFilter: domainFilter, @@ -92,42 +92,42 @@ func NewAWSSDProvider(domainFilter endpoint.DomainFilter, namespaceType string, ownerID: ownerID, } - return provider, nil + return p, nil } // newSdNamespaceFilter initialized AWS SD Namespace Filter based on given string config -func newSdNamespaceFilter(namespaceTypeConfig string) *sd.NamespaceFilter { +func newSdNamespaceFilter(namespaceTypeConfig string) sdtypes.NamespaceFilter { switch namespaceTypeConfig { case sdNamespaceTypePublic: - return &sd.NamespaceFilter{ - Name: aws.String(sd.NamespaceFilterNameType), - Values: []*string{aws.String(sd.NamespaceTypeDnsPublic)}, + return sdtypes.NamespaceFilter{ + Name: sdtypes.NamespaceFilterNameType, + Values: []string{string(sdtypes.NamespaceTypeDnsPublic)}, } case sdNamespaceTypePrivate: - return &sd.NamespaceFilter{ - Name: aws.String(sd.NamespaceFilterNameType), - Values: []*string{aws.String(sd.NamespaceTypeDnsPrivate)}, + return sdtypes.NamespaceFilter{ + Name: sdtypes.NamespaceFilterNameType, + Values: []string{string(sdtypes.NamespaceTypeDnsPrivate)}, } default: - return nil + return sdtypes.NamespaceFilter{} } } // Records returns list of all endpoints. func (p *AWSSDProvider) Records(ctx context.Context) (endpoints []*endpoint.Endpoint, err error) { - namespaces, err := p.ListNamespaces() + namespaces, err := p.ListNamespaces(ctx) if err != nil { return nil, err } for _, ns := range namespaces { - services, err := p.ListServicesByNamespaceID(ns.Id) + services, err := p.ListServicesByNamespaceID(ctx, ns.Id) if err != nil { return nil, err } for _, srv := range services { - resp, err := p.client.DiscoverInstancesWithContext(ctx, &sd.DiscoverInstancesInput{ + resp, err := p.client.DiscoverInstances(ctx, &sd.DiscoverInstancesInput{ NamespaceName: ns.Name, ServiceName: srv.Name, }) @@ -136,8 +136,8 @@ func (p *AWSSDProvider) Records(ctx context.Context) (endpoints []*endpoint.Endp } if len(resp.Instances) == 0 { - if err := p.DeleteService(srv); err != nil { - log.Errorf("Failed to delete service %q, error: %s", aws.StringValue(srv.Name), err) + if err := p.DeleteService(ctx, srv); err != nil { + log.Errorf("Failed to delete service %q, error: %s", *srv.Name, err) } continue } @@ -149,35 +149,35 @@ func (p *AWSSDProvider) Records(ctx context.Context) (endpoints []*endpoint.Endp return endpoints, nil } -func (p *AWSSDProvider) instancesToEndpoint(ns *sd.NamespaceSummary, srv *sd.Service, instances []*sd.HttpInstanceSummary) *endpoint.Endpoint { +func (p *AWSSDProvider) instancesToEndpoint(ns *sdtypes.NamespaceSummary, srv *sdtypes.Service, instances []sdtypes.HttpInstanceSummary) *endpoint.Endpoint { // DNS name of the record is a concatenation of service and namespace recordName := *srv.Name + "." + *ns.Name labels := endpoint.NewLabels() - labels[endpoint.AWSSDDescriptionLabel] = aws.StringValue(srv.Description) + labels[endpoint.AWSSDDescriptionLabel] = *srv.Description newEndpoint := &endpoint.Endpoint{ DNSName: recordName, - RecordTTL: endpoint.TTL(aws.Int64Value(srv.DnsConfig.DnsRecords[0].TTL)), + RecordTTL: endpoint.TTL(*srv.DnsConfig.DnsRecords[0].TTL), Targets: make(endpoint.Targets, 0, len(instances)), Labels: labels, } for _, inst := range instances { // CNAME - if inst.Attributes[sdInstanceAttrCname] != nil && aws.StringValue(srv.DnsConfig.DnsRecords[0].Type) == sd.RecordTypeCname { + if inst.Attributes[sdInstanceAttrCname] != "" && srv.DnsConfig.DnsRecords[0].Type == sdtypes.RecordTypeCname { newEndpoint.RecordType = endpoint.RecordTypeCNAME - newEndpoint.Targets = append(newEndpoint.Targets, aws.StringValue(inst.Attributes[sdInstanceAttrCname])) + newEndpoint.Targets = append(newEndpoint.Targets, inst.Attributes[sdInstanceAttrCname]) // ALIAS - } else if inst.Attributes[sdInstanceAttrAlias] != nil { + } else if inst.Attributes[sdInstanceAttrAlias] != "" { newEndpoint.RecordType = endpoint.RecordTypeCNAME - newEndpoint.Targets = append(newEndpoint.Targets, aws.StringValue(inst.Attributes[sdInstanceAttrAlias])) + newEndpoint.Targets = append(newEndpoint.Targets, inst.Attributes[sdInstanceAttrAlias]) // IP-based target - } else if inst.Attributes[sdInstanceAttrIPV4] != nil { + } else if inst.Attributes[sdInstanceAttrIPV4] != "" { newEndpoint.RecordType = endpoint.RecordTypeA - newEndpoint.Targets = append(newEndpoint.Targets, aws.StringValue(inst.Attributes[sdInstanceAttrIPV4])) + newEndpoint.Targets = append(newEndpoint.Targets, inst.Attributes[sdInstanceAttrIPV4]) } else { log.Warnf("Invalid instance \"%v\" found in service \"%v\"", inst, srv.Name) } @@ -199,7 +199,7 @@ func (p *AWSSDProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) changes.Delete = append(changes.Delete, deletes...) changes.Create = append(changes.Create, creates...) - namespaces, err := p.ListNamespaces() + namespaces, err := p.ListNamespaces(ctx) if err != nil { return err } @@ -211,12 +211,12 @@ func (p *AWSSDProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) // creates = [1.2.3.4, 1.2.3.5] // ``` // then when deletes are executed after creates it will miss the `1.2.3.4` instance. - err = p.submitDeletes(namespaces, changes.Delete) + err = p.submitDeletes(ctx, namespaces, changes.Delete) if err != nil { return err } - err = p.submitCreates(namespaces, changes.Create) + err = p.submitCreates(ctx, namespaces, changes.Create) if err != nil { return err } @@ -245,11 +245,11 @@ func (p *AWSSDProvider) updatesToCreates(changes *plan.Changes) (creates []*endp return creates, deletes } -func (p *AWSSDProvider) submitCreates(namespaces []*sd.NamespaceSummary, changes []*endpoint.Endpoint) error { +func (p *AWSSDProvider) submitCreates(ctx context.Context, namespaces []*sdtypes.NamespaceSummary, changes []*endpoint.Endpoint) error { changesByNamespaceID := p.changesByNamespaceID(namespaces, changes) for nsID, changeList := range changesByNamespaceID { - services, err := p.ListServicesByNamespaceID(aws.String(nsID)) + services, err := p.ListServicesByNamespaceID(ctx, aws.String(nsID)) if err != nil { return err } @@ -260,7 +260,7 @@ func (p *AWSSDProvider) submitCreates(namespaces []*sd.NamespaceSummary, changes srv := services[srvName] if srv == nil { // when service is missing create a new one - srv, err = p.CreateService(&nsID, &srvName, ch) + srv, err = p.CreateService(ctx, &nsID, &srvName, ch) if err != nil { return err } @@ -268,13 +268,13 @@ func (p *AWSSDProvider) submitCreates(namespaces []*sd.NamespaceSummary, changes services[*srv.Name] = srv } else if ch.RecordTTL.IsConfigured() && *srv.DnsConfig.DnsRecords[0].TTL != int64(ch.RecordTTL) { // update service when TTL differ - err = p.UpdateService(srv, ch) + err = p.UpdateService(ctx, srv, ch) if err != nil { return err } } - err = p.RegisterInstance(srv, ch) + err = p.RegisterInstance(ctx, srv, ch) if err != nil { return err } @@ -284,11 +284,11 @@ func (p *AWSSDProvider) submitCreates(namespaces []*sd.NamespaceSummary, changes return nil } -func (p *AWSSDProvider) submitDeletes(namespaces []*sd.NamespaceSummary, changes []*endpoint.Endpoint) error { +func (p *AWSSDProvider) submitDeletes(ctx context.Context, namespaces []*sdtypes.NamespaceSummary, changes []*endpoint.Endpoint) error { changesByNamespaceID := p.changesByNamespaceID(namespaces, changes) for nsID, changeList := range changesByNamespaceID { - services, err := p.ListServicesByNamespaceID(aws.String(nsID)) + services, err := p.ListServicesByNamespaceID(ctx, aws.String(nsID)) if err != nil { return err } @@ -302,7 +302,7 @@ func (p *AWSSDProvider) submitDeletes(namespaces []*sd.NamespaceSummary, changes return fmt.Errorf("service \"%s\" is missing when trying to delete \"%v\"", srvName, hostname) } - err := p.DeregisterInstance(srv, ch) + err := p.DeregisterInstance(ctx, srv, ch) if err != nil { return err } @@ -313,53 +313,51 @@ func (p *AWSSDProvider) submitDeletes(namespaces []*sd.NamespaceSummary, changes } // ListNamespaces returns all namespaces matching defined namespace filter -func (p *AWSSDProvider) ListNamespaces() ([]*sd.NamespaceSummary, error) { - namespaces := make([]*sd.NamespaceSummary, 0) +func (p *AWSSDProvider) ListNamespaces(ctx context.Context) ([]*sdtypes.NamespaceSummary, error) { + namespaces := make([]*sdtypes.NamespaceSummary, 0) - f := func(resp *sd.ListNamespacesOutput, lastPage bool) bool { - for _, ns := range resp.Namespaces { - if !p.namespaceFilter.Match(aws.StringValue(ns.Name)) { - continue - } - namespaces = append(namespaces, ns) + paginator := sd.NewListNamespacesPaginator(p.client, &sd.ListNamespacesInput{ + Filters: []sdtypes.NamespaceFilter{p.namespaceTypeFilter}, + }) + for paginator.HasMorePages() { + resp, err := paginator.NextPage(ctx) + if err != nil { + return nil, err } - return true - } - - err := p.client.ListNamespacesPages(&sd.ListNamespacesInput{ - Filters: []*sd.NamespaceFilter{p.namespaceTypeFilter}, - }, f) - if err != nil { - return nil, err + for _, ns := range resp.Namespaces { + if !p.namespaceFilter.Match(*ns.Name) { + continue + } + namespaces = append(namespaces, &ns) + } } return namespaces, nil } -// ListServicesByNamespaceID returns list of services in given namespace. Returns map[srv_name]*sd.Service -func (p *AWSSDProvider) ListServicesByNamespaceID(namespaceID *string) (map[string]*sd.Service, error) { - services := make([]*sd.ServiceSummary, 0) +// ListServicesByNamespaceID returns list of services in given namespace. +func (p *AWSSDProvider) ListServicesByNamespaceID(ctx context.Context, namespaceID *string) (map[string]*sdtypes.Service, error) { + services := make([]sdtypes.ServiceSummary, 0) - f := func(resp *sd.ListServicesOutput, lastPage bool) bool { - services = append(services, resp.Services...) - return true - } - - err := p.client.ListServicesPages(&sd.ListServicesInput{ - Filters: []*sd.ServiceFilter{{ - Name: aws.String(sd.ServiceFilterNameNamespaceId), - Values: []*string{namespaceID}, + paginator := sd.NewListServicesPaginator(p.client, &sd.ListServicesInput{ + Filters: []sdtypes.ServiceFilter{{ + Name: sdtypes.ServiceFilterNameNamespaceId, + Values: []string{*namespaceID}, }}, - MaxResults: aws.Int64(100), - }, f) - if err != nil { - return nil, err + MaxResults: aws.Int32(100), + }) + for paginator.HasMorePages() { + resp, err := paginator.NextPage(ctx) + if err != nil { + return nil, err + } + services = append(services, resp.Services...) } - servicesMap := make(map[string]*sd.Service) + servicesMap := make(map[string]*sdtypes.Service) for _, serviceSummary := range services { - service := &sd.Service{ + service := &sdtypes.Service{ Arn: serviceSummary.Arn, CreateDate: serviceSummary.CreateDate, Description: serviceSummary.Description, @@ -373,13 +371,13 @@ func (p *AWSSDProvider) ListServicesByNamespaceID(namespaceID *string) (map[stri Type: serviceSummary.Type, } - servicesMap[aws.StringValue(service.Name)] = service + servicesMap[*service.Name] = service } return servicesMap, nil } // CreateService creates a new service in AWS API. Returns the created service. -func (p *AWSSDProvider) CreateService(namespaceID *string, srvName *string, ep *endpoint.Endpoint) (*sd.Service, error) { +func (p *AWSSDProvider) CreateService(ctx context.Context, namespaceID *string, srvName *string, ep *endpoint.Endpoint) (*sdtypes.Service, error) { log.Infof("Creating a new service \"%s\" in \"%s\" namespace", *srvName, *namespaceID) srvType := p.serviceTypeFromEndpoint(ep) @@ -391,13 +389,13 @@ func (p *AWSSDProvider) CreateService(namespaceID *string, srvName *string, ep * } if !p.dryRun { - out, err := p.client.CreateService(&sd.CreateServiceInput{ + out, err := p.client.CreateService(ctx, &sd.CreateServiceInput{ Name: srvName, Description: aws.String(ep.Labels[endpoint.AWSSDDescriptionLabel]), - DnsConfig: &sd.DnsConfig{ - RoutingPolicy: aws.String(routingPolicy), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(srvType), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: routingPolicy, + DnsRecords: []sdtypes.DnsRecord{{ + Type: srvType, TTL: aws.Int64(ttl), }}, }, @@ -411,11 +409,11 @@ func (p *AWSSDProvider) CreateService(namespaceID *string, srvName *string, ep * } // return mock service summary in case of dry run - return &sd.Service{Id: aws.String("dry-run-service"), Name: aws.String("dry-run-service")}, nil + return &sdtypes.Service{Id: aws.String("dry-run-service"), Name: aws.String("dry-run-service")}, nil } // UpdateService updates the specified service with information from provided endpoint. -func (p *AWSSDProvider) UpdateService(service *sd.Service, ep *endpoint.Endpoint) error { +func (p *AWSSDProvider) UpdateService(ctx context.Context, service *sdtypes.Service, ep *endpoint.Endpoint) error { log.Infof("Updating service \"%s\"", *service.Name) srvType := p.serviceTypeFromEndpoint(ep) @@ -426,13 +424,13 @@ func (p *AWSSDProvider) UpdateService(service *sd.Service, ep *endpoint.Endpoint } if !p.dryRun { - _, err := p.client.UpdateService(&sd.UpdateServiceInput{ + _, err := p.client.UpdateService(ctx, &sd.UpdateServiceInput{ Id: service.Id, - Service: &sd.ServiceChange{ + Service: &sdtypes.ServiceChange{ Description: aws.String(ep.Labels[endpoint.AWSSDDescriptionLabel]), - DnsConfig: &sd.DnsConfigChange{ - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(srvType), + DnsConfig: &sdtypes.DnsConfigChange{ + DnsRecords: []sdtypes.DnsRecord{{ + Type: srvType, TTL: aws.Int64(ttl), }}, }, @@ -447,7 +445,7 @@ func (p *AWSSDProvider) UpdateService(service *sd.Service, ep *endpoint.Endpoint } // DeleteService deletes empty Service from AWS API if its owner id match -func (p *AWSSDProvider) DeleteService(service *sd.Service) error { +func (p *AWSSDProvider) DeleteService(ctx context.Context, service *sdtypes.Service) error { log.Debugf("Check if service \"%s\" owner id match and it can be deleted", *service.Name) if !p.dryRun && p.cleanEmptyService { // convert ownerID string to service description format @@ -455,39 +453,39 @@ func (p *AWSSDProvider) DeleteService(service *sd.Service) error { label[endpoint.OwnerLabelKey] = p.ownerID label[endpoint.AWSSDDescriptionLabel] = label.SerializePlain(false) - if strings.HasPrefix(aws.StringValue(service.Description), label[endpoint.AWSSDDescriptionLabel]) { + if strings.HasPrefix(*service.Description, label[endpoint.AWSSDDescriptionLabel]) { log.Infof("Deleting service \"%s\"", *service.Name) - _, err := p.client.DeleteService(&sd.DeleteServiceInput{ + _, err := p.client.DeleteService(ctx, &sd.DeleteServiceInput{ Id: aws.String(*service.Id), }) return err } - log.Debugf("Skipping service removal %s because owner id does not match, found: \"%s\", required: \"%s\"", aws.StringValue(service.Name), aws.StringValue(service.Description), label[endpoint.AWSSDDescriptionLabel]) + log.Debugf("Skipping service removal %s because owner id does not match, found: \"%s\", required: \"%s\"", *service.Name, *service.Description, label[endpoint.AWSSDDescriptionLabel]) } return nil } // RegisterInstance creates a new instance in given service. -func (p *AWSSDProvider) RegisterInstance(service *sd.Service, ep *endpoint.Endpoint) error { +func (p *AWSSDProvider) RegisterInstance(ctx context.Context, service *sdtypes.Service, ep *endpoint.Endpoint) error { for _, target := range ep.Targets { log.Infof("Registering a new instance \"%s\" for service \"%s\" (%s)", target, *service.Name, *service.Id) - attr := make(map[string]*string) + attr := make(map[string]string) if ep.RecordType == endpoint.RecordTypeCNAME { if p.isAWSLoadBalancer(target) { - attr[sdInstanceAttrAlias] = aws.String(target) + attr[sdInstanceAttrAlias] = target } else { - attr[sdInstanceAttrCname] = aws.String(target) + attr[sdInstanceAttrCname] = target } } else if ep.RecordType == endpoint.RecordTypeA { - attr[sdInstanceAttrIPV4] = aws.String(target) + attr[sdInstanceAttrIPV4] = target } else { return fmt.Errorf("invalid endpoint type (%v)", ep) } if !p.dryRun { - _, err := p.client.RegisterInstance(&sd.RegisterInstanceInput{ + _, err := p.client.RegisterInstance(ctx, &sd.RegisterInstanceInput{ ServiceId: service.Id, Attributes: attr, InstanceId: aws.String(p.targetToInstanceID(target)), @@ -502,12 +500,12 @@ func (p *AWSSDProvider) RegisterInstance(service *sd.Service, ep *endpoint.Endpo } // DeregisterInstance removes an instance from given service. -func (p *AWSSDProvider) DeregisterInstance(service *sd.Service, ep *endpoint.Endpoint) error { +func (p *AWSSDProvider) DeregisterInstance(ctx context.Context, service *sdtypes.Service, ep *endpoint.Endpoint) error { for _, target := range ep.Targets { log.Infof("De-registering an instance \"%s\" for service \"%s\" (%s)", target, *service.Name, *service.Id) if !p.dryRun { - _, err := p.client.DeregisterInstance(&sd.DeregisterInstanceInput{ + _, err := p.client.DeregisterInstance(ctx, &sd.DeregisterInstanceInput{ InstanceId: aws.String(p.targetToInstanceID(target)), ServiceId: service.Id, }) @@ -531,43 +529,7 @@ func (p *AWSSDProvider) targetToInstanceID(target string) string { return strings.ToLower(target) } -// nolint: deadcode -// used from unit test -func namespaceToNamespaceSummary(namespace *sd.Namespace) *sd.NamespaceSummary { - if namespace == nil { - return nil - } - - return &sd.NamespaceSummary{ - Id: namespace.Id, - Type: namespace.Type, - Name: namespace.Name, - Arn: namespace.Arn, - } -} - -// nolint: deadcode -// used from unit test -func serviceToServiceSummary(service *sd.Service) *sd.ServiceSummary { - if service == nil { - return nil - } - - return &sd.ServiceSummary{ - Arn: service.Arn, - CreateDate: service.CreateDate, - Description: service.Description, - DnsConfig: service.DnsConfig, - HealthCheckConfig: service.HealthCheckConfig, - HealthCheckCustomConfig: service.HealthCheckCustomConfig, - Id: service.Id, - InstanceCount: service.InstanceCount, - Name: service.Name, - Type: service.Type, - } -} - -func (p *AWSSDProvider) changesByNamespaceID(namespaces []*sd.NamespaceSummary, changes []*endpoint.Endpoint) map[string][]*endpoint.Endpoint { +func (p *AWSSDProvider) changesByNamespaceID(namespaces []*sdtypes.NamespaceSummary, changes []*endpoint.Endpoint) map[string][]*endpoint.Endpoint { changesByNsID := make(map[string][]*endpoint.Endpoint) for _, ns := range namespaces { @@ -600,8 +562,8 @@ func (p *AWSSDProvider) changesByNamespaceID(namespaces []*sd.NamespaceSummary, } // returns list of all namespaces matching given hostname -func matchingNamespaces(hostname string, namespaces []*sd.NamespaceSummary) []*sd.NamespaceSummary { - matchingNamespaces := make([]*sd.NamespaceSummary, 0) +func matchingNamespaces(hostname string, namespaces []*sdtypes.NamespaceSummary) []*sdtypes.NamespaceSummary { + matchingNamespaces := make([]*sdtypes.NamespaceSummary, 0) for _, ns := range namespaces { if *ns.Name == hostname { @@ -621,26 +583,26 @@ func (p *AWSSDProvider) parseHostname(hostname string) (namespace string, servic } // determine service routing policy based on endpoint type -func (p *AWSSDProvider) routingPolicyFromEndpoint(ep *endpoint.Endpoint) string { +func (p *AWSSDProvider) routingPolicyFromEndpoint(ep *endpoint.Endpoint) sdtypes.RoutingPolicy { if ep.RecordType == endpoint.RecordTypeA { - return sd.RoutingPolicyMultivalue + return sdtypes.RoutingPolicyMultivalue } - return sd.RoutingPolicyWeighted + return sdtypes.RoutingPolicyWeighted } // determine service type (A, CNAME) from given endpoint -func (p *AWSSDProvider) serviceTypeFromEndpoint(ep *endpoint.Endpoint) string { +func (p *AWSSDProvider) serviceTypeFromEndpoint(ep *endpoint.Endpoint) sdtypes.RecordType { if ep.RecordType == endpoint.RecordTypeCNAME { // FIXME service type is derived from the first target only. Theoretically this may be problem. // But I don't see a scenario where one endpoint contains targets of different types. if p.isAWSLoadBalancer(ep.Targets[0]) { - // ALIAS target uses DNS record type of A - return sd.RecordTypeA + // ALIAS target uses DNS record of type A + return sdtypes.RecordTypeA } - return sd.RecordTypeCname + return sdtypes.RecordTypeCname } - return sd.RecordTypeA + return sdtypes.RecordTypeA } // determine if a given hostname belongs to an AWS load balancer diff --git a/provider/awssd/aws_sd_test.go b/provider/awssd/aws_sd_test.go index 03198d49c..2cc543143 100644 --- a/provider/awssd/aws_sd_test.go +++ b/provider/awssd/aws_sd_test.go @@ -25,9 +25,9 @@ import ( "testing" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - sd "github.com/aws/aws-sdk-go/service/servicediscovery" + "github.com/aws/aws-sdk-go-v2/aws" + sd "github.com/aws/aws-sdk-go-v2/service/servicediscovery" + sdtypes "github.com/aws/aws-sdk-go-v2/service/servicediscovery/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -45,17 +45,17 @@ var ( type AWSSDClientStub struct { // map[namespace_id]namespace - namespaces map[string]*sd.Namespace + namespaces map[string]*sdtypes.Namespace // map[namespace_id] => map[service_id]instance - services map[string]map[string]*sd.Service + services map[string]map[string]*sdtypes.Service // map[service_id] => map[inst_id]instance - instances map[string]map[string]*sd.Instance + instances map[string]map[string]*sdtypes.Instance } -func (s *AWSSDClientStub) CreateService(input *sd.CreateServiceInput) (*sd.CreateServiceOutput, error) { - srv := &sd.Service{ +func (s *AWSSDClientStub) CreateService(ctx context.Context, input *sd.CreateServiceInput, optFns ...func(*sd.Options)) (*sd.CreateServiceOutput, error) { + srv := &sdtypes.Service{ Id: aws.String(strconv.Itoa(rand.Intn(10000))), DnsConfig: input.DnsConfig, Name: input.Name, @@ -66,7 +66,7 @@ func (s *AWSSDClientStub) CreateService(input *sd.CreateServiceInput) (*sd.Creat nsServices, ok := s.services[*input.NamespaceId] if !ok { - nsServices = make(map[string]*sd.Service) + nsServices = make(map[string]*sdtypes.Service) s.services[*input.NamespaceId] = nsServices } nsServices[*srv.Id] = srv @@ -76,14 +76,14 @@ func (s *AWSSDClientStub) CreateService(input *sd.CreateServiceInput) (*sd.Creat }, nil } -func (s *AWSSDClientStub) DeregisterInstance(input *sd.DeregisterInstanceInput) (*sd.DeregisterInstanceOutput, error) { +func (s *AWSSDClientStub) DeregisterInstance(ctx context.Context, input *sd.DeregisterInstanceInput, optFns ...func(options *sd.Options)) (*sd.DeregisterInstanceOutput, error) { serviceInstances := s.instances[*input.ServiceId] delete(serviceInstances, *input.InstanceId) return &sd.DeregisterInstanceOutput{}, nil } -func (s *AWSSDClientStub) GetService(input *sd.GetServiceInput) (*sd.GetServiceOutput, error) { +func (s *AWSSDClientStub) GetService(ctx context.Context, input *sd.GetServiceInput, optFns ...func(options *sd.Options)) (*sd.GetServiceOutput, error) { for _, entry := range s.services { srv, ok := entry[*input.Id] if ok { @@ -96,18 +96,18 @@ func (s *AWSSDClientStub) GetService(input *sd.GetServiceInput) (*sd.GetServiceO return nil, errors.New("service not found") } -func (s *AWSSDClientStub) DiscoverInstancesWithContext(ctx context.Context, input *sd.DiscoverInstancesInput, opts ...request.Option) (*sd.DiscoverInstancesOutput, error) { - instances := make([]*sd.HttpInstanceSummary, 0) +func (s *AWSSDClientStub) DiscoverInstances(ctx context.Context, input *sd.DiscoverInstancesInput, opts ...func(options *sd.Options)) (*sd.DiscoverInstancesOutput, error) { + instances := make([]sdtypes.HttpInstanceSummary, 0) var foundNs bool for _, ns := range s.namespaces { - if aws.StringValue(ns.Name) == aws.StringValue(input.NamespaceName) { + if *ns.Name == *input.NamespaceName { foundNs = true for _, srv := range s.services[*ns.Id] { - if aws.StringValue(srv.Name) == aws.StringValue(input.ServiceName) { + if *srv.Name == *input.ServiceName { for _, inst := range s.instances[*srv.Id] { - instances = append(instances, instanceToHTTPInstanceSummary(inst)) + instances = append(instances, *instanceToHTTPInstanceSummary(inst)) } } } @@ -123,57 +123,50 @@ func (s *AWSSDClientStub) DiscoverInstancesWithContext(ctx context.Context, inpu }, nil } -func (s *AWSSDClientStub) ListNamespacesPages(input *sd.ListNamespacesInput, fn func(*sd.ListNamespacesOutput, bool) bool) error { - namespaces := make([]*sd.NamespaceSummary, 0) - - filter := input.Filters[0] +func (s *AWSSDClientStub) ListNamespaces(ctx context.Context, input *sd.ListNamespacesInput, optFns ...func(options *sd.Options)) (*sd.ListNamespacesOutput, error) { + namespaces := make([]sdtypes.NamespaceSummary, 0) for _, ns := range s.namespaces { - if filter != nil && *filter.Name == sd.NamespaceFilterNameType { - if *ns.Type != *filter.Values[0] { + if len(input.Filters) > 0 && input.Filters[0].Name == sdtypes.NamespaceFilterNameType { + if ns.Type != sdtypes.NamespaceType(input.Filters[0].Values[0]) { // skip namespaces not matching filter continue } } - namespaces = append(namespaces, namespaceToNamespaceSummary(ns)) + namespaces = append(namespaces, *namespaceToNamespaceSummary(ns)) } - fn(&sd.ListNamespacesOutput{ + return &sd.ListNamespacesOutput{ Namespaces: namespaces, - }, true) - - return nil + }, nil } -func (s *AWSSDClientStub) ListServicesPages(input *sd.ListServicesInput, fn func(*sd.ListServicesOutput, bool) bool) error { - services := make([]*sd.ServiceSummary, 0) +func (s *AWSSDClientStub) ListServices(ctx context.Context, input *sd.ListServicesInput, optFns ...func(options *sd.Options)) (*sd.ListServicesOutput, error) { + services := make([]sdtypes.ServiceSummary, 0) // get namespace filter - filter := input.Filters[0] - if filter == nil || *filter.Name != sd.ServiceFilterNameNamespaceId { - return errors.New("missing namespace filter") + if len(input.Filters) == 0 || input.Filters[0].Name != sdtypes.ServiceFilterNameNamespaceId { + return nil, errors.New("missing namespace filter") } - nsID := filter.Values[0] + nsID := input.Filters[0].Values[0] - for _, srv := range s.services[*nsID] { - services = append(services, serviceToServiceSummary(srv)) + for _, srv := range s.services[nsID] { + services = append(services, *serviceToServiceSummary(srv)) } - fn(&sd.ListServicesOutput{ + return &sd.ListServicesOutput{ Services: services, - }, true) - - return nil + }, nil } -func (s *AWSSDClientStub) RegisterInstance(input *sd.RegisterInstanceInput) (*sd.RegisterInstanceOutput, error) { +func (s *AWSSDClientStub) RegisterInstance(ctx context.Context, input *sd.RegisterInstanceInput, optFns ...func(options *sd.Options)) (*sd.RegisterInstanceOutput, error) { srvInstances, ok := s.instances[*input.ServiceId] if !ok { - srvInstances = make(map[string]*sd.Instance) + srvInstances = make(map[string]*sdtypes.Instance) s.instances[*input.ServiceId] = srvInstances } - srvInstances[*input.InstanceId] = &sd.Instance{ + srvInstances[*input.InstanceId] = &sdtypes.Instance{ Id: input.InstanceId, Attributes: input.Attributes, CreatorRequestId: input.CreatorRequestId, @@ -182,8 +175,8 @@ func (s *AWSSDClientStub) RegisterInstance(input *sd.RegisterInstanceInput) (*sd return &sd.RegisterInstanceOutput{}, nil } -func (s *AWSSDClientStub) UpdateService(input *sd.UpdateServiceInput) (*sd.UpdateServiceOutput, error) { - out, err := s.GetService(&sd.GetServiceInput{Id: input.Id}) +func (s *AWSSDClientStub) UpdateService(ctx context.Context, input *sd.UpdateServiceInput, optFns ...func(options *sd.Options)) (*sd.UpdateServiceOutput, error) { + out, err := s.GetService(ctx, &sd.GetServiceInput{Id: input.Id}) if err != nil { return nil, err } @@ -197,8 +190,8 @@ func (s *AWSSDClientStub) UpdateService(input *sd.UpdateServiceInput) (*sd.Updat return &sd.UpdateServiceOutput{}, nil } -func (s *AWSSDClientStub) DeleteService(input *sd.DeleteServiceInput) (*sd.DeleteServiceOutput, error) { - out, err := s.GetService(&sd.GetServiceInput{Id: input.Id}) +func (s *AWSSDClientStub) DeleteService(ctx context.Context, input *sd.DeleteServiceInput, optFns ...func(options *sd.Options)) (*sd.DeleteServiceOutput, error) { + out, err := s.GetService(ctx, &sd.GetServiceInput{Id: input.Id}) if err != nil { return nil, err } @@ -221,39 +214,69 @@ func newTestAWSSDProvider(api AWSSDClient, domainFilter endpoint.DomainFilter, n } } -// nolint: deadcode -// used for unit test -func instanceToHTTPInstanceSummary(instance *sd.Instance) *sd.HttpInstanceSummary { +func instanceToHTTPInstanceSummary(instance *sdtypes.Instance) *sdtypes.HttpInstanceSummary { if instance == nil { return nil } - return &sd.HttpInstanceSummary{ + return &sdtypes.HttpInstanceSummary{ InstanceId: instance.Id, Attributes: instance.Attributes, } } +func namespaceToNamespaceSummary(namespace *sdtypes.Namespace) *sdtypes.NamespaceSummary { + if namespace == nil { + return nil + } + + return &sdtypes.NamespaceSummary{ + Id: namespace.Id, + Type: namespace.Type, + Name: namespace.Name, + Arn: namespace.Arn, + } +} + +func serviceToServiceSummary(service *sdtypes.Service) *sdtypes.ServiceSummary { + if service == nil { + return nil + } + + return &sdtypes.ServiceSummary{ + Arn: service.Arn, + CreateDate: service.CreateDate, + Description: service.Description, + DnsConfig: service.DnsConfig, + HealthCheckConfig: service.HealthCheckConfig, + HealthCheckCustomConfig: service.HealthCheckCustomConfig, + Id: service.Id, + InstanceCount: service.InstanceCount, + Name: service.Name, + Type: service.Type, + } +} + func TestAWSSDProvider_Records(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, } - services := map[string]map[string]*sd.Service{ + services := map[string]map[string]*sdtypes.Service{ "private": { "a-srv": { Id: aws.String("a-srv"), Name: aws.String("service1"), + NamespaceId: aws.String("private"), Description: aws.String("owner-id"), - DnsConfig: &sd.DnsConfig{ - NamespaceId: aws.String("private"), - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeA), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeA, TTL: aws.Int64(100), }}, }, @@ -261,12 +284,12 @@ func TestAWSSDProvider_Records(t *testing.T) { "alias-srv": { Id: aws.String("alias-srv"), Name: aws.String("service2"), + NamespaceId: aws.String("private"), Description: aws.String("owner-id"), - DnsConfig: &sd.DnsConfig{ - NamespaceId: aws.String("private"), - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeA), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeA, TTL: aws.Int64(100), }}, }, @@ -274,12 +297,12 @@ func TestAWSSDProvider_Records(t *testing.T) { "cname-srv": { Id: aws.String("cname-srv"), Name: aws.String("service3"), + NamespaceId: aws.String("private"), Description: aws.String("owner-id"), - DnsConfig: &sd.DnsConfig{ - NamespaceId: aws.String("private"), - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeCname), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeCname, TTL: aws.Int64(80), }}, }, @@ -287,34 +310,34 @@ func TestAWSSDProvider_Records(t *testing.T) { }, } - instances := map[string]map[string]*sd.Instance{ + instances := map[string]map[string]*sdtypes.Instance{ "a-srv": { "1.2.3.4": { Id: aws.String("1.2.3.4"), - Attributes: map[string]*string{ - sdInstanceAttrIPV4: aws.String("1.2.3.4"), + Attributes: map[string]string{ + sdInstanceAttrIPV4: "1.2.3.4", }, }, "1.2.3.5": { Id: aws.String("1.2.3.5"), - Attributes: map[string]*string{ - sdInstanceAttrIPV4: aws.String("1.2.3.5"), + Attributes: map[string]string{ + sdInstanceAttrIPV4: "1.2.3.5", }, }, }, "alias-srv": { "load-balancer.us-east-1.elb.amazonaws.com": { Id: aws.String("load-balancer.us-east-1.elb.amazonaws.com"), - Attributes: map[string]*string{ - sdInstanceAttrAlias: aws.String("load-balancer.us-east-1.elb.amazonaws.com"), + Attributes: map[string]string{ + sdInstanceAttrAlias: "load-balancer.us-east-1.elb.amazonaws.com", }, }, }, "cname-srv": { "cname.target.com": { Id: aws.String("cname.target.com"), - Attributes: map[string]*string{ - sdInstanceAttrCname: aws.String("cname.target.com"), + Attributes: map[string]string{ + sdInstanceAttrCname: "cname.target.com", }, }, }, @@ -340,18 +363,18 @@ func TestAWSSDProvider_Records(t *testing.T) { } func TestAWSSDProvider_ApplyChanges(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, } api := &AWSSDClientStub{ namespaces: namespaces, - services: make(map[string]map[string]*sd.Service), - instances: make(map[string]map[string]*sd.Instance), + services: make(map[string]map[string]*sdtypes.Service), + instances: make(map[string]map[string]*sdtypes.Instance), } expectedEndpoints := []*endpoint.Endpoint{ @@ -371,7 +394,7 @@ func TestAWSSDProvider_ApplyChanges(t *testing.T) { // make sure services were created assert.Len(t, api.services["private"], 3) - existingServices, _ := provider.ListServicesByNamespaceID(namespaces["private"].Id) + existingServices, _ := provider.ListServicesByNamespaceID(context.Background(), namespaces["private"].Id) assert.NotNil(t, existingServices["service1"]) assert.NotNil(t, existingServices["service2"]) assert.NotNil(t, existingServices["service3"]) @@ -392,16 +415,16 @@ func TestAWSSDProvider_ApplyChanges(t *testing.T) { } func TestAWSSDProvider_ListNamespaces(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, "public": { Id: aws.String("public"), Name: aws.String("public.com"), - Type: aws.String(sd.NamespaceTypeDnsPublic), + Type: sdtypes.NamespaceTypeDnsPublic, }, } @@ -413,20 +436,20 @@ func TestAWSSDProvider_ListNamespaces(t *testing.T) { msg string domainFilter endpoint.DomainFilter namespaceTypeFilter string - expectedNamespaces []*sd.NamespaceSummary + expectedNamespaces []*sdtypes.NamespaceSummary }{ - {"public filter", endpoint.NewDomainFilter([]string{}), "public", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}}, - {"private filter", endpoint.NewDomainFilter([]string{}), "private", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["private"])}}, - {"domain filter", endpoint.NewDomainFilter([]string{"public.com"}), "", []*sd.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}}, - {"non-existing domain", endpoint.NewDomainFilter([]string{"xxx.com"}), "", []*sd.NamespaceSummary{}}, + {"public filter", endpoint.NewDomainFilter([]string{}), "public", []*sdtypes.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}}, + {"private filter", endpoint.NewDomainFilter([]string{}), "private", []*sdtypes.NamespaceSummary{namespaceToNamespaceSummary(namespaces["private"])}}, + {"domain filter", endpoint.NewDomainFilter([]string{"public.com"}), "", []*sdtypes.NamespaceSummary{namespaceToNamespaceSummary(namespaces["public"])}}, + {"non-existing domain", endpoint.NewDomainFilter([]string{"xxx.com"}), "", []*sdtypes.NamespaceSummary{}}, } { provider := newTestAWSSDProvider(api, tc.domainFilter, tc.namespaceTypeFilter, "") - result, err := provider.ListNamespaces() + result, err := provider.ListNamespaces(context.Background()) require.NoError(t, err) - expectedMap := make(map[string]*sd.NamespaceSummary) - resultMap := make(map[string]*sd.NamespaceSummary) + expectedMap := make(map[string]*sdtypes.NamespaceSummary) + resultMap := make(map[string]*sdtypes.NamespaceSummary) for _, ns := range tc.expectedNamespaces { expectedMap[*ns.Id] = ns } @@ -441,20 +464,20 @@ func TestAWSSDProvider_ListNamespaces(t *testing.T) { } func TestAWSSDProvider_ListServicesByNamespace(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, "public": { Id: aws.String("public"), Name: aws.String("public.com"), - Type: aws.String(sd.NamespaceTypeDnsPublic), + Type: sdtypes.NamespaceTypeDnsPublic, }, } - services := map[string]map[string]*sd.Service{ + services := map[string]map[string]*sdtypes.Service{ "private": { "srv1": { Id: aws.String("srv1"), @@ -482,48 +505,52 @@ func TestAWSSDProvider_ListServicesByNamespace(t *testing.T) { } for _, tc := range []struct { - expectedServices map[string]*sd.Service + expectedServices map[string]*sdtypes.Service }{ - {map[string]*sd.Service{"service1": services["private"]["srv1"], "service2": services["private"]["srv2"]}}, + {map[string]*sdtypes.Service{"service1": services["private"]["srv1"], "service2": services["private"]["srv2"]}}, } { provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "", "") - result, err := provider.ListServicesByNamespaceID(namespaces["private"].Id) + result, err := provider.ListServicesByNamespaceID(context.Background(), namespaces["private"].Id) require.NoError(t, err) assert.Equal(t, tc.expectedServices, result) } } func TestAWSSDProvider_CreateService(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, } api := &AWSSDClientStub{ namespaces: namespaces, - services: make(map[string]map[string]*sd.Service), + services: make(map[string]map[string]*sdtypes.Service), } - expectedServices := make(map[string]*sd.Service) + expectedServices := make(map[string]*sdtypes.Service) provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "", "") // A type - provider.CreateService(aws.String("private"), aws.String("A-srv"), &endpoint.Endpoint{ + provider.CreateService(context.Background(), aws.String("private"), aws.String("A-srv"), &endpoint.Endpoint{ + Labels: map[string]string{ + endpoint.AWSSDDescriptionLabel: "A-srv", + }, RecordType: endpoint.RecordTypeA, RecordTTL: 60, Targets: endpoint.Targets{"1.2.3.4"}, }) - expectedServices["A-srv"] = &sd.Service{ - Name: aws.String("A-srv"), - DnsConfig: &sd.DnsConfig{ - RoutingPolicy: aws.String(sd.RoutingPolicyMultivalue), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeA), + expectedServices["A-srv"] = &sdtypes.Service{ + Name: aws.String("A-srv"), + Description: aws.String("A-srv"), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyMultivalue, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeA, TTL: aws.Int64(60), }}, }, @@ -531,17 +558,21 @@ func TestAWSSDProvider_CreateService(t *testing.T) { } // CNAME type - provider.CreateService(aws.String("private"), aws.String("CNAME-srv"), &endpoint.Endpoint{ + provider.CreateService(context.Background(), aws.String("private"), aws.String("CNAME-srv"), &endpoint.Endpoint{ + Labels: map[string]string{ + endpoint.AWSSDDescriptionLabel: "CNAME-srv", + }, RecordType: endpoint.RecordTypeCNAME, RecordTTL: 80, Targets: endpoint.Targets{"cname.target.com"}, }) - expectedServices["CNAME-srv"] = &sd.Service{ - Name: aws.String("CNAME-srv"), - DnsConfig: &sd.DnsConfig{ - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeCname), + expectedServices["CNAME-srv"] = &sdtypes.Service{ + Name: aws.String("CNAME-srv"), + Description: aws.String("CNAME-srv"), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeCname, TTL: aws.Int64(80), }}, }, @@ -549,17 +580,21 @@ func TestAWSSDProvider_CreateService(t *testing.T) { } // ALIAS type - provider.CreateService(aws.String("private"), aws.String("ALIAS-srv"), &endpoint.Endpoint{ + provider.CreateService(context.Background(), aws.String("private"), aws.String("ALIAS-srv"), &endpoint.Endpoint{ + Labels: map[string]string{ + endpoint.AWSSDDescriptionLabel: "ALIAS-srv", + }, RecordType: endpoint.RecordTypeCNAME, RecordTTL: 100, Targets: endpoint.Targets{"load-balancer.us-east-1.elb.amazonaws.com"}, }) - expectedServices["ALIAS-srv"] = &sd.Service{ - Name: aws.String("ALIAS-srv"), - DnsConfig: &sd.DnsConfig{ - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeA), + expectedServices["ALIAS-srv"] = &sdtypes.Service{ + Name: aws.String("ALIAS-srv"), + Description: aws.String("ALIAS-srv"), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeA, TTL: aws.Int64(100), }}, }, @@ -569,7 +604,7 @@ func TestAWSSDProvider_CreateService(t *testing.T) { validateAWSSDServicesMapsEqual(t, expectedServices, api.services["private"]) } -func validateAWSSDServicesMapsEqual(t *testing.T, expected map[string]*sd.Service, services map[string]*sd.Service) { +func validateAWSSDServicesMapsEqual(t *testing.T, expected map[string]*sdtypes.Service, services map[string]*sdtypes.Service) { require.Len(t, services, len(expected)) for _, srv := range services { @@ -577,31 +612,31 @@ func validateAWSSDServicesMapsEqual(t *testing.T, expected map[string]*sd.Servic } } -func validateAWSSDServicesEqual(t *testing.T, expected *sd.Service, srv *sd.Service) { - assert.Equal(t, aws.StringValue(expected.Description), aws.StringValue(srv.Description)) - assert.Equal(t, aws.StringValue(expected.Name), aws.StringValue(srv.Name)) +func validateAWSSDServicesEqual(t *testing.T, expected *sdtypes.Service, srv *sdtypes.Service) { + assert.Equal(t, *expected.Description, *srv.Description) + assert.Equal(t, *expected.Name, *srv.Name) assert.True(t, reflect.DeepEqual(*expected.DnsConfig, *srv.DnsConfig)) } func TestAWSSDProvider_UpdateService(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, } - services := map[string]map[string]*sd.Service{ + services := map[string]map[string]*sdtypes.Service{ "private": { "srv1": { - Id: aws.String("srv1"), - Name: aws.String("service1"), - DnsConfig: &sd.DnsConfig{ - NamespaceId: aws.String("private"), - RoutingPolicy: aws.String(sd.RoutingPolicyMultivalue), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeA), + Id: aws.String("srv1"), + Name: aws.String("service1"), + NamespaceId: aws.String("private"), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyMultivalue, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeA, TTL: aws.Int64(60), }}, }, @@ -617,7 +652,7 @@ func TestAWSSDProvider_UpdateService(t *testing.T) { provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "", "") // update service with different TTL - provider.UpdateService(services["private"]["srv1"], &endpoint.Endpoint{ + provider.UpdateService(context.Background(), services["private"]["srv1"], &endpoint.Endpoint{ RecordType: endpoint.RecordTypeA, RecordTTL: 100, }) @@ -626,15 +661,15 @@ func TestAWSSDProvider_UpdateService(t *testing.T) { } func TestAWSSDProvider_DeleteService(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, } - services := map[string]map[string]*sd.Service{ + services := map[string]map[string]*sdtypes.Service{ "private": { "srv1": { Id: aws.String("srv1"), @@ -665,16 +700,16 @@ func TestAWSSDProvider_DeleteService(t *testing.T) { provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "", "owner-id") // delete first service - err := provider.DeleteService(services["private"]["srv1"]) + err := provider.DeleteService(context.Background(), services["private"]["srv1"]) assert.NoError(t, err) assert.Len(t, api.services["private"], 2) // delete third service - err1 := provider.DeleteService(services["private"]["srv3"]) + err1 := provider.DeleteService(context.Background(), services["private"]["srv3"]) assert.NoError(t, err1) assert.Len(t, api.services["private"], 1) - expectedServices := map[string]*sd.Service{ + expectedServices := map[string]*sdtypes.Service{ "srv2": { Id: aws.String("srv2"), Description: aws.String("heritage=external-dns,external-dns/owner=owner-id"), @@ -687,48 +722,48 @@ func TestAWSSDProvider_DeleteService(t *testing.T) { } func TestAWSSDProvider_RegisterInstance(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, } - services := map[string]map[string]*sd.Service{ + services := map[string]map[string]*sdtypes.Service{ "private": { "a-srv": { - Id: aws.String("a-srv"), - Name: aws.String("service1"), - DnsConfig: &sd.DnsConfig{ - NamespaceId: aws.String("private"), - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeA), + Id: aws.String("a-srv"), + Name: aws.String("service1"), + NamespaceId: aws.String("private"), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeA, TTL: aws.Int64(60), }}, }, }, "cname-srv": { - Id: aws.String("cname-srv"), - Name: aws.String("service2"), - DnsConfig: &sd.DnsConfig{ - NamespaceId: aws.String("private"), - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeCname), + Id: aws.String("cname-srv"), + Name: aws.String("service2"), + NamespaceId: aws.String("private"), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeCname, TTL: aws.Int64(60), }}, }, }, "alias-srv": { - Id: aws.String("alias-srv"), - Name: aws.String("service3"), - DnsConfig: &sd.DnsConfig{ - NamespaceId: aws.String("private"), - RoutingPolicy: aws.String(sd.RoutingPolicyWeighted), - DnsRecords: []*sd.DnsRecord{{ - Type: aws.String(sd.RecordTypeA), + Id: aws.String("alias-srv"), + Name: aws.String("service3"), + NamespaceId: aws.String("private"), + DnsConfig: &sdtypes.DnsConfig{ + RoutingPolicy: sdtypes.RoutingPolicyWeighted, + DnsRecords: []sdtypes.DnsRecord{{ + Type: sdtypes.RecordTypeA, TTL: aws.Int64(60), }}, }, @@ -739,78 +774,78 @@ func TestAWSSDProvider_RegisterInstance(t *testing.T) { api := &AWSSDClientStub{ namespaces: namespaces, services: services, - instances: make(map[string]map[string]*sd.Instance), + instances: make(map[string]map[string]*sdtypes.Instance), } provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "", "") - expectedInstances := make(map[string]*sd.Instance) + expectedInstances := make(map[string]*sdtypes.Instance) // IP-based instance - provider.RegisterInstance(services["private"]["a-srv"], &endpoint.Endpoint{ + provider.RegisterInstance(context.Background(), services["private"]["a-srv"], &endpoint.Endpoint{ RecordType: endpoint.RecordTypeA, DNSName: "service1.private.com.", RecordTTL: 300, Targets: endpoint.Targets{"1.2.3.4", "1.2.3.5"}, }) - expectedInstances["1.2.3.4"] = &sd.Instance{ + expectedInstances["1.2.3.4"] = &sdtypes.Instance{ Id: aws.String("1.2.3.4"), - Attributes: map[string]*string{ - sdInstanceAttrIPV4: aws.String("1.2.3.4"), + Attributes: map[string]string{ + sdInstanceAttrIPV4: "1.2.3.4", }, } - expectedInstances["1.2.3.5"] = &sd.Instance{ + expectedInstances["1.2.3.5"] = &sdtypes.Instance{ Id: aws.String("1.2.3.5"), - Attributes: map[string]*string{ - sdInstanceAttrIPV4: aws.String("1.2.3.5"), + Attributes: map[string]string{ + sdInstanceAttrIPV4: "1.2.3.5", }, } // AWS ELB instance (ALIAS) - provider.RegisterInstance(services["private"]["alias-srv"], &endpoint.Endpoint{ + provider.RegisterInstance(context.Background(), services["private"]["alias-srv"], &endpoint.Endpoint{ RecordType: endpoint.RecordTypeCNAME, DNSName: "service1.private.com.", RecordTTL: 300, Targets: endpoint.Targets{"load-balancer.us-east-1.elb.amazonaws.com", "load-balancer.us-west-2.elb.amazonaws.com"}, }) - expectedInstances["load-balancer.us-east-1.elb.amazonaws.com"] = &sd.Instance{ + expectedInstances["load-balancer.us-east-1.elb.amazonaws.com"] = &sdtypes.Instance{ Id: aws.String("load-balancer.us-east-1.elb.amazonaws.com"), - Attributes: map[string]*string{ - sdInstanceAttrAlias: aws.String("load-balancer.us-east-1.elb.amazonaws.com"), + Attributes: map[string]string{ + sdInstanceAttrAlias: "load-balancer.us-east-1.elb.amazonaws.com", }, } - expectedInstances["load-balancer.us-west-2.elb.amazonaws.com"] = &sd.Instance{ + expectedInstances["load-balancer.us-west-2.elb.amazonaws.com"] = &sdtypes.Instance{ Id: aws.String("load-balancer.us-west-2.elb.amazonaws.com"), - Attributes: map[string]*string{ - sdInstanceAttrAlias: aws.String("load-balancer.us-west-2.elb.amazonaws.com"), + Attributes: map[string]string{ + sdInstanceAttrAlias: "load-balancer.us-west-2.elb.amazonaws.com", }, } // AWS NLB instance (ALIAS) - provider.RegisterInstance(services["private"]["alias-srv"], &endpoint.Endpoint{ + provider.RegisterInstance(context.Background(), services["private"]["alias-srv"], &endpoint.Endpoint{ RecordType: endpoint.RecordTypeCNAME, DNSName: "service1.private.com.", RecordTTL: 300, Targets: endpoint.Targets{"load-balancer.elb.us-west-2.amazonaws.com"}, }) - expectedInstances["load-balancer.elb.us-west-2.amazonaws.com"] = &sd.Instance{ + expectedInstances["load-balancer.elb.us-west-2.amazonaws.com"] = &sdtypes.Instance{ Id: aws.String("load-balancer.elb.us-west-2.amazonaws.com"), - Attributes: map[string]*string{ - sdInstanceAttrAlias: aws.String("load-balancer.elb.us-west-2.amazonaws.com"), + Attributes: map[string]string{ + sdInstanceAttrAlias: "load-balancer.elb.us-west-2.amazonaws.com", }, } // CNAME instance - provider.RegisterInstance(services["private"]["cname-srv"], &endpoint.Endpoint{ + provider.RegisterInstance(context.Background(), services["private"]["cname-srv"], &endpoint.Endpoint{ RecordType: endpoint.RecordTypeCNAME, DNSName: "service2.private.com.", RecordTTL: 300, Targets: endpoint.Targets{"cname.target.com"}, }) - expectedInstances["cname.target.com"] = &sd.Instance{ + expectedInstances["cname.target.com"] = &sdtypes.Instance{ Id: aws.String("cname.target.com"), - Attributes: map[string]*string{ - sdInstanceAttrCname: aws.String("cname.target.com"), + Attributes: map[string]string{ + sdInstanceAttrCname: "cname.target.com", }, } @@ -825,15 +860,15 @@ func TestAWSSDProvider_RegisterInstance(t *testing.T) { } func TestAWSSDProvider_DeregisterInstance(t *testing.T) { - namespaces := map[string]*sd.Namespace{ + namespaces := map[string]*sdtypes.Namespace{ "private": { Id: aws.String("private"), Name: aws.String("private.com"), - Type: aws.String(sd.NamespaceTypeDnsPrivate), + Type: sdtypes.NamespaceTypeDnsPrivate, }, } - services := map[string]map[string]*sd.Service{ + services := map[string]map[string]*sdtypes.Service{ "private": { "srv1": { Id: aws.String("srv1"), @@ -842,12 +877,12 @@ func TestAWSSDProvider_DeregisterInstance(t *testing.T) { }, } - instances := map[string]map[string]*sd.Instance{ + instances := map[string]map[string]*sdtypes.Instance{ "srv1": { "1.2.3.4": { Id: aws.String("1.2.3.4"), - Attributes: map[string]*string{ - sdInstanceAttrIPV4: aws.String("1.2.3.4"), + Attributes: map[string]string{ + sdInstanceAttrIPV4: "1.2.3.4", }, }, }, @@ -861,7 +896,7 @@ func TestAWSSDProvider_DeregisterInstance(t *testing.T) { provider := newTestAWSSDProvider(api, endpoint.NewDomainFilter([]string{}), "", "") - provider.DeregisterInstance(services["private"]["srv1"], endpoint.NewEndpoint("srv1.private.com.", endpoint.RecordTypeA, "1.2.3.4")) + provider.DeregisterInstance(context.Background(), services["private"]["srv1"], endpoint.NewEndpoint("srv1.private.com.", endpoint.RecordTypeA, "1.2.3.4")) assert.Len(t, instances["srv1"], 0) } From 5ec37e06990a41a59f4bb808362bf7c2ae480ea2 Mon Sep 17 00:00:00 2001 From: Michael Shen Date: Tue, 30 Jul 2024 00:06:13 -0400 Subject: [PATCH 74/78] Refactor AWS provider to aws-sdk-go-v2 Signed-off-by: Michael Shen --- go.mod | 1 + go.sum | 2 + main.go | 10 +- provider/aws/aws.go | 408 ++++++++-------- provider/aws/aws_test.go | 764 +++++++++++++++--------------- provider/aws/session.go | 24 + provider/zone_type_filter.go | 9 +- provider/zone_type_filter_test.go | 23 +- 8 files changed, 631 insertions(+), 610 deletions(-) diff --git a/go.mod b/go.mod index 57e6856cb..23b9abe67 100644 --- a/go.mod +++ b/go.mod @@ -22,6 +22,7 @@ require ( github.com/aws/aws-sdk-go-v2/credentials v1.17.27 github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.14.10 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.34.4 + github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3 github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.3 github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 github.com/bodgit/tsig v1.2.2 diff --git a/go.sum b/go.sum index c500ada73..ea9c32dcc 100644 --- a/go.sum +++ b/go.sum @@ -145,6 +145,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16 h1:lhAX github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.16/go.mod h1:AblAlCwvi7Q/SFowvckgN+8M3uFPlopSYeLlbNDArhA= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= +github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3 h1:MmLCRqP4U4Cw9gJ4bNrCG0mWqEtBlmAVleyelcHARMU= +github.com/aws/aws-sdk-go-v2/service/route53 v1.42.3/go.mod h1:AMPjK2YnRh0YgOID3PqhJA1BRNfXDfGOnSsKHtAe8yA= github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.3 h1:EthA93BNgTnk36FoI9DCKtv4S0m63WzdGDYlBp/CvHQ= github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.31.3/go.mod h1:4xh/h0pevPhBkA4b2iYosZaqrThccxFREQxiGuZpJlc= github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM= diff --git a/main.go b/main.go index e75b6795a..985124349 100644 --- a/main.go +++ b/main.go @@ -26,8 +26,8 @@ import ( "time" "github.com/aws/aws-sdk-go-v2/service/dynamodb" + "github.com/aws/aws-sdk-go-v2/service/route53" sd "github.com/aws/aws-sdk-go-v2/service/servicediscovery" - "github.com/aws/aws-sdk-go/service/route53" "github.com/go-logr/logr" "github.com/prometheus/client_golang/prometheus/promhttp" log "github.com/sirupsen/logrus" @@ -205,10 +205,10 @@ func main() { case "alibabacloud": p, err = alibabacloud.NewAlibabaCloudProvider(cfg.AlibabaCloudConfigFile, domainFilter, zoneIDFilter, cfg.AlibabaCloudZoneType, cfg.DryRun) case "aws": - sessions := aws.CreateSessions(cfg) - clients := make(map[string]aws.Route53API, len(sessions)) - for profile, session := range sessions { - clients[profile] = route53.New(session) + configs := aws.CreateV2Configs(cfg) + clients := make(map[string]aws.Route53API, len(configs)) + for profile, config := range configs { + clients[profile] = route53.NewFromConfig(config) } p, err = aws.NewAWSProvider( diff --git a/provider/aws/aws.go b/provider/aws/aws.go index 1955efb16..0e2926bf4 100644 --- a/provider/aws/aws.go +++ b/provider/aws/aws.go @@ -25,10 +25,9 @@ import ( "strings" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/awserr" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/route53" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53" + route53types "github.com/aws/aws-sdk-go-v2/service/route53/types" log "github.com/sirupsen/logrus" "sigs.k8s.io/external-dns/endpoint" @@ -41,11 +40,11 @@ const ( recordTTL = 300 // From the experiments, it seems that the default MaxItems applied is 100, // and that, on the server side, there is a hard limit of 300 elements per page. - // After a discussion with AWS representants, clients should accept - // when less items are returned, and still paginate accordingly. + // After a discussion with AWS representatives, clients should accept + // when fewer items are returned, and still paginate accordingly. // As we are using the standard AWS client, this should already be compliant. - // Hence, ifever AWS decides to raise this limit, we will automatically reduce the pressure on rate limits - route53PageSize = "300" + // Hence, if AWS ever decides to raise this limit, we will automatically reduce the pressure on rate limits + route53PageSize int32 = 300 // providerSpecificAlias specifies whether a CNAME endpoint maps to an AWS ALIAS record. providerSpecificAlias = "alias" providerSpecificTargetHostedZone = "aws/target-hosted-zone" @@ -199,16 +198,16 @@ var canonicalHostedZones = map[string]string{ // Route53API is the subset of the AWS Route53 API that we actually use. Add methods as required. Signatures must match exactly. // mostly taken from: https://github.com/kubernetes/kubernetes/blob/853167624edb6bc0cfdcdfb88e746e178f5db36c/federation/pkg/dnsprovider/providers/aws/route53/stubs/route53api.go type Route53API interface { - ListResourceRecordSetsPagesWithContext(ctx context.Context, input *route53.ListResourceRecordSetsInput, fn func(resp *route53.ListResourceRecordSetsOutput, lastPage bool) (shouldContinue bool), opts ...request.Option) error - ChangeResourceRecordSetsWithContext(ctx context.Context, input *route53.ChangeResourceRecordSetsInput, opts ...request.Option) (*route53.ChangeResourceRecordSetsOutput, error) - CreateHostedZoneWithContext(ctx context.Context, input *route53.CreateHostedZoneInput, opts ...request.Option) (*route53.CreateHostedZoneOutput, error) - ListHostedZonesPagesWithContext(ctx context.Context, input *route53.ListHostedZonesInput, fn func(resp *route53.ListHostedZonesOutput, lastPage bool) (shouldContinue bool), opts ...request.Option) error - ListTagsForResourceWithContext(ctx context.Context, input *route53.ListTagsForResourceInput, opts ...request.Option) (*route53.ListTagsForResourceOutput, error) + ListResourceRecordSets(ctx context.Context, input *route53.ListResourceRecordSetsInput, optFns ...func(options *route53.Options)) (*route53.ListResourceRecordSetsOutput, error) + ChangeResourceRecordSets(ctx context.Context, input *route53.ChangeResourceRecordSetsInput, optFns ...func(options *route53.Options)) (*route53.ChangeResourceRecordSetsOutput, error) + CreateHostedZone(ctx context.Context, input *route53.CreateHostedZoneInput, optFns ...func(*route53.Options)) (*route53.CreateHostedZoneOutput, error) + ListHostedZones(ctx context.Context, input *route53.ListHostedZonesInput, optFns ...func(options *route53.Options)) (*route53.ListHostedZonesOutput, error) + ListTagsForResource(ctx context.Context, input *route53.ListTagsForResourceInput, optFns ...func(options *route53.Options)) (*route53.ListTagsForResourceOutput, error) } // wrapper to handle ownership relation throughout the provider implementation type Route53Change struct { - route53.Change + route53types.Change OwnedRecord string sizeBytes int sizeValues int @@ -218,13 +217,13 @@ type Route53Changes []*Route53Change type profiledZone struct { profile string - zone *route53.HostedZone + zone *route53types.HostedZone } -func (cs Route53Changes) Route53Changes() []*route53.Change { - ret := []*route53.Change{} +func (cs Route53Changes) Route53Changes() []route53types.Change { + ret := []route53types.Change{} for _, c := range cs { - ret = append(ret, &c.Change) + ret = append(ret, c.Change) } return ret } @@ -253,7 +252,7 @@ type AWSProvider struct { zoneTypeFilter provider.ZoneTypeFilter // filter hosted zones by tags zoneTagFilter provider.ZoneTagFilter - // extend filter for sub-domains in the zone (e.g. first.us-east-1.example.com) + // extend filter for subdomains in the zone (e.g. first.us-east-1.example.com) zoneMatchParent bool preferCNAME bool zonesCache *zonesListCache @@ -302,13 +301,13 @@ func NewAWSProvider(awsConfig AWSConfig, clients map[string]Route53API) (*AWSPro } // Zones returns the list of hosted zones. -func (p *AWSProvider) Zones(ctx context.Context) (map[string]*route53.HostedZone, error) { +func (p *AWSProvider) Zones(ctx context.Context) (map[string]*route53types.HostedZone, error) { zones, err := p.zones(ctx) if err != nil { return nil, err } - result := make(map[string]*route53.HostedZone, len(zones)) + result := make(map[string]*route53types.HostedZone, len(zones)) for id, zone := range zones { result[id] = zone.zone } @@ -324,61 +323,57 @@ func (p *AWSProvider) zones(ctx context.Context) (map[string]*profiledZone, erro log.Debug("Refreshing zones list cache") zones := make(map[string]*profiledZone) - var profile string - var tagErr error - f := func(resp *route53.ListHostedZonesOutput, lastPage bool) (shouldContinue bool) { - for _, zone := range resp.HostedZones { - if !p.zoneIDFilter.Match(aws.StringValue(zone.Id)) { - continue - } - if !p.zoneTypeFilter.Match(zone) { - continue - } + for profile, client := range p.clients { + var tagErr error + paginator := route53.NewListHostedZonesPaginator(client, &route53.ListHostedZonesInput{}) - if !p.domainFilter.Match(aws.StringValue(zone.Name)) { - if !p.zoneMatchParent { - continue - } - if !p.domainFilter.MatchParent(aws.StringValue(zone.Name)) { - continue - } - } - - // Only fetch tags if a tag filter was specified - if !p.zoneTagFilter.IsEmpty() { - tags, err := p.tagsForZone(ctx, *zone.Id, profile) - if err != nil { - tagErr = err - return false - } - if !p.zoneTagFilter.Match(tags) { - continue - } - } - - zones[aws.StringValue(zone.Id)] = &profiledZone{ - profile: profile, - zone: zone, - } - } - - return true - } - - for p, client := range p.clients { - profile = p - err := client.ListHostedZonesPagesWithContext(ctx, &route53.ListHostedZonesInput{}, f) - if err != nil { - var awsErr awserr.Error - if errors.As(err, &awsErr) { - if awsErr.Code() == route53.ErrCodeThrottlingException { - log.Warnf("Skipping AWS profile %q due to provider side throttling: %v", profile, awsErr.Message()) + for paginator.HasMorePages() { + resp, err := paginator.NextPage(ctx) + if err != nil { + var te *route53types.ThrottlingException + if errors.As(err, &te) { + log.Infof("Skipping AWS profile %q due to provider side throttling: %v", profile, te.ErrorMessage()) continue } // nothing to do here. Falling through to general error handling + return nil, provider.NewSoftError(fmt.Errorf("failed to list hosted zones: %w", err)) + } + for _, zone := range resp.HostedZones { + if !p.zoneIDFilter.Match(*zone.Id) { + continue + } + + if !p.zoneTypeFilter.Match(zone) { + continue + } + + if !p.domainFilter.Match(*zone.Name) { + if !p.zoneMatchParent { + continue + } + if !p.domainFilter.MatchParent(*zone.Name) { + continue + } + } + + // Only fetch tags if a tag filter was specified + if !p.zoneTagFilter.IsEmpty() { + tags, err := p.tagsForZone(ctx, *zone.Id, profile) + if err != nil { + tagErr = err + break + } + if !p.zoneTagFilter.Match(tags) { + continue + } + } + + zones[*zone.Id] = &profiledZone{ + profile: profile, + zone: &zone, + } } - return nil, provider.NewSoftError(fmt.Errorf("failed to list hosted zones: %w", err)) } if tagErr != nil { return nil, provider.NewSoftError(fmt.Errorf("failed to list zones tags: %w", tagErr)) @@ -386,7 +381,7 @@ func (p *AWSProvider) zones(ctx context.Context) (map[string]*profiledZone, erro } for _, zone := range zones { - log.Debugf("Considering zone: %s (domain: %s)", aws.StringValue(zone.zone.Id), aws.StringValue(zone.zone.Name)) + log.Debugf("Considering zone: %s (domain: %s)", *zone.zone.Id, *zone.zone.Name) } if p.zonesCache.duration > time.Duration(0) { @@ -415,92 +410,93 @@ func (p *AWSProvider) Records(ctx context.Context) (endpoints []*endpoint.Endpoi func (p *AWSProvider) records(ctx context.Context, zones map[string]*profiledZone) ([]*endpoint.Endpoint, error) { endpoints := make([]*endpoint.Endpoint, 0) - f := func(resp *route53.ListResourceRecordSetsOutput, lastPage bool) (shouldContinue bool) { - for _, r := range resp.ResourceRecordSets { - newEndpoints := make([]*endpoint.Endpoint, 0) - - if !p.SupportedRecordType(aws.StringValue(r.Type)) { - continue - } - - var ttl endpoint.TTL - if r.TTL != nil { - ttl = endpoint.TTL(*r.TTL) - } - - if len(r.ResourceRecords) > 0 { - targets := make([]string, len(r.ResourceRecords)) - for idx, rr := range r.ResourceRecords { - targets[idx] = aws.StringValue(rr.Value) - } - - ep := endpoint.NewEndpointWithTTL(wildcardUnescape(aws.StringValue(r.Name)), aws.StringValue(r.Type), ttl, targets...) - if aws.StringValue(r.Type) == endpoint.RecordTypeCNAME { - ep = ep.WithProviderSpecific(providerSpecificAlias, "false") - } - newEndpoints = append(newEndpoints, ep) - } - - if r.AliasTarget != nil { - // Alias records don't have TTLs so provide the default to match the TXT generation - if ttl == 0 { - ttl = recordTTL - } - ep := endpoint. - NewEndpointWithTTL(wildcardUnescape(aws.StringValue(r.Name)), endpoint.RecordTypeA, ttl, aws.StringValue(r.AliasTarget.DNSName)). - WithProviderSpecific(providerSpecificEvaluateTargetHealth, fmt.Sprintf("%t", aws.BoolValue(r.AliasTarget.EvaluateTargetHealth))). - WithProviderSpecific(providerSpecificAlias, "true") - newEndpoints = append(newEndpoints, ep) - } - - for _, ep := range newEndpoints { - if r.SetIdentifier != nil { - ep.SetIdentifier = aws.StringValue(r.SetIdentifier) - switch { - case r.Weight != nil: - ep.WithProviderSpecific(providerSpecificWeight, fmt.Sprintf("%d", aws.Int64Value(r.Weight))) - case r.Region != nil: - ep.WithProviderSpecific(providerSpecificRegion, aws.StringValue(r.Region)) - case r.Failover != nil: - ep.WithProviderSpecific(providerSpecificFailover, aws.StringValue(r.Failover)) - case r.MultiValueAnswer != nil && aws.BoolValue(r.MultiValueAnswer): - ep.WithProviderSpecific(providerSpecificMultiValueAnswer, "") - case r.GeoLocation != nil: - if r.GeoLocation.ContinentCode != nil { - ep.WithProviderSpecific(providerSpecificGeolocationContinentCode, aws.StringValue(r.GeoLocation.ContinentCode)) - } else { - if r.GeoLocation.CountryCode != nil { - ep.WithProviderSpecific(providerSpecificGeolocationCountryCode, aws.StringValue(r.GeoLocation.CountryCode)) - } - if r.GeoLocation.SubdivisionCode != nil { - ep.WithProviderSpecific(providerSpecificGeolocationSubdivisionCode, aws.StringValue(r.GeoLocation.SubdivisionCode)) - } - } - default: - // one of the above needs to be set, otherwise SetIdentifier doesn't make sense - } - } - - if r.HealthCheckId != nil { - ep.WithProviderSpecific(providerSpecificHealthCheckID, aws.StringValue(r.HealthCheckId)) - } - - endpoints = append(endpoints, ep) - } - } - - return true - } for _, z := range zones { - params := &route53.ListResourceRecordSetsInput{ - HostedZoneId: z.zone.Id, - MaxItems: aws.String(route53PageSize), - } - client := p.clients[z.profile] - if err := client.ListResourceRecordSetsPagesWithContext(ctx, params, f); err != nil { - return nil, fmt.Errorf("failed to list resource records sets for zone %s using aws profile %q: %w", *z.zone.Id, z.profile, err) + + paginator := route53.NewListResourceRecordSetsPaginator(client, &route53.ListResourceRecordSetsInput{ + HostedZoneId: z.zone.Id, + MaxItems: aws.Int32(route53PageSize), + }) + + for paginator.HasMorePages() { + resp, err := paginator.NextPage(ctx) + if err != nil { + return nil, fmt.Errorf("failed to list resource records sets for zone %s using aws profile %q: %w", *z.zone.Id, z.profile, err) + } + + for _, r := range resp.ResourceRecordSets { + newEndpoints := make([]*endpoint.Endpoint, 0) + + if !p.SupportedRecordType(r.Type) { + continue + } + + var ttl endpoint.TTL + if r.TTL != nil { + ttl = endpoint.TTL(*r.TTL) + } + + if len(r.ResourceRecords) > 0 { + targets := make([]string, len(r.ResourceRecords)) + for idx, rr := range r.ResourceRecords { + targets[idx] = *rr.Value + } + + ep := endpoint.NewEndpointWithTTL(wildcardUnescape(*r.Name), string(r.Type), ttl, targets...) + if r.Type == endpoint.RecordTypeCNAME { + ep = ep.WithProviderSpecific(providerSpecificAlias, "false") + } + newEndpoints = append(newEndpoints, ep) + } + + if r.AliasTarget != nil { + // Alias records don't have TTLs so provide the default to match the TXT generation + if ttl == 0 { + ttl = recordTTL + } + ep := endpoint. + NewEndpointWithTTL(wildcardUnescape(*r.Name), endpoint.RecordTypeA, ttl, *r.AliasTarget.DNSName). + WithProviderSpecific(providerSpecificEvaluateTargetHealth, fmt.Sprintf("%t", r.AliasTarget.EvaluateTargetHealth)). + WithProviderSpecific(providerSpecificAlias, "true") + newEndpoints = append(newEndpoints, ep) + } + + for _, ep := range newEndpoints { + if r.SetIdentifier != nil { + ep.SetIdentifier = *r.SetIdentifier + switch { + case r.Weight != nil: + ep.WithProviderSpecific(providerSpecificWeight, fmt.Sprintf("%d", *r.Weight)) + case r.Region != "": + ep.WithProviderSpecific(providerSpecificRegion, string(r.Region)) + case r.Failover != "": + ep.WithProviderSpecific(providerSpecificFailover, string(r.Failover)) + case r.MultiValueAnswer != nil && *r.MultiValueAnswer: + ep.WithProviderSpecific(providerSpecificMultiValueAnswer, "") + case r.GeoLocation != nil: + if r.GeoLocation.ContinentCode != nil { + ep.WithProviderSpecific(providerSpecificGeolocationContinentCode, *r.GeoLocation.ContinentCode) + } else { + if r.GeoLocation.CountryCode != nil { + ep.WithProviderSpecific(providerSpecificGeolocationCountryCode, *r.GeoLocation.CountryCode) + } + if r.GeoLocation.SubdivisionCode != nil { + ep.WithProviderSpecific(providerSpecificGeolocationSubdivisionCode, *r.GeoLocation.SubdivisionCode) + } + } + default: + // one of the above needs to be set, otherwise SetIdentifier doesn't make sense + } + } + + if r.HealthCheckId != nil { + ep.WithProviderSpecific(providerSpecificHealthCheckID, *r.HealthCheckId) + } + + endpoints = append(endpoints, ep) + } + } } } @@ -560,9 +556,9 @@ func (p *AWSProvider) createUpdateChanges(newEndpoints, oldEndpoints []*endpoint } combined := make(Route53Changes, 0, len(deletes)+len(creates)+len(updates)) - combined = append(combined, p.newChanges(route53.ChangeActionCreate, creates)...) - combined = append(combined, p.newChanges(route53.ChangeActionUpsert, updates)...) - combined = append(combined, p.newChanges(route53.ChangeActionDelete, deletes)...) + combined = append(combined, p.newChanges(route53types.ChangeActionCreate, creates)...) + combined = append(combined, p.newChanges(route53types.ChangeActionUpsert, updates)...) + combined = append(combined, p.newChanges(route53types.ChangeActionDelete, deletes)...) return combined } @@ -575,7 +571,7 @@ func (p *AWSProvider) GetDomainFilter() endpoint.DomainFilterInterface { } zoneNames := []string(nil) for _, z := range zones { - zoneNames = append(zoneNames, aws.StringValue(z.Name), "."+aws.StringValue(z.Name)) + zoneNames = append(zoneNames, *z.Name, "."+*z.Name) } log.Infof("Applying provider record filter for domains: %v", zoneNames) return endpoint.NewDomainFilter(zoneNames) @@ -591,8 +587,8 @@ func (p *AWSProvider) ApplyChanges(ctx context.Context, changes *plan.Changes) e updateChanges := p.createUpdateChanges(changes.UpdateNew, changes.UpdateOld) combinedChanges := make(Route53Changes, 0, len(changes.Delete)+len(changes.Create)+len(updateChanges)) - combinedChanges = append(combinedChanges, p.newChanges(route53.ChangeActionCreate, changes.Create)...) - combinedChanges = append(combinedChanges, p.newChanges(route53.ChangeActionDelete, changes.Delete)...) + combinedChanges = append(combinedChanges, p.newChanges(route53types.ChangeActionCreate, changes.Create)...) + combinedChanges = append(combinedChanges, p.newChanges(route53types.ChangeActionDelete, changes.Delete)...) combinedChanges = append(combinedChanges, updateChanges...) return p.submitChanges(ctx, combinedChanges, zones) @@ -615,7 +611,7 @@ func (p *AWSProvider) submitChanges(ctx context.Context, changes Route53Changes, var failedZones []string for z, cs := range changesByZone { log := log.WithFields(log.Fields{ - "zoneName": aws.StringValue(zones[z].zone.Name), + "zoneName": *zones[z].zone.Name, "zoneID": z, "profile": zones[z].profile, }) @@ -634,13 +630,13 @@ func (p *AWSProvider) submitChanges(ctx context.Context, changes Route53Changes, } for _, c := range b { - log.Infof("Desired change: %s %s %s", *c.Action, *c.ResourceRecordSet.Name, *c.ResourceRecordSet.Type) + log.Infof("Desired change: %s %s %s", c.Action, *c.ResourceRecordSet.Name, c.ResourceRecordSet.Type) } if !p.dryRun { params := &route53.ChangeResourceRecordSetsInput{ HostedZoneId: aws.String(z), - ChangeBatch: &route53.ChangeBatch{ + ChangeBatch: &route53types.ChangeBatch{ Changes: b.Route53Changes(), }, } @@ -648,8 +644,8 @@ func (p *AWSProvider) submitChanges(ctx context.Context, changes Route53Changes, successfulChanges := 0 client := p.clients[zones[z].profile] - if _, err := client.ChangeResourceRecordSetsWithContext(ctx, params); err != nil { - log.Errorf("Failure in zone %s when submitting change batch: %v", aws.StringValue(zones[z].zone.Name), err) + if _, err := client.ChangeResourceRecordSets(ctx, params); err != nil { + log.Errorf("Failure in zone %s when submitting change batch: %v", *zones[z].zone.Name, err) changesByOwnership := groupChangesByNameAndOwnershipRelation(b) @@ -658,12 +654,12 @@ func (p *AWSProvider) submitChanges(ctx context.Context, changes Route53Changes, for _, changes := range changesByOwnership { for _, c := range changes { - log.Debugf("Desired change: %s %s %s", *c.Action, *c.ResourceRecordSet.Name, *c.ResourceRecordSet.Type) + log.Debugf("Desired change: %s %s %s", c.Action, *c.ResourceRecordSet.Name, c.ResourceRecordSet.Type) } - params.ChangeBatch = &route53.ChangeBatch{ + params.ChangeBatch = &route53types.ChangeBatch{ Changes: changes.Route53Changes(), } - if _, err := client.ChangeResourceRecordSetsWithContext(ctx, params); err != nil { + if _, err := client.ChangeResourceRecordSets(ctx, params); err != nil { failedUpdate = true log.Errorf("Failed submitting change (error: %v), it will be retried in a separate change batch in the next iteration", err) p.failedChangesQueue[z] = append(p.failedChangesQueue[z], changes...) @@ -702,7 +698,7 @@ func (p *AWSProvider) submitChanges(ctx context.Context, changes Route53Changes, } // newChanges returns a collection of Changes based on the given records and action. -func (p *AWSProvider) newChanges(action string, endpoints []*endpoint.Endpoint) Route53Changes { +func (p *AWSProvider) newChanges(action route53types.ChangeAction, endpoints []*endpoint.Endpoint) Route53Changes { changes := make(Route53Changes, 0, len(endpoints)) for _, endpoint := range endpoints { @@ -711,8 +707,10 @@ func (p *AWSProvider) newChanges(action string, endpoints []*endpoint.Endpoint) if dualstack { // make a copy of change, modify RRS type to AAAA, then add new change rrs := *change.ResourceRecordSet - change2 := &Route53Change{Change: route53.Change{Action: change.Action, ResourceRecordSet: &rrs}} - change2.ResourceRecordSet.Type = aws.String(route53.RRTypeAaaa) + change2 := &Route53Change{ + Change: route53types.Change{Action: change.Action, ResourceRecordSet: &rrs}, + } + change2.ResourceRecordSet.Type = route53types.RRTypeAaaa changes = append(changes, change2) } } @@ -774,11 +772,11 @@ func (p *AWSProvider) AdjustEndpoints(endpoints []*endpoint.Endpoint) ([]*endpoi // returned Change is based on the given record by the given action, e.g. // action=ChangeActionCreate returns a change for creation of the record and // action=ChangeActionDelete returns a change for deletion of the record. -func (p *AWSProvider) newChange(action string, ep *endpoint.Endpoint) (*Route53Change, bool) { +func (p *AWSProvider) newChange(action route53types.ChangeAction, ep *endpoint.Endpoint) (*Route53Change, bool) { change := &Route53Change{ - Change: route53.Change{ - Action: aws.String(action), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: action, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(ep.DNSName), }, }, @@ -793,24 +791,24 @@ func (p *AWSProvider) newChange(action string, ep *endpoint.Endpoint) (*Route53C if val, ok := ep.Labels[endpoint.DualstackLabelKey]; ok { dualstack = val == "true" } - change.ResourceRecordSet.Type = aws.String(route53.RRTypeA) - change.ResourceRecordSet.AliasTarget = &route53.AliasTarget{ + change.ResourceRecordSet.Type = route53types.RRTypeA + change.ResourceRecordSet.AliasTarget = &route53types.AliasTarget{ DNSName: aws.String(ep.Targets[0]), HostedZoneId: aws.String(cleanZoneID(targetHostedZone)), - EvaluateTargetHealth: aws.Bool(evalTargetHealth), + EvaluateTargetHealth: evalTargetHealth, } change.sizeBytes += len([]byte(ep.Targets[0])) change.sizeValues += 1 } else { - change.ResourceRecordSet.Type = aws.String(ep.RecordType) + change.ResourceRecordSet.Type = route53types.RRType(ep.RecordType) if !ep.RecordTTL.IsConfigured() { change.ResourceRecordSet.TTL = aws.Int64(recordTTL) } else { change.ResourceRecordSet.TTL = aws.Int64(int64(ep.RecordTTL)) } - change.ResourceRecordSet.ResourceRecords = make([]*route53.ResourceRecord, len(ep.Targets)) + change.ResourceRecordSet.ResourceRecords = make([]route53types.ResourceRecord, len(ep.Targets)) for idx, val := range ep.Targets { - change.ResourceRecordSet.ResourceRecords[idx] = &route53.ResourceRecord{ + change.ResourceRecordSet.ResourceRecords[idx] = route53types.ResourceRecord{ Value: aws.String(val), } change.sizeBytes += len([]byte(val)) @@ -818,7 +816,7 @@ func (p *AWSProvider) newChange(action string, ep *endpoint.Endpoint) (*Route53C } } - if action == route53.ChangeActionUpsert { + if action == route53types.ChangeActionUpsert { // If the value of the Action element is UPSERT, each ResourceRecord element and each character in a Value // element is counted twice change.sizeBytes *= 2 @@ -837,16 +835,16 @@ func (p *AWSProvider) newChange(action string, ep *endpoint.Endpoint) (*Route53C change.ResourceRecordSet.Weight = aws.Int64(weight) } if prop, ok := ep.GetProviderSpecificProperty(providerSpecificRegion); ok { - change.ResourceRecordSet.Region = aws.String(prop) + change.ResourceRecordSet.Region = route53types.ResourceRecordSetRegion(prop) } if prop, ok := ep.GetProviderSpecificProperty(providerSpecificFailover); ok { - change.ResourceRecordSet.Failover = aws.String(prop) + change.ResourceRecordSet.Failover = route53types.ResourceRecordSetFailover(prop) } if _, ok := ep.GetProviderSpecificProperty(providerSpecificMultiValueAnswer); ok { change.ResourceRecordSet.MultiValueAnswer = aws.Bool(true) } - geolocation := &route53.GeoLocation{} + geolocation := &route53types.GeoLocation{} useGeolocation := false if prop, ok := ep.GetProviderSpecificProperty(providerSpecificGeolocationContinentCode); ok { geolocation.ContinentCode = aws.String(prop) @@ -908,7 +906,7 @@ func groupChangesByNameAndOwnershipRelation(cs Route53Changes) map[string]Route5 for _, v := range cs { key := v.OwnedRecord if key == "" { - key = aws.StringValue(v.ResourceRecordSet.Name) + key = *v.ResourceRecordSet.Name } changesByOwnership[key] = append(changesByOwnership[key], v) } @@ -918,8 +916,8 @@ func groupChangesByNameAndOwnershipRelation(cs Route53Changes) map[string]Route5 func (p *AWSProvider) tagsForZone(ctx context.Context, zoneID string, profile string) (map[string]string, error) { client := p.clients[profile] - response, err := client.ListTagsForResourceWithContext(ctx, &route53.ListTagsForResourceInput{ - ResourceType: aws.String("hostedzone"), + response, err := client.ListTagsForResource(ctx, &route53.ListTagsForResourceInput{ + ResourceType: route53types.TagResourceTypeHostedzone, ResourceId: aws.String(zoneID), }) if err != nil { @@ -1006,10 +1004,10 @@ func batchChangeSet(cs Route53Changes, batchSize int, batchSizeBytes int, batchS func sortChangesByActionNameType(cs Route53Changes) Route53Changes { sort.SliceStable(cs, func(i, j int) bool { - if *cs[i].Action > *cs[j].Action { + if cs[i].Action > cs[j].Action { return true } - if *cs[i].Action < *cs[j].Action { + if cs[i].Action < cs[j].Action { return false } if *cs[i].ResourceRecordSet.Name < *cs[j].ResourceRecordSet.Name { @@ -1018,7 +1016,7 @@ func sortChangesByActionNameType(cs Route53Changes) Route53Changes { if *cs[i].ResourceRecordSet.Name > *cs[j].ResourceRecordSet.Name { return false } - return *cs[i].ResourceRecordSet.Type < *cs[j].ResourceRecordSet.Type + return cs[i].ResourceRecordSet.Type < cs[j].ResourceRecordSet.Type }) return cs @@ -1029,34 +1027,34 @@ func changesByZone(zones map[string]*profiledZone, changeSet Route53Changes) map changes := make(map[string]Route53Changes) for _, z := range zones { - changes[aws.StringValue(z.zone.Id)] = Route53Changes{} + changes[*z.zone.Id] = Route53Changes{} } for _, c := range changeSet { - hostname := provider.EnsureTrailingDot(aws.StringValue(c.ResourceRecordSet.Name)) + hostname := provider.EnsureTrailingDot(*c.ResourceRecordSet.Name) zones := suitableZones(hostname, zones) if len(zones) == 0 { - log.Debugf("Skipping record %s because no hosted zone matching record DNS Name was detected", c.String()) + log.Debugf("Skipping record %s because no hosted zone matching record DNS Name was detected", *c.ResourceRecordSet.Name) continue } for _, z := range zones { - if c.ResourceRecordSet.AliasTarget != nil && aws.StringValue(c.ResourceRecordSet.AliasTarget.HostedZoneId) == sameZoneAlias { + if c.ResourceRecordSet.AliasTarget != nil && *c.ResourceRecordSet.AliasTarget.HostedZoneId == sameZoneAlias { // alias record is to be created; target needs to be in the same zone as endpoint // if it's not, this will fail rrset := *c.ResourceRecordSet aliasTarget := *rrset.AliasTarget - aliasTarget.HostedZoneId = aws.String(cleanZoneID(aws.StringValue(z.zone.Id))) + aliasTarget.HostedZoneId = aws.String(cleanZoneID(*z.zone.Id)) rrset.AliasTarget = &aliasTarget c = &Route53Change{ - Change: route53.Change{ + Change: route53types.Change{ Action: c.Action, ResourceRecordSet: &rrset, }, } } - changes[aws.StringValue(z.zone.Id)] = append(changes[aws.StringValue(z.zone.Id)], c) - log.Debugf("Adding %s to zone %s [Id: %s]", hostname, aws.StringValue(z.zone.Name), aws.StringValue(z.zone.Id)) + changes[*z.zone.Id] = append(changes[*z.zone.Id], c) + log.Debugf("Adding %s to zone %s [Id: %s]", hostname, *z.zone.Name, *z.zone.Id) } } @@ -1078,10 +1076,10 @@ func suitableZones(hostname string, zones map[string]*profiledZone) []*profiledZ var publicZone *profiledZone for _, z := range zones { - if aws.StringValue(z.zone.Name) == hostname || strings.HasSuffix(hostname, "."+aws.StringValue(z.zone.Name)) { - if z.zone.Config == nil || !aws.BoolValue(z.zone.Config.PrivateZone) { + if *z.zone.Name == hostname || strings.HasSuffix(hostname, "."+*z.zone.Name) { + if z.zone.Config == nil || !z.zone.Config.PrivateZone { // Only select the best matching public zone - if publicZone == nil || len(aws.StringValue(z.zone.Name)) > len(aws.StringValue(publicZone.zone.Name)) { + if publicZone == nil || len(*z.zone.Name) > len(*publicZone.zone.Name) { publicZone = z } } else { @@ -1156,11 +1154,11 @@ func cleanZoneID(id string) string { return strings.TrimPrefix(id, "/hostedzone/") } -func (p *AWSProvider) SupportedRecordType(recordType string) bool { +func (p *AWSProvider) SupportedRecordType(recordType route53types.RRType) bool { switch recordType { - case "MX": + case route53types.RRTypeMx: return true default: - return provider.SupportedRecordType(recordType) + return provider.SupportedRecordType(string(recordType)) } } diff --git a/provider/aws/aws_test.go b/provider/aws/aws_test.go index 6968e7c76..806ed1d5c 100644 --- a/provider/aws/aws_test.go +++ b/provider/aws/aws_test.go @@ -26,9 +26,9 @@ import ( "testing" "time" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/service/route53" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/route53" + route53types "github.com/aws/aws-sdk-go-v2/service/route53/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" @@ -55,9 +55,9 @@ var _ Route53API = &Route53APIStub{} // of all of its methods. // mostly taken from: https://github.com/kubernetes/kubernetes/blob/853167624edb6bc0cfdcdfb88e746e178f5db36c/federation/pkg/dnsprovider/providers/aws/route53/stubs/route53api.go type Route53APIStub struct { - zones map[string]*route53.HostedZone - recordSets map[string]map[string][]*route53.ResourceRecordSet - zoneTags map[string][]*route53.Tag + zones map[string]*route53types.HostedZone + recordSets map[string]map[string][]route53types.ResourceRecordSet + zoneTags map[string][]route53types.Tag m dynamicMock t *testing.T } @@ -73,29 +73,27 @@ func (r *Route53APIStub) MockMethod(method string, args ...interface{}) *mock.Ca // NewRoute53APIStub returns an initialized Route53APIStub func NewRoute53APIStub(t *testing.T) *Route53APIStub { return &Route53APIStub{ - zones: make(map[string]*route53.HostedZone), - recordSets: make(map[string]map[string][]*route53.ResourceRecordSet), - zoneTags: make(map[string][]*route53.Tag), + zones: make(map[string]*route53types.HostedZone), + recordSets: make(map[string]map[string][]route53types.ResourceRecordSet), + zoneTags: make(map[string][]route53types.Tag), t: t, } } -func (r *Route53APIStub) ListResourceRecordSetsPagesWithContext(ctx context.Context, input *route53.ListResourceRecordSetsInput, fn func(p *route53.ListResourceRecordSetsOutput, lastPage bool) (shouldContinue bool), opts ...request.Option) error { - output := route53.ListResourceRecordSetsOutput{} // TODO: Support optional input args. +func (r *Route53APIStub) ListResourceRecordSets(ctx context.Context, input *route53.ListResourceRecordSetsInput, optFns ...func(options *route53.Options)) (*route53.ListResourceRecordSetsOutput, error) { + output := &route53.ListResourceRecordSetsOutput{} // TODO: Support optional input args. require.NotNil(r.t, input.MaxItems) assert.EqualValues(r.t, route53PageSize, *input.MaxItems) if len(r.recordSets) == 0 { - output.ResourceRecordSets = []*route53.ResourceRecordSet{} - } else if _, ok := r.recordSets[aws.StringValue(input.HostedZoneId)]; !ok { - output.ResourceRecordSets = []*route53.ResourceRecordSet{} + output.ResourceRecordSets = []route53types.ResourceRecordSet{} + } else if _, ok := r.recordSets[*input.HostedZoneId]; !ok { + output.ResourceRecordSets = []route53types.ResourceRecordSet{} } else { - for _, rrsets := range r.recordSets[aws.StringValue(input.HostedZoneId)] { + for _, rrsets := range r.recordSets[*input.HostedZoneId] { output.ResourceRecordSets = append(output.ResourceRecordSets, rrsets...) } } - lastPage := true - fn(&output, lastPage) - return nil + return output, nil } type Route53APICounter struct { @@ -110,29 +108,29 @@ func NewRoute53APICounter(w Route53API) *Route53APICounter { } } -func (c *Route53APICounter) ListResourceRecordSetsPagesWithContext(ctx context.Context, input *route53.ListResourceRecordSetsInput, fn func(resp *route53.ListResourceRecordSetsOutput, lastPage bool) (shouldContinue bool), opts ...request.Option) error { +func (c *Route53APICounter) ListResourceRecordSets(ctx context.Context, input *route53.ListResourceRecordSetsInput, optFns ...func(options *route53.Options)) (*route53.ListResourceRecordSetsOutput, error) { c.calls["ListResourceRecordSetsPages"]++ - return c.wrapped.ListResourceRecordSetsPagesWithContext(ctx, input, fn) + return c.wrapped.ListResourceRecordSets(ctx, input, optFns...) } -func (c *Route53APICounter) ChangeResourceRecordSetsWithContext(ctx context.Context, input *route53.ChangeResourceRecordSetsInput, opts ...request.Option) (*route53.ChangeResourceRecordSetsOutput, error) { +func (c *Route53APICounter) ChangeResourceRecordSets(ctx context.Context, input *route53.ChangeResourceRecordSetsInput, optFns ...func(*route53.Options)) (*route53.ChangeResourceRecordSetsOutput, error) { c.calls["ChangeResourceRecordSets"]++ - return c.wrapped.ChangeResourceRecordSetsWithContext(ctx, input) + return c.wrapped.ChangeResourceRecordSets(ctx, input, optFns...) } -func (c *Route53APICounter) CreateHostedZoneWithContext(ctx context.Context, input *route53.CreateHostedZoneInput, opts ...request.Option) (*route53.CreateHostedZoneOutput, error) { +func (c *Route53APICounter) CreateHostedZone(ctx context.Context, input *route53.CreateHostedZoneInput, optFns ...func(*route53.Options)) (*route53.CreateHostedZoneOutput, error) { c.calls["CreateHostedZone"]++ - return c.wrapped.CreateHostedZoneWithContext(ctx, input) + return c.wrapped.CreateHostedZone(ctx, input, optFns...) } -func (c *Route53APICounter) ListHostedZonesPagesWithContext(ctx context.Context, input *route53.ListHostedZonesInput, fn func(resp *route53.ListHostedZonesOutput, lastPage bool) (shouldContinue bool), opts ...request.Option) error { +func (c *Route53APICounter) ListHostedZones(ctx context.Context, input *route53.ListHostedZonesInput, optFns ...func(options *route53.Options)) (*route53.ListHostedZonesOutput, error) { c.calls["ListHostedZonesPages"]++ - return c.wrapped.ListHostedZonesPagesWithContext(ctx, input, fn) + return c.wrapped.ListHostedZones(ctx, input, optFns...) } -func (c *Route53APICounter) ListTagsForResourceWithContext(ctx context.Context, input *route53.ListTagsForResourceInput, opts ...request.Option) (*route53.ListTagsForResourceOutput, error) { +func (c *Route53APICounter) ListTagsForResource(ctx context.Context, input *route53.ListTagsForResourceInput, optFns ...func(options *route53.Options)) (*route53.ListTagsForResourceOutput, error) { c.calls["ListTagsForResource"]++ - return c.wrapped.ListTagsForResourceWithContext(ctx, input) + return c.wrapped.ListTagsForResource(ctx, input, optFns...) } // Route53 stores wildcards escaped: http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DomainNameFormat.html?shortFooter=true#domain-name-format-asterisk @@ -143,11 +141,11 @@ func wildcardEscape(s string) string { return s } -func (r *Route53APIStub) ListTagsForResourceWithContext(ctx context.Context, input *route53.ListTagsForResourceInput, opts ...request.Option) (*route53.ListTagsForResourceOutput, error) { - if aws.StringValue(input.ResourceType) == "hostedzone" { - tags := r.zoneTags[aws.StringValue(input.ResourceId)] +func (r *Route53APIStub) ListTagsForResource(ctx context.Context, input *route53.ListTagsForResourceInput, optFns ...func(options *route53.Options)) (*route53.ListTagsForResourceOutput, error) { + if input.ResourceType == route53types.TagResourceTypeHostedzone { + tags := r.zoneTags[*input.ResourceId] return &route53.ListTagsForResourceOutput{ - ResourceTagSet: &route53.ResourceTagSet{ + ResourceTagSet: &route53types.ResourceTagSet{ ResourceId: input.ResourceId, ResourceType: input.ResourceType, Tags: tags, @@ -157,14 +155,14 @@ func (r *Route53APIStub) ListTagsForResourceWithContext(ctx context.Context, inp return &route53.ListTagsForResourceOutput{}, nil } -func (r *Route53APIStub) ChangeResourceRecordSetsWithContext(ctx context.Context, input *route53.ChangeResourceRecordSetsInput, opts ...request.Option) (*route53.ChangeResourceRecordSetsOutput, error) { +func (r *Route53APIStub) ChangeResourceRecordSets(ctx context.Context, input *route53.ChangeResourceRecordSetsInput, optFns ...func(options *route53.Options)) (*route53.ChangeResourceRecordSetsOutput, error) { if r.m.isMocked("ChangeResourceRecordSets", input) { return r.m.ChangeResourceRecordSets(input) } - _, ok := r.zones[aws.StringValue(input.HostedZoneId)] + _, ok := r.zones[*input.HostedZoneId] if !ok { - return nil, fmt.Errorf("Hosted zone doesn't exist: %s", aws.StringValue(input.HostedZoneId)) + return nil, fmt.Errorf("Hosted zone doesn't exist: %s", *input.HostedZoneId) } if len(input.ChangeBatch.Changes) == 0 { @@ -172,67 +170,65 @@ func (r *Route53APIStub) ChangeResourceRecordSetsWithContext(ctx context.Context } output := &route53.ChangeResourceRecordSetsOutput{} - recordSets, ok := r.recordSets[aws.StringValue(input.HostedZoneId)] + recordSets, ok := r.recordSets[*input.HostedZoneId] if !ok { - recordSets = make(map[string][]*route53.ResourceRecordSet) + recordSets = make(map[string][]route53types.ResourceRecordSet) } for _, change := range input.ChangeBatch.Changes { - if aws.StringValue(change.ResourceRecordSet.Type) == route53.RRTypeA { + if change.ResourceRecordSet.Type == route53types.RRTypeA { for _, rrs := range change.ResourceRecordSet.ResourceRecords { - if net.ParseIP(aws.StringValue(rrs.Value)) == nil { + if net.ParseIP(*rrs.Value) == nil { return nil, fmt.Errorf("A records must point to IPs") } } } - change.ResourceRecordSet.Name = aws.String(wildcardEscape(provider.EnsureTrailingDot(aws.StringValue(change.ResourceRecordSet.Name)))) + change.ResourceRecordSet.Name = aws.String(wildcardEscape(provider.EnsureTrailingDot(*change.ResourceRecordSet.Name))) if change.ResourceRecordSet.AliasTarget != nil { - change.ResourceRecordSet.AliasTarget.DNSName = aws.String(wildcardEscape(provider.EnsureTrailingDot(aws.StringValue(change.ResourceRecordSet.AliasTarget.DNSName)))) + change.ResourceRecordSet.AliasTarget.DNSName = aws.String(wildcardEscape(provider.EnsureTrailingDot(*change.ResourceRecordSet.AliasTarget.DNSName))) } setID := "" if change.ResourceRecordSet.SetIdentifier != nil { - setID = aws.StringValue(change.ResourceRecordSet.SetIdentifier) + setID = *change.ResourceRecordSet.SetIdentifier } - key := aws.StringValue(change.ResourceRecordSet.Name) + "::" + aws.StringValue(change.ResourceRecordSet.Type) + "::" + setID - switch aws.StringValue(change.Action) { - case route53.ChangeActionCreate: + key := *change.ResourceRecordSet.Name + "::" + string(change.ResourceRecordSet.Type) + "::" + setID + switch change.Action { + case route53types.ChangeActionCreate: if _, found := recordSets[key]; found { return nil, fmt.Errorf("Attempt to create duplicate rrset %s", key) // TODO: Return AWS errors with codes etc } - recordSets[key] = append(recordSets[key], change.ResourceRecordSet) - case route53.ChangeActionDelete: + recordSets[key] = append(recordSets[key], *change.ResourceRecordSet) + case route53types.ChangeActionDelete: if _, found := recordSets[key]; !found { return nil, fmt.Errorf("Attempt to delete non-existent rrset %s", key) // TODO: Check other fields too } delete(recordSets, key) - case route53.ChangeActionUpsert: - recordSets[key] = []*route53.ResourceRecordSet{change.ResourceRecordSet} + case route53types.ChangeActionUpsert: + recordSets[key] = []route53types.ResourceRecordSet{*change.ResourceRecordSet} } } - r.recordSets[aws.StringValue(input.HostedZoneId)] = recordSets + r.recordSets[*input.HostedZoneId] = recordSets return output, nil // TODO: We should ideally return status etc, but we don't' use that yet. } -func (r *Route53APIStub) ListHostedZonesPagesWithContext(ctx context.Context, input *route53.ListHostedZonesInput, fn func(p *route53.ListHostedZonesOutput, lastPage bool) (shouldContinue bool), opts ...request.Option) error { +func (r *Route53APIStub) ListHostedZones(ctx context.Context, input *route53.ListHostedZonesInput, optFns ...func(options *route53.Options)) (*route53.ListHostedZonesOutput, error) { output := &route53.ListHostedZonesOutput{} for _, zone := range r.zones { - output.HostedZones = append(output.HostedZones, zone) + output.HostedZones = append(output.HostedZones, *zone) } - lastPage := true - fn(output, lastPage) - return nil + return output, nil } -func (r *Route53APIStub) CreateHostedZoneWithContext(ctx context.Context, input *route53.CreateHostedZoneInput, opts ...request.Option) (*route53.CreateHostedZoneOutput, error) { - name := aws.StringValue(input.Name) +func (r *Route53APIStub) CreateHostedZone(ctx context.Context, input *route53.CreateHostedZoneInput, optFns ...func(options *route53.Options)) (*route53.CreateHostedZoneOutput, error) { + name := *input.Name id := "/hostedzone/" + name if _, ok := r.zones[id]; ok { return nil, fmt.Errorf("Error creating hosted DNS zone: %s already exists", id) } - r.zones[id] = &route53.HostedZone{ + r.zones[id] = &route53types.HostedZone{ Id: aws.String(id), Name: aws.String(name), Config: input.HostedZoneConfig, @@ -265,7 +261,7 @@ func (m *dynamicMock) isMocked(method string, arguments ...interface{}) bool { } func TestAWSZones(t *testing.T) { - publicZones := map[string]*route53.HostedZone{ + publicZones := map[string]*route53types.HostedZone{ "/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do.": { Id: aws.String("/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do."), Name: aws.String("zone-1.ext-dns-test-2.teapot.zalan.do."), @@ -276,14 +272,14 @@ func TestAWSZones(t *testing.T) { }, } - privateZones := map[string]*route53.HostedZone{ + privateZones := map[string]*route53types.HostedZone{ "/hostedzone/zone-3.ext-dns-test-2.teapot.zalan.do.": { Id: aws.String("/hostedzone/zone-3.ext-dns-test-2.teapot.zalan.do."), Name: aws.String("zone-3.ext-dns-test-2.teapot.zalan.do."), }, } - allZones := map[string]*route53.HostedZone{} + allZones := map[string]*route53types.HostedZone{} for k, v := range publicZones { allZones[k] = v } @@ -291,14 +287,14 @@ func TestAWSZones(t *testing.T) { allZones[k] = v } - noZones := map[string]*route53.HostedZone{} + noZones := map[string]*route53types.HostedZone{} for _, ti := range []struct { msg string zoneIDFilter provider.ZoneIDFilter zoneTypeFilter provider.ZoneTypeFilter zoneTagFilter provider.ZoneTagFilter - expectedZones map[string]*route53.HostedZone + expectedZones map[string]*route53types.HostedZone }{ {"no filter", provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), provider.NewZoneTagFilter([]string{}), allZones}, {"public filter", provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter("public"), provider.NewZoneTagFilter([]string{}), publicZones}, @@ -307,12 +303,14 @@ func TestAWSZones(t *testing.T) { {"zone id filter", provider.NewZoneIDFilter([]string{"/hostedzone/zone-3.ext-dns-test-2.teapot.zalan.do."}), provider.NewZoneTypeFilter(""), provider.NewZoneTagFilter([]string{}), privateZones}, {"tag filter", provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), provider.NewZoneTagFilter([]string{"zone=3"}), privateZones}, } { - provider, _ := newAWSProviderWithTagFilter(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), ti.zoneIDFilter, ti.zoneTypeFilter, ti.zoneTagFilter, defaultEvaluateTargetHealth, false, nil) + t.Run(ti.msg, func(t *testing.T) { + provider, _ := newAWSProviderWithTagFilter(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), ti.zoneIDFilter, ti.zoneTypeFilter, ti.zoneTagFilter, defaultEvaluateTargetHealth, false, nil) - zones, err := provider.Zones(context.Background()) - require.NoError(t, err) + zones, err := provider.Zones(context.Background()) + require.NoError(t, err) - validateAWSZones(t, zones, ti.expectedZones) + validateAWSZones(t, zones, ti.expectedZones) + }) } } @@ -340,157 +338,157 @@ func TestAWSRecordsFilter(t *testing.T) { } func TestAWSRecords(t *testing.T) { - provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), false, false, []*route53.ResourceRecordSet{ + provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), false, false, []route53types.ResourceRecordSet{ { Name: aws.String("list-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, }, { Name: aws.String("list-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}}, }, { Name: aws.String("*.wildcard-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}}, }, { Name: aws.String("list-test-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), - AliasTarget: &route53.AliasTarget{ + Type: route53types.RRTypeA, + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("foo.eu-central-1.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(false), + EvaluateTargetHealth: false, HostedZoneId: aws.String("Z215JYRZR1TBD5"), }, }, { Name: aws.String("*.wildcard-test-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), - AliasTarget: &route53.AliasTarget{ + Type: route53types.RRTypeA, + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("foo.eu-central-1.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(false), + EvaluateTargetHealth: false, HostedZoneId: aws.String("Z215JYRZR1TBD5"), }, }, { Name: aws.String("list-test-alias-evaluate.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), - AliasTarget: &route53.AliasTarget{ + Type: route53types.RRTypeA, + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("foo.eu-central-1.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(true), + EvaluateTargetHealth: true, HostedZoneId: aws.String("Z215JYRZR1TBD5"), }, }, { Name: aws.String("list-test-multiple.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("prefix-*.wildcard.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeTxt), + Type: route53types.RRTypeTxt, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("random")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("random")}}, }, { Name: aws.String("weight-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("test-set-1"), Weight: aws.Int64(10), }, { Name: aws.String("weight-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("4.3.2.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("4.3.2.1")}}, SetIdentifier: aws.String("test-set-2"), Weight: aws.Int64(20), }, { Name: aws.String("latency-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("test-set"), - Region: aws.String("us-east-1"), + Region: route53types.ResourceRecordSetRegionUsEast1, }, { Name: aws.String("failover-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("test-set"), - Failover: aws.String("PRIMARY"), + Failover: route53types.ResourceRecordSetFailoverPrimary, }, { Name: aws.String("multi-value-answer-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("test-set"), MultiValueAnswer: aws.Bool(true), }, { Name: aws.String("geolocation-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("test-set-1"), - GeoLocation: &route53.GeoLocation{ + GeoLocation: &route53types.GeoLocation{ ContinentCode: aws.String("EU"), }, }, { Name: aws.String("geolocation-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("4.3.2.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("4.3.2.1")}}, SetIdentifier: aws.String("test-set-2"), - GeoLocation: &route53.GeoLocation{ + GeoLocation: &route53types.GeoLocation{ CountryCode: aws.String("DE"), }, }, { Name: aws.String("geolocation-subdivision-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("test-set-1"), - GeoLocation: &route53.GeoLocation{ + GeoLocation: &route53types.GeoLocation{ SubdivisionCode: aws.String("NY"), }, }, { Name: aws.String("healthcheck-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("foo.example.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("foo.example.com")}}, SetIdentifier: aws.String("test-set-1"), HealthCheckId: aws.String("foo-bar-healthcheck-id"), Weight: aws.Int64(10), }, { Name: aws.String("healthcheck-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("4.3.2.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("4.3.2.1")}}, SetIdentifier: aws.String("test-set-2"), HealthCheckId: aws.String("abc-def-healthcheck-id"), Weight: aws.Int64(20), }, { Name: aws.String("mail.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeMx), + Type: route53types.RRTypeMx, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("10 mailhost1.example.com")}, {Value: aws.String("20 mailhost2.example.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("10 mailhost1.example.com")}, {Value: aws.String("20 mailhost2.example.com")}}, }, }) @@ -563,131 +561,131 @@ func TestAWSApplyChanges(t *testing.T) { } for _, tt := range tests { - provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []*route53.ResourceRecordSet{ + provider, _ := newAWSProvider(t, endpoint.NewDomainFilter([]string{"ext-dns-test-2.teapot.zalan.do."}), provider.NewZoneIDFilter([]string{}), provider.NewZoneTypeFilter(""), defaultEvaluateTargetHealth, false, []route53types.ResourceRecordSet{ { Name: aws.String("update-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}}, }, { Name: aws.String("delete-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}}, }, { Name: aws.String("update-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("delete-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("update-test-a-to-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.1.1.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.1.1.1")}}, }, { Name: aws.String("update-test-alias-to-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), - AliasTarget: &route53.AliasTarget{ + Type: route53types.RRTypeA, + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("foo.eu-central-1.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(true), + EvaluateTargetHealth: true, HostedZoneId: aws.String("Z215JYRZR1TBD5"), }, }, { Name: aws.String("update-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, }, { Name: aws.String("delete-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, }, { Name: aws.String("update-test-cname-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, }, { Name: aws.String("delete-test-cname-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, }, { Name: aws.String("update-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("delete-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}, {Value: aws.String("4.3.2.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}, {Value: aws.String("4.3.2.1")}}, }, { Name: aws.String("weighted-to-simple.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("weighted-to-simple"), Weight: aws.Int64(10), }, { Name: aws.String("simple-to-weighted.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, }, { Name: aws.String("policy-change.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("policy-change"), Weight: aws.Int64(10), }, { Name: aws.String("set-identifier-change.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("before"), Weight: aws.Int64(10), }, { Name: aws.String("set-identifier-no-change.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("no-change"), Weight: aws.Int64(10), }, { Name: aws.String("update-test-mx.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeMx), + Type: route53types.RRTypeMx, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("10 mailhost2.bar.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("10 mailhost2.bar.elb.amazonaws.com")}}, }, { Name: aws.String("delete-test-mx.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeMx), + Type: route53types.RRTypeMx, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("30 mailhost1.foo.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("30 mailhost1.foo.elb.amazonaws.com")}}, }, }) @@ -757,217 +755,217 @@ func TestAWSApplyChanges(t *testing.T) { assert.Equal(t, 1, counter.calls["ListHostedZonesPages"], tt.name) assert.Equal(t, tt.listRRSets, counter.calls["ListResourceRecordSetsPages"], tt.name) - validateRecords(t, listAWSRecords(t, provider.clients[defaultAWSProfile], "/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do."), []*route53.ResourceRecordSet{ + validateRecords(t, listAWSRecords(t, provider.clients[defaultAWSProfile], "/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do."), []route53types.ResourceRecordSet{ { Name: aws.String("create-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}}, }, { Name: aws.String("update-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, }, { Name: aws.String("update-test-a-to-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), - AliasTarget: &route53.AliasTarget{ + Type: route53types.RRTypeA, + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("foo.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(true), + EvaluateTargetHealth: true, HostedZoneId: aws.String("zone-1.ext-dns-test-2.teapot.zalan.do."), }, }, { Name: aws.String("update-test-alias-to-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("my-internal-host.example.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("my-internal-host.example.com")}}, }, { Name: aws.String("create-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("foo.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("foo.elb.amazonaws.com")}}, }, { Name: aws.String("update-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("baz.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("baz.elb.amazonaws.com")}}, }, { Name: aws.String("create-test-cname-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("foo.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("foo.elb.amazonaws.com")}}, }, { Name: aws.String("update-test-cname-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("baz.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("baz.elb.amazonaws.com")}}, }, { Name: aws.String("weighted-to-simple.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, }, { Name: aws.String("simple-to-weighted.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("simple-to-weighted"), Weight: aws.Int64(10), }, { Name: aws.String("policy-change.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("policy-change"), - Region: aws.String("us-east-1"), + Region: route53types.ResourceRecordSetRegionUsEast1, }, { Name: aws.String("set-identifier-change.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("after"), Weight: aws.Int64(10), }, { Name: aws.String("set-identifier-no-change.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}}, SetIdentifier: aws.String("no-change"), Weight: aws.Int64(20), }, { Name: aws.String("create-test-mx.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeMx), + Type: route53types.RRTypeMx, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("10 mailhost1.foo.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("10 mailhost1.foo.elb.amazonaws.com")}}, }, }) - validateRecords(t, listAWSRecords(t, provider.clients[defaultAWSProfile], "/hostedzone/zone-2.ext-dns-test-2.teapot.zalan.do."), []*route53.ResourceRecordSet{ + validateRecords(t, listAWSRecords(t, provider.clients[defaultAWSProfile], "/hostedzone/zone-2.ext-dns-test-2.teapot.zalan.do."), []route53types.ResourceRecordSet{ { Name: aws.String("create-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("update-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("4.3.2.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("4.3.2.1")}}, }, { Name: aws.String("create-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("update-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}, {Value: aws.String("4.3.2.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}, {Value: aws.String("4.3.2.1")}}, }, { Name: aws.String("update-test-mx.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeMx), + Type: route53types.RRTypeMx, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("20 mailhost3.foo.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("20 mailhost3.foo.elb.amazonaws.com")}}, }, }) } } func TestAWSApplyChangesDryRun(t *testing.T) { - originalRecords := []*route53.ResourceRecordSet{ + originalRecords := []route53types.ResourceRecordSet{ { Name: aws.String("update-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}}, }, { Name: aws.String("delete-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}}, }, { Name: aws.String("update-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("delete-test.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("update-test-a-to-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.1.1.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.1.1.1")}}, }, { Name: aws.String("update-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, }, { Name: aws.String("delete-test-cname.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, }, { Name: aws.String("update-test-cname-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("bar.elb.amazonaws.com")}}, }, { Name: aws.String("delete-test-cname-alias.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeCname), + Type: route53types.RRTypeCname, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("qux.elb.amazonaws.com")}}, }, { Name: aws.String("update-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("8.8.8.8")}, {Value: aws.String("8.8.4.4")}}, }, { Name: aws.String("delete-test-multiple.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("1.2.3.4")}, {Value: aws.String("4.3.2.1")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("1.2.3.4")}, {Value: aws.String("4.3.2.1")}}, }, { Name: aws.String("update-test-mx.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeMx), + Type: route53types.RRTypeMx, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("20 mail.foo.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("20 mail.foo.elb.amazonaws.com")}}, }, { Name: aws.String("delete-test-mx.zone-2.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeMx), + Type: route53types.RRTypeMx, TTL: aws.Int64(recordTTL), - ResourceRecords: []*route53.ResourceRecord{{Value: aws.String("10 mail.bar.elb.amazonaws.com")}}, + ResourceRecords: []route53types.ResourceRecord{{Value: aws.String("10 mail.bar.elb.amazonaws.com")}}, }, } @@ -1031,33 +1029,33 @@ func TestAWSApplyChangesDryRun(t *testing.T) { func TestAWSChangesByZones(t *testing.T) { changes := Route53Changes{ { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("qux.foo.example.org"), TTL: aws.Int64(1), }, }, }, { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("qux.bar.example.org"), TTL: aws.Int64(2), }, }, }, { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionDelete), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionDelete, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("wambo.foo.example.org"), TTL: aws.Int64(10), }, }, }, { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionDelete), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionDelete, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("wambo.bar.example.org"), TTL: aws.Int64(20), }, }, @@ -1067,29 +1065,29 @@ func TestAWSChangesByZones(t *testing.T) { zones := map[string]*profiledZone{ "foo-example-org": { profile: defaultAWSProfile, - zone: &route53.HostedZone{ + zone: &route53types.HostedZone{ Id: aws.String("foo-example-org"), Name: aws.String("foo.example.org."), }, }, "bar-example-org": { profile: defaultAWSProfile, - zone: &route53.HostedZone{ + zone: &route53types.HostedZone{ Id: aws.String("bar-example-org"), Name: aws.String("bar.example.org."), }, }, "bar-example-org-private": { profile: defaultAWSProfile, - zone: &route53.HostedZone{ + zone: &route53types.HostedZone{ Id: aws.String("bar-example-org-private"), Name: aws.String("bar.example.org."), - Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(true)}, + Config: &route53types.HostedZoneConfig{PrivateZone: true}, }, }, "baz-example-org": { profile: defaultAWSProfile, - zone: &route53.HostedZone{ + zone: &route53types.HostedZone{ Id: aws.String("baz-example-org"), Name: aws.String("baz.example.org."), }, @@ -1101,17 +1099,17 @@ func TestAWSChangesByZones(t *testing.T) { validateAWSChangeRecords(t, changesByZone["foo-example-org"], Route53Changes{ { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("qux.foo.example.org"), TTL: aws.Int64(1), }, }, }, { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionDelete), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionDelete, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("wambo.foo.example.org"), TTL: aws.Int64(10), }, }, @@ -1120,17 +1118,17 @@ func TestAWSChangesByZones(t *testing.T) { validateAWSChangeRecords(t, changesByZone["bar-example-org"], Route53Changes{ { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("qux.bar.example.org"), TTL: aws.Int64(2), }, }, }, { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionDelete), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionDelete, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("wambo.bar.example.org"), TTL: aws.Int64(20), }, }, @@ -1139,17 +1137,17 @@ func TestAWSChangesByZones(t *testing.T) { validateAWSChangeRecords(t, changesByZone["bar-example-org-private"], Route53Changes{ { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("qux.bar.example.org"), TTL: aws.Int64(2), }, }, }, { - Change: route53.Change{ - Action: aws.String(route53.ChangeActionDelete), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionDelete, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String("wambo.bar.example.org"), TTL: aws.Int64(20), }, }, @@ -1176,7 +1174,7 @@ func TestAWSsubmitChanges(t *testing.T) { zones, _ := provider.zones(ctx) records, _ := provider.Records(ctx) cs := make(Route53Changes, 0, len(endpoints)) - cs = append(cs, provider.newChanges(route53.ChangeActionCreate, endpoints)...) + cs = append(cs, provider.newChanges(route53types.ChangeActionCreate, endpoints)...) require.NoError(t, provider.submitChanges(ctx, cs, zones)) @@ -1195,7 +1193,7 @@ func TestAWSsubmitChangesError(t *testing.T) { require.NoError(t, err) ep := endpoint.NewEndpointWithTTL("fail.zone-1.ext-dns-test-2.teapot.zalan.do", endpoint.RecordTypeA, endpoint.TTL(recordTTL), "1.0.0.1") - cs := provider.newChanges(route53.ChangeActionCreate, []*endpoint.Endpoint{ep}) + cs := provider.newChanges(route53types.ChangeActionCreate, []*endpoint.Endpoint{ep}) require.Error(t, provider.submitChanges(ctx, cs, zones)) } @@ -1217,20 +1215,20 @@ func TestAWSsubmitChangesRetryOnError(t *testing.T) { } // "success" and "fail" are created in the first step, both are submitted in the same batch; this should fail - cs1 := provider.newChanges(route53.ChangeActionCreate, []*endpoint.Endpoint{ep2, ep2txt, ep1}) + cs1 := provider.newChanges(route53types.ChangeActionCreate, []*endpoint.Endpoint{ep2, ep2txt, ep1}) input1 := &route53.ChangeResourceRecordSetsInput{ HostedZoneId: aws.String("/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do."), - ChangeBatch: &route53.ChangeBatch{ + ChangeBatch: &route53types.ChangeBatch{ Changes: cs1.Route53Changes(), }, } clientStub.MockMethod("ChangeResourceRecordSets", input1).Return(nil, fmt.Errorf("Mock route53 failure")) // because of the failure, changes will be retried one by one; make "fail" submitted in its own batch fail as well - cs2 := provider.newChanges(route53.ChangeActionCreate, []*endpoint.Endpoint{ep2, ep2txt}) + cs2 := provider.newChanges(route53types.ChangeActionCreate, []*endpoint.Endpoint{ep2, ep2txt}) input2 := &route53.ChangeResourceRecordSetsInput{ HostedZoneId: aws.String("/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do."), - ChangeBatch: &route53.ChangeBatch{ + ChangeBatch: &route53types.ChangeBatch{ Changes: cs2.Route53Changes(), }, } @@ -1247,7 +1245,7 @@ func TestAWSsubmitChangesRetryOnError(t *testing.T) { require.False(t, containsRecordWithDNSName(records, "fail__edns_housekeeping.zone-1.ext-dns-test-2.teapot.zalan.do")) // next batch should contain "fail" and "success2", should succeed this time - cs3 := provider.newChanges(route53.ChangeActionCreate, []*endpoint.Endpoint{ep2, ep2txt, ep3}) + cs3 := provider.newChanges(route53types.ChangeActionCreate, []*endpoint.Endpoint{ep2, ep2txt, ep3}) require.NoError(t, provider.submitChanges(ctx, cs3, zones)) // verify all records are there @@ -1264,20 +1262,20 @@ func TestAWSBatchChangeSet(t *testing.T) { for i := 1; i <= defaultBatchChangeSize; i += 2 { cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("A"), + Type: route53types.RRTypeA, }, }, }) cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("TXT"), + Type: route53types.RRTypeTxt, }, }, }) @@ -1301,20 +1299,20 @@ func TestAWSBatchChangeSetExceeding(t *testing.T) { for i := 1; i <= testCount; i += 2 { cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("A"), + Type: route53types.RRTypeA, }, }, }, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("TXT"), + Type: route53types.RRTypeTxt, }, }, }, @@ -1339,20 +1337,20 @@ func TestAWSBatchChangeSetExceedingNameChange(t *testing.T) { for i := 1; i <= testCount; i += 2 { cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("A"), + Type: route53types.RRTypeA, }, }, }, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("TXT"), + Type: route53types.RRTypeTxt, }, }, }, @@ -1384,12 +1382,12 @@ func TestAWSBatchChangeSetExceedingBytesLimit(t *testing.T) { for i := 1; i <= testCount; i += groupSize { cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("A"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeA, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("1.2.3.4"), }, @@ -1400,12 +1398,12 @@ func TestAWSBatchChangeSetExceedingBytesLimit(t *testing.T) { sizeValues: 1, }, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("TXT"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeTxt, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("txt-record"), }, @@ -1443,12 +1441,12 @@ func TestAWSBatchChangeSetExceedingBytesLimitUpsert(t *testing.T) { for i := 1; i <= testCount; i += groupSize { cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionUpsert), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionUpsert, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("A"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeA, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("1.2.3.4"), }, @@ -1459,12 +1457,12 @@ func TestAWSBatchChangeSetExceedingBytesLimitUpsert(t *testing.T) { sizeValues: 1, }, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionUpsert), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionUpsert, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("TXT"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeTxt, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("txt-record"), }, @@ -1502,12 +1500,12 @@ func TestAWSBatchChangeSetExceedingValuesLimit(t *testing.T) { for i := 1; i <= testCount; i += groupSize { cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("A"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeA, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("1.2.3.4"), }, @@ -1518,12 +1516,12 @@ func TestAWSBatchChangeSetExceedingValuesLimit(t *testing.T) { sizeValues: 1, }, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("TXT"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeTxt, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("txt-record"), }, @@ -1561,12 +1559,12 @@ func TestAWSBatchChangeSetExceedingValuesLimitUpsert(t *testing.T) { for i := 1; i <= testCount; i += groupSize { cs = append(cs, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionUpsert), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionUpsert, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("A"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeA, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("1.2.3.4"), }, @@ -1577,12 +1575,12 @@ func TestAWSBatchChangeSetExceedingValuesLimitUpsert(t *testing.T) { sizeValues: 1, }, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionUpsert), - ResourceRecordSet: &route53.ResourceRecordSet{ + Change: route53types.Change{ + Action: route53types.ChangeActionUpsert, + ResourceRecordSet: &route53types.ResourceRecordSet{ Name: aws.String(fmt.Sprintf("host-%d", i)), - Type: aws.String("TXT"), - ResourceRecords: []*route53.ResourceRecord{ + Type: route53types.RRTypeTxt, + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("txt-record"), }, @@ -1608,7 +1606,7 @@ func validateEndpoints(t *testing.T, provider *AWSProvider, endpoints []*endpoin assert.True(t, testutils.SameEndpoints(normalized, expected), "actual and normalized endpoints don't match. %+v:%+v", endpoints, normalized) } -func validateAWSZones(t *testing.T, zones map[string]*route53.HostedZone, expected map[string]*route53.HostedZone) { +func validateAWSZones(t *testing.T, zones map[string]*route53types.HostedZone, expected map[string]*route53types.HostedZone) { require.Len(t, zones, len(expected)) for i, zone := range zones { @@ -1616,9 +1614,9 @@ func validateAWSZones(t *testing.T, zones map[string]*route53.HostedZone, expect } } -func validateAWSZone(t *testing.T, zone *route53.HostedZone, expected *route53.HostedZone) { - assert.Equal(t, aws.StringValue(expected.Id), aws.StringValue(zone.Id)) - assert.Equal(t, aws.StringValue(expected.Name), aws.StringValue(zone.Name)) +func validateAWSZone(t *testing.T, zone *route53types.HostedZone, expected *route53types.HostedZone) { + assert.Equal(t, *expected.Id, *zone.Id) + assert.Equal(t, *expected.Name, *zone.Name) } func validateAWSChangeRecords(t *testing.T, records Route53Changes, expected Route53Changes) { @@ -1630,9 +1628,9 @@ func validateAWSChangeRecords(t *testing.T, records Route53Changes, expected Rou } func validateAWSChangeRecord(t *testing.T, record *Route53Change, expected *Route53Change) { - assert.Equal(t, aws.StringValue(expected.Action), aws.StringValue(record.Action)) - assert.Equal(t, aws.StringValue(expected.ResourceRecordSet.Name), aws.StringValue(record.ResourceRecordSet.Name)) - assert.Equal(t, aws.StringValue(expected.ResourceRecordSet.Type), aws.StringValue(record.ResourceRecordSet.Type)) + assert.Equal(t, expected.Action, record.Action) + assert.Equal(t, *expected.ResourceRecordSet.Name, *record.ResourceRecordSet.Name) + assert.Equal(t, expected.ResourceRecordSet.Type, record.ResourceRecordSet.Type) } func TestAWSCreateRecordsWithCNAME(t *testing.T) { @@ -1650,12 +1648,12 @@ func TestAWSCreateRecordsWithCNAME(t *testing.T) { recordSets := listAWSRecords(t, provider.clients[defaultAWSProfile], "/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do.") - validateRecords(t, recordSets, []*route53.ResourceRecordSet{ + validateRecords(t, recordSets, []route53types.ResourceRecordSet{ { Name: aws.String("create-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(endpoint.RecordTypeCNAME), + Type: route53types.RRTypeCname, TTL: aws.Int64(300), - ResourceRecords: []*route53.ResourceRecord{ + ResourceRecords: []route53types.ResourceRecord{ { Value: aws.String("foo.example.org"), }, @@ -1714,33 +1712,33 @@ func TestAWSCreateRecordsWithALIAS(t *testing.T) { recordSets := listAWSRecords(t, provider.clients[defaultAWSProfile], "/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do.") - validateRecords(t, recordSets, []*route53.ResourceRecordSet{ + validateRecords(t, recordSets, []route53types.ResourceRecordSet{ { - AliasTarget: &route53.AliasTarget{ + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("foo.eu-central-1.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(evaluateTargetHealth), + EvaluateTargetHealth: evaluateTargetHealth, HostedZoneId: aws.String("Z215JYRZR1TBD5"), }, Name: aws.String("create-test.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, }, { - AliasTarget: &route53.AliasTarget{ + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("bar.eu-central-1.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(evaluateTargetHealth), + EvaluateTargetHealth: evaluateTargetHealth, HostedZoneId: aws.String("Z215JYRZR1TBD5"), }, Name: aws.String("create-test-dualstack.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeA), + Type: route53types.RRTypeA, }, { - AliasTarget: &route53.AliasTarget{ + AliasTarget: &route53types.AliasTarget{ DNSName: aws.String("bar.eu-central-1.elb.amazonaws.com."), - EvaluateTargetHealth: aws.Bool(evaluateTargetHealth), + EvaluateTargetHealth: evaluateTargetHealth, HostedZoneId: aws.String("Z215JYRZR1TBD5"), }, Name: aws.String("create-test-dualstack.zone-1.ext-dns-test-2.teapot.zalan.do."), - Type: aws.String(route53.RRTypeAaaa), + Type: route53types.RRTypeAaaa, }, }) } @@ -1803,15 +1801,15 @@ func TestAWSCanonicalHostedZone(t *testing.T) { func TestAWSSuitableZones(t *testing.T) { zones := map[string]*profiledZone{ // Public domain - "example-org": {profile: defaultAWSProfile, zone: &route53.HostedZone{Id: aws.String("example-org"), Name: aws.String("example.org.")}}, + "example-org": {profile: defaultAWSProfile, zone: &route53types.HostedZone{Id: aws.String("example-org"), Name: aws.String("example.org.")}}, // Public subdomain - "bar-example-org": {profile: defaultAWSProfile, zone: &route53.HostedZone{Id: aws.String("bar-example-org"), Name: aws.String("bar.example.org."), Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(false)}}}, + "bar-example-org": {profile: defaultAWSProfile, zone: &route53types.HostedZone{Id: aws.String("bar-example-org"), Name: aws.String("bar.example.org."), Config: &route53types.HostedZoneConfig{PrivateZone: false}}}, // Public subdomain - "longfoo-bar-example-org": {profile: defaultAWSProfile, zone: &route53.HostedZone{Id: aws.String("longfoo-bar-example-org"), Name: aws.String("longfoo.bar.example.org.")}}, + "longfoo-bar-example-org": {profile: defaultAWSProfile, zone: &route53types.HostedZone{Id: aws.String("longfoo-bar-example-org"), Name: aws.String("longfoo.bar.example.org.")}}, // Private domain - "example-org-private": {profile: defaultAWSProfile, zone: &route53.HostedZone{Id: aws.String("example-org-private"), Name: aws.String("example.org."), Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(true)}}}, + "example-org-private": {profile: defaultAWSProfile, zone: &route53types.HostedZone{Id: aws.String("example-org-private"), Name: aws.String("example.org."), Config: &route53types.HostedZoneConfig{PrivateZone: true}}}, // Private subdomain - "bar-example-org-private": {profile: defaultAWSProfile, zone: &route53.HostedZone{Id: aws.String("bar-example-org-private"), Name: aws.String("bar.example.org."), Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(true)}}}, + "bar-example-org-private": {profile: defaultAWSProfile, zone: &route53types.HostedZone{Id: aws.String("bar-example-org-private"), Name: aws.String("bar.example.org."), Config: &route53types.HostedZoneConfig{PrivateZone: true}}}, } for _, tc := range []struct { @@ -1840,19 +1838,20 @@ func TestAWSSuitableZones(t *testing.T) { } } -func createAWSZone(t *testing.T, provider *AWSProvider, zone *route53.HostedZone) { +func createAWSZone(t *testing.T, provider *AWSProvider, zone *route53types.HostedZone) { params := &route53.CreateHostedZoneInput{ CallerReference: aws.String("external-dns.alpha.kubernetes.io/test-zone"), Name: zone.Name, HostedZoneConfig: zone.Config, } - if _, err := provider.clients[defaultAWSProfile].CreateHostedZoneWithContext(context.Background(), params); err != nil { - require.EqualError(t, err, route53.ErrCodeHostedZoneAlreadyExists) + if _, err := provider.clients[defaultAWSProfile].CreateHostedZone(context.Background(), params); err != nil { + var hzExists *route53types.HostedZoneAlreadyExists + require.ErrorAs(t, err, &hzExists) } } -func setAWSRecords(t *testing.T, provider *AWSProvider, records []*route53.ResourceRecordSet) { +func setAWSRecords(t *testing.T, provider *AWSProvider, records []route53types.ResourceRecordSet) { dryRun := provider.dryRun provider.dryRun = false defer func() { @@ -1868,9 +1867,9 @@ func setAWSRecords(t *testing.T, provider *AWSProvider, records []*route53.Resou var changes Route53Changes for _, record := range records { changes = append(changes, &Route53Change{ - Change: route53.Change{ - Action: aws.String(route53.ChangeActionCreate), - ResourceRecordSet: record, + Change: route53types.Change{ + Action: route53types.ChangeActionCreate, + ResourceRecordSet: &record, }, }) } @@ -1884,24 +1883,21 @@ func setAWSRecords(t *testing.T, provider *AWSProvider, records []*route53.Resou require.NoError(t, err) } -func listAWSRecords(t *testing.T, client Route53API, zone string) []*route53.ResourceRecordSet { - recordSets := []*route53.ResourceRecordSet{} - require.NoError(t, client.ListResourceRecordSetsPagesWithContext(context.Background(), &route53.ListResourceRecordSetsInput{ +func listAWSRecords(t *testing.T, client Route53API, zone string) []route53types.ResourceRecordSet { + resp, err := client.ListResourceRecordSets(context.Background(), &route53.ListResourceRecordSetsInput{ HostedZoneId: aws.String(zone), - MaxItems: aws.String(route53PageSize), - }, func(resp *route53.ListResourceRecordSetsOutput, _ bool) bool { - recordSets = append(recordSets, resp.ResourceRecordSets...) - return true - })) + MaxItems: aws.Int32(route53PageSize), + }) + require.NoError(t, err) - return recordSets + return resp.ResourceRecordSets } -func newAWSProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneTypeFilter provider.ZoneTypeFilter, evaluateTargetHealth, dryRun bool, records []*route53.ResourceRecordSet) (*AWSProvider, *Route53APIStub) { +func newAWSProvider(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneTypeFilter provider.ZoneTypeFilter, evaluateTargetHealth, dryRun bool, records []route53types.ResourceRecordSet) (*AWSProvider, *Route53APIStub) { return newAWSProviderWithTagFilter(t, domainFilter, zoneIDFilter, zoneTypeFilter, provider.NewZoneTagFilter([]string{}), evaluateTargetHealth, dryRun, records) } -func newAWSProviderWithTagFilter(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneTypeFilter provider.ZoneTypeFilter, zoneTagFilter provider.ZoneTagFilter, evaluateTargetHealth, dryRun bool, records []*route53.ResourceRecordSet) (*AWSProvider, *Route53APIStub) { +func newAWSProviderWithTagFilter(t *testing.T, domainFilter endpoint.DomainFilter, zoneIDFilter provider.ZoneIDFilter, zoneTypeFilter provider.ZoneTypeFilter, zoneTagFilter provider.ZoneTagFilter, evaluateTargetHealth, dryRun bool, records []route53types.ResourceRecordSet) (*AWSProvider, *Route53APIStub) { client := NewRoute53APIStub(t) provider := &AWSProvider{ @@ -1920,29 +1916,29 @@ func newAWSProviderWithTagFilter(t *testing.T, domainFilter endpoint.DomainFilte failedChangesQueue: make(map[string]Route53Changes), } - createAWSZone(t, provider, &route53.HostedZone{ + createAWSZone(t, provider, &route53types.HostedZone{ Id: aws.String("/hostedzone/zone-1.ext-dns-test-2.teapot.zalan.do."), Name: aws.String("zone-1.ext-dns-test-2.teapot.zalan.do."), - Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(false)}, + Config: &route53types.HostedZoneConfig{PrivateZone: false}, }) - createAWSZone(t, provider, &route53.HostedZone{ + createAWSZone(t, provider, &route53types.HostedZone{ Id: aws.String("/hostedzone/zone-2.ext-dns-test-2.teapot.zalan.do."), Name: aws.String("zone-2.ext-dns-test-2.teapot.zalan.do."), - Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(false)}, + Config: &route53types.HostedZoneConfig{PrivateZone: false}, }) - createAWSZone(t, provider, &route53.HostedZone{ + createAWSZone(t, provider, &route53types.HostedZone{ Id: aws.String("/hostedzone/zone-3.ext-dns-test-2.teapot.zalan.do."), Name: aws.String("zone-3.ext-dns-test-2.teapot.zalan.do."), - Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(true)}, + Config: &route53types.HostedZoneConfig{PrivateZone: true}, }) // filtered out by domain filter - createAWSZone(t, provider, &route53.HostedZone{ + createAWSZone(t, provider, &route53types.HostedZone{ Id: aws.String("/hostedzone/zone-4.ext-dns-test-3.teapot.zalan.do."), Name: aws.String("zone-4.ext-dns-test-3.teapot.zalan.do."), - Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(false)}, + Config: &route53types.HostedZoneConfig{PrivateZone: false}, }) setupZoneTags(provider.clients[defaultAWSProfile].(*Route53APIStub)) @@ -1977,10 +1973,10 @@ func setupZoneTags(client *Route53APIStub) { }) } -func addZoneTags(tagMap map[string][]*route53.Tag, zoneID string, tags map[string]string) { - tagList := make([]*route53.Tag, 0, len(tags)) +func addZoneTags(tagMap map[string][]route53types.Tag, zoneID string, tags map[string]string) { + tagList := make([]route53types.Tag, 0, len(tags)) for k, v := range tags { - tagList = append(tagList, &route53.Tag{ + tagList = append(tagList, route53types.Tag{ Key: aws.String(k), Value: aws.String(v), }) @@ -1988,7 +1984,7 @@ func addZoneTags(tagMap map[string][]*route53.Tag, zoneID string, tags map[strin tagMap[zoneID] = tagList } -func validateRecords(t *testing.T, records []*route53.ResourceRecordSet, expected []*route53.ResourceRecordSet) { +func validateRecords(t *testing.T, records []route53types.ResourceRecordSet, expected []route53types.ResourceRecordSet) { assert.ElementsMatch(t, expected, records) } diff --git a/provider/aws/session.go b/provider/aws/session.go index 8de5d0f40..038963bb5 100644 --- a/provider/aws/session.go +++ b/provider/aws/session.go @@ -59,6 +59,30 @@ func CreateDefaultV2Config(cfg *externaldns.Config) awsv2.Config { return result } +func CreateV2Configs(cfg *externaldns.Config) map[string]awsv2.Config { + result := make(map[string]awsv2.Config) + if len(cfg.AWSProfiles) == 0 || (len(cfg.AWSProfiles) == 1 && cfg.AWSProfiles[0] == "") { + cfg := CreateDefaultV2Config(cfg) + result[defaultAWSProfile] = cfg + } else { + for _, profile := range cfg.AWSProfiles { + cfg, err := newV2Config( + AWSSessionConfig{ + AssumeRole: cfg.AWSAssumeRole, + AssumeRoleExternalID: cfg.AWSAssumeRoleExternalID, + APIRetries: cfg.AWSAPIRetries, + Profile: profile, + }, + ) + if err != nil { + logrus.Fatal(err) + } + result[profile] = cfg + } + } + return result +} + func CreateDefaultSession(cfg *externaldns.Config) *session.Session { result, err := newSession( AWSSessionConfig{ diff --git a/provider/zone_type_filter.go b/provider/zone_type_filter.go index 14ceac0e8..c595a4a9c 100644 --- a/provider/zone_type_filter.go +++ b/provider/zone_type_filter.go @@ -17,8 +17,7 @@ limitations under the License. package provider import ( - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53" + route53types "github.com/aws/aws-sdk-go-v2/service/route53/types" ) const ( @@ -52,7 +51,7 @@ func (f ZoneTypeFilter) Match(rawZoneType interface{}) bool { case zoneTypePrivate: return zoneType == zoneTypePrivate } - case *route53.HostedZone: + case route53types.HostedZone: // If the zone has no config we assume it's a public zone since the config's field // `PrivateZone` is false by default in go. if zoneType.Config == nil { @@ -61,9 +60,9 @@ func (f ZoneTypeFilter) Match(rawZoneType interface{}) bool { switch f.zoneType { case zoneTypePublic: - return !aws.BoolValue(zoneType.Config.PrivateZone) + return !zoneType.Config.PrivateZone case zoneTypePrivate: - return aws.BoolValue(zoneType.Config.PrivateZone) + return zoneType.Config.PrivateZone } } diff --git a/provider/zone_type_filter_test.go b/provider/zone_type_filter_test.go index 8677e6fb0..903d8e876 100644 --- a/provider/zone_type_filter_test.go +++ b/provider/zone_type_filter_test.go @@ -19,8 +19,7 @@ package provider import ( "testing" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/service/route53" + route53types "github.com/aws/aws-sdk-go-v2/service/route53/types" "github.com/stretchr/testify/assert" ) @@ -28,8 +27,8 @@ import ( func TestZoneTypeFilterMatch(t *testing.T) { publicZoneStr := "public" privateZoneStr := "private" - publicZoneAWS := &route53.HostedZone{Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(false)}} - privateZoneAWS := &route53.HostedZone{Config: &route53.HostedZoneConfig{PrivateZone: aws.Bool(true)}} + publicZoneAWS := route53types.HostedZone{Config: &route53types.HostedZoneConfig{PrivateZone: false}} + privateZoneAWS := route53types.HostedZone{Config: &route53types.HostedZoneConfig{PrivateZone: true}} for _, tc := range []struct { zoneTypeFilter string @@ -37,10 +36,10 @@ func TestZoneTypeFilterMatch(t *testing.T) { zones []interface{} }{ { - "", true, []interface{}{publicZoneStr, privateZoneStr, &route53.HostedZone{}}, + "", true, []interface{}{publicZoneStr, privateZoneStr, route53types.HostedZone{}}, }, { - "public", true, []interface{}{publicZoneStr, publicZoneAWS, &route53.HostedZone{}}, + "public", true, []interface{}{publicZoneStr, publicZoneAWS, route53types.HostedZone{}}, }, { "public", false, []interface{}{privateZoneStr, privateZoneAWS}, @@ -49,15 +48,17 @@ func TestZoneTypeFilterMatch(t *testing.T) { "private", true, []interface{}{privateZoneStr, privateZoneAWS}, }, { - "private", false, []interface{}{publicZoneStr, publicZoneAWS, &route53.HostedZone{}}, + "private", false, []interface{}{publicZoneStr, publicZoneAWS, route53types.HostedZone{}}, }, { "unknown", false, []interface{}{publicZoneStr}, }, } { - zoneTypeFilter := NewZoneTypeFilter(tc.zoneTypeFilter) - for _, zone := range tc.zones { - assert.Equal(t, tc.matches, zoneTypeFilter.Match(zone)) - } + t.Run(tc.zoneTypeFilter, func(t *testing.T) { + zoneTypeFilter := NewZoneTypeFilter(tc.zoneTypeFilter) + for _, zone := range tc.zones { + assert.Equal(t, tc.matches, zoneTypeFilter.Match(zone)) + } + }) } } From 0de6f8adcc780db9a1d5f98dc17ed308ad02f49d Mon Sep 17 00:00:00 2001 From: Michael Shen Date: Tue, 30 Jul 2024 00:09:28 -0400 Subject: [PATCH 75/78] Remove unused session logic after move to aws-sdk-go-v2 Signed-off-by: Michael Shen --- go.mod | 1 - go.sum | 2 - provider/aws/{session.go => config.go} | 90 ------------------- .../aws/{session_test.go => config_test.go} | 39 -------- 4 files changed, 132 deletions(-) rename provider/aws/{session.go => config.go} (57%) rename provider/aws/{session_test.go => config_test.go} (66%) diff --git a/go.mod b/go.mod index 23b9abe67..a4350b89c 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,6 @@ require ( github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 github.com/alecthomas/kingpin/v2 v2.4.0 github.com/aliyun/alibaba-cloud-sdk-go v1.63.0 - github.com/aws/aws-sdk-go v1.55.5 github.com/aws/aws-sdk-go-v2 v1.30.3 github.com/aws/aws-sdk-go-v2/config v1.27.27 github.com/aws/aws-sdk-go-v2/credentials v1.17.27 diff --git a/go.sum b/go.sum index ea9c32dcc..70d598d21 100644 --- a/go.sum +++ b/go.sum @@ -116,8 +116,6 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:W github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= -github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc= diff --git a/provider/aws/session.go b/provider/aws/config.go similarity index 57% rename from provider/aws/session.go rename to provider/aws/config.go index 038963bb5..bbfca9e97 100644 --- a/provider/aws/session.go +++ b/provider/aws/config.go @@ -27,10 +27,6 @@ import ( "github.com/aws/aws-sdk-go-v2/config" stscredsv2 "github.com/aws/aws-sdk-go-v2/credentials/stscreds" "github.com/aws/aws-sdk-go-v2/service/sts" - "github.com/aws/aws-sdk-go/aws" - "github.com/aws/aws-sdk-go/aws/credentials/stscreds" - "github.com/aws/aws-sdk-go/aws/request" - "github.com/aws/aws-sdk-go/aws/session" "github.com/linki/instrumented_http" "github.com/sirupsen/logrus" @@ -83,92 +79,6 @@ func CreateV2Configs(cfg *externaldns.Config) map[string]awsv2.Config { return result } -func CreateDefaultSession(cfg *externaldns.Config) *session.Session { - result, err := newSession( - AWSSessionConfig{ - AssumeRole: cfg.AWSAssumeRole, - AssumeRoleExternalID: cfg.AWSAssumeRoleExternalID, - APIRetries: cfg.AWSAPIRetries, - }, - ) - if err != nil { - logrus.Fatal(err) - } - return result -} - -func CreateSessions(cfg *externaldns.Config) map[string]*session.Session { - result := make(map[string]*session.Session) - - if len(cfg.AWSProfiles) == 0 || (len(cfg.AWSProfiles) == 1 && cfg.AWSProfiles[0] == "") { - session, err := newSession( - AWSSessionConfig{ - AssumeRole: cfg.AWSAssumeRole, - AssumeRoleExternalID: cfg.AWSAssumeRoleExternalID, - APIRetries: cfg.AWSAPIRetries, - }, - ) - if err != nil { - logrus.Fatal(err) - } - result[defaultAWSProfile] = session - } else { - for _, profile := range cfg.AWSProfiles { - session, err := newSession( - AWSSessionConfig{ - AssumeRole: cfg.AWSAssumeRole, - AssumeRoleExternalID: cfg.AWSAssumeRoleExternalID, - APIRetries: cfg.AWSAPIRetries, - Profile: profile, - }, - ) - if err != nil { - logrus.Fatal(err) - } - result[profile] = session - } - } - return result -} - -func newSession(awsConfig AWSSessionConfig) (*session.Session, error) { - config := aws.NewConfig().WithMaxRetries(awsConfig.APIRetries) - - config.WithHTTPClient( - instrumented_http.NewClient(config.HTTPClient, &instrumented_http.Callbacks{ - PathProcessor: func(path string) string { - parts := strings.Split(path, "/") - return parts[len(parts)-1] - }, - }), - ) - - session, err := session.NewSessionWithOptions(session.Options{ - Config: *config, - SharedConfigState: session.SharedConfigEnable, - Profile: awsConfig.Profile, - }) - if err != nil { - return nil, fmt.Errorf("instantiating AWS session: %w", err) - } - - if awsConfig.AssumeRole != "" { - if awsConfig.AssumeRoleExternalID != "" { - logrus.Infof("Assuming role: %s with external id %s", awsConfig.AssumeRole, awsConfig.AssumeRoleExternalID) - session.Config.WithCredentials(stscreds.NewCredentials(session, awsConfig.AssumeRole, func(p *stscreds.AssumeRoleProvider) { - p.ExternalID = &awsConfig.AssumeRoleExternalID - })) - } else { - logrus.Infof("Assuming role: %s", awsConfig.AssumeRole) - session.Config.WithCredentials(stscreds.NewCredentials(session, awsConfig.AssumeRole)) - } - } - - session.Handlers.Build.PushBack(request.MakeAddToUserAgentHandler("ExternalDNS", externaldns.Version)) - - return session, nil -} - func newV2Config(awsConfig AWSSessionConfig) (awsv2.Config, error) { defaultOpts := []func(*config.LoadOptions) error{ config.WithRetryer(func() awsv2.Retryer { diff --git a/provider/aws/session_test.go b/provider/aws/config_test.go similarity index 66% rename from provider/aws/session_test.go rename to provider/aws/config_test.go index b73485c03..00b3b46aa 100644 --- a/provider/aws/session_test.go +++ b/provider/aws/config_test.go @@ -25,45 +25,6 @@ import ( "github.com/stretchr/testify/require" ) -func Test_newSession(t *testing.T) { - t.Run("should use profile from credentials file", func(t *testing.T) { - // setup - credsFile, err := prepareCredentialsFile(t) - defer os.Remove(credsFile.Name()) - require.NoError(t, err) - os.Setenv("AWS_SHARED_CREDENTIALS_FILE", credsFile.Name()) - defer os.Unsetenv("AWS_SHARED_CREDENTIALS_FILE") - - // when - s, err := newSession(AWSSessionConfig{Profile: "profile2"}) - require.NoError(t, err) - creds, err := s.Config.Credentials.Get() - - // then - assert.NoError(t, err) - assert.Equal(t, "AKID2345", creds.AccessKeyID) - assert.Equal(t, "SECRET2", creds.SecretAccessKey) - }) - - t.Run("should respect env variables without profile", func(t *testing.T) { - // setup - os.Setenv("AWS_ACCESS_KEY_ID", "AKIAIOSFODNN7EXAMPLE") - os.Setenv("AWS_SECRET_ACCESS_KEY", "topsecret") - defer os.Unsetenv("AWS_ACCESS_KEY_ID") - defer os.Unsetenv("AWS_SECRET_ACCESS_KEY") - - // when - s, err := newSession(AWSSessionConfig{}) - require.NoError(t, err) - creds, err := s.Config.Credentials.Get() - - // then - assert.NoError(t, err) - assert.Equal(t, "AKIAIOSFODNN7EXAMPLE", creds.AccessKeyID) - assert.Equal(t, "topsecret", creds.SecretAccessKey) - }) -} - func Test_newV2Config(t *testing.T) { t.Run("should use profile from credentials file", func(t *testing.T) { // setup From ae02543c836b5e2b835d50a44d19047992faaa8f Mon Sep 17 00:00:00 2001 From: Kim Sondrup Date: Fri, 16 Aug 2024 14:08:36 +0200 Subject: [PATCH 76/78] fix(chart): Don't use unauthenticated webhook port for health probe --- charts/external-dns/CHANGELOG.md | 1 + charts/external-dns/README.md | 2 +- charts/external-dns/templates/deployment.yaml | 3 --- charts/external-dns/templates/service.yaml | 6 +++--- charts/external-dns/templates/servicemonitor.yaml | 2 +- charts/external-dns/values.yaml | 4 ++-- 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/charts/external-dns/CHANGELOG.md b/charts/external-dns/CHANGELOG.md index d477a55d0..a7c530843 100644 --- a/charts/external-dns/CHANGELOG.md +++ b/charts/external-dns/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed `provider.webhook.resources` behavior to correctly leverage resource limits ([#4560](https://github.com/kubernetes-sigs/external-dns/pull/4560)) - Fixed `provider.webhook.imagePullPolicy` behavior to correctly leverage pull policy ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ - Add correct webhook metric port to `Service` and `ServiceMonitor` ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ +- No longer require the unauthenticated webhook provider port to be exposed for health probes ([#4691](https://github.com/kubernetes-sigs/external-dns/pull/4691)) _@kimsondrup_ _@hatrx_ ## [v1.14.5] - 2023-06-10 diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 6af6463ad..38065fd1a 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -134,7 +134,7 @@ If `namespaced` is set to `true`, please ensure that `sources` my only contains | provider.webhook.readinessProbe | object | See _values.yaml_ | [Readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/) configuration for the `webhook` container. | | provider.webhook.resources | object | `{}` | [Resources](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/) for the `webhook` container. | | provider.webhook.securityContext | object | See _values.yaml_ | [Pod security context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) for the `webhook` container. | -| provider.webhook.service.metricsPort | int | `8080` | Webhook metrics port for the service. | +| provider.webhook.service.port | int | `8080` | Webhook exposed HTTP port for the service. | | provider.webhook.serviceMonitor | object | See _values.yaml_ | Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. | | rbac.additionalPermissions | list | `[]` | Additional rules to add to the `ClusterRole`. | | rbac.create | bool | `true` | If `true`, create a `ClusterRole` & `ClusterRoleBinding` with access to the Kubernetes API. | diff --git a/charts/external-dns/templates/deployment.yaml b/charts/external-dns/templates/deployment.yaml index d127d8d37..02e9b397a 100644 --- a/charts/external-dns/templates/deployment.yaml +++ b/charts/external-dns/templates/deployment.yaml @@ -158,9 +158,6 @@ spec: {{- end }} ports: - name: http-webhook - protocol: TCP - containerPort: 8888 - - name: http-wh-metrics protocol: TCP containerPort: 8080 livenessProbe: diff --git a/charts/external-dns/templates/service.yaml b/charts/external-dns/templates/service.yaml index dada90bfd..e55e2a368 100644 --- a/charts/external-dns/templates/service.yaml +++ b/charts/external-dns/templates/service.yaml @@ -28,9 +28,9 @@ spec: protocol: TCP {{- if eq $providerName "webhook" }} {{- with .Values.provider.webhook.service }} - - name: http-wh-metrics - port: {{ .metricsPort }} - targetPort: http-wh-metrics + - name: http-webhook + port: {{ .port }} + targetPort: http-webhook protocol: TCP {{- end }} {{- end }} diff --git a/charts/external-dns/templates/servicemonitor.yaml b/charts/external-dns/templates/servicemonitor.yaml index 98fbcc008..004756c7b 100644 --- a/charts/external-dns/templates/servicemonitor.yaml +++ b/charts/external-dns/templates/servicemonitor.yaml @@ -51,7 +51,7 @@ spec: {{- end }} {{- if eq $providerName "webhook" }} {{- with .Values.provider.webhook.serviceMonitor }} - - port: http-wh-metrics + - port: http-webhook path: /metrics {{- with .interval }} interval: {{ . }} diff --git a/charts/external-dns/values.yaml b/charts/external-dns/values.yaml index a2f0d0785..9d7dea1bb 100644 --- a/charts/external-dns/values.yaml +++ b/charts/external-dns/values.yaml @@ -270,8 +270,8 @@ provider: failureThreshold: 6 successThreshold: 1 service: - # -- Webhook metrics port for the service. - metricsPort: 8080 + # -- Webhook exposed HTTP port for the service. + port: 8080 # -- Optional [Service Monitor](https://prometheus-operator.dev/docs/operator/design/#servicemonitor) configuration for the `webhook` container. # @default -- See _values.yaml_ serviceMonitor: From a9fc7d248f813a5595d206dc6e7c44675ff430a9 Mon Sep 17 00:00:00 2001 From: Steve Hipwell Date: Tue, 10 Sep 2024 21:49:30 +0100 Subject: [PATCH 77/78] feat(chart): Updated image to v0.15.0 Signed-off-by: Steve Hipwell --- charts/external-dns/CHANGELOG.md | 15 +++++++++++---- charts/external-dns/Chart.yaml | 22 ++++++++++------------ charts/external-dns/README.md | 4 ++-- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/charts/external-dns/CHANGELOG.md b/charts/external-dns/CHANGELOG.md index a7c530843..02b467e1d 100644 --- a/charts/external-dns/CHANGELOG.md +++ b/charts/external-dns/CHANGELOG.md @@ -18,12 +18,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [UNRELEASED] +## [v1.15.0] - 2023-09-10 + +### Changed + +- Updated _ExternalDNS_ OCI image version to [v0.15.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.15.0). ([#xxxx](https://github.com/kubernetes-sigs/external-dns/pull/xxxx)) _@stevehipwell_ + ### Fixed -- Fixed `provider.webhook.resources` behavior to correctly leverage resource limits ([#4560](https://github.com/kubernetes-sigs/external-dns/pull/4560)) -- Fixed `provider.webhook.imagePullPolicy` behavior to correctly leverage pull policy ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ -- Add correct webhook metric port to `Service` and `ServiceMonitor` ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ -- No longer require the unauthenticated webhook provider port to be exposed for health probes ([#4691](https://github.com/kubernetes-sigs/external-dns/pull/4691)) _@kimsondrup_ _@hatrx_ +- Fixed `provider.webhook.resources` behavior to correctly leverage resource limits. ([#4560](https://github.com/kubernetes-sigs/external-dns/pull/4560)) _@crutonjohn_ +- Fixed `provider.webhook.imagePullPolicy` behavior to correctly leverage pull policy. ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ +- Fixed to add correct webhook metric port to `Service` and `ServiceMonitor`. ([#4643](https://github.com/kubernetes-sigs/external-dns/pull/4643)) _@kimsondrup_ +- Fixed to no longer require the unauthenticated webhook provider port to be exposed for health probes. ([#4691](https://github.com/kubernetes-sigs/external-dns/pull/4691)) _@kimsondrup_ & _@hatrx_ ## [v1.14.5] - 2023-06-10 @@ -194,6 +200,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 RELEASE LINKS --> [UNRELEASED]: https://github.com/kubernetes-sigs/external-dns/tree/master/charts/external-dns +[v1.15.0]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.15.0 [v1.14.5]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.5 [v1.14.4]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.4 [v1.14.3]: https://github.com/kubernetes-sigs/external-dns/releases/tag/external-dns-helm-chart-1.14.3 diff --git a/charts/external-dns/Chart.yaml b/charts/external-dns/Chart.yaml index 51f284c8e..ebde66ee3 100644 --- a/charts/external-dns/Chart.yaml +++ b/charts/external-dns/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: external-dns description: ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers. type: application -version: 1.14.5 -appVersion: 0.14.2 +version: 1.15.0 +appVersion: 0.15.0 keywords: - kubernetes - externaldns @@ -20,15 +20,13 @@ maintainers: email: steve.hipwell@gmail.com annotations: artifacthub.io/changes: | - - kind: added - description: "Added support for `extraContainers` argument." - - kind: added - description: "Added support for setting `excludeDomains` argument." - kind: changed - description: "Updated _ExternalDNS_ OCI image version to [v0.14.2](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.14.2)." - - kind: changed - description: "Updated `DNSEndpoint` CRD." - - kind: changed - description: "Changed the implementation for `revisionHistoryLimit` to be more generic." + description: "Updated _ExternalDNS_ OCI image version to [v0.15.0](https://github.com/kubernetes-sigs/external-dns/releases/tag/v0.15.0)." - kind: fixed - description: "Fixed the `ServiceMonitor` job name to correctly use the instance label." + description: "Fixed `provider.webhook.resources` behavior to correctly leverage resource limits." + - kind: fixed + description: "Fixed `provider.webhook.imagePullPolicy` behavior to correctly leverage pull policy." + - kind: fixed + description: "Fixed to add correct webhook metric port to `Service` and `ServiceMonitor`." + - kind: fixed + description: "Fixed to no longer require the unauthenticated webhook provider port to be exposed for health probes." diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 01791c4a1..9b21ecdec 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -1,6 +1,6 @@ # external-dns -![Version: 1.14.5](https://img.shields.io/badge/Version-1.14.5-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.14.2](https://img.shields.io/badge/AppVersion-0.14.2-informational?style=flat-square) +![Version: 1.15.0](https://img.shields.io/badge/Version-1.15.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 0.15.0](https://img.shields.io/badge/AppVersion-0.15.0-informational?style=flat-square) ExternalDNS synchronizes exposed Kubernetes Services and Ingresses with DNS providers. @@ -27,7 +27,7 @@ helm repo add external-dns https://kubernetes-sigs.github.io/external-dns/ After you've installed the repo you can install the chart. ```shell -helm upgrade --install external-dns external-dns/external-dns --version 1.14.5 +helm upgrade --install external-dns external-dns/external-dns --version 1.15.0 ``` ## Providers From 08c9329430bf21472fc9e8acba7b81df863c4e54 Mon Sep 17 00:00:00 2001 From: PeterVanek <77848828+PeterVanek@users.noreply.github.com> Date: Fri, 13 Sep 2024 12:09:21 +0200 Subject: [PATCH 78/78] Update README.md with Efficient IP Provider Added doc for Efficient IP external-dns webhook plugin --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2aea7367a..9260fa433 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ Known providers using webhooks: | Adguard Home Provider | https://github.com/muhlba91/external-dns-provider-adguard | | Anexia | https://github.com/ProbstenHias/external-dns-anexia-webhook | | Bizfly Cloud | https://github.com/bizflycloud/external-dns-bizflycloud-webhook | +| Efficient IP | https://github.com/EfficientIP-Labs/external-dns-efficientip-webhook | | Gcore | https://github.com/G-Core/external-dns-gcore-webhook | | GleSYS | https://github.com/glesys/external-dns-glesys | | Hetzner | https://github.com/mconfalonieri/external-dns-hetzner-webhook |