diff --git a/Gopkg.lock b/Gopkg.lock index f04e83c25ab..e93ed9c2288 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -33,7 +33,7 @@ version = "v2.0" [[projects]] - digest = "1:35b6e283beb90a7f3554057fe98780224a594bf73b15be705cfad9db8ad43a58" + digest = "1:411db86425d0d68cbb9bb92f28b62ccfb8d6351d9ed94676a8c424d3ed4af808" name = "github.com/aws/aws-sdk-go" packages = [ "aws", @@ -71,6 +71,7 @@ "service/autoscaling", "service/ec2", "service/elb", + "service/elbv2", "service/iam", "service/route53", "service/s3", @@ -258,11 +259,11 @@ revision = "9520e82c474b0a04dd04f8a40959027271bab992" [[projects]] - digest = "1:52cea75b92e043814e4aad64e3372d71c8e8535cb51fcc39240f3e84ac8109cd" + digest = "1:14f70ac5f181ccb012cddc7c72ac28709497155340b2fad822bd15d9a8722d93" name = "github.com/openshift/hive" packages = ["contrib/pkg/awstagdeprovision"] pruneopts = "NUT" - revision = "ef6beb7b14eddb889a97cffc9d1a1d997da47ca7" + revision = "8c7844d9b61c35f53bab561f5ce4d879fef86ec6" [[projects]] digest = "1:93b1d84c5fa6d1ea52f4114c37714cddd84d5b78f151b62bb101128dd51399bf" @@ -500,7 +501,6 @@ "github.com/apparentlymart/go-cidr/cidr", "github.com/awalterschulze/gographviz", "github.com/aws/aws-sdk-go/aws", - "github.com/aws/aws-sdk-go/aws/credentials", "github.com/aws/aws-sdk-go/aws/session", "github.com/aws/aws-sdk-go/service/ec2", "github.com/coreos/ignition/config/util", diff --git a/Gopkg.toml b/Gopkg.toml index 60d67f6b726..966a6aba6af 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -59,4 +59,4 @@ ignored = ["github.com/openshift/installer/tests*"] [[constraint]] name = "github.com/openshift/hive" - revision = "ef6beb7b14eddb889a97cffc9d1a1d997da47ca7" + revision = "8c7844d9b61c35f53bab561f5ce4d879fef86ec6" diff --git a/data/data/aws/bootstrap/main.tf b/data/data/aws/bootstrap/main.tf index 1dec9bc5949..b4229cc246c 100644 --- a/data/data/aws/bootstrap/main.tf +++ b/data/data/aws/bootstrap/main.tf @@ -120,8 +120,16 @@ resource "aws_instance" "bootstrap" { volume_tags = "${var.tags}" } -resource "aws_elb_attachment" "bootstrap" { - count = "${var.elbs_length}" - elb = "${var.elbs[count.index]}" - instance = "${aws_instance.bootstrap.id}" +resource "aws_lb_target_group_attachment" "public" { + count = "${var.public_target_group_arns_length}" + + target_group_arn = "${var.public_target_group_arns[count.index]}" + target_id = "${aws_instance.bootstrap.private_ip}" +} + +resource "aws_lb_target_group_attachment" "private" { + count = "${var.private_target_group_arns_length}" + + target_group_arn = "${var.private_target_group_arns[count.index]}" + target_id = "${aws_instance.bootstrap.private_ip}" } diff --git a/data/data/aws/bootstrap/variables.tf b/data/data/aws/bootstrap/variables.tf index f775eeb2313..1125917e4c2 100644 --- a/data/data/aws/bootstrap/variables.tf +++ b/data/data/aws/bootstrap/variables.tf @@ -18,16 +18,6 @@ variable "cluster_name" { description = "The name of the cluster." } -variable "elbs" { - type = "list" - default = [] - description = "Elastic load balancer IDs to attach to the bootstrap node." -} - -variable "elbs_length" { - description = "The length of the 'elbs' variable, to work around https://github.com/hashicorp/terraform/issues/12570." -} - variable "iam_role" { type = "string" default = "" @@ -45,6 +35,26 @@ variable "instance_type" { description = "The EC2 instance type for the bootstrap node." } +variable "private_target_group_arns" { + type = "list" + default = [] + description = "The list of target group ARNs for the private load balancer." +} + +variable "private_target_group_arns_length" { + description = "The length of the 'private_target_group_arns' variable, to work around https://github.com/hashicorp/terraform/issues/12570." +} + +variable "public_target_group_arns" { + type = "list" + default = [] + description = "The list of target group ARNs for the public load balancer." +} + +variable "public_target_group_arns_length" { + description = "The length of the 'public_target_group_arns' variable, to work around https://github.com/hashicorp/terraform/issues/12570." +} + variable "subnet_id" { type = "string" description = "The subnet ID for the bootstrap node." diff --git a/data/data/aws/main.tf b/data/data/aws/main.tf index d580ab3a3c7..be214331bdd 100644 --- a/data/data/aws/main.tf +++ b/data/data/aws/main.tf @@ -6,7 +6,7 @@ locals { provider "aws" { region = "${var.tectonic_aws_region}" - version = "1.8.0" + version = "1.39.0" assume_role { role_arn = "${var.tectonic_aws_installer_role == "" ? "" : "${var.tectonic_aws_installer_role}"}" @@ -17,16 +17,18 @@ provider "aws" { module "bootstrap" { source = "./bootstrap" - ami = "${var.tectonic_aws_ec2_ami_override}" - associate_public_ip_address = "${var.tectonic_aws_endpoints != "private"}" - bucket = "${aws_s3_bucket.bootstrap.id}" - cluster_name = "${var.tectonic_cluster_name}" - elbs = "${module.vpc.aws_lbs}" - elbs_length = "${module.vpc.aws_lbs_length}" - iam_role = "${var.tectonic_aws_master_iam_role_name}" - ignition = "${var.ignition_bootstrap}" - subnet_id = "${module.vpc.master_subnet_ids[0]}" - vpc_security_group_ids = ["${concat(var.tectonic_aws_master_extra_sg_ids, list(module.vpc.master_sg_id))}"] + ami = "${var.tectonic_aws_ec2_ami_override}" + associate_public_ip_address = "${var.tectonic_aws_endpoints != "private"}" + bucket = "${aws_s3_bucket.bootstrap.id}" + cluster_name = "${var.tectonic_cluster_name}" + public_target_group_arns = "${module.vpc.aws_lb_public_target_group_arns}" + public_target_group_arns_length = "${module.vpc.aws_lb_public_target_group_arns_length}" + private_target_group_arns = "${module.vpc.aws_lb_private_target_group_arns}" + private_target_group_arns_length = "${module.vpc.aws_lb_private_target_group_arns_length}" + iam_role = "${var.tectonic_aws_master_iam_role_name}" + ignition = "${var.ignition_bootstrap}" + subnet_id = "${module.vpc.master_subnet_ids[0]}" + vpc_security_group_ids = ["${concat(var.tectonic_aws_master_extra_sg_ids, list(module.vpc.master_sg_id))}"] tags = "${merge(map( "Name", "${var.tectonic_cluster_name}-bootstrap", @@ -37,25 +39,26 @@ module "bootstrap" { module "masters" { source = "./master" - elb_api_internal_id = "${module.vpc.aws_elb_api_internal_id}" - elb_api_external_id = "${module.vpc.aws_elb_api_external_id}" - elb_console_id = "${module.vpc.aws_elb_console_id}" - base_domain = "${var.tectonic_base_domain}" - cluster_id = "${var.tectonic_cluster_id}" - cluster_name = "${var.tectonic_cluster_name}" - ec2_type = "${var.tectonic_aws_master_ec2_type}" - extra_tags = "${var.tectonic_aws_extra_tags}" - instance_count = "${var.tectonic_master_count}" - master_iam_role = "${var.tectonic_aws_master_iam_role_name}" - master_sg_ids = "${concat(var.tectonic_aws_master_extra_sg_ids, list(module.vpc.master_sg_id))}" - private_endpoints = "${local.private_endpoints}" - public_endpoints = "${local.public_endpoints}" - root_volume_iops = "${var.tectonic_aws_master_root_volume_iops}" - root_volume_size = "${var.tectonic_aws_master_root_volume_size}" - root_volume_type = "${var.tectonic_aws_master_root_volume_type}" - subnet_ids = "${module.vpc.master_subnet_ids}" - ec2_ami = "${var.tectonic_aws_ec2_ami_override}" - user_data_ign = "${var.ignition_master}" + public_target_group_arns = "${module.vpc.aws_lb_public_target_group_arns}" + public_target_group_arns_length = "${module.vpc.aws_lb_public_target_group_arns_length}" + private_target_group_arns = "${module.vpc.aws_lb_private_target_group_arns}" + private_target_group_arns_length = "${module.vpc.aws_lb_private_target_group_arns_length}" + base_domain = "${var.tectonic_base_domain}" + cluster_id = "${var.tectonic_cluster_id}" + cluster_name = "${var.tectonic_cluster_name}" + ec2_type = "${var.tectonic_aws_master_ec2_type}" + extra_tags = "${var.tectonic_aws_extra_tags}" + instance_count = "${var.tectonic_master_count}" + master_iam_role = "${var.tectonic_aws_master_iam_role_name}" + master_sg_ids = "${concat(var.tectonic_aws_master_extra_sg_ids, list(module.vpc.master_sg_id))}" + private_endpoints = "${local.private_endpoints}" + public_endpoints = "${local.public_endpoints}" + root_volume_iops = "${var.tectonic_aws_master_root_volume_iops}" + root_volume_size = "${var.tectonic_aws_master_root_volume_size}" + root_volume_type = "${var.tectonic_aws_master_root_volume_type}" + subnet_ids = "${module.vpc.master_subnet_ids}" + ec2_ami = "${var.tectonic_aws_ec2_ami_override}" + user_data_ign = "${var.ignition_master}" } module "iam" { @@ -68,23 +71,19 @@ module "iam" { module "dns" { source = "./route53" - api_external_elb_dns_name = "${module.vpc.aws_elb_api_external_dns_name}" - api_external_elb_zone_id = "${module.vpc.aws_elb_api_external_zone_id}" - api_internal_elb_dns_name = "${module.vpc.aws_elb_api_internal_dns_name}" - api_internal_elb_zone_id = "${module.vpc.aws_elb_api_internal_zone_id}" - api_ip_addresses = "${module.vpc.aws_lbs}" - base_domain = "${var.tectonic_base_domain}" - cluster_id = "${var.tectonic_cluster_id}" - cluster_name = "${var.tectonic_cluster_name}" - console_elb_dns_name = "${module.vpc.aws_console_dns_name}" - console_elb_zone_id = "${module.vpc.aws_elb_console_zone_id}" - elb_alias_enabled = true - master_count = "${var.tectonic_master_count}" - private_zone_id = "${local.private_zone_id}" - external_vpc_id = "${module.vpc.vpc_id}" - extra_tags = "${var.tectonic_aws_extra_tags}" - private_endpoints = "${local.private_endpoints}" - public_endpoints = "${local.public_endpoints}" + api_external_lb_dns_name = "${module.vpc.aws_lb_api_external_dns_name}" + api_external_lb_zone_id = "${module.vpc.aws_lb_api_external_zone_id}" + api_internal_lb_dns_name = "${module.vpc.aws_lb_api_internal_dns_name}" + api_internal_lb_zone_id = "${module.vpc.aws_lb_api_internal_zone_id}" + base_domain = "${var.tectonic_base_domain}" + cluster_name = "${var.tectonic_cluster_name}" + elb_alias_enabled = true + master_count = "${var.tectonic_master_count}" + private_zone_id = "${local.private_zone_id}" + external_vpc_id = "${module.vpc.vpc_id}" + extra_tags = "${var.tectonic_aws_extra_tags}" + private_endpoints = "${local.private_endpoints}" + public_endpoints = "${local.public_endpoints}" } module "vpc" { diff --git a/data/data/aws/master/main.tf b/data/data/aws/master/main.tf index 0ba8110b07c..d3ccd25b96c 100644 --- a/data/data/aws/master/main.tf +++ b/data/data/aws/master/main.tf @@ -113,20 +113,16 @@ resource "aws_instance" "master" { ), var.extra_tags)}" } -resource "aws_elb_attachment" "masters_internal" { - count = "${var.private_endpoints ? var.instance_count : 0}" - elb = "${var.elb_api_internal_id}" - instance = "${aws_instance.master.*.id[count.index]}" -} +resource "aws_lb_target_group_attachment" "public" { + count = "${var.public_endpoints ? var.instance_count * var.public_target_group_arns_length : 0}" -resource "aws_elb_attachment" "masters_external" { - count = "${var.public_endpoints ? var.instance_count : 0}" - elb = "${var.elb_api_external_id}" - instance = "${aws_instance.master.*.id[count.index]}" + target_group_arn = "${var.public_target_group_arns[count.index % var.public_target_group_arns_length]}" + target_id = "${aws_instance.master.*.private_ip[count.index / var.public_target_group_arns_length]}" } -resource "aws_elb_attachment" "masters_console" { - count = "${var.instance_count}" - elb = "${var.elb_console_id}" - instance = "${aws_instance.master.*.id[count.index]}" +resource "aws_lb_target_group_attachment" "private" { + count = "${var.private_endpoints ? var.instance_count * var.private_target_group_arns_length : 0}" + + target_group_arn = "${var.private_target_group_arns[count.index % var.private_target_group_arns_length]}" + target_id = "${aws_instance.master.*.private_ip[count.index / var.private_target_group_arns_length]}" } diff --git a/data/data/aws/master/variables.tf b/data/data/aws/master/variables.tf index d2a17aacbbd..4d3f6ef666e 100644 --- a/data/data/aws/master/variables.tf +++ b/data/data/aws/master/variables.tf @@ -46,21 +46,29 @@ variable "private_endpoints" { default = true } +variable "private_target_group_arns" { + type = "list" + default = [] + description = "The list of target group ARNs for the private load balancer." +} + +variable "private_target_group_arns_length" { + description = "The length of the 'private_target_group_arns' variable, to work around https://github.com/hashicorp/terraform/issues/12570." +} + variable "public_endpoints" { description = "If set to true, public-facing ingress resources are created." default = true } -variable "elb_api_internal_id" { - type = "string" -} - -variable "elb_api_external_id" { - type = "string" +variable "public_target_group_arns" { + type = "list" + default = [] + description = "The list of target group ARNs for the public load balancer." } -variable "elb_console_id" { - type = "string" +variable "public_target_group_arns_length" { + description = "The length of the 'public_target_group_arns' variable, to work around https://github.com/hashicorp/terraform/issues/12570." } variable "root_volume_iops" { diff --git a/data/data/aws/route53/outputs.tf b/data/data/aws/route53/outputs.tf deleted file mode 100644 index 13d7fc887b3..00000000000 --- a/data/data/aws/route53/outputs.tf +++ /dev/null @@ -1,35 +0,0 @@ -output "worker_nodes" { - value = "${aws_route53_record.worker_nodes.*.fqdn}" -} - -output "worker_nodes_public" { - value = "${aws_route53_record.worker_nodes_public.*.fqdn}" -} - -output "master_nodes" { - value = "${aws_route53_record.master_nodes.*.fqdn}" -} - -output "ingress_external_fqdn" { - value = "${element(concat(aws_route53_record.tectonic_ingress_public.*.name, list("")), 0)}" -} - -output "ingress_internal_fqdn" { - value = "${element(concat(aws_route53_record.tectonic_ingress_private.*.name, list("")), 0)}" -} - -output "routes_external_fqdn" { - value = "${element(concat(aws_route53_record.routes_ingress_public.*.name, list("")), 0)}" -} - -output "routes_internal_fqdn" { - value = "${element(concat(aws_route53_record.routes_ingress_private.*.name, list("")), 0)}" -} - -output "api_external_fqdn" { - value = "${element(concat(aws_route53_record.tectonic_api_external.*.name, list("")), 0)}" -} - -output "api_internal_fqdn" { - value = "${element(concat(aws_route53_record.tectonic_api_internal.*.name, list("")), 0)}" -} diff --git a/data/data/aws/route53/tectonic.tf b/data/data/aws/route53/tectonic.tf index 78772f46331..dec20b23af1 100644 --- a/data/data/aws/route53/tectonic.tf +++ b/data/data/aws/route53/tectonic.tf @@ -10,103 +10,33 @@ data "aws_route53_zone" "tectonic" { locals { public_zone_id = "${join("", data.aws_route53_zone.tectonic.*.zone_id)}" - zone_id = "${var.private_endpoints ? - var.private_zone_id : - local.public_zone_id}" -} - -resource "aws_route53_record" "tectonic_api" { - count = "${var.elb_alias_enabled ? 0 : 1}" - zone_id = "${local.public_zone_id}" - name = "${var.cluster_name}-k8s" - type = "A" - ttl = "60" - records = ["${var.api_ip_addresses}"] + zone_id = "${var.private_endpoints ? var.private_zone_id : local.public_zone_id}" } resource "aws_route53_record" "tectonic_api_external" { - count = "${var.elb_alias_enabled ? local.public_endpoints_count : 0}" + count = "${var.elb_alias_enabled ? local.public_endpoints_count : 0}" + zone_id = "${local.public_zone_id}" name = "${var.cluster_name}-api.${var.base_domain}" type = "A" alias { - name = "${var.api_external_elb_dns_name}" - zone_id = "${var.api_external_elb_zone_id}" + name = "${var.api_external_lb_dns_name}" + zone_id = "${var.api_external_lb_zone_id}" evaluate_target_health = true } } resource "aws_route53_record" "tectonic_api_internal" { - count = "${var.elb_alias_enabled ? local.private_endpoints_count : 0}" - zone_id = "${var.private_zone_id}" - name = "${var.cluster_name}-api.${var.base_domain}" - type = "A" - - alias { - name = "${var.api_internal_elb_dns_name}" - zone_id = "${var.api_internal_elb_zone_id}" - evaluate_target_health = true - } -} - -resource "aws_route53_record" "tectonic-console" { - count = "${var.elb_alias_enabled ? 0 : 1}" - zone_id = "${local.public_zone_id}" - name = "${var.cluster_name}" - type = "A" - ttl = "60" - records = ["${var.worker_ip_addresses}"] -} - -resource "aws_route53_record" "tectonic_ingress_public" { - count = "${var.elb_alias_enabled ? local.public_endpoints_count : 0}" - zone_id = "${local.public_zone_id}" - name = "${var.cluster_name}.${var.base_domain}" - type = "A" - - alias { - name = "${var.console_elb_dns_name}" - zone_id = "${var.console_elb_zone_id}" - evaluate_target_health = true - } -} + count = "${var.elb_alias_enabled ? local.private_endpoints_count : 0}" -resource "aws_route53_record" "tectonic_ingress_private" { - count = "${var.elb_alias_enabled ? local.private_endpoints_count : 0}" zone_id = "${var.private_zone_id}" - name = "${var.cluster_name}.${var.base_domain}" - type = "A" - - alias { - name = "${var.console_elb_dns_name}" - zone_id = "${var.console_elb_zone_id}" - evaluate_target_health = true - } -} - -resource "aws_route53_record" "routes_ingress_public" { - count = "${var.elb_alias_enabled ? local.public_endpoints_count : 0}" - zone_id = "${local.public_zone_id}" - name = "*.${var.cluster_name}.${var.base_domain}" - type = "A" - - alias { - name = "${var.console_elb_dns_name}" - zone_id = "${var.console_elb_zone_id}" - evaluate_target_health = true - } -} - -resource "aws_route53_record" "routes_ingress_private" { - count = "${var.elb_alias_enabled ? local.private_endpoints_count : 0}" - zone_id = "${var.private_zone_id}" - name = "*.${var.cluster_name}.${var.base_domain}" + name = "${var.cluster_name}-api.${var.base_domain}" type = "A" alias { - name = "${var.console_elb_dns_name}" - zone_id = "${var.console_elb_zone_id}" + name = "${var.api_internal_lb_dns_name}" + zone_id = "${var.api_internal_lb_zone_id}" evaluate_target_health = true } } diff --git a/data/data/aws/route53/variables.tf b/data/data/aws/route53/variables.tf index 9bc319fd715..e26deecf501 100644 --- a/data/data/aws/route53/variables.tf +++ b/data/data/aws/route53/variables.tf @@ -1,8 +1,3 @@ -variable "cluster_id" { - description = "Cluster ID" - type = "string" -} - variable "cluster_name" { description = "The name of the cluster" type = "string" @@ -48,11 +43,6 @@ variable "worker_public_ips_enabled" { default = true } -variable "api_ip_addresses" { - description = "List of string IPs for k8s API" - type = "list" -} - variable "extra_tags" { type = "map" description = "Extra tags to be applied to created resources." @@ -100,32 +90,22 @@ variable "private_zone_id" { type = "string" } -variable "api_external_elb_dns_name" { - description = "External API's ELB DNS name" - type = "string" -} - -variable "api_external_elb_zone_id" { - description = "External API's ELB Zone ID" - type = "string" -} - -variable "api_internal_elb_dns_name" { - description = "Internal API's ELB DNS name" +variable "api_external_lb_dns_name" { + description = "External API's LB DNS name" type = "string" } -variable "api_internal_elb_zone_id" { - description = "Internal API's ELB Zone ID" +variable "api_external_lb_zone_id" { + description = "External API's LB Zone ID" type = "string" } -variable "console_elb_dns_name" { - description = "Console's ELB DNS name" +variable "api_internal_lb_dns_name" { + description = "Internal API's LB DNS name" type = "string" } -variable "console_elb_zone_id" { - description = "Console's ELB Zone ID" +variable "api_internal_lb_zone_id" { + description = "Internal API's LB Zone ID" type = "string" } diff --git a/data/data/aws/vpc/master-elb.tf b/data/data/aws/vpc/master-elb.tf index 300bdbd5df5..1e4d768c155 100644 --- a/data/data/aws/vpc/master-elb.tf +++ b/data/data/aws/vpc/master-elb.tf @@ -1,118 +1,140 @@ -resource "aws_elb" "api_internal" { - count = "${var.private_master_endpoints ? 1 : 0}" - name = "${var.cluster_name}-int" - subnets = ["${local.master_subnet_ids}"] - internal = true - security_groups = ["${aws_security_group.api.id}"] - - idle_timeout = 3600 - connection_draining = true - connection_draining_timeout = 300 - - listener { - instance_port = 6443 - instance_protocol = "tcp" - lb_port = 6443 - lb_protocol = "tcp" - } +resource "aws_lb" "api_internal" { + count = "${var.private_master_endpoints ? 1 : 0}" - listener { - instance_port = 49500 - instance_protocol = "tcp" - lb_port = 49500 - lb_protocol = "tcp" - } + name = "${var.cluster_name}-int" + load_balancer_type = "network" + subnets = ["${local.master_subnet_ids}"] + internal = true + enable_cross_zone_load_balancing = true + idle_timeout = 3600 - health_check { - healthy_threshold = 2 - unhealthy_threshold = 2 - timeout = 3 - target = "SSL:6443" - interval = 5 - } + tags = "${merge(map( + "kubernetes.io/cluster/${var.cluster_name}", "owned", + "tectonicClusterID", "${var.cluster_id}" + ), var.extra_tags)}" +} - # TODO: we only have on health_check per ELB but need to check the following too - # health_check { - # healthy_threshold = 2 - # unhealthy_threshold = 2 - # timeout = 3 - # target = "TCP:49500" - # interval = 5 - # } +resource "aws_lb" "api_external" { + count = "${var.public_master_endpoints ? 1 : 0}" + + name = "${var.cluster_name}-ext" + load_balancer_type = "network" + subnets = ["${local.master_subnet_ids}"] + internal = false + enable_cross_zone_load_balancing = true + idle_timeout = 3600 tags = "${merge(map( - "Name", "${var.cluster_name}-int", "kubernetes.io/cluster/${var.cluster_name}", "owned", "tectonicClusterID", "${var.cluster_id}" ), var.extra_tags)}" } -resource "aws_elb" "api_external" { - count = "${var.public_master_endpoints ? 1 : 0}" - name = "${var.cluster_name}-ext" - subnets = ["${local.master_subnet_ids}"] - internal = false - security_groups = ["${aws_security_group.api.id}"] - - idle_timeout = 3600 - connection_draining = true - connection_draining_timeout = 300 - - listener { - instance_port = 6443 - instance_protocol = "tcp" - lb_port = 6443 - lb_protocol = "tcp" - } +resource "aws_lb_target_group" "api_internal" { + count = "${var.private_master_endpoints ? 1 : 0}" - health_check { - healthy_threshold = 2 - unhealthy_threshold = 2 - timeout = 3 - target = "SSL:6443" - interval = 5 - } + name = "${var.cluster_name}-api-int" + protocol = "TCP" + port = 6443 + vpc_id = "${local.vpc_id}" + + target_type = "ip" tags = "${merge(map( - "Name", "${var.cluster_name}-api-external", "kubernetes.io/cluster/${var.cluster_name}", "owned", "tectonicClusterID", "${var.cluster_id}" ), var.extra_tags)}" + + health_check { + healthy_threshold = 3 + unhealthy_threshold = 3 + interval = 10 + port = 6443 + protocol = "TCP" + } } -resource "aws_elb" "console" { - name = "${var.cluster_name}-con" - subnets = ["${local.master_subnet_ids}"] - internal = "${var.public_master_endpoints ? false : true}" - security_groups = ["${aws_security_group.console.id}"] +resource "aws_lb_target_group" "api_external" { + count = "${var.public_master_endpoints ? 1 : 0}" - idle_timeout = 3600 + name = "${var.cluster_name}-api-ext" + protocol = "TCP" + port = 6443 + vpc_id = "${local.vpc_id}" - listener { - instance_port = 32001 - instance_protocol = "tcp" - lb_port = 80 - lb_protocol = "tcp" - } + target_type = "ip" - listener { - instance_port = 32000 - instance_protocol = "tcp" - lb_port = 443 - lb_protocol = "tcp" - } + tags = "${merge(map( + "kubernetes.io/cluster/${var.cluster_name}", "owned", + "tectonicClusterID", "${var.cluster_id}" + ), var.extra_tags)}" health_check { - healthy_threshold = 2 - unhealthy_threshold = 2 - timeout = 3 - target = "HTTP:32002/healthz" - interval = 5 + healthy_threshold = 3 + unhealthy_threshold = 3 + interval = 10 + port = 6443 + protocol = "TCP" } +} + +resource "aws_lb_target_group" "services" { + name = "${var.cluster_name}-services" + protocol = "TCP" + port = 49500 + vpc_id = "${local.vpc_id}" + + target_type = "ip" tags = "${merge(map( - "Name", "${var.cluster_name}-console", "kubernetes.io/cluster/${var.cluster_name}", "owned", "tectonicClusterID", "${var.cluster_id}" ), var.extra_tags)}" + + health_check { + healthy_threshold = 3 + unhealthy_threshold = 3 + interval = 10 + port = 49500 + protocol = "TCP" + } +} + +resource "aws_lb_listener" "api_internal_api" { + count = "${var.private_master_endpoints ? 1 : 0}" + + load_balancer_arn = "${aws_lb.api_internal.arn}" + protocol = "TCP" + port = "6443" + + default_action { + target_group_arn = "${aws_lb_target_group.api_internal.arn}" + type = "forward" + } +} + +resource "aws_lb_listener" "api_internal_services" { + count = "${var.private_master_endpoints ? 1 : 0}" + + load_balancer_arn = "${aws_lb.api_internal.arn}" + protocol = "TCP" + port = "49500" + + default_action { + target_group_arn = "${aws_lb_target_group.services.arn}" + type = "forward" + } +} + +resource "aws_lb_listener" "api_external_api" { + count = "${var.public_master_endpoints ? 1 : 0}" + + load_balancer_arn = "${aws_lb.api_external.arn}" + protocol = "TCP" + port = "6443" + + default_action { + target_group_arn = "${aws_lb_target_group.api_external.arn}" + type = "forward" + } } diff --git a/data/data/aws/vpc/outputs.tf b/data/data/aws/vpc/outputs.tf index 70647446172..f3b69dec817 100644 --- a/data/data/aws/vpc/outputs.tf +++ b/data/data/aws/vpc/outputs.tf @@ -6,10 +6,6 @@ output "master_subnet_ids" { value = "${local.master_subnet_ids}" } -output "worker_subnet_ids" { - value = "${local.worker_subnet_ids}" -} - output "etcd_sg_id" { value = "${element(concat(aws_security_group.etcd.*.id, list("")), 0)}" } @@ -30,46 +26,34 @@ output "console_sg_id" { value = "${aws_security_group.console.id}" } -output "aws_elb_api_external_id" { - value = "${aws_elb.api_external.0.id}" -} - -output "aws_elb_api_internal_id" { - value = "${aws_elb.api_internal.0.id}" -} - -output "aws_elb_console_id" { - value = "${aws_elb.console.id}" -} - -output "aws_lbs" { - value = ["${compact(concat(aws_elb.api_internal.*.id, list(aws_elb.console.id), aws_elb.api_external.*.id))}"] +output "aws_lb_private_target_group_arns" { + value = "${compact(concat(aws_lb_target_group.api_internal.*.arn, aws_lb_target_group.services.*.arn))}" } -output "aws_lbs_length" { - value = "2" +output "aws_lb_private_target_group_arns_length" { + value = "${var.private_master_endpoints ? 2 : 0}" } -output "aws_elb_api_external_dns_name" { - value = "${element(concat(aws_elb.api_external.*.dns_name, list("")), 0)}" +output "aws_lb_public_target_group_arns" { + value = "${compact(concat(aws_lb_target_group.api_external.*.arn))}" } -output "aws_elb_api_external_zone_id" { - value = "${element(concat(aws_elb.api_external.*.zone_id, list("")), 0)}" +output "aws_lb_public_target_group_arns_length" { + value = "${var.public_master_endpoints ? 1 : 0}" } -output "aws_elb_api_internal_dns_name" { - value = "${element(concat(aws_elb.api_internal.*.dns_name, list("")), 0)}" +output "aws_lb_api_external_dns_name" { + value = "${element(concat(aws_lb.api_external.*.dns_name, list("")), 0)}" } -output "aws_elb_api_internal_zone_id" { - value = "${element(concat(aws_elb.api_internal.*.zone_id, list("")), 0)}" +output "aws_lb_api_external_zone_id" { + value = "${element(concat(aws_lb.api_external.*.zone_id, list("")), 0)}" } -output "aws_console_dns_name" { - value = "${aws_elb.console.dns_name}" +output "aws_lb_api_internal_dns_name" { + value = "${element(concat(aws_lb.api_internal.*.dns_name, list("")), 0)}" } -output "aws_elb_console_zone_id" { - value = "${aws_elb.console.zone_id}" +output "aws_lb_api_internal_zone_id" { + value = "${element(concat(aws_lb.api_internal.*.zone_id, list("")), 0)}" } diff --git a/vendor/github.com/aws/aws-sdk-go/service/elbv2/api.go b/vendor/github.com/aws/aws-sdk-go/service/elbv2/api.go new file mode 100644 index 00000000000..68b905d3fd0 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/elbv2/api.go @@ -0,0 +1,8603 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package elbv2 + +import ( + "fmt" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awsutil" + "github.com/aws/aws-sdk-go/aws/request" +) + +const opAddListenerCertificates = "AddListenerCertificates" + +// AddListenerCertificatesRequest generates a "aws/request.Request" representing the +// client's request for the AddListenerCertificates operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AddListenerCertificates for more information on using the AddListenerCertificates +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AddListenerCertificatesRequest method. +// req, resp := client.AddListenerCertificatesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/AddListenerCertificates +func (c *ELBV2) AddListenerCertificatesRequest(input *AddListenerCertificatesInput) (req *request.Request, output *AddListenerCertificatesOutput) { + op := &request.Operation{ + Name: opAddListenerCertificates, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AddListenerCertificatesInput{} + } + + output = &AddListenerCertificatesOutput{} + req = c.newRequest(op, input, output) + return +} + +// AddListenerCertificates API operation for Elastic Load Balancing. +// +// Adds the specified certificate to the specified secure listener. +// +// If the certificate was already added, the call is successful but the certificate +// is not added again. +// +// To list the certificates for your listener, use DescribeListenerCertificates. +// To remove certificates from your listener, use RemoveListenerCertificates. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation AddListenerCertificates for usage and error information. +// +// Returned Error Codes: +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeTooManyCertificatesException "TooManyCertificates" +// You've reached the limit on the number of certificates per load balancer. +// +// * ErrCodeCertificateNotFoundException "CertificateNotFound" +// The specified certificate does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/AddListenerCertificates +func (c *ELBV2) AddListenerCertificates(input *AddListenerCertificatesInput) (*AddListenerCertificatesOutput, error) { + req, out := c.AddListenerCertificatesRequest(input) + return out, req.Send() +} + +// AddListenerCertificatesWithContext is the same as AddListenerCertificates with the addition of +// the ability to pass a context and additional request options. +// +// See AddListenerCertificates for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) AddListenerCertificatesWithContext(ctx aws.Context, input *AddListenerCertificatesInput, opts ...request.Option) (*AddListenerCertificatesOutput, error) { + req, out := c.AddListenerCertificatesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opAddTags = "AddTags" + +// AddTagsRequest generates a "aws/request.Request" representing the +// client's request for the AddTags operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See AddTags for more information on using the AddTags +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the AddTagsRequest method. +// req, resp := client.AddTagsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/AddTags +func (c *ELBV2) AddTagsRequest(input *AddTagsInput) (req *request.Request, output *AddTagsOutput) { + op := &request.Operation{ + Name: opAddTags, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &AddTagsInput{} + } + + output = &AddTagsOutput{} + req = c.newRequest(op, input, output) + return +} + +// AddTags API operation for Elastic Load Balancing. +// +// Adds the specified tags to the specified Elastic Load Balancing resource. +// You can tag your Application Load Balancers, Network Load Balancers, and +// your target groups. +// +// Each tag consists of a key and an optional value. If a resource already has +// a tag with the same key, AddTags updates its value. +// +// To list the current tags for your resources, use DescribeTags. To remove +// tags from your resources, use RemoveTags. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation AddTags for usage and error information. +// +// Returned Error Codes: +// * ErrCodeDuplicateTagKeysException "DuplicateTagKeys" +// A tag key was specified more than once. +// +// * ErrCodeTooManyTagsException "TooManyTags" +// You've reached the limit on the number of tags per load balancer. +// +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/AddTags +func (c *ELBV2) AddTags(input *AddTagsInput) (*AddTagsOutput, error) { + req, out := c.AddTagsRequest(input) + return out, req.Send() +} + +// AddTagsWithContext is the same as AddTags with the addition of +// the ability to pass a context and additional request options. +// +// See AddTags for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) AddTagsWithContext(ctx aws.Context, input *AddTagsInput, opts ...request.Option) (*AddTagsOutput, error) { + req, out := c.AddTagsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateListener = "CreateListener" + +// CreateListenerRequest generates a "aws/request.Request" representing the +// client's request for the CreateListener operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateListener for more information on using the CreateListener +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateListenerRequest method. +// req, resp := client.CreateListenerRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateListener +func (c *ELBV2) CreateListenerRequest(input *CreateListenerInput) (req *request.Request, output *CreateListenerOutput) { + op := &request.Operation{ + Name: opCreateListener, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateListenerInput{} + } + + output = &CreateListenerOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateListener API operation for Elastic Load Balancing. +// +// Creates a listener for the specified Application Load Balancer or Network +// Load Balancer. +// +// To update a listener, use ModifyListener. When you are finished with a listener, +// you can delete it using DeleteListener. If you are finished with both the +// listener and the load balancer, you can delete them both using DeleteLoadBalancer. +// +// This operation is idempotent, which means that it completes at most one time. +// If you attempt to create multiple listeners with the same settings, each +// call succeeds. +// +// For more information, see Listeners for Your Application Load Balancers (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html) +// in the Application Load Balancers Guide and Listeners for Your Network Load +// Balancers (http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-listeners.html) +// in the Network Load Balancers Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation CreateListener for usage and error information. +// +// Returned Error Codes: +// * ErrCodeDuplicateListenerException "DuplicateListener" +// A listener with the specified port already exists. +// +// * ErrCodeTooManyListenersException "TooManyListeners" +// You've reached the limit on the number of listeners per load balancer. +// +// * ErrCodeTooManyCertificatesException "TooManyCertificates" +// You've reached the limit on the number of certificates per load balancer. +// +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeTargetGroupAssociationLimitException "TargetGroupAssociationLimit" +// You've reached the limit on the number of load balancers per target group. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// * ErrCodeIncompatibleProtocolsException "IncompatibleProtocols" +// The specified configuration is not valid with this protocol. +// +// * ErrCodeSSLPolicyNotFoundException "SSLPolicyNotFound" +// The specified SSL policy does not exist. +// +// * ErrCodeCertificateNotFoundException "CertificateNotFound" +// The specified certificate does not exist. +// +// * ErrCodeUnsupportedProtocolException "UnsupportedProtocol" +// The specified protocol is not supported. +// +// * ErrCodeTooManyRegistrationsForTargetIdException "TooManyRegistrationsForTargetId" +// You've reached the limit on the number of times a target can be registered +// with a load balancer. +// +// * ErrCodeTooManyTargetsException "TooManyTargets" +// You've reached the limit on the number of targets. +// +// * ErrCodeTooManyActionsException "TooManyActions" +// You've reached the limit on the number of actions per rule. +// +// * ErrCodeInvalidLoadBalancerActionException "InvalidLoadBalancerAction" +// The requested action is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateListener +func (c *ELBV2) CreateListener(input *CreateListenerInput) (*CreateListenerOutput, error) { + req, out := c.CreateListenerRequest(input) + return out, req.Send() +} + +// CreateListenerWithContext is the same as CreateListener with the addition of +// the ability to pass a context and additional request options. +// +// See CreateListener for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) CreateListenerWithContext(ctx aws.Context, input *CreateListenerInput, opts ...request.Option) (*CreateListenerOutput, error) { + req, out := c.CreateListenerRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateLoadBalancer = "CreateLoadBalancer" + +// CreateLoadBalancerRequest generates a "aws/request.Request" representing the +// client's request for the CreateLoadBalancer operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateLoadBalancer for more information on using the CreateLoadBalancer +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateLoadBalancerRequest method. +// req, resp := client.CreateLoadBalancerRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateLoadBalancer +func (c *ELBV2) CreateLoadBalancerRequest(input *CreateLoadBalancerInput) (req *request.Request, output *CreateLoadBalancerOutput) { + op := &request.Operation{ + Name: opCreateLoadBalancer, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateLoadBalancerInput{} + } + + output = &CreateLoadBalancerOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateLoadBalancer API operation for Elastic Load Balancing. +// +// Creates an Application Load Balancer or a Network Load Balancer. +// +// When you create a load balancer, you can specify security groups, public +// subnets, IP address type, and tags. Otherwise, you could do so later using +// SetSecurityGroups, SetSubnets, SetIpAddressType, and AddTags. +// +// To create listeners for your load balancer, use CreateListener. To describe +// your current load balancers, see DescribeLoadBalancers. When you are finished +// with a load balancer, you can delete it using DeleteLoadBalancer. +// +// For limit information, see Limits for Your Application Load Balancer (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html) +// in the Application Load Balancers Guide and Limits for Your Network Load +// Balancer (http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-limits.html) +// in the Network Load Balancers Guide. +// +// This operation is idempotent, which means that it completes at most one time. +// If you attempt to create multiple load balancers with the same settings, +// each call succeeds. +// +// For more information, see Application Load Balancers (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html) +// in the Application Load Balancers Guide and Network Load Balancers (http://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html) +// in the Network Load Balancers Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation CreateLoadBalancer for usage and error information. +// +// Returned Error Codes: +// * ErrCodeDuplicateLoadBalancerNameException "DuplicateLoadBalancerName" +// A load balancer with the specified name already exists. +// +// * ErrCodeTooManyLoadBalancersException "TooManyLoadBalancers" +// You've reached the limit on the number of load balancers for your AWS account. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// * ErrCodeSubnetNotFoundException "SubnetNotFound" +// The specified subnet does not exist. +// +// * ErrCodeInvalidSubnetException "InvalidSubnet" +// The specified subnet is out of available addresses. +// +// * ErrCodeInvalidSecurityGroupException "InvalidSecurityGroup" +// The specified security group does not exist. +// +// * ErrCodeInvalidSchemeException "InvalidScheme" +// The requested scheme is not valid. +// +// * ErrCodeTooManyTagsException "TooManyTags" +// You've reached the limit on the number of tags per load balancer. +// +// * ErrCodeDuplicateTagKeysException "DuplicateTagKeys" +// A tag key was specified more than once. +// +// * ErrCodeResourceInUseException "ResourceInUse" +// A specified resource is in use. +// +// * ErrCodeAllocationIdNotFoundException "AllocationIdNotFound" +// The specified allocation ID does not exist. +// +// * ErrCodeAvailabilityZoneNotSupportedException "AvailabilityZoneNotSupported" +// The specified Availability Zone is not supported. +// +// * ErrCodeOperationNotPermittedException "OperationNotPermitted" +// This operation is not allowed. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateLoadBalancer +func (c *ELBV2) CreateLoadBalancer(input *CreateLoadBalancerInput) (*CreateLoadBalancerOutput, error) { + req, out := c.CreateLoadBalancerRequest(input) + return out, req.Send() +} + +// CreateLoadBalancerWithContext is the same as CreateLoadBalancer with the addition of +// the ability to pass a context and additional request options. +// +// See CreateLoadBalancer for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) CreateLoadBalancerWithContext(ctx aws.Context, input *CreateLoadBalancerInput, opts ...request.Option) (*CreateLoadBalancerOutput, error) { + req, out := c.CreateLoadBalancerRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateRule = "CreateRule" + +// CreateRuleRequest generates a "aws/request.Request" representing the +// client's request for the CreateRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateRule for more information on using the CreateRule +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateRuleRequest method. +// req, resp := client.CreateRuleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateRule +func (c *ELBV2) CreateRuleRequest(input *CreateRuleInput) (req *request.Request, output *CreateRuleOutput) { + op := &request.Operation{ + Name: opCreateRule, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateRuleInput{} + } + + output = &CreateRuleOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateRule API operation for Elastic Load Balancing. +// +// Creates a rule for the specified listener. The listener must be associated +// with an Application Load Balancer. +// +// Rules are evaluated in priority order, from the lowest value to the highest +// value. When the conditions for a rule are met, its actions are performed. +// If the conditions for no rules are met, the actions for the default rule +// are performed. For more information, see Listener Rules (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#listener-rules) +// in the Application Load Balancers Guide. +// +// To view your current rules, use DescribeRules. To update a rule, use ModifyRule. +// To set the priorities of your rules, use SetRulePriorities. To delete a rule, +// use DeleteRule. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation CreateRule for usage and error information. +// +// Returned Error Codes: +// * ErrCodePriorityInUseException "PriorityInUse" +// The specified priority is in use. +// +// * ErrCodeTooManyTargetGroupsException "TooManyTargetGroups" +// You've reached the limit on the number of target groups for your AWS account. +// +// * ErrCodeTooManyRulesException "TooManyRules" +// You've reached the limit on the number of rules per load balancer. +// +// * ErrCodeTargetGroupAssociationLimitException "TargetGroupAssociationLimit" +// You've reached the limit on the number of load balancers per target group. +// +// * ErrCodeIncompatibleProtocolsException "IncompatibleProtocols" +// The specified configuration is not valid with this protocol. +// +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// * ErrCodeTooManyRegistrationsForTargetIdException "TooManyRegistrationsForTargetId" +// You've reached the limit on the number of times a target can be registered +// with a load balancer. +// +// * ErrCodeTooManyTargetsException "TooManyTargets" +// You've reached the limit on the number of targets. +// +// * ErrCodeUnsupportedProtocolException "UnsupportedProtocol" +// The specified protocol is not supported. +// +// * ErrCodeTooManyActionsException "TooManyActions" +// You've reached the limit on the number of actions per rule. +// +// * ErrCodeInvalidLoadBalancerActionException "InvalidLoadBalancerAction" +// The requested action is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateRule +func (c *ELBV2) CreateRule(input *CreateRuleInput) (*CreateRuleOutput, error) { + req, out := c.CreateRuleRequest(input) + return out, req.Send() +} + +// CreateRuleWithContext is the same as CreateRule with the addition of +// the ability to pass a context and additional request options. +// +// See CreateRule for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) CreateRuleWithContext(ctx aws.Context, input *CreateRuleInput, opts ...request.Option) (*CreateRuleOutput, error) { + req, out := c.CreateRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opCreateTargetGroup = "CreateTargetGroup" + +// CreateTargetGroupRequest generates a "aws/request.Request" representing the +// client's request for the CreateTargetGroup operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See CreateTargetGroup for more information on using the CreateTargetGroup +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the CreateTargetGroupRequest method. +// req, resp := client.CreateTargetGroupRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateTargetGroup +func (c *ELBV2) CreateTargetGroupRequest(input *CreateTargetGroupInput) (req *request.Request, output *CreateTargetGroupOutput) { + op := &request.Operation{ + Name: opCreateTargetGroup, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &CreateTargetGroupInput{} + } + + output = &CreateTargetGroupOutput{} + req = c.newRequest(op, input, output) + return +} + +// CreateTargetGroup API operation for Elastic Load Balancing. +// +// Creates a target group. +// +// To register targets with the target group, use RegisterTargets. To update +// the health check settings for the target group, use ModifyTargetGroup. To +// monitor the health of targets in the target group, use DescribeTargetHealth. +// +// To route traffic to the targets in a target group, specify the target group +// in an action using CreateListener or CreateRule. +// +// To delete a target group, use DeleteTargetGroup. +// +// This operation is idempotent, which means that it completes at most one time. +// If you attempt to create multiple target groups with the same settings, each +// call succeeds. +// +// For more information, see Target Groups for Your Application Load Balancers +// (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html) +// in the Application Load Balancers Guide or Target Groups for Your Network +// Load Balancers (http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html) +// in the Network Load Balancers Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation CreateTargetGroup for usage and error information. +// +// Returned Error Codes: +// * ErrCodeDuplicateTargetGroupNameException "DuplicateTargetGroupName" +// A target group with the specified name already exists. +// +// * ErrCodeTooManyTargetGroupsException "TooManyTargetGroups" +// You've reached the limit on the number of target groups for your AWS account. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/CreateTargetGroup +func (c *ELBV2) CreateTargetGroup(input *CreateTargetGroupInput) (*CreateTargetGroupOutput, error) { + req, out := c.CreateTargetGroupRequest(input) + return out, req.Send() +} + +// CreateTargetGroupWithContext is the same as CreateTargetGroup with the addition of +// the ability to pass a context and additional request options. +// +// See CreateTargetGroup for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) CreateTargetGroupWithContext(ctx aws.Context, input *CreateTargetGroupInput, opts ...request.Option) (*CreateTargetGroupOutput, error) { + req, out := c.CreateTargetGroupRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDeleteListener = "DeleteListener" + +// DeleteListenerRequest generates a "aws/request.Request" representing the +// client's request for the DeleteListener operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteListener for more information on using the DeleteListener +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteListenerRequest method. +// req, resp := client.DeleteListenerRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteListener +func (c *ELBV2) DeleteListenerRequest(input *DeleteListenerInput) (req *request.Request, output *DeleteListenerOutput) { + op := &request.Operation{ + Name: opDeleteListener, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteListenerInput{} + } + + output = &DeleteListenerOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteListener API operation for Elastic Load Balancing. +// +// Deletes the specified listener. +// +// Alternatively, your listener is deleted when you delete the load balancer +// to which it is attached, using DeleteLoadBalancer. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DeleteListener for usage and error information. +// +// Returned Error Codes: +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteListener +func (c *ELBV2) DeleteListener(input *DeleteListenerInput) (*DeleteListenerOutput, error) { + req, out := c.DeleteListenerRequest(input) + return out, req.Send() +} + +// DeleteListenerWithContext is the same as DeleteListener with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteListener for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DeleteListenerWithContext(ctx aws.Context, input *DeleteListenerInput, opts ...request.Option) (*DeleteListenerOutput, error) { + req, out := c.DeleteListenerRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDeleteLoadBalancer = "DeleteLoadBalancer" + +// DeleteLoadBalancerRequest generates a "aws/request.Request" representing the +// client's request for the DeleteLoadBalancer operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteLoadBalancer for more information on using the DeleteLoadBalancer +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteLoadBalancerRequest method. +// req, resp := client.DeleteLoadBalancerRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteLoadBalancer +func (c *ELBV2) DeleteLoadBalancerRequest(input *DeleteLoadBalancerInput) (req *request.Request, output *DeleteLoadBalancerOutput) { + op := &request.Operation{ + Name: opDeleteLoadBalancer, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteLoadBalancerInput{} + } + + output = &DeleteLoadBalancerOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteLoadBalancer API operation for Elastic Load Balancing. +// +// Deletes the specified Application Load Balancer or Network Load Balancer +// and its attached listeners. +// +// You can't delete a load balancer if deletion protection is enabled. If the +// load balancer does not exist or has already been deleted, the call succeeds. +// +// Deleting a load balancer does not affect its registered targets. For example, +// your EC2 instances continue to run and are still registered to their target +// groups. If you no longer need these EC2 instances, you can stop or terminate +// them. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DeleteLoadBalancer for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeOperationNotPermittedException "OperationNotPermitted" +// This operation is not allowed. +// +// * ErrCodeResourceInUseException "ResourceInUse" +// A specified resource is in use. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteLoadBalancer +func (c *ELBV2) DeleteLoadBalancer(input *DeleteLoadBalancerInput) (*DeleteLoadBalancerOutput, error) { + req, out := c.DeleteLoadBalancerRequest(input) + return out, req.Send() +} + +// DeleteLoadBalancerWithContext is the same as DeleteLoadBalancer with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteLoadBalancer for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DeleteLoadBalancerWithContext(ctx aws.Context, input *DeleteLoadBalancerInput, opts ...request.Option) (*DeleteLoadBalancerOutput, error) { + req, out := c.DeleteLoadBalancerRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDeleteRule = "DeleteRule" + +// DeleteRuleRequest generates a "aws/request.Request" representing the +// client's request for the DeleteRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteRule for more information on using the DeleteRule +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteRuleRequest method. +// req, resp := client.DeleteRuleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteRule +func (c *ELBV2) DeleteRuleRequest(input *DeleteRuleInput) (req *request.Request, output *DeleteRuleOutput) { + op := &request.Operation{ + Name: opDeleteRule, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteRuleInput{} + } + + output = &DeleteRuleOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteRule API operation for Elastic Load Balancing. +// +// Deletes the specified rule. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DeleteRule for usage and error information. +// +// Returned Error Codes: +// * ErrCodeRuleNotFoundException "RuleNotFound" +// The specified rule does not exist. +// +// * ErrCodeOperationNotPermittedException "OperationNotPermitted" +// This operation is not allowed. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteRule +func (c *ELBV2) DeleteRule(input *DeleteRuleInput) (*DeleteRuleOutput, error) { + req, out := c.DeleteRuleRequest(input) + return out, req.Send() +} + +// DeleteRuleWithContext is the same as DeleteRule with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteRule for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DeleteRuleWithContext(ctx aws.Context, input *DeleteRuleInput, opts ...request.Option) (*DeleteRuleOutput, error) { + req, out := c.DeleteRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDeleteTargetGroup = "DeleteTargetGroup" + +// DeleteTargetGroupRequest generates a "aws/request.Request" representing the +// client's request for the DeleteTargetGroup operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeleteTargetGroup for more information on using the DeleteTargetGroup +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeleteTargetGroupRequest method. +// req, resp := client.DeleteTargetGroupRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteTargetGroup +func (c *ELBV2) DeleteTargetGroupRequest(input *DeleteTargetGroupInput) (req *request.Request, output *DeleteTargetGroupOutput) { + op := &request.Operation{ + Name: opDeleteTargetGroup, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeleteTargetGroupInput{} + } + + output = &DeleteTargetGroupOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeleteTargetGroup API operation for Elastic Load Balancing. +// +// Deletes the specified target group. +// +// You can delete a target group if it is not referenced by any actions. Deleting +// a target group also deletes any associated health checks. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DeleteTargetGroup for usage and error information. +// +// Returned Error Codes: +// * ErrCodeResourceInUseException "ResourceInUse" +// A specified resource is in use. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeleteTargetGroup +func (c *ELBV2) DeleteTargetGroup(input *DeleteTargetGroupInput) (*DeleteTargetGroupOutput, error) { + req, out := c.DeleteTargetGroupRequest(input) + return out, req.Send() +} + +// DeleteTargetGroupWithContext is the same as DeleteTargetGroup with the addition of +// the ability to pass a context and additional request options. +// +// See DeleteTargetGroup for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DeleteTargetGroupWithContext(ctx aws.Context, input *DeleteTargetGroupInput, opts ...request.Option) (*DeleteTargetGroupOutput, error) { + req, out := c.DeleteTargetGroupRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDeregisterTargets = "DeregisterTargets" + +// DeregisterTargetsRequest generates a "aws/request.Request" representing the +// client's request for the DeregisterTargets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DeregisterTargets for more information on using the DeregisterTargets +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DeregisterTargetsRequest method. +// req, resp := client.DeregisterTargetsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeregisterTargets +func (c *ELBV2) DeregisterTargetsRequest(input *DeregisterTargetsInput) (req *request.Request, output *DeregisterTargetsOutput) { + op := &request.Operation{ + Name: opDeregisterTargets, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DeregisterTargetsInput{} + } + + output = &DeregisterTargetsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DeregisterTargets API operation for Elastic Load Balancing. +// +// Deregisters the specified targets from the specified target group. After +// the targets are deregistered, they no longer receive traffic from the load +// balancer. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DeregisterTargets for usage and error information. +// +// Returned Error Codes: +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeInvalidTargetException "InvalidTarget" +// The specified target does not exist, is not in the same VPC as the target +// group, or has an unsupported instance type. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DeregisterTargets +func (c *ELBV2) DeregisterTargets(input *DeregisterTargetsInput) (*DeregisterTargetsOutput, error) { + req, out := c.DeregisterTargetsRequest(input) + return out, req.Send() +} + +// DeregisterTargetsWithContext is the same as DeregisterTargets with the addition of +// the ability to pass a context and additional request options. +// +// See DeregisterTargets for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DeregisterTargetsWithContext(ctx aws.Context, input *DeregisterTargetsInput, opts ...request.Option) (*DeregisterTargetsOutput, error) { + req, out := c.DeregisterTargetsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeAccountLimits = "DescribeAccountLimits" + +// DescribeAccountLimitsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeAccountLimits operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeAccountLimits for more information on using the DescribeAccountLimits +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeAccountLimitsRequest method. +// req, resp := client.DescribeAccountLimitsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeAccountLimits +func (c *ELBV2) DescribeAccountLimitsRequest(input *DescribeAccountLimitsInput) (req *request.Request, output *DescribeAccountLimitsOutput) { + op := &request.Operation{ + Name: opDescribeAccountLimits, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeAccountLimitsInput{} + } + + output = &DescribeAccountLimitsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeAccountLimits API operation for Elastic Load Balancing. +// +// Describes the current Elastic Load Balancing resource limits for your AWS +// account. +// +// For more information, see Limits for Your Application Load Balancers (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-limits.html) +// in the Application Load Balancer Guide or Limits for Your Network Load Balancers +// (http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-limits.html) +// in the Network Load Balancers Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeAccountLimits for usage and error information. +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeAccountLimits +func (c *ELBV2) DescribeAccountLimits(input *DescribeAccountLimitsInput) (*DescribeAccountLimitsOutput, error) { + req, out := c.DescribeAccountLimitsRequest(input) + return out, req.Send() +} + +// DescribeAccountLimitsWithContext is the same as DescribeAccountLimits with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeAccountLimits for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeAccountLimitsWithContext(ctx aws.Context, input *DescribeAccountLimitsInput, opts ...request.Option) (*DescribeAccountLimitsOutput, error) { + req, out := c.DescribeAccountLimitsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeListenerCertificates = "DescribeListenerCertificates" + +// DescribeListenerCertificatesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeListenerCertificates operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeListenerCertificates for more information on using the DescribeListenerCertificates +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeListenerCertificatesRequest method. +// req, resp := client.DescribeListenerCertificatesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeListenerCertificates +func (c *ELBV2) DescribeListenerCertificatesRequest(input *DescribeListenerCertificatesInput) (req *request.Request, output *DescribeListenerCertificatesOutput) { + op := &request.Operation{ + Name: opDescribeListenerCertificates, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeListenerCertificatesInput{} + } + + output = &DescribeListenerCertificatesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeListenerCertificates API operation for Elastic Load Balancing. +// +// Describes the certificates for the specified secure listener. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeListenerCertificates for usage and error information. +// +// Returned Error Codes: +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeListenerCertificates +func (c *ELBV2) DescribeListenerCertificates(input *DescribeListenerCertificatesInput) (*DescribeListenerCertificatesOutput, error) { + req, out := c.DescribeListenerCertificatesRequest(input) + return out, req.Send() +} + +// DescribeListenerCertificatesWithContext is the same as DescribeListenerCertificates with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeListenerCertificates for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeListenerCertificatesWithContext(ctx aws.Context, input *DescribeListenerCertificatesInput, opts ...request.Option) (*DescribeListenerCertificatesOutput, error) { + req, out := c.DescribeListenerCertificatesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeListeners = "DescribeListeners" + +// DescribeListenersRequest generates a "aws/request.Request" representing the +// client's request for the DescribeListeners operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeListeners for more information on using the DescribeListeners +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeListenersRequest method. +// req, resp := client.DescribeListenersRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeListeners +func (c *ELBV2) DescribeListenersRequest(input *DescribeListenersInput) (req *request.Request, output *DescribeListenersOutput) { + op := &request.Operation{ + Name: opDescribeListeners, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"Marker"}, + OutputTokens: []string{"NextMarker"}, + LimitToken: "", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeListenersInput{} + } + + output = &DescribeListenersOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeListeners API operation for Elastic Load Balancing. +// +// Describes the specified listeners or the listeners for the specified Application +// Load Balancer or Network Load Balancer. You must specify either a load balancer +// or one or more listeners. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeListeners for usage and error information. +// +// Returned Error Codes: +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeUnsupportedProtocolException "UnsupportedProtocol" +// The specified protocol is not supported. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeListeners +func (c *ELBV2) DescribeListeners(input *DescribeListenersInput) (*DescribeListenersOutput, error) { + req, out := c.DescribeListenersRequest(input) + return out, req.Send() +} + +// DescribeListenersWithContext is the same as DescribeListeners with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeListeners for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeListenersWithContext(ctx aws.Context, input *DescribeListenersInput, opts ...request.Option) (*DescribeListenersOutput, error) { + req, out := c.DescribeListenersRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeListenersPages iterates over the pages of a DescribeListeners operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeListeners method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeListeners operation. +// pageNum := 0 +// err := client.DescribeListenersPages(params, +// func(page *DescribeListenersOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *ELBV2) DescribeListenersPages(input *DescribeListenersInput, fn func(*DescribeListenersOutput, bool) bool) error { + return c.DescribeListenersPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeListenersPagesWithContext same as DescribeListenersPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeListenersPagesWithContext(ctx aws.Context, input *DescribeListenersInput, fn func(*DescribeListenersOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeListenersInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeListenersRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + cont := true + for p.Next() && cont { + cont = fn(p.Page().(*DescribeListenersOutput), !p.HasNextPage()) + } + return p.Err() +} + +const opDescribeLoadBalancerAttributes = "DescribeLoadBalancerAttributes" + +// DescribeLoadBalancerAttributesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeLoadBalancerAttributes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeLoadBalancerAttributes for more information on using the DescribeLoadBalancerAttributes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeLoadBalancerAttributesRequest method. +// req, resp := client.DescribeLoadBalancerAttributesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeLoadBalancerAttributes +func (c *ELBV2) DescribeLoadBalancerAttributesRequest(input *DescribeLoadBalancerAttributesInput) (req *request.Request, output *DescribeLoadBalancerAttributesOutput) { + op := &request.Operation{ + Name: opDescribeLoadBalancerAttributes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeLoadBalancerAttributesInput{} + } + + output = &DescribeLoadBalancerAttributesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeLoadBalancerAttributes API operation for Elastic Load Balancing. +// +// Describes the attributes for the specified Application Load Balancer or Network +// Load Balancer. +// +// For more information, see Load Balancer Attributes (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#load-balancer-attributes) +// in the Application Load Balancers Guide or Load Balancer Attributes (http://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#load-balancer-attributes) +// in the Network Load Balancers Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeLoadBalancerAttributes for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeLoadBalancerAttributes +func (c *ELBV2) DescribeLoadBalancerAttributes(input *DescribeLoadBalancerAttributesInput) (*DescribeLoadBalancerAttributesOutput, error) { + req, out := c.DescribeLoadBalancerAttributesRequest(input) + return out, req.Send() +} + +// DescribeLoadBalancerAttributesWithContext is the same as DescribeLoadBalancerAttributes with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeLoadBalancerAttributes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeLoadBalancerAttributesWithContext(ctx aws.Context, input *DescribeLoadBalancerAttributesInput, opts ...request.Option) (*DescribeLoadBalancerAttributesOutput, error) { + req, out := c.DescribeLoadBalancerAttributesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeLoadBalancers = "DescribeLoadBalancers" + +// DescribeLoadBalancersRequest generates a "aws/request.Request" representing the +// client's request for the DescribeLoadBalancers operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeLoadBalancers for more information on using the DescribeLoadBalancers +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeLoadBalancersRequest method. +// req, resp := client.DescribeLoadBalancersRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeLoadBalancers +func (c *ELBV2) DescribeLoadBalancersRequest(input *DescribeLoadBalancersInput) (req *request.Request, output *DescribeLoadBalancersOutput) { + op := &request.Operation{ + Name: opDescribeLoadBalancers, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"Marker"}, + OutputTokens: []string{"NextMarker"}, + LimitToken: "", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeLoadBalancersInput{} + } + + output = &DescribeLoadBalancersOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeLoadBalancers API operation for Elastic Load Balancing. +// +// Describes the specified load balancers or all of your load balancers. +// +// To describe the listeners for a load balancer, use DescribeListeners. To +// describe the attributes for a load balancer, use DescribeLoadBalancerAttributes. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeLoadBalancers for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeLoadBalancers +func (c *ELBV2) DescribeLoadBalancers(input *DescribeLoadBalancersInput) (*DescribeLoadBalancersOutput, error) { + req, out := c.DescribeLoadBalancersRequest(input) + return out, req.Send() +} + +// DescribeLoadBalancersWithContext is the same as DescribeLoadBalancers with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeLoadBalancers for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeLoadBalancersWithContext(ctx aws.Context, input *DescribeLoadBalancersInput, opts ...request.Option) (*DescribeLoadBalancersOutput, error) { + req, out := c.DescribeLoadBalancersRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeLoadBalancersPages iterates over the pages of a DescribeLoadBalancers operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeLoadBalancers method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeLoadBalancers operation. +// pageNum := 0 +// err := client.DescribeLoadBalancersPages(params, +// func(page *DescribeLoadBalancersOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *ELBV2) DescribeLoadBalancersPages(input *DescribeLoadBalancersInput, fn func(*DescribeLoadBalancersOutput, bool) bool) error { + return c.DescribeLoadBalancersPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeLoadBalancersPagesWithContext same as DescribeLoadBalancersPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeLoadBalancersPagesWithContext(ctx aws.Context, input *DescribeLoadBalancersInput, fn func(*DescribeLoadBalancersOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeLoadBalancersInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeLoadBalancersRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + cont := true + for p.Next() && cont { + cont = fn(p.Page().(*DescribeLoadBalancersOutput), !p.HasNextPage()) + } + return p.Err() +} + +const opDescribeRules = "DescribeRules" + +// DescribeRulesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeRules operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeRules for more information on using the DescribeRules +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeRulesRequest method. +// req, resp := client.DescribeRulesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeRules +func (c *ELBV2) DescribeRulesRequest(input *DescribeRulesInput) (req *request.Request, output *DescribeRulesOutput) { + op := &request.Operation{ + Name: opDescribeRules, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeRulesInput{} + } + + output = &DescribeRulesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeRules API operation for Elastic Load Balancing. +// +// Describes the specified rules or the rules for the specified listener. You +// must specify either a listener or one or more rules. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeRules for usage and error information. +// +// Returned Error Codes: +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeRuleNotFoundException "RuleNotFound" +// The specified rule does not exist. +// +// * ErrCodeUnsupportedProtocolException "UnsupportedProtocol" +// The specified protocol is not supported. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeRules +func (c *ELBV2) DescribeRules(input *DescribeRulesInput) (*DescribeRulesOutput, error) { + req, out := c.DescribeRulesRequest(input) + return out, req.Send() +} + +// DescribeRulesWithContext is the same as DescribeRules with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeRules for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeRulesWithContext(ctx aws.Context, input *DescribeRulesInput, opts ...request.Option) (*DescribeRulesOutput, error) { + req, out := c.DescribeRulesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeSSLPolicies = "DescribeSSLPolicies" + +// DescribeSSLPoliciesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeSSLPolicies operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeSSLPolicies for more information on using the DescribeSSLPolicies +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeSSLPoliciesRequest method. +// req, resp := client.DescribeSSLPoliciesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeSSLPolicies +func (c *ELBV2) DescribeSSLPoliciesRequest(input *DescribeSSLPoliciesInput) (req *request.Request, output *DescribeSSLPoliciesOutput) { + op := &request.Operation{ + Name: opDescribeSSLPolicies, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeSSLPoliciesInput{} + } + + output = &DescribeSSLPoliciesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeSSLPolicies API operation for Elastic Load Balancing. +// +// Describes the specified policies or all policies used for SSL negotiation. +// +// For more information, see Security Policies (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies) +// in the Application Load Balancers Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeSSLPolicies for usage and error information. +// +// Returned Error Codes: +// * ErrCodeSSLPolicyNotFoundException "SSLPolicyNotFound" +// The specified SSL policy does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeSSLPolicies +func (c *ELBV2) DescribeSSLPolicies(input *DescribeSSLPoliciesInput) (*DescribeSSLPoliciesOutput, error) { + req, out := c.DescribeSSLPoliciesRequest(input) + return out, req.Send() +} + +// DescribeSSLPoliciesWithContext is the same as DescribeSSLPolicies with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeSSLPolicies for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeSSLPoliciesWithContext(ctx aws.Context, input *DescribeSSLPoliciesInput, opts ...request.Option) (*DescribeSSLPoliciesOutput, error) { + req, out := c.DescribeSSLPoliciesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeTags = "DescribeTags" + +// DescribeTagsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTags operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeTags for more information on using the DescribeTags +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeTagsRequest method. +// req, resp := client.DescribeTagsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTags +func (c *ELBV2) DescribeTagsRequest(input *DescribeTagsInput) (req *request.Request, output *DescribeTagsOutput) { + op := &request.Operation{ + Name: opDescribeTags, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeTagsInput{} + } + + output = &DescribeTagsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeTags API operation for Elastic Load Balancing. +// +// Describes the tags for the specified resources. You can describe the tags +// for one or more Application Load Balancers, Network Load Balancers, and target +// groups. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeTags for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeRuleNotFoundException "RuleNotFound" +// The specified rule does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTags +func (c *ELBV2) DescribeTags(input *DescribeTagsInput) (*DescribeTagsOutput, error) { + req, out := c.DescribeTagsRequest(input) + return out, req.Send() +} + +// DescribeTagsWithContext is the same as DescribeTags with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeTags for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeTagsWithContext(ctx aws.Context, input *DescribeTagsInput, opts ...request.Option) (*DescribeTagsOutput, error) { + req, out := c.DescribeTagsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeTargetGroupAttributes = "DescribeTargetGroupAttributes" + +// DescribeTargetGroupAttributesRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTargetGroupAttributes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeTargetGroupAttributes for more information on using the DescribeTargetGroupAttributes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeTargetGroupAttributesRequest method. +// req, resp := client.DescribeTargetGroupAttributesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTargetGroupAttributes +func (c *ELBV2) DescribeTargetGroupAttributesRequest(input *DescribeTargetGroupAttributesInput) (req *request.Request, output *DescribeTargetGroupAttributesOutput) { + op := &request.Operation{ + Name: opDescribeTargetGroupAttributes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeTargetGroupAttributesInput{} + } + + output = &DescribeTargetGroupAttributesOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeTargetGroupAttributes API operation for Elastic Load Balancing. +// +// Describes the attributes for the specified target group. +// +// For more information, see Target Group Attributes (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-attributes) +// in the Application Load Balancers Guide or Target Group Attributes (http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#target-group-attributes) +// in the Network Load Balancers Guide. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeTargetGroupAttributes for usage and error information. +// +// Returned Error Codes: +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTargetGroupAttributes +func (c *ELBV2) DescribeTargetGroupAttributes(input *DescribeTargetGroupAttributesInput) (*DescribeTargetGroupAttributesOutput, error) { + req, out := c.DescribeTargetGroupAttributesRequest(input) + return out, req.Send() +} + +// DescribeTargetGroupAttributesWithContext is the same as DescribeTargetGroupAttributes with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeTargetGroupAttributes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeTargetGroupAttributesWithContext(ctx aws.Context, input *DescribeTargetGroupAttributesInput, opts ...request.Option) (*DescribeTargetGroupAttributesOutput, error) { + req, out := c.DescribeTargetGroupAttributesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opDescribeTargetGroups = "DescribeTargetGroups" + +// DescribeTargetGroupsRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTargetGroups operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeTargetGroups for more information on using the DescribeTargetGroups +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeTargetGroupsRequest method. +// req, resp := client.DescribeTargetGroupsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTargetGroups +func (c *ELBV2) DescribeTargetGroupsRequest(input *DescribeTargetGroupsInput) (req *request.Request, output *DescribeTargetGroupsOutput) { + op := &request.Operation{ + Name: opDescribeTargetGroups, + HTTPMethod: "POST", + HTTPPath: "/", + Paginator: &request.Paginator{ + InputTokens: []string{"Marker"}, + OutputTokens: []string{"NextMarker"}, + LimitToken: "", + TruncationToken: "", + }, + } + + if input == nil { + input = &DescribeTargetGroupsInput{} + } + + output = &DescribeTargetGroupsOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeTargetGroups API operation for Elastic Load Balancing. +// +// Describes the specified target groups or all of your target groups. By default, +// all target groups are described. Alternatively, you can specify one of the +// following to filter the results: the ARN of the load balancer, the names +// of one or more target groups, or the ARNs of one or more target groups. +// +// To describe the targets for a target group, use DescribeTargetHealth. To +// describe the attributes of a target group, use DescribeTargetGroupAttributes. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeTargetGroups for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTargetGroups +func (c *ELBV2) DescribeTargetGroups(input *DescribeTargetGroupsInput) (*DescribeTargetGroupsOutput, error) { + req, out := c.DescribeTargetGroupsRequest(input) + return out, req.Send() +} + +// DescribeTargetGroupsWithContext is the same as DescribeTargetGroups with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeTargetGroups for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeTargetGroupsWithContext(ctx aws.Context, input *DescribeTargetGroupsInput, opts ...request.Option) (*DescribeTargetGroupsOutput, error) { + req, out := c.DescribeTargetGroupsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// DescribeTargetGroupsPages iterates over the pages of a DescribeTargetGroups operation, +// calling the "fn" function with the response data for each page. To stop +// iterating, return false from the fn function. +// +// See DescribeTargetGroups method for more information on how to use this operation. +// +// Note: This operation can generate multiple requests to a service. +// +// // Example iterating over at most 3 pages of a DescribeTargetGroups operation. +// pageNum := 0 +// err := client.DescribeTargetGroupsPages(params, +// func(page *DescribeTargetGroupsOutput, lastPage bool) bool { +// pageNum++ +// fmt.Println(page) +// return pageNum <= 3 +// }) +// +func (c *ELBV2) DescribeTargetGroupsPages(input *DescribeTargetGroupsInput, fn func(*DescribeTargetGroupsOutput, bool) bool) error { + return c.DescribeTargetGroupsPagesWithContext(aws.BackgroundContext(), input, fn) +} + +// DescribeTargetGroupsPagesWithContext same as DescribeTargetGroupsPages except +// it takes a Context and allows setting request options on the pages. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeTargetGroupsPagesWithContext(ctx aws.Context, input *DescribeTargetGroupsInput, fn func(*DescribeTargetGroupsOutput, bool) bool, opts ...request.Option) error { + p := request.Pagination{ + NewRequest: func() (*request.Request, error) { + var inCpy *DescribeTargetGroupsInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTargetGroupsRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + + cont := true + for p.Next() && cont { + cont = fn(p.Page().(*DescribeTargetGroupsOutput), !p.HasNextPage()) + } + return p.Err() +} + +const opDescribeTargetHealth = "DescribeTargetHealth" + +// DescribeTargetHealthRequest generates a "aws/request.Request" representing the +// client's request for the DescribeTargetHealth operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See DescribeTargetHealth for more information on using the DescribeTargetHealth +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the DescribeTargetHealthRequest method. +// req, resp := client.DescribeTargetHealthRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTargetHealth +func (c *ELBV2) DescribeTargetHealthRequest(input *DescribeTargetHealthInput) (req *request.Request, output *DescribeTargetHealthOutput) { + op := &request.Operation{ + Name: opDescribeTargetHealth, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &DescribeTargetHealthInput{} + } + + output = &DescribeTargetHealthOutput{} + req = c.newRequest(op, input, output) + return +} + +// DescribeTargetHealth API operation for Elastic Load Balancing. +// +// Describes the health of the specified targets or all of your targets. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation DescribeTargetHealth for usage and error information. +// +// Returned Error Codes: +// * ErrCodeInvalidTargetException "InvalidTarget" +// The specified target does not exist, is not in the same VPC as the target +// group, or has an unsupported instance type. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeHealthUnavailableException "HealthUnavailable" +// The health of the specified targets could not be retrieved due to an internal +// error. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/DescribeTargetHealth +func (c *ELBV2) DescribeTargetHealth(input *DescribeTargetHealthInput) (*DescribeTargetHealthOutput, error) { + req, out := c.DescribeTargetHealthRequest(input) + return out, req.Send() +} + +// DescribeTargetHealthWithContext is the same as DescribeTargetHealth with the addition of +// the ability to pass a context and additional request options. +// +// See DescribeTargetHealth for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) DescribeTargetHealthWithContext(ctx aws.Context, input *DescribeTargetHealthInput, opts ...request.Option) (*DescribeTargetHealthOutput, error) { + req, out := c.DescribeTargetHealthRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyListener = "ModifyListener" + +// ModifyListenerRequest generates a "aws/request.Request" representing the +// client's request for the ModifyListener operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyListener for more information on using the ModifyListener +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyListenerRequest method. +// req, resp := client.ModifyListenerRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyListener +func (c *ELBV2) ModifyListenerRequest(input *ModifyListenerInput) (req *request.Request, output *ModifyListenerOutput) { + op := &request.Operation{ + Name: opModifyListener, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyListenerInput{} + } + + output = &ModifyListenerOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyListener API operation for Elastic Load Balancing. +// +// Modifies the specified properties of the specified listener. +// +// Any properties that you do not specify retain their current values. However, +// changing the protocol from HTTPS to HTTP removes the security policy and +// SSL certificate properties. If you change the protocol from HTTP to HTTPS, +// you must add the security policy and server certificate. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation ModifyListener for usage and error information. +// +// Returned Error Codes: +// * ErrCodeDuplicateListenerException "DuplicateListener" +// A listener with the specified port already exists. +// +// * ErrCodeTooManyListenersException "TooManyListeners" +// You've reached the limit on the number of listeners per load balancer. +// +// * ErrCodeTooManyCertificatesException "TooManyCertificates" +// You've reached the limit on the number of certificates per load balancer. +// +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeTargetGroupAssociationLimitException "TargetGroupAssociationLimit" +// You've reached the limit on the number of load balancers per target group. +// +// * ErrCodeIncompatibleProtocolsException "IncompatibleProtocols" +// The specified configuration is not valid with this protocol. +// +// * ErrCodeSSLPolicyNotFoundException "SSLPolicyNotFound" +// The specified SSL policy does not exist. +// +// * ErrCodeCertificateNotFoundException "CertificateNotFound" +// The specified certificate does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// * ErrCodeUnsupportedProtocolException "UnsupportedProtocol" +// The specified protocol is not supported. +// +// * ErrCodeTooManyRegistrationsForTargetIdException "TooManyRegistrationsForTargetId" +// You've reached the limit on the number of times a target can be registered +// with a load balancer. +// +// * ErrCodeTooManyTargetsException "TooManyTargets" +// You've reached the limit on the number of targets. +// +// * ErrCodeTooManyActionsException "TooManyActions" +// You've reached the limit on the number of actions per rule. +// +// * ErrCodeInvalidLoadBalancerActionException "InvalidLoadBalancerAction" +// The requested action is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyListener +func (c *ELBV2) ModifyListener(input *ModifyListenerInput) (*ModifyListenerOutput, error) { + req, out := c.ModifyListenerRequest(input) + return out, req.Send() +} + +// ModifyListenerWithContext is the same as ModifyListener with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyListener for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) ModifyListenerWithContext(ctx aws.Context, input *ModifyListenerInput, opts ...request.Option) (*ModifyListenerOutput, error) { + req, out := c.ModifyListenerRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyLoadBalancerAttributes = "ModifyLoadBalancerAttributes" + +// ModifyLoadBalancerAttributesRequest generates a "aws/request.Request" representing the +// client's request for the ModifyLoadBalancerAttributes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyLoadBalancerAttributes for more information on using the ModifyLoadBalancerAttributes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyLoadBalancerAttributesRequest method. +// req, resp := client.ModifyLoadBalancerAttributesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyLoadBalancerAttributes +func (c *ELBV2) ModifyLoadBalancerAttributesRequest(input *ModifyLoadBalancerAttributesInput) (req *request.Request, output *ModifyLoadBalancerAttributesOutput) { + op := &request.Operation{ + Name: opModifyLoadBalancerAttributes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyLoadBalancerAttributesInput{} + } + + output = &ModifyLoadBalancerAttributesOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyLoadBalancerAttributes API operation for Elastic Load Balancing. +// +// Modifies the specified attributes of the specified Application Load Balancer +// or Network Load Balancer. +// +// If any of the specified attributes can't be modified as requested, the call +// fails. Any existing attributes that you do not modify retain their current +// values. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation ModifyLoadBalancerAttributes for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyLoadBalancerAttributes +func (c *ELBV2) ModifyLoadBalancerAttributes(input *ModifyLoadBalancerAttributesInput) (*ModifyLoadBalancerAttributesOutput, error) { + req, out := c.ModifyLoadBalancerAttributesRequest(input) + return out, req.Send() +} + +// ModifyLoadBalancerAttributesWithContext is the same as ModifyLoadBalancerAttributes with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyLoadBalancerAttributes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) ModifyLoadBalancerAttributesWithContext(ctx aws.Context, input *ModifyLoadBalancerAttributesInput, opts ...request.Option) (*ModifyLoadBalancerAttributesOutput, error) { + req, out := c.ModifyLoadBalancerAttributesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyRule = "ModifyRule" + +// ModifyRuleRequest generates a "aws/request.Request" representing the +// client's request for the ModifyRule operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyRule for more information on using the ModifyRule +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyRuleRequest method. +// req, resp := client.ModifyRuleRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyRule +func (c *ELBV2) ModifyRuleRequest(input *ModifyRuleInput) (req *request.Request, output *ModifyRuleOutput) { + op := &request.Operation{ + Name: opModifyRule, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyRuleInput{} + } + + output = &ModifyRuleOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyRule API operation for Elastic Load Balancing. +// +// Modifies the specified rule. +// +// Any existing properties that you do not modify retain their current values. +// +// To modify the actions for the default rule, use ModifyListener. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation ModifyRule for usage and error information. +// +// Returned Error Codes: +// * ErrCodeTargetGroupAssociationLimitException "TargetGroupAssociationLimit" +// You've reached the limit on the number of load balancers per target group. +// +// * ErrCodeIncompatibleProtocolsException "IncompatibleProtocols" +// The specified configuration is not valid with this protocol. +// +// * ErrCodeRuleNotFoundException "RuleNotFound" +// The specified rule does not exist. +// +// * ErrCodeOperationNotPermittedException "OperationNotPermitted" +// This operation is not allowed. +// +// * ErrCodeTooManyRegistrationsForTargetIdException "TooManyRegistrationsForTargetId" +// You've reached the limit on the number of times a target can be registered +// with a load balancer. +// +// * ErrCodeTooManyTargetsException "TooManyTargets" +// You've reached the limit on the number of targets. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeUnsupportedProtocolException "UnsupportedProtocol" +// The specified protocol is not supported. +// +// * ErrCodeTooManyActionsException "TooManyActions" +// You've reached the limit on the number of actions per rule. +// +// * ErrCodeInvalidLoadBalancerActionException "InvalidLoadBalancerAction" +// The requested action is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyRule +func (c *ELBV2) ModifyRule(input *ModifyRuleInput) (*ModifyRuleOutput, error) { + req, out := c.ModifyRuleRequest(input) + return out, req.Send() +} + +// ModifyRuleWithContext is the same as ModifyRule with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyRule for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) ModifyRuleWithContext(ctx aws.Context, input *ModifyRuleInput, opts ...request.Option) (*ModifyRuleOutput, error) { + req, out := c.ModifyRuleRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyTargetGroup = "ModifyTargetGroup" + +// ModifyTargetGroupRequest generates a "aws/request.Request" representing the +// client's request for the ModifyTargetGroup operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyTargetGroup for more information on using the ModifyTargetGroup +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyTargetGroupRequest method. +// req, resp := client.ModifyTargetGroupRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyTargetGroup +func (c *ELBV2) ModifyTargetGroupRequest(input *ModifyTargetGroupInput) (req *request.Request, output *ModifyTargetGroupOutput) { + op := &request.Operation{ + Name: opModifyTargetGroup, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyTargetGroupInput{} + } + + output = &ModifyTargetGroupOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyTargetGroup API operation for Elastic Load Balancing. +// +// Modifies the health checks used when evaluating the health state of the targets +// in the specified target group. +// +// To monitor the health of the targets, use DescribeTargetHealth. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation ModifyTargetGroup for usage and error information. +// +// Returned Error Codes: +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyTargetGroup +func (c *ELBV2) ModifyTargetGroup(input *ModifyTargetGroupInput) (*ModifyTargetGroupOutput, error) { + req, out := c.ModifyTargetGroupRequest(input) + return out, req.Send() +} + +// ModifyTargetGroupWithContext is the same as ModifyTargetGroup with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyTargetGroup for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) ModifyTargetGroupWithContext(ctx aws.Context, input *ModifyTargetGroupInput, opts ...request.Option) (*ModifyTargetGroupOutput, error) { + req, out := c.ModifyTargetGroupRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opModifyTargetGroupAttributes = "ModifyTargetGroupAttributes" + +// ModifyTargetGroupAttributesRequest generates a "aws/request.Request" representing the +// client's request for the ModifyTargetGroupAttributes operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See ModifyTargetGroupAttributes for more information on using the ModifyTargetGroupAttributes +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the ModifyTargetGroupAttributesRequest method. +// req, resp := client.ModifyTargetGroupAttributesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyTargetGroupAttributes +func (c *ELBV2) ModifyTargetGroupAttributesRequest(input *ModifyTargetGroupAttributesInput) (req *request.Request, output *ModifyTargetGroupAttributesOutput) { + op := &request.Operation{ + Name: opModifyTargetGroupAttributes, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &ModifyTargetGroupAttributesInput{} + } + + output = &ModifyTargetGroupAttributesOutput{} + req = c.newRequest(op, input, output) + return +} + +// ModifyTargetGroupAttributes API operation for Elastic Load Balancing. +// +// Modifies the specified attributes of the specified target group. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation ModifyTargetGroupAttributes for usage and error information. +// +// Returned Error Codes: +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/ModifyTargetGroupAttributes +func (c *ELBV2) ModifyTargetGroupAttributes(input *ModifyTargetGroupAttributesInput) (*ModifyTargetGroupAttributesOutput, error) { + req, out := c.ModifyTargetGroupAttributesRequest(input) + return out, req.Send() +} + +// ModifyTargetGroupAttributesWithContext is the same as ModifyTargetGroupAttributes with the addition of +// the ability to pass a context and additional request options. +// +// See ModifyTargetGroupAttributes for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) ModifyTargetGroupAttributesWithContext(ctx aws.Context, input *ModifyTargetGroupAttributesInput, opts ...request.Option) (*ModifyTargetGroupAttributesOutput, error) { + req, out := c.ModifyTargetGroupAttributesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRegisterTargets = "RegisterTargets" + +// RegisterTargetsRequest generates a "aws/request.Request" representing the +// client's request for the RegisterTargets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RegisterTargets for more information on using the RegisterTargets +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RegisterTargetsRequest method. +// req, resp := client.RegisterTargetsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/RegisterTargets +func (c *ELBV2) RegisterTargetsRequest(input *RegisterTargetsInput) (req *request.Request, output *RegisterTargetsOutput) { + op := &request.Operation{ + Name: opRegisterTargets, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RegisterTargetsInput{} + } + + output = &RegisterTargetsOutput{} + req = c.newRequest(op, input, output) + return +} + +// RegisterTargets API operation for Elastic Load Balancing. +// +// Registers the specified targets with the specified target group. +// +// You can register targets by instance ID or by IP address. If the target is +// an EC2 instance, it must be in the running state when you register it. +// +// By default, the load balancer routes requests to registered targets using +// the protocol and port for the target group. Alternatively, you can override +// the port for a target when you register it. You can register each EC2 instance +// or IP address with the same target group multiple times using different ports. +// +// With a Network Load Balancer, you cannot register instances by instance ID +// if they have the following instance types: C1, CC1, CC2, CG1, CG2, CR1, CS1, +// G1, G2, HI1, HS1, M1, M2, M3, and T1. You can register instances of these +// types by IP address. +// +// To remove a target from a target group, use DeregisterTargets. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation RegisterTargets for usage and error information. +// +// Returned Error Codes: +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeTooManyTargetsException "TooManyTargets" +// You've reached the limit on the number of targets. +// +// * ErrCodeInvalidTargetException "InvalidTarget" +// The specified target does not exist, is not in the same VPC as the target +// group, or has an unsupported instance type. +// +// * ErrCodeTooManyRegistrationsForTargetIdException "TooManyRegistrationsForTargetId" +// You've reached the limit on the number of times a target can be registered +// with a load balancer. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/RegisterTargets +func (c *ELBV2) RegisterTargets(input *RegisterTargetsInput) (*RegisterTargetsOutput, error) { + req, out := c.RegisterTargetsRequest(input) + return out, req.Send() +} + +// RegisterTargetsWithContext is the same as RegisterTargets with the addition of +// the ability to pass a context and additional request options. +// +// See RegisterTargets for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) RegisterTargetsWithContext(ctx aws.Context, input *RegisterTargetsInput, opts ...request.Option) (*RegisterTargetsOutput, error) { + req, out := c.RegisterTargetsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRemoveListenerCertificates = "RemoveListenerCertificates" + +// RemoveListenerCertificatesRequest generates a "aws/request.Request" representing the +// client's request for the RemoveListenerCertificates operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RemoveListenerCertificates for more information on using the RemoveListenerCertificates +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RemoveListenerCertificatesRequest method. +// req, resp := client.RemoveListenerCertificatesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/RemoveListenerCertificates +func (c *ELBV2) RemoveListenerCertificatesRequest(input *RemoveListenerCertificatesInput) (req *request.Request, output *RemoveListenerCertificatesOutput) { + op := &request.Operation{ + Name: opRemoveListenerCertificates, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RemoveListenerCertificatesInput{} + } + + output = &RemoveListenerCertificatesOutput{} + req = c.newRequest(op, input, output) + return +} + +// RemoveListenerCertificates API operation for Elastic Load Balancing. +// +// Removes the specified certificate from the specified secure listener. +// +// You can't remove the default certificate for a listener. To replace the default +// certificate, call ModifyListener. +// +// To list the certificates for your listener, use DescribeListenerCertificates. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation RemoveListenerCertificates for usage and error information. +// +// Returned Error Codes: +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeOperationNotPermittedException "OperationNotPermitted" +// This operation is not allowed. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/RemoveListenerCertificates +func (c *ELBV2) RemoveListenerCertificates(input *RemoveListenerCertificatesInput) (*RemoveListenerCertificatesOutput, error) { + req, out := c.RemoveListenerCertificatesRequest(input) + return out, req.Send() +} + +// RemoveListenerCertificatesWithContext is the same as RemoveListenerCertificates with the addition of +// the ability to pass a context and additional request options. +// +// See RemoveListenerCertificates for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) RemoveListenerCertificatesWithContext(ctx aws.Context, input *RemoveListenerCertificatesInput, opts ...request.Option) (*RemoveListenerCertificatesOutput, error) { + req, out := c.RemoveListenerCertificatesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opRemoveTags = "RemoveTags" + +// RemoveTagsRequest generates a "aws/request.Request" representing the +// client's request for the RemoveTags operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See RemoveTags for more information on using the RemoveTags +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the RemoveTagsRequest method. +// req, resp := client.RemoveTagsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/RemoveTags +func (c *ELBV2) RemoveTagsRequest(input *RemoveTagsInput) (req *request.Request, output *RemoveTagsOutput) { + op := &request.Operation{ + Name: opRemoveTags, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &RemoveTagsInput{} + } + + output = &RemoveTagsOutput{} + req = c.newRequest(op, input, output) + return +} + +// RemoveTags API operation for Elastic Load Balancing. +// +// Removes the specified tags from the specified Elastic Load Balancing resource. +// +// To list the current tags for your resources, use DescribeTags. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation RemoveTags for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeTargetGroupNotFoundException "TargetGroupNotFound" +// The specified target group does not exist. +// +// * ErrCodeListenerNotFoundException "ListenerNotFound" +// The specified listener does not exist. +// +// * ErrCodeRuleNotFoundException "RuleNotFound" +// The specified rule does not exist. +// +// * ErrCodeTooManyTagsException "TooManyTags" +// You've reached the limit on the number of tags per load balancer. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/RemoveTags +func (c *ELBV2) RemoveTags(input *RemoveTagsInput) (*RemoveTagsOutput, error) { + req, out := c.RemoveTagsRequest(input) + return out, req.Send() +} + +// RemoveTagsWithContext is the same as RemoveTags with the addition of +// the ability to pass a context and additional request options. +// +// See RemoveTags for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) RemoveTagsWithContext(ctx aws.Context, input *RemoveTagsInput, opts ...request.Option) (*RemoveTagsOutput, error) { + req, out := c.RemoveTagsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opSetIpAddressType = "SetIpAddressType" + +// SetIpAddressTypeRequest generates a "aws/request.Request" representing the +// client's request for the SetIpAddressType operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See SetIpAddressType for more information on using the SetIpAddressType +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the SetIpAddressTypeRequest method. +// req, resp := client.SetIpAddressTypeRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetIpAddressType +func (c *ELBV2) SetIpAddressTypeRequest(input *SetIpAddressTypeInput) (req *request.Request, output *SetIpAddressTypeOutput) { + op := &request.Operation{ + Name: opSetIpAddressType, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &SetIpAddressTypeInput{} + } + + output = &SetIpAddressTypeOutput{} + req = c.newRequest(op, input, output) + return +} + +// SetIpAddressType API operation for Elastic Load Balancing. +// +// Sets the type of IP addresses used by the subnets of the specified Application +// Load Balancer or Network Load Balancer. +// +// Network Load Balancers must use ipv4. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation SetIpAddressType for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// * ErrCodeInvalidSubnetException "InvalidSubnet" +// The specified subnet is out of available addresses. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetIpAddressType +func (c *ELBV2) SetIpAddressType(input *SetIpAddressTypeInput) (*SetIpAddressTypeOutput, error) { + req, out := c.SetIpAddressTypeRequest(input) + return out, req.Send() +} + +// SetIpAddressTypeWithContext is the same as SetIpAddressType with the addition of +// the ability to pass a context and additional request options. +// +// See SetIpAddressType for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) SetIpAddressTypeWithContext(ctx aws.Context, input *SetIpAddressTypeInput, opts ...request.Option) (*SetIpAddressTypeOutput, error) { + req, out := c.SetIpAddressTypeRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opSetRulePriorities = "SetRulePriorities" + +// SetRulePrioritiesRequest generates a "aws/request.Request" representing the +// client's request for the SetRulePriorities operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See SetRulePriorities for more information on using the SetRulePriorities +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the SetRulePrioritiesRequest method. +// req, resp := client.SetRulePrioritiesRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetRulePriorities +func (c *ELBV2) SetRulePrioritiesRequest(input *SetRulePrioritiesInput) (req *request.Request, output *SetRulePrioritiesOutput) { + op := &request.Operation{ + Name: opSetRulePriorities, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &SetRulePrioritiesInput{} + } + + output = &SetRulePrioritiesOutput{} + req = c.newRequest(op, input, output) + return +} + +// SetRulePriorities API operation for Elastic Load Balancing. +// +// Sets the priorities of the specified rules. +// +// You can reorder the rules as long as there are no priority conflicts in the +// new order. Any existing rules that you do not specify retain their current +// priority. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation SetRulePriorities for usage and error information. +// +// Returned Error Codes: +// * ErrCodeRuleNotFoundException "RuleNotFound" +// The specified rule does not exist. +// +// * ErrCodePriorityInUseException "PriorityInUse" +// The specified priority is in use. +// +// * ErrCodeOperationNotPermittedException "OperationNotPermitted" +// This operation is not allowed. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetRulePriorities +func (c *ELBV2) SetRulePriorities(input *SetRulePrioritiesInput) (*SetRulePrioritiesOutput, error) { + req, out := c.SetRulePrioritiesRequest(input) + return out, req.Send() +} + +// SetRulePrioritiesWithContext is the same as SetRulePriorities with the addition of +// the ability to pass a context and additional request options. +// +// See SetRulePriorities for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) SetRulePrioritiesWithContext(ctx aws.Context, input *SetRulePrioritiesInput, opts ...request.Option) (*SetRulePrioritiesOutput, error) { + req, out := c.SetRulePrioritiesRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opSetSecurityGroups = "SetSecurityGroups" + +// SetSecurityGroupsRequest generates a "aws/request.Request" representing the +// client's request for the SetSecurityGroups operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See SetSecurityGroups for more information on using the SetSecurityGroups +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the SetSecurityGroupsRequest method. +// req, resp := client.SetSecurityGroupsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetSecurityGroups +func (c *ELBV2) SetSecurityGroupsRequest(input *SetSecurityGroupsInput) (req *request.Request, output *SetSecurityGroupsOutput) { + op := &request.Operation{ + Name: opSetSecurityGroups, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &SetSecurityGroupsInput{} + } + + output = &SetSecurityGroupsOutput{} + req = c.newRequest(op, input, output) + return +} + +// SetSecurityGroups API operation for Elastic Load Balancing. +// +// Associates the specified security groups with the specified Application Load +// Balancer. The specified security groups override the previously associated +// security groups. +// +// You can't specify a security group for a Network Load Balancer. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation SetSecurityGroups for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// * ErrCodeInvalidSecurityGroupException "InvalidSecurityGroup" +// The specified security group does not exist. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetSecurityGroups +func (c *ELBV2) SetSecurityGroups(input *SetSecurityGroupsInput) (*SetSecurityGroupsOutput, error) { + req, out := c.SetSecurityGroupsRequest(input) + return out, req.Send() +} + +// SetSecurityGroupsWithContext is the same as SetSecurityGroups with the addition of +// the ability to pass a context and additional request options. +// +// See SetSecurityGroups for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) SetSecurityGroupsWithContext(ctx aws.Context, input *SetSecurityGroupsInput, opts ...request.Option) (*SetSecurityGroupsOutput, error) { + req, out := c.SetSecurityGroupsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +const opSetSubnets = "SetSubnets" + +// SetSubnetsRequest generates a "aws/request.Request" representing the +// client's request for the SetSubnets operation. The "output" return +// value will be populated with the request's response once the request completes +// successfully. +// +// Use "Send" method on the returned Request to send the API call to the service. +// the "output" return value is not valid until after Send returns without error. +// +// See SetSubnets for more information on using the SetSubnets +// API call, and error handling. +// +// This method is useful when you want to inject custom logic or configuration +// into the SDK's request lifecycle. Such as custom headers, or retry logic. +// +// +// // Example sending a request using the SetSubnetsRequest method. +// req, resp := client.SetSubnetsRequest(params) +// +// err := req.Send() +// if err == nil { // resp is now filled +// fmt.Println(resp) +// } +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetSubnets +func (c *ELBV2) SetSubnetsRequest(input *SetSubnetsInput) (req *request.Request, output *SetSubnetsOutput) { + op := &request.Operation{ + Name: opSetSubnets, + HTTPMethod: "POST", + HTTPPath: "/", + } + + if input == nil { + input = &SetSubnetsInput{} + } + + output = &SetSubnetsOutput{} + req = c.newRequest(op, input, output) + return +} + +// SetSubnets API operation for Elastic Load Balancing. +// +// Enables the Availability Zone for the specified public subnets for the specified +// Application Load Balancer. The specified subnets replace the previously enabled +// subnets. +// +// You can't change the subnets for a Network Load Balancer. +// +// Returns awserr.Error for service API and SDK errors. Use runtime type assertions +// with awserr.Error's Code and Message methods to get detailed information about +// the error. +// +// See the AWS API reference guide for Elastic Load Balancing's +// API operation SetSubnets for usage and error information. +// +// Returned Error Codes: +// * ErrCodeLoadBalancerNotFoundException "LoadBalancerNotFound" +// The specified load balancer does not exist. +// +// * ErrCodeInvalidConfigurationRequestException "InvalidConfigurationRequest" +// The requested configuration is not valid. +// +// * ErrCodeSubnetNotFoundException "SubnetNotFound" +// The specified subnet does not exist. +// +// * ErrCodeInvalidSubnetException "InvalidSubnet" +// The specified subnet is out of available addresses. +// +// * ErrCodeAllocationIdNotFoundException "AllocationIdNotFound" +// The specified allocation ID does not exist. +// +// * ErrCodeAvailabilityZoneNotSupportedException "AvailabilityZoneNotSupported" +// The specified Availability Zone is not supported. +// +// See also, https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01/SetSubnets +func (c *ELBV2) SetSubnets(input *SetSubnetsInput) (*SetSubnetsOutput, error) { + req, out := c.SetSubnetsRequest(input) + return out, req.Send() +} + +// SetSubnetsWithContext is the same as SetSubnets with the addition of +// the ability to pass a context and additional request options. +// +// See SetSubnets for details on how to use this API operation. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) SetSubnetsWithContext(ctx aws.Context, input *SetSubnetsInput, opts ...request.Option) (*SetSubnetsOutput, error) { + req, out := c.SetSubnetsRequest(input) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return out, req.Send() +} + +// Information about an action. +type Action struct { + _ struct{} `type:"structure"` + + // [HTTPS listener] Information for using Amazon Cognito to authenticate users. + // Specify only when Type is authenticate-cognito. + AuthenticateCognitoConfig *AuthenticateCognitoActionConfig `type:"structure"` + + // [HTTPS listener] Information about an identity provider that is compliant + // with OpenID Connect (OIDC). Specify only when Type is authenticate-oidc. + AuthenticateOidcConfig *AuthenticateOidcActionConfig `type:"structure"` + + // [Application Load Balancer] Information for creating an action that returns + // a custom HTTP response. Specify only when Type is fixed-response. + FixedResponseConfig *FixedResponseActionConfig `type:"structure"` + + // The order for the action. This value is required for rules with multiple + // actions. The action with the lowest value for order is performed first. The + // final action to be performed must be a forward or a fixed-response action. + Order *int64 `min:"1" type:"integer"` + + // [Application Load Balancer] Information for creating a redirect action. Specify + // only when Type is redirect. + RedirectConfig *RedirectActionConfig `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. Specify only when Type + // is forward. + TargetGroupArn *string `type:"string"` + + // The type of action. Each rule must include exactly one of the following types + // of actions: forward, fixed-response, or redirect. + // + // Type is a required field + Type *string `type:"string" required:"true" enum:"ActionTypeEnum"` +} + +// String returns the string representation +func (s Action) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Action) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Action) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Action"} + if s.Order != nil && *s.Order < 1 { + invalidParams.Add(request.NewErrParamMinValue("Order", 1)) + } + if s.Type == nil { + invalidParams.Add(request.NewErrParamRequired("Type")) + } + if s.AuthenticateCognitoConfig != nil { + if err := s.AuthenticateCognitoConfig.Validate(); err != nil { + invalidParams.AddNested("AuthenticateCognitoConfig", err.(request.ErrInvalidParams)) + } + } + if s.AuthenticateOidcConfig != nil { + if err := s.AuthenticateOidcConfig.Validate(); err != nil { + invalidParams.AddNested("AuthenticateOidcConfig", err.(request.ErrInvalidParams)) + } + } + if s.FixedResponseConfig != nil { + if err := s.FixedResponseConfig.Validate(); err != nil { + invalidParams.AddNested("FixedResponseConfig", err.(request.ErrInvalidParams)) + } + } + if s.RedirectConfig != nil { + if err := s.RedirectConfig.Validate(); err != nil { + invalidParams.AddNested("RedirectConfig", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAuthenticateCognitoConfig sets the AuthenticateCognitoConfig field's value. +func (s *Action) SetAuthenticateCognitoConfig(v *AuthenticateCognitoActionConfig) *Action { + s.AuthenticateCognitoConfig = v + return s +} + +// SetAuthenticateOidcConfig sets the AuthenticateOidcConfig field's value. +func (s *Action) SetAuthenticateOidcConfig(v *AuthenticateOidcActionConfig) *Action { + s.AuthenticateOidcConfig = v + return s +} + +// SetFixedResponseConfig sets the FixedResponseConfig field's value. +func (s *Action) SetFixedResponseConfig(v *FixedResponseActionConfig) *Action { + s.FixedResponseConfig = v + return s +} + +// SetOrder sets the Order field's value. +func (s *Action) SetOrder(v int64) *Action { + s.Order = &v + return s +} + +// SetRedirectConfig sets the RedirectConfig field's value. +func (s *Action) SetRedirectConfig(v *RedirectActionConfig) *Action { + s.RedirectConfig = v + return s +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *Action) SetTargetGroupArn(v string) *Action { + s.TargetGroupArn = &v + return s +} + +// SetType sets the Type field's value. +func (s *Action) SetType(v string) *Action { + s.Type = &v + return s +} + +type AddListenerCertificatesInput struct { + _ struct{} `type:"structure"` + + // The certificate to add. You can specify one certificate per call. + // + // Certificates is a required field + Certificates []*Certificate `type:"list" required:"true"` + + // The Amazon Resource Name (ARN) of the listener. + // + // ListenerArn is a required field + ListenerArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AddListenerCertificatesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AddListenerCertificatesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AddListenerCertificatesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AddListenerCertificatesInput"} + if s.Certificates == nil { + invalidParams.Add(request.NewErrParamRequired("Certificates")) + } + if s.ListenerArn == nil { + invalidParams.Add(request.NewErrParamRequired("ListenerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificates sets the Certificates field's value. +func (s *AddListenerCertificatesInput) SetCertificates(v []*Certificate) *AddListenerCertificatesInput { + s.Certificates = v + return s +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *AddListenerCertificatesInput) SetListenerArn(v string) *AddListenerCertificatesInput { + s.ListenerArn = &v + return s +} + +type AddListenerCertificatesOutput struct { + _ struct{} `type:"structure"` + + // Information about the certificates. + Certificates []*Certificate `type:"list"` +} + +// String returns the string representation +func (s AddListenerCertificatesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AddListenerCertificatesOutput) GoString() string { + return s.String() +} + +// SetCertificates sets the Certificates field's value. +func (s *AddListenerCertificatesOutput) SetCertificates(v []*Certificate) *AddListenerCertificatesOutput { + s.Certificates = v + return s +} + +type AddTagsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the resource. + // + // ResourceArns is a required field + ResourceArns []*string `type:"list" required:"true"` + + // The tags. Each resource can have a maximum of 10 tags. + // + // Tags is a required field + Tags []*Tag `min:"1" type:"list" required:"true"` +} + +// String returns the string representation +func (s AddTagsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AddTagsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AddTagsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AddTagsInput"} + if s.ResourceArns == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArns")) + } + if s.Tags == nil { + invalidParams.Add(request.NewErrParamRequired("Tags")) + } + if s.Tags != nil && len(s.Tags) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Tags", 1)) + } + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetResourceArns sets the ResourceArns field's value. +func (s *AddTagsInput) SetResourceArns(v []*string) *AddTagsInput { + s.ResourceArns = v + return s +} + +// SetTags sets the Tags field's value. +func (s *AddTagsInput) SetTags(v []*Tag) *AddTagsInput { + s.Tags = v + return s +} + +type AddTagsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s AddTagsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AddTagsOutput) GoString() string { + return s.String() +} + +// Request parameters to use when integrating with Amazon Cognito to authenticate +// users. +type AuthenticateCognitoActionConfig struct { + _ struct{} `type:"structure"` + + // The query parameters (up to 10) to include in the redirect request to the + // authorization endpoint. + AuthenticationRequestExtraParams map[string]*string `type:"map"` + + // The behavior if the user is not authenticated. The following are possible + // values: + // + // * deny - Return an HTTP 401 Unauthorized error. + // + // * allow - Allow the request to be forwarded to the target. + // + // authenticate + OnUnauthenticatedRequest *string `type:"string" enum:"AuthenticateCognitoActionConditionalBehaviorEnum"` + + // The set of user claims to be requested from the IdP. The default is openid. + // + // To verify which scope values your IdP supports and how to separate multiple + // values, see the documentation for your IdP. + Scope *string `type:"string"` + + // The name of the cookie used to maintain session information. The default + // is AWSELBAuthSessionCookie. + SessionCookieName *string `type:"string"` + + // The maximum duration of the authentication session, in seconds. The default + // is 604800 seconds (7 days). + SessionTimeout *int64 `type:"long"` + + // The Amazon Resource Name (ARN) of the Amazon Cognito user pool. + // + // UserPoolArn is a required field + UserPoolArn *string `type:"string" required:"true"` + + // The ID of the Amazon Cognito user pool client. + // + // UserPoolClientId is a required field + UserPoolClientId *string `type:"string" required:"true"` + + // The domain prefix or fully-qualified domain name of the Amazon Cognito user + // pool. + // + // UserPoolDomain is a required field + UserPoolDomain *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AuthenticateCognitoActionConfig) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthenticateCognitoActionConfig) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AuthenticateCognitoActionConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AuthenticateCognitoActionConfig"} + if s.UserPoolArn == nil { + invalidParams.Add(request.NewErrParamRequired("UserPoolArn")) + } + if s.UserPoolClientId == nil { + invalidParams.Add(request.NewErrParamRequired("UserPoolClientId")) + } + if s.UserPoolDomain == nil { + invalidParams.Add(request.NewErrParamRequired("UserPoolDomain")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAuthenticationRequestExtraParams sets the AuthenticationRequestExtraParams field's value. +func (s *AuthenticateCognitoActionConfig) SetAuthenticationRequestExtraParams(v map[string]*string) *AuthenticateCognitoActionConfig { + s.AuthenticationRequestExtraParams = v + return s +} + +// SetOnUnauthenticatedRequest sets the OnUnauthenticatedRequest field's value. +func (s *AuthenticateCognitoActionConfig) SetOnUnauthenticatedRequest(v string) *AuthenticateCognitoActionConfig { + s.OnUnauthenticatedRequest = &v + return s +} + +// SetScope sets the Scope field's value. +func (s *AuthenticateCognitoActionConfig) SetScope(v string) *AuthenticateCognitoActionConfig { + s.Scope = &v + return s +} + +// SetSessionCookieName sets the SessionCookieName field's value. +func (s *AuthenticateCognitoActionConfig) SetSessionCookieName(v string) *AuthenticateCognitoActionConfig { + s.SessionCookieName = &v + return s +} + +// SetSessionTimeout sets the SessionTimeout field's value. +func (s *AuthenticateCognitoActionConfig) SetSessionTimeout(v int64) *AuthenticateCognitoActionConfig { + s.SessionTimeout = &v + return s +} + +// SetUserPoolArn sets the UserPoolArn field's value. +func (s *AuthenticateCognitoActionConfig) SetUserPoolArn(v string) *AuthenticateCognitoActionConfig { + s.UserPoolArn = &v + return s +} + +// SetUserPoolClientId sets the UserPoolClientId field's value. +func (s *AuthenticateCognitoActionConfig) SetUserPoolClientId(v string) *AuthenticateCognitoActionConfig { + s.UserPoolClientId = &v + return s +} + +// SetUserPoolDomain sets the UserPoolDomain field's value. +func (s *AuthenticateCognitoActionConfig) SetUserPoolDomain(v string) *AuthenticateCognitoActionConfig { + s.UserPoolDomain = &v + return s +} + +// Request parameters when using an identity provider (IdP) that is compliant +// with OpenID Connect (OIDC) to authenticate users. +type AuthenticateOidcActionConfig struct { + _ struct{} `type:"structure"` + + // The query parameters (up to 10) to include in the redirect request to the + // authorization endpoint. + AuthenticationRequestExtraParams map[string]*string `type:"map"` + + // The authorization endpoint of the IdP. This must be a full URL, including + // the HTTPS protocol, the domain, and the path. + // + // AuthorizationEndpoint is a required field + AuthorizationEndpoint *string `type:"string" required:"true"` + + // The OAuth 2.0 client identifier. + // + // ClientId is a required field + ClientId *string `type:"string" required:"true"` + + // The OAuth 2.0 client secret. + // + // ClientSecret is a required field + ClientSecret *string `type:"string" required:"true"` + + // The OIDC issuer identifier of the IdP. This must be a full URL, including + // the HTTPS protocol, the domain, and the path. + // + // Issuer is a required field + Issuer *string `type:"string" required:"true"` + + // The behavior if the user is not authenticated. The following are possible + // values: + // + // * deny - Return an HTTP 401 Unauthorized error. + // + // * allow - Allow the request to be forwarded to the target. + // + // authenticate + OnUnauthenticatedRequest *string `type:"string" enum:"AuthenticateOidcActionConditionalBehaviorEnum"` + + // The set of user claims to be requested from the IdP. The default is openid. + // + // To verify which scope values your IdP supports and how to separate multiple + // values, see the documentation for your IdP. + Scope *string `type:"string"` + + // The name of the cookie used to maintain session information. The default + // is AWSELBAuthSessionCookie. + SessionCookieName *string `type:"string"` + + // The maximum duration of the authentication session, in seconds. The default + // is 604800 seconds (7 days). + SessionTimeout *int64 `type:"long"` + + // The token endpoint of the IdP. This must be a full URL, including the HTTPS + // protocol, the domain, and the path. + // + // TokenEndpoint is a required field + TokenEndpoint *string `type:"string" required:"true"` + + // The user info endpoint of the IdP. This must be a full URL, including the + // HTTPS protocol, the domain, and the path. + // + // UserInfoEndpoint is a required field + UserInfoEndpoint *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s AuthenticateOidcActionConfig) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AuthenticateOidcActionConfig) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *AuthenticateOidcActionConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "AuthenticateOidcActionConfig"} + if s.AuthorizationEndpoint == nil { + invalidParams.Add(request.NewErrParamRequired("AuthorizationEndpoint")) + } + if s.ClientId == nil { + invalidParams.Add(request.NewErrParamRequired("ClientId")) + } + if s.ClientSecret == nil { + invalidParams.Add(request.NewErrParamRequired("ClientSecret")) + } + if s.Issuer == nil { + invalidParams.Add(request.NewErrParamRequired("Issuer")) + } + if s.TokenEndpoint == nil { + invalidParams.Add(request.NewErrParamRequired("TokenEndpoint")) + } + if s.UserInfoEndpoint == nil { + invalidParams.Add(request.NewErrParamRequired("UserInfoEndpoint")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAuthenticationRequestExtraParams sets the AuthenticationRequestExtraParams field's value. +func (s *AuthenticateOidcActionConfig) SetAuthenticationRequestExtraParams(v map[string]*string) *AuthenticateOidcActionConfig { + s.AuthenticationRequestExtraParams = v + return s +} + +// SetAuthorizationEndpoint sets the AuthorizationEndpoint field's value. +func (s *AuthenticateOidcActionConfig) SetAuthorizationEndpoint(v string) *AuthenticateOidcActionConfig { + s.AuthorizationEndpoint = &v + return s +} + +// SetClientId sets the ClientId field's value. +func (s *AuthenticateOidcActionConfig) SetClientId(v string) *AuthenticateOidcActionConfig { + s.ClientId = &v + return s +} + +// SetClientSecret sets the ClientSecret field's value. +func (s *AuthenticateOidcActionConfig) SetClientSecret(v string) *AuthenticateOidcActionConfig { + s.ClientSecret = &v + return s +} + +// SetIssuer sets the Issuer field's value. +func (s *AuthenticateOidcActionConfig) SetIssuer(v string) *AuthenticateOidcActionConfig { + s.Issuer = &v + return s +} + +// SetOnUnauthenticatedRequest sets the OnUnauthenticatedRequest field's value. +func (s *AuthenticateOidcActionConfig) SetOnUnauthenticatedRequest(v string) *AuthenticateOidcActionConfig { + s.OnUnauthenticatedRequest = &v + return s +} + +// SetScope sets the Scope field's value. +func (s *AuthenticateOidcActionConfig) SetScope(v string) *AuthenticateOidcActionConfig { + s.Scope = &v + return s +} + +// SetSessionCookieName sets the SessionCookieName field's value. +func (s *AuthenticateOidcActionConfig) SetSessionCookieName(v string) *AuthenticateOidcActionConfig { + s.SessionCookieName = &v + return s +} + +// SetSessionTimeout sets the SessionTimeout field's value. +func (s *AuthenticateOidcActionConfig) SetSessionTimeout(v int64) *AuthenticateOidcActionConfig { + s.SessionTimeout = &v + return s +} + +// SetTokenEndpoint sets the TokenEndpoint field's value. +func (s *AuthenticateOidcActionConfig) SetTokenEndpoint(v string) *AuthenticateOidcActionConfig { + s.TokenEndpoint = &v + return s +} + +// SetUserInfoEndpoint sets the UserInfoEndpoint field's value. +func (s *AuthenticateOidcActionConfig) SetUserInfoEndpoint(v string) *AuthenticateOidcActionConfig { + s.UserInfoEndpoint = &v + return s +} + +// Information about an Availability Zone. +type AvailabilityZone struct { + _ struct{} `type:"structure"` + + // [Network Load Balancers] The static IP address. + LoadBalancerAddresses []*LoadBalancerAddress `type:"list"` + + // The ID of the subnet. + SubnetId *string `type:"string"` + + // The name of the Availability Zone. + ZoneName *string `type:"string"` +} + +// String returns the string representation +func (s AvailabilityZone) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s AvailabilityZone) GoString() string { + return s.String() +} + +// SetLoadBalancerAddresses sets the LoadBalancerAddresses field's value. +func (s *AvailabilityZone) SetLoadBalancerAddresses(v []*LoadBalancerAddress) *AvailabilityZone { + s.LoadBalancerAddresses = v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *AvailabilityZone) SetSubnetId(v string) *AvailabilityZone { + s.SubnetId = &v + return s +} + +// SetZoneName sets the ZoneName field's value. +func (s *AvailabilityZone) SetZoneName(v string) *AvailabilityZone { + s.ZoneName = &v + return s +} + +// Information about an SSL server certificate. +type Certificate struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the certificate. + CertificateArn *string `type:"string"` + + // Indicates whether the certificate is the default certificate. + IsDefault *bool `type:"boolean"` +} + +// String returns the string representation +func (s Certificate) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Certificate) GoString() string { + return s.String() +} + +// SetCertificateArn sets the CertificateArn field's value. +func (s *Certificate) SetCertificateArn(v string) *Certificate { + s.CertificateArn = &v + return s +} + +// SetIsDefault sets the IsDefault field's value. +func (s *Certificate) SetIsDefault(v bool) *Certificate { + s.IsDefault = &v + return s +} + +// Information about a cipher used in a policy. +type Cipher struct { + _ struct{} `type:"structure"` + + // The name of the cipher. + Name *string `type:"string"` + + // The priority of the cipher. + Priority *int64 `type:"integer"` +} + +// String returns the string representation +func (s Cipher) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Cipher) GoString() string { + return s.String() +} + +// SetName sets the Name field's value. +func (s *Cipher) SetName(v string) *Cipher { + s.Name = &v + return s +} + +// SetPriority sets the Priority field's value. +func (s *Cipher) SetPriority(v int64) *Cipher { + s.Priority = &v + return s +} + +type CreateListenerInput struct { + _ struct{} `type:"structure"` + + // [HTTPS listeners] The default SSL server certificate. You must provide exactly + // one default certificate. To create a certificate list, use AddListenerCertificates. + Certificates []*Certificate `type:"list"` + + // The actions for the default rule. The rule must include one forward action + // or one or more fixed-response actions. + // + // If the action type is forward, you can specify a single target group. The + // protocol of the target group must be HTTP or HTTPS for an Application Load + // Balancer or TCP for a Network Load Balancer. + // + // [HTTPS listener] If the action type is authenticate-oidc, you can use an + // identity provider that is OpenID Connect (OIDC) compliant to authenticate + // users as they access your application. + // + // [HTTPS listener] If the action type is authenticate-cognito, you can use + // Amazon Cognito to authenticate users as they access your application. + // + // [Application Load Balancer] If the action type is redirect, you can redirect + // HTTP and HTTPS requests. + // + // [Application Load Balancer] If the action type is fixed-response, you can + // return a custom HTTP response. + // + // DefaultActions is a required field + DefaultActions []*Action `type:"list" required:"true"` + + // The Amazon Resource Name (ARN) of the load balancer. + // + // LoadBalancerArn is a required field + LoadBalancerArn *string `type:"string" required:"true"` + + // The port on which the load balancer is listening. + // + // Port is a required field + Port *int64 `min:"1" type:"integer" required:"true"` + + // The protocol for connections from clients to the load balancer. For Application + // Load Balancers, the supported protocols are HTTP and HTTPS. For Network Load + // Balancers, the supported protocol is TCP. + // + // Protocol is a required field + Protocol *string `type:"string" required:"true" enum:"ProtocolEnum"` + + // [HTTPS listeners] The security policy that defines which ciphers and protocols + // are supported. The default is the current predefined security policy. + SslPolicy *string `type:"string"` +} + +// String returns the string representation +func (s CreateListenerInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateListenerInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateListenerInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateListenerInput"} + if s.DefaultActions == nil { + invalidParams.Add(request.NewErrParamRequired("DefaultActions")) + } + if s.LoadBalancerArn == nil { + invalidParams.Add(request.NewErrParamRequired("LoadBalancerArn")) + } + if s.Port == nil { + invalidParams.Add(request.NewErrParamRequired("Port")) + } + if s.Port != nil && *s.Port < 1 { + invalidParams.Add(request.NewErrParamMinValue("Port", 1)) + } + if s.Protocol == nil { + invalidParams.Add(request.NewErrParamRequired("Protocol")) + } + if s.DefaultActions != nil { + for i, v := range s.DefaultActions { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DefaultActions", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificates sets the Certificates field's value. +func (s *CreateListenerInput) SetCertificates(v []*Certificate) *CreateListenerInput { + s.Certificates = v + return s +} + +// SetDefaultActions sets the DefaultActions field's value. +func (s *CreateListenerInput) SetDefaultActions(v []*Action) *CreateListenerInput { + s.DefaultActions = v + return s +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *CreateListenerInput) SetLoadBalancerArn(v string) *CreateListenerInput { + s.LoadBalancerArn = &v + return s +} + +// SetPort sets the Port field's value. +func (s *CreateListenerInput) SetPort(v int64) *CreateListenerInput { + s.Port = &v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *CreateListenerInput) SetProtocol(v string) *CreateListenerInput { + s.Protocol = &v + return s +} + +// SetSslPolicy sets the SslPolicy field's value. +func (s *CreateListenerInput) SetSslPolicy(v string) *CreateListenerInput { + s.SslPolicy = &v + return s +} + +type CreateListenerOutput struct { + _ struct{} `type:"structure"` + + // Information about the listener. + Listeners []*Listener `type:"list"` +} + +// String returns the string representation +func (s CreateListenerOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateListenerOutput) GoString() string { + return s.String() +} + +// SetListeners sets the Listeners field's value. +func (s *CreateListenerOutput) SetListeners(v []*Listener) *CreateListenerOutput { + s.Listeners = v + return s +} + +type CreateLoadBalancerInput struct { + _ struct{} `type:"structure"` + + // [Application Load Balancers] The type of IP addresses used by the subnets + // for your load balancer. The possible values are ipv4 (for IPv4 addresses) + // and dualstack (for IPv4 and IPv6 addresses). Internal load balancers must + // use ipv4. + IpAddressType *string `type:"string" enum:"IpAddressType"` + + // The name of the load balancer. + // + // This name must be unique per region per account, can have a maximum of 32 + // characters, must contain only alphanumeric characters or hyphens, must not + // begin or end with a hyphen, and must not begin with "internal-". + // + // Name is a required field + Name *string `type:"string" required:"true"` + + // The nodes of an Internet-facing load balancer have public IP addresses. The + // DNS name of an Internet-facing load balancer is publicly resolvable to the + // public IP addresses of the nodes. Therefore, Internet-facing load balancers + // can route requests from clients over the internet. + // + // The nodes of an internal load balancer have only private IP addresses. The + // DNS name of an internal load balancer is publicly resolvable to the private + // IP addresses of the nodes. Therefore, internal load balancers can only route + // requests from clients with access to the VPC for the load balancer. + // + // The default is an Internet-facing load balancer. + Scheme *string `type:"string" enum:"LoadBalancerSchemeEnum"` + + // [Application Load Balancers] The IDs of the security groups for the load + // balancer. + SecurityGroups []*string `type:"list"` + + // The IDs of the public subnets. You can specify only one subnet per Availability + // Zone. You must specify either subnets or subnet mappings. + // + // [Application Load Balancers] You must specify subnets from at least two Availability + // Zones. You cannot specify Elastic IP addresses for your subnets. + // + // [Network Load Balancers] You can specify subnets from one or more Availability + // Zones. You can specify one Elastic IP address per subnet. + SubnetMappings []*SubnetMapping `type:"list"` + + // The IDs of the public subnets. You can specify only one subnet per Availability + // Zone. You must specify either subnets or subnet mappings. + // + // [Application Load Balancers] You must specify subnets from at least two Availability + // Zones. + // + // [Network Load Balancers] You can specify subnets from one or more Availability + // Zones. + Subnets []*string `type:"list"` + + // One or more tags to assign to the load balancer. + Tags []*Tag `min:"1" type:"list"` + + // The type of load balancer. The default is application. + Type *string `type:"string" enum:"LoadBalancerTypeEnum"` +} + +// String returns the string representation +func (s CreateLoadBalancerInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateLoadBalancerInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateLoadBalancerInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateLoadBalancerInput"} + if s.Name == nil { + invalidParams.Add(request.NewErrParamRequired("Name")) + } + if s.Tags != nil && len(s.Tags) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Tags", 1)) + } + if s.Tags != nil { + for i, v := range s.Tags { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Tags", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetIpAddressType sets the IpAddressType field's value. +func (s *CreateLoadBalancerInput) SetIpAddressType(v string) *CreateLoadBalancerInput { + s.IpAddressType = &v + return s +} + +// SetName sets the Name field's value. +func (s *CreateLoadBalancerInput) SetName(v string) *CreateLoadBalancerInput { + s.Name = &v + return s +} + +// SetScheme sets the Scheme field's value. +func (s *CreateLoadBalancerInput) SetScheme(v string) *CreateLoadBalancerInput { + s.Scheme = &v + return s +} + +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *CreateLoadBalancerInput) SetSecurityGroups(v []*string) *CreateLoadBalancerInput { + s.SecurityGroups = v + return s +} + +// SetSubnetMappings sets the SubnetMappings field's value. +func (s *CreateLoadBalancerInput) SetSubnetMappings(v []*SubnetMapping) *CreateLoadBalancerInput { + s.SubnetMappings = v + return s +} + +// SetSubnets sets the Subnets field's value. +func (s *CreateLoadBalancerInput) SetSubnets(v []*string) *CreateLoadBalancerInput { + s.Subnets = v + return s +} + +// SetTags sets the Tags field's value. +func (s *CreateLoadBalancerInput) SetTags(v []*Tag) *CreateLoadBalancerInput { + s.Tags = v + return s +} + +// SetType sets the Type field's value. +func (s *CreateLoadBalancerInput) SetType(v string) *CreateLoadBalancerInput { + s.Type = &v + return s +} + +type CreateLoadBalancerOutput struct { + _ struct{} `type:"structure"` + + // Information about the load balancer. + LoadBalancers []*LoadBalancer `type:"list"` +} + +// String returns the string representation +func (s CreateLoadBalancerOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateLoadBalancerOutput) GoString() string { + return s.String() +} + +// SetLoadBalancers sets the LoadBalancers field's value. +func (s *CreateLoadBalancerOutput) SetLoadBalancers(v []*LoadBalancer) *CreateLoadBalancerOutput { + s.LoadBalancers = v + return s +} + +type CreateRuleInput struct { + _ struct{} `type:"structure"` + + // The actions. Each rule must include exactly one of the following types of + // actions: forward, fixed-response, or redirect. + // + // If the action type is forward, you can specify a single target group. + // + // [HTTPS listener] If the action type is authenticate-oidc, you can use an + // identity provider that is OpenID Connect (OIDC) compliant to authenticate + // users as they access your application. + // + // [HTTPS listener] If the action type is authenticate-cognito, you can use + // Amazon Cognito to authenticate users as they access your application. + // + // [Application Load Balancer] If the action type is redirect, you can redirect + // HTTP and HTTPS requests. + // + // [Application Load Balancer] If the action type is fixed-response, you can + // return a custom HTTP response. + // + // Actions is a required field + Actions []*Action `type:"list" required:"true"` + + // The conditions. Each condition specifies a field name and a single value. + // + // If the field name is host-header, you can specify a single host name (for + // example, my.example.com). A host name is case insensitive, can be up to 128 + // characters in length, and can contain any of the following characters. You + // can include up to three wildcard characters. + // + // * A-Z, a-z, 0-9 + // + // * - . + // + // * * (matches 0 or more characters) + // + // * ? (matches exactly 1 character) + // + // If the field name is path-pattern, you can specify a single path pattern. + // A path pattern is case-sensitive, can be up to 128 characters in length, + // and can contain any of the following characters. You can include up to three + // wildcard characters. + // + // * A-Z, a-z, 0-9 + // + // * _ - . $ / ~ " ' @ : + + // + // * & (using &) + // + // * * (matches 0 or more characters) + // + // * ? (matches exactly 1 character) + // + // Conditions is a required field + Conditions []*RuleCondition `type:"list" required:"true"` + + // The Amazon Resource Name (ARN) of the listener. + // + // ListenerArn is a required field + ListenerArn *string `type:"string" required:"true"` + + // The rule priority. A listener can't have multiple rules with the same priority. + // + // Priority is a required field + Priority *int64 `min:"1" type:"integer" required:"true"` +} + +// String returns the string representation +func (s CreateRuleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateRuleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateRuleInput"} + if s.Actions == nil { + invalidParams.Add(request.NewErrParamRequired("Actions")) + } + if s.Conditions == nil { + invalidParams.Add(request.NewErrParamRequired("Conditions")) + } + if s.ListenerArn == nil { + invalidParams.Add(request.NewErrParamRequired("ListenerArn")) + } + if s.Priority == nil { + invalidParams.Add(request.NewErrParamRequired("Priority")) + } + if s.Priority != nil && *s.Priority < 1 { + invalidParams.Add(request.NewErrParamMinValue("Priority", 1)) + } + if s.Actions != nil { + for i, v := range s.Actions { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Actions", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetActions sets the Actions field's value. +func (s *CreateRuleInput) SetActions(v []*Action) *CreateRuleInput { + s.Actions = v + return s +} + +// SetConditions sets the Conditions field's value. +func (s *CreateRuleInput) SetConditions(v []*RuleCondition) *CreateRuleInput { + s.Conditions = v + return s +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *CreateRuleInput) SetListenerArn(v string) *CreateRuleInput { + s.ListenerArn = &v + return s +} + +// SetPriority sets the Priority field's value. +func (s *CreateRuleInput) SetPriority(v int64) *CreateRuleInput { + s.Priority = &v + return s +} + +type CreateRuleOutput struct { + _ struct{} `type:"structure"` + + // Information about the rule. + Rules []*Rule `type:"list"` +} + +// String returns the string representation +func (s CreateRuleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateRuleOutput) GoString() string { + return s.String() +} + +// SetRules sets the Rules field's value. +func (s *CreateRuleOutput) SetRules(v []*Rule) *CreateRuleOutput { + s.Rules = v + return s +} + +type CreateTargetGroupInput struct { + _ struct{} `type:"structure"` + + // The approximate amount of time, in seconds, between health checks of an individual + // target. For Application Load Balancers, the range is 5–300 seconds. For Network + // Load Balancers, the supported values are 10 or 30 seconds. The default is + // 30 seconds. + HealthCheckIntervalSeconds *int64 `min:"5" type:"integer"` + + // [HTTP/HTTPS health checks] The ping path that is the destination on the targets + // for health checks. The default is /. + HealthCheckPath *string `min:"1" type:"string"` + + // The port the load balancer uses when performing health checks on targets. + // The default is traffic-port, which is the port on which each target receives + // traffic from the load balancer. + HealthCheckPort *string `type:"string"` + + // The protocol the load balancer uses when performing health checks on targets. + // The TCP protocol is supported only if the protocol of the target group is + // TCP. For Application Load Balancers, the default is HTTP. For Network Load + // Balancers, the default is TCP. + HealthCheckProtocol *string `type:"string" enum:"ProtocolEnum"` + + // The amount of time, in seconds, during which no response from a target means + // a failed health check. For Application Load Balancers, the range is 2–60 + // seconds and the default is 5 seconds. For Network Load Balancers, this is + // 10 seconds for TCP and HTTPS health checks and 6 seconds for HTTP health + // checks. + HealthCheckTimeoutSeconds *int64 `min:"2" type:"integer"` + + // The number of consecutive health checks successes required before considering + // an unhealthy target healthy. For Application Load Balancers, the default + // is 5. For Network Load Balancers, the default is 3. + HealthyThresholdCount *int64 `min:"2" type:"integer"` + + // [HTTP/HTTPS health checks] The HTTP codes to use when checking for a successful + // response from a target. + Matcher *Matcher `type:"structure"` + + // The name of the target group. + // + // This name must be unique per region per account, can have a maximum of 32 + // characters, must contain only alphanumeric characters or hyphens, and must + // not begin or end with a hyphen. + // + // Name is a required field + Name *string `type:"string" required:"true"` + + // The port on which the targets receive traffic. This port is used unless you + // specify a port override when registering the target. + // + // Port is a required field + Port *int64 `min:"1" type:"integer" required:"true"` + + // The protocol to use for routing traffic to the targets. For Application Load + // Balancers, the supported protocols are HTTP and HTTPS. For Network Load Balancers, + // the supported protocol is TCP. + // + // Protocol is a required field + Protocol *string `type:"string" required:"true" enum:"ProtocolEnum"` + + // The type of target that you must specify when registering targets with this + // target group. The possible values are instance (targets are specified by + // instance ID) or ip (targets are specified by IP address). The default is + // instance. You can't specify targets for a target group using both instance + // IDs and IP addresses. + // + // If the target type is ip, specify IP addresses from the subnets of the virtual + // private cloud (VPC) for the target group, the RFC 1918 range (10.0.0.0/8, + // 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). + // You can't specify publicly routable IP addresses. + TargetType *string `type:"string" enum:"TargetTypeEnum"` + + // The number of consecutive health check failures required before considering + // a target unhealthy. For Application Load Balancers, the default is 2. For + // Network Load Balancers, this value must be the same as the healthy threshold + // count. + UnhealthyThresholdCount *int64 `min:"2" type:"integer"` + + // The identifier of the virtual private cloud (VPC). + // + // VpcId is a required field + VpcId *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s CreateTargetGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTargetGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *CreateTargetGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "CreateTargetGroupInput"} + if s.HealthCheckIntervalSeconds != nil && *s.HealthCheckIntervalSeconds < 5 { + invalidParams.Add(request.NewErrParamMinValue("HealthCheckIntervalSeconds", 5)) + } + if s.HealthCheckPath != nil && len(*s.HealthCheckPath) < 1 { + invalidParams.Add(request.NewErrParamMinLen("HealthCheckPath", 1)) + } + if s.HealthCheckTimeoutSeconds != nil && *s.HealthCheckTimeoutSeconds < 2 { + invalidParams.Add(request.NewErrParamMinValue("HealthCheckTimeoutSeconds", 2)) + } + if s.HealthyThresholdCount != nil && *s.HealthyThresholdCount < 2 { + invalidParams.Add(request.NewErrParamMinValue("HealthyThresholdCount", 2)) + } + if s.Name == nil { + invalidParams.Add(request.NewErrParamRequired("Name")) + } + if s.Port == nil { + invalidParams.Add(request.NewErrParamRequired("Port")) + } + if s.Port != nil && *s.Port < 1 { + invalidParams.Add(request.NewErrParamMinValue("Port", 1)) + } + if s.Protocol == nil { + invalidParams.Add(request.NewErrParamRequired("Protocol")) + } + if s.UnhealthyThresholdCount != nil && *s.UnhealthyThresholdCount < 2 { + invalidParams.Add(request.NewErrParamMinValue("UnhealthyThresholdCount", 2)) + } + if s.VpcId == nil { + invalidParams.Add(request.NewErrParamRequired("VpcId")) + } + if s.Matcher != nil { + if err := s.Matcher.Validate(); err != nil { + invalidParams.AddNested("Matcher", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetHealthCheckIntervalSeconds sets the HealthCheckIntervalSeconds field's value. +func (s *CreateTargetGroupInput) SetHealthCheckIntervalSeconds(v int64) *CreateTargetGroupInput { + s.HealthCheckIntervalSeconds = &v + return s +} + +// SetHealthCheckPath sets the HealthCheckPath field's value. +func (s *CreateTargetGroupInput) SetHealthCheckPath(v string) *CreateTargetGroupInput { + s.HealthCheckPath = &v + return s +} + +// SetHealthCheckPort sets the HealthCheckPort field's value. +func (s *CreateTargetGroupInput) SetHealthCheckPort(v string) *CreateTargetGroupInput { + s.HealthCheckPort = &v + return s +} + +// SetHealthCheckProtocol sets the HealthCheckProtocol field's value. +func (s *CreateTargetGroupInput) SetHealthCheckProtocol(v string) *CreateTargetGroupInput { + s.HealthCheckProtocol = &v + return s +} + +// SetHealthCheckTimeoutSeconds sets the HealthCheckTimeoutSeconds field's value. +func (s *CreateTargetGroupInput) SetHealthCheckTimeoutSeconds(v int64) *CreateTargetGroupInput { + s.HealthCheckTimeoutSeconds = &v + return s +} + +// SetHealthyThresholdCount sets the HealthyThresholdCount field's value. +func (s *CreateTargetGroupInput) SetHealthyThresholdCount(v int64) *CreateTargetGroupInput { + s.HealthyThresholdCount = &v + return s +} + +// SetMatcher sets the Matcher field's value. +func (s *CreateTargetGroupInput) SetMatcher(v *Matcher) *CreateTargetGroupInput { + s.Matcher = v + return s +} + +// SetName sets the Name field's value. +func (s *CreateTargetGroupInput) SetName(v string) *CreateTargetGroupInput { + s.Name = &v + return s +} + +// SetPort sets the Port field's value. +func (s *CreateTargetGroupInput) SetPort(v int64) *CreateTargetGroupInput { + s.Port = &v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *CreateTargetGroupInput) SetProtocol(v string) *CreateTargetGroupInput { + s.Protocol = &v + return s +} + +// SetTargetType sets the TargetType field's value. +func (s *CreateTargetGroupInput) SetTargetType(v string) *CreateTargetGroupInput { + s.TargetType = &v + return s +} + +// SetUnhealthyThresholdCount sets the UnhealthyThresholdCount field's value. +func (s *CreateTargetGroupInput) SetUnhealthyThresholdCount(v int64) *CreateTargetGroupInput { + s.UnhealthyThresholdCount = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *CreateTargetGroupInput) SetVpcId(v string) *CreateTargetGroupInput { + s.VpcId = &v + return s +} + +type CreateTargetGroupOutput struct { + _ struct{} `type:"structure"` + + // Information about the target group. + TargetGroups []*TargetGroup `type:"list"` +} + +// String returns the string representation +func (s CreateTargetGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s CreateTargetGroupOutput) GoString() string { + return s.String() +} + +// SetTargetGroups sets the TargetGroups field's value. +func (s *CreateTargetGroupOutput) SetTargetGroups(v []*TargetGroup) *CreateTargetGroupOutput { + s.TargetGroups = v + return s +} + +type DeleteListenerInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the listener. + // + // ListenerArn is a required field + ListenerArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteListenerInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteListenerInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteListenerInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteListenerInput"} + if s.ListenerArn == nil { + invalidParams.Add(request.NewErrParamRequired("ListenerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *DeleteListenerInput) SetListenerArn(v string) *DeleteListenerInput { + s.ListenerArn = &v + return s +} + +type DeleteListenerOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteListenerOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteListenerOutput) GoString() string { + return s.String() +} + +type DeleteLoadBalancerInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the load balancer. + // + // LoadBalancerArn is a required field + LoadBalancerArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteLoadBalancerInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLoadBalancerInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteLoadBalancerInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteLoadBalancerInput"} + if s.LoadBalancerArn == nil { + invalidParams.Add(request.NewErrParamRequired("LoadBalancerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *DeleteLoadBalancerInput) SetLoadBalancerArn(v string) *DeleteLoadBalancerInput { + s.LoadBalancerArn = &v + return s +} + +type DeleteLoadBalancerOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteLoadBalancerOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteLoadBalancerOutput) GoString() string { + return s.String() +} + +type DeleteRuleInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the rule. + // + // RuleArn is a required field + RuleArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteRuleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteRuleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteRuleInput"} + if s.RuleArn == nil { + invalidParams.Add(request.NewErrParamRequired("RuleArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetRuleArn sets the RuleArn field's value. +func (s *DeleteRuleInput) SetRuleArn(v string) *DeleteRuleInput { + s.RuleArn = &v + return s +} + +type DeleteRuleOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteRuleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteRuleOutput) GoString() string { + return s.String() +} + +type DeleteTargetGroupInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. + // + // TargetGroupArn is a required field + TargetGroupArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DeleteTargetGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTargetGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeleteTargetGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeleteTargetGroupInput"} + if s.TargetGroupArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetGroupArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *DeleteTargetGroupInput) SetTargetGroupArn(v string) *DeleteTargetGroupInput { + s.TargetGroupArn = &v + return s +} + +type DeleteTargetGroupOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeleteTargetGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeleteTargetGroupOutput) GoString() string { + return s.String() +} + +type DeregisterTargetsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. + // + // TargetGroupArn is a required field + TargetGroupArn *string `type:"string" required:"true"` + + // The targets. If you specified a port override when you registered a target, + // you must specify both the target ID and the port when you deregister it. + // + // Targets is a required field + Targets []*TargetDescription `type:"list" required:"true"` +} + +// String returns the string representation +func (s DeregisterTargetsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeregisterTargetsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DeregisterTargetsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DeregisterTargetsInput"} + if s.TargetGroupArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetGroupArn")) + } + if s.Targets == nil { + invalidParams.Add(request.NewErrParamRequired("Targets")) + } + if s.Targets != nil { + for i, v := range s.Targets { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Targets", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *DeregisterTargetsInput) SetTargetGroupArn(v string) *DeregisterTargetsInput { + s.TargetGroupArn = &v + return s +} + +// SetTargets sets the Targets field's value. +func (s *DeregisterTargetsInput) SetTargets(v []*TargetDescription) *DeregisterTargetsInput { + s.Targets = v + return s +} + +type DeregisterTargetsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s DeregisterTargetsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DeregisterTargetsOutput) GoString() string { + return s.String() +} + +type DescribeAccountLimitsInput struct { + _ struct{} `type:"structure"` + + // The marker for the next set of results. (You received this marker from a + // previous call.) + Marker *string `type:"string"` + + // The maximum number of results to return with this call. + PageSize *int64 `min:"1" type:"integer"` +} + +// String returns the string representation +func (s DescribeAccountLimitsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAccountLimitsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeAccountLimitsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeAccountLimitsInput"} + if s.PageSize != nil && *s.PageSize < 1 { + invalidParams.Add(request.NewErrParamMinValue("PageSize", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetMarker sets the Marker field's value. +func (s *DescribeAccountLimitsInput) SetMarker(v string) *DescribeAccountLimitsInput { + s.Marker = &v + return s +} + +// SetPageSize sets the PageSize field's value. +func (s *DescribeAccountLimitsInput) SetPageSize(v int64) *DescribeAccountLimitsInput { + s.PageSize = &v + return s +} + +type DescribeAccountLimitsOutput struct { + _ struct{} `type:"structure"` + + // Information about the limits. + Limits []*Limit `type:"list"` + + // The marker to use when requesting the next set of results. If there are no + // additional results, the string is empty. + NextMarker *string `type:"string"` +} + +// String returns the string representation +func (s DescribeAccountLimitsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeAccountLimitsOutput) GoString() string { + return s.String() +} + +// SetLimits sets the Limits field's value. +func (s *DescribeAccountLimitsOutput) SetLimits(v []*Limit) *DescribeAccountLimitsOutput { + s.Limits = v + return s +} + +// SetNextMarker sets the NextMarker field's value. +func (s *DescribeAccountLimitsOutput) SetNextMarker(v string) *DescribeAccountLimitsOutput { + s.NextMarker = &v + return s +} + +type DescribeListenerCertificatesInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Names (ARN) of the listener. + // + // ListenerArn is a required field + ListenerArn *string `type:"string" required:"true"` + + // The marker for the next set of results. (You received this marker from a + // previous call.) + Marker *string `type:"string"` + + // The maximum number of results to return with this call. + PageSize *int64 `min:"1" type:"integer"` +} + +// String returns the string representation +func (s DescribeListenerCertificatesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeListenerCertificatesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeListenerCertificatesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeListenerCertificatesInput"} + if s.ListenerArn == nil { + invalidParams.Add(request.NewErrParamRequired("ListenerArn")) + } + if s.PageSize != nil && *s.PageSize < 1 { + invalidParams.Add(request.NewErrParamMinValue("PageSize", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *DescribeListenerCertificatesInput) SetListenerArn(v string) *DescribeListenerCertificatesInput { + s.ListenerArn = &v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeListenerCertificatesInput) SetMarker(v string) *DescribeListenerCertificatesInput { + s.Marker = &v + return s +} + +// SetPageSize sets the PageSize field's value. +func (s *DescribeListenerCertificatesInput) SetPageSize(v int64) *DescribeListenerCertificatesInput { + s.PageSize = &v + return s +} + +type DescribeListenerCertificatesOutput struct { + _ struct{} `type:"structure"` + + // Information about the certificates. + Certificates []*Certificate `type:"list"` + + // The marker to use when requesting the next set of results. If there are no + // additional results, the string is empty. + NextMarker *string `type:"string"` +} + +// String returns the string representation +func (s DescribeListenerCertificatesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeListenerCertificatesOutput) GoString() string { + return s.String() +} + +// SetCertificates sets the Certificates field's value. +func (s *DescribeListenerCertificatesOutput) SetCertificates(v []*Certificate) *DescribeListenerCertificatesOutput { + s.Certificates = v + return s +} + +// SetNextMarker sets the NextMarker field's value. +func (s *DescribeListenerCertificatesOutput) SetNextMarker(v string) *DescribeListenerCertificatesOutput { + s.NextMarker = &v + return s +} + +type DescribeListenersInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Names (ARN) of the listeners. + ListenerArns []*string `type:"list"` + + // The Amazon Resource Name (ARN) of the load balancer. + LoadBalancerArn *string `type:"string"` + + // The marker for the next set of results. (You received this marker from a + // previous call.) + Marker *string `type:"string"` + + // The maximum number of results to return with this call. + PageSize *int64 `min:"1" type:"integer"` +} + +// String returns the string representation +func (s DescribeListenersInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeListenersInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeListenersInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeListenersInput"} + if s.PageSize != nil && *s.PageSize < 1 { + invalidParams.Add(request.NewErrParamMinValue("PageSize", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetListenerArns sets the ListenerArns field's value. +func (s *DescribeListenersInput) SetListenerArns(v []*string) *DescribeListenersInput { + s.ListenerArns = v + return s +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *DescribeListenersInput) SetLoadBalancerArn(v string) *DescribeListenersInput { + s.LoadBalancerArn = &v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeListenersInput) SetMarker(v string) *DescribeListenersInput { + s.Marker = &v + return s +} + +// SetPageSize sets the PageSize field's value. +func (s *DescribeListenersInput) SetPageSize(v int64) *DescribeListenersInput { + s.PageSize = &v + return s +} + +type DescribeListenersOutput struct { + _ struct{} `type:"structure"` + + // Information about the listeners. + Listeners []*Listener `type:"list"` + + // The marker to use when requesting the next set of results. If there are no + // additional results, the string is empty. + NextMarker *string `type:"string"` +} + +// String returns the string representation +func (s DescribeListenersOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeListenersOutput) GoString() string { + return s.String() +} + +// SetListeners sets the Listeners field's value. +func (s *DescribeListenersOutput) SetListeners(v []*Listener) *DescribeListenersOutput { + s.Listeners = v + return s +} + +// SetNextMarker sets the NextMarker field's value. +func (s *DescribeListenersOutput) SetNextMarker(v string) *DescribeListenersOutput { + s.NextMarker = &v + return s +} + +type DescribeLoadBalancerAttributesInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the load balancer. + // + // LoadBalancerArn is a required field + LoadBalancerArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeLoadBalancerAttributesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLoadBalancerAttributesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeLoadBalancerAttributesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeLoadBalancerAttributesInput"} + if s.LoadBalancerArn == nil { + invalidParams.Add(request.NewErrParamRequired("LoadBalancerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *DescribeLoadBalancerAttributesInput) SetLoadBalancerArn(v string) *DescribeLoadBalancerAttributesInput { + s.LoadBalancerArn = &v + return s +} + +type DescribeLoadBalancerAttributesOutput struct { + _ struct{} `type:"structure"` + + // Information about the load balancer attributes. + Attributes []*LoadBalancerAttribute `type:"list"` +} + +// String returns the string representation +func (s DescribeLoadBalancerAttributesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLoadBalancerAttributesOutput) GoString() string { + return s.String() +} + +// SetAttributes sets the Attributes field's value. +func (s *DescribeLoadBalancerAttributesOutput) SetAttributes(v []*LoadBalancerAttribute) *DescribeLoadBalancerAttributesOutput { + s.Attributes = v + return s +} + +type DescribeLoadBalancersInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Names (ARN) of the load balancers. You can specify up + // to 20 load balancers in a single call. + LoadBalancerArns []*string `type:"list"` + + // The marker for the next set of results. (You received this marker from a + // previous call.) + Marker *string `type:"string"` + + // The names of the load balancers. + Names []*string `type:"list"` + + // The maximum number of results to return with this call. + PageSize *int64 `min:"1" type:"integer"` +} + +// String returns the string representation +func (s DescribeLoadBalancersInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLoadBalancersInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeLoadBalancersInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeLoadBalancersInput"} + if s.PageSize != nil && *s.PageSize < 1 { + invalidParams.Add(request.NewErrParamMinValue("PageSize", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoadBalancerArns sets the LoadBalancerArns field's value. +func (s *DescribeLoadBalancersInput) SetLoadBalancerArns(v []*string) *DescribeLoadBalancersInput { + s.LoadBalancerArns = v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeLoadBalancersInput) SetMarker(v string) *DescribeLoadBalancersInput { + s.Marker = &v + return s +} + +// SetNames sets the Names field's value. +func (s *DescribeLoadBalancersInput) SetNames(v []*string) *DescribeLoadBalancersInput { + s.Names = v + return s +} + +// SetPageSize sets the PageSize field's value. +func (s *DescribeLoadBalancersInput) SetPageSize(v int64) *DescribeLoadBalancersInput { + s.PageSize = &v + return s +} + +type DescribeLoadBalancersOutput struct { + _ struct{} `type:"structure"` + + // Information about the load balancers. + LoadBalancers []*LoadBalancer `type:"list"` + + // The marker to use when requesting the next set of results. If there are no + // additional results, the string is empty. + NextMarker *string `type:"string"` +} + +// String returns the string representation +func (s DescribeLoadBalancersOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeLoadBalancersOutput) GoString() string { + return s.String() +} + +// SetLoadBalancers sets the LoadBalancers field's value. +func (s *DescribeLoadBalancersOutput) SetLoadBalancers(v []*LoadBalancer) *DescribeLoadBalancersOutput { + s.LoadBalancers = v + return s +} + +// SetNextMarker sets the NextMarker field's value. +func (s *DescribeLoadBalancersOutput) SetNextMarker(v string) *DescribeLoadBalancersOutput { + s.NextMarker = &v + return s +} + +type DescribeRulesInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the listener. + ListenerArn *string `type:"string"` + + // The marker for the next set of results. (You received this marker from a + // previous call.) + Marker *string `type:"string"` + + // The maximum number of results to return with this call. + PageSize *int64 `min:"1" type:"integer"` + + // The Amazon Resource Names (ARN) of the rules. + RuleArns []*string `type:"list"` +} + +// String returns the string representation +func (s DescribeRulesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRulesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeRulesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeRulesInput"} + if s.PageSize != nil && *s.PageSize < 1 { + invalidParams.Add(request.NewErrParamMinValue("PageSize", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *DescribeRulesInput) SetListenerArn(v string) *DescribeRulesInput { + s.ListenerArn = &v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeRulesInput) SetMarker(v string) *DescribeRulesInput { + s.Marker = &v + return s +} + +// SetPageSize sets the PageSize field's value. +func (s *DescribeRulesInput) SetPageSize(v int64) *DescribeRulesInput { + s.PageSize = &v + return s +} + +// SetRuleArns sets the RuleArns field's value. +func (s *DescribeRulesInput) SetRuleArns(v []*string) *DescribeRulesInput { + s.RuleArns = v + return s +} + +type DescribeRulesOutput struct { + _ struct{} `type:"structure"` + + // The marker to use when requesting the next set of results. If there are no + // additional results, the string is empty. + NextMarker *string `type:"string"` + + // Information about the rules. + Rules []*Rule `type:"list"` +} + +// String returns the string representation +func (s DescribeRulesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeRulesOutput) GoString() string { + return s.String() +} + +// SetNextMarker sets the NextMarker field's value. +func (s *DescribeRulesOutput) SetNextMarker(v string) *DescribeRulesOutput { + s.NextMarker = &v + return s +} + +// SetRules sets the Rules field's value. +func (s *DescribeRulesOutput) SetRules(v []*Rule) *DescribeRulesOutput { + s.Rules = v + return s +} + +type DescribeSSLPoliciesInput struct { + _ struct{} `type:"structure"` + + // The marker for the next set of results. (You received this marker from a + // previous call.) + Marker *string `type:"string"` + + // The names of the policies. + Names []*string `type:"list"` + + // The maximum number of results to return with this call. + PageSize *int64 `min:"1" type:"integer"` +} + +// String returns the string representation +func (s DescribeSSLPoliciesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSSLPoliciesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeSSLPoliciesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeSSLPoliciesInput"} + if s.PageSize != nil && *s.PageSize < 1 { + invalidParams.Add(request.NewErrParamMinValue("PageSize", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetMarker sets the Marker field's value. +func (s *DescribeSSLPoliciesInput) SetMarker(v string) *DescribeSSLPoliciesInput { + s.Marker = &v + return s +} + +// SetNames sets the Names field's value. +func (s *DescribeSSLPoliciesInput) SetNames(v []*string) *DescribeSSLPoliciesInput { + s.Names = v + return s +} + +// SetPageSize sets the PageSize field's value. +func (s *DescribeSSLPoliciesInput) SetPageSize(v int64) *DescribeSSLPoliciesInput { + s.PageSize = &v + return s +} + +type DescribeSSLPoliciesOutput struct { + _ struct{} `type:"structure"` + + // The marker to use when requesting the next set of results. If there are no + // additional results, the string is empty. + NextMarker *string `type:"string"` + + // Information about the policies. + SslPolicies []*SslPolicy `type:"list"` +} + +// String returns the string representation +func (s DescribeSSLPoliciesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeSSLPoliciesOutput) GoString() string { + return s.String() +} + +// SetNextMarker sets the NextMarker field's value. +func (s *DescribeSSLPoliciesOutput) SetNextMarker(v string) *DescribeSSLPoliciesOutput { + s.NextMarker = &v + return s +} + +// SetSslPolicies sets the SslPolicies field's value. +func (s *DescribeSSLPoliciesOutput) SetSslPolicies(v []*SslPolicy) *DescribeSSLPoliciesOutput { + s.SslPolicies = v + return s +} + +type DescribeTagsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Names (ARN) of the resources. + // + // ResourceArns is a required field + ResourceArns []*string `type:"list" required:"true"` +} + +// String returns the string representation +func (s DescribeTagsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTagsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeTagsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTagsInput"} + if s.ResourceArns == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArns")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetResourceArns sets the ResourceArns field's value. +func (s *DescribeTagsInput) SetResourceArns(v []*string) *DescribeTagsInput { + s.ResourceArns = v + return s +} + +type DescribeTagsOutput struct { + _ struct{} `type:"structure"` + + // Information about the tags. + TagDescriptions []*TagDescription `type:"list"` +} + +// String returns the string representation +func (s DescribeTagsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTagsOutput) GoString() string { + return s.String() +} + +// SetTagDescriptions sets the TagDescriptions field's value. +func (s *DescribeTagsOutput) SetTagDescriptions(v []*TagDescription) *DescribeTagsOutput { + s.TagDescriptions = v + return s +} + +type DescribeTargetGroupAttributesInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. + // + // TargetGroupArn is a required field + TargetGroupArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s DescribeTargetGroupAttributesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTargetGroupAttributesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeTargetGroupAttributesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTargetGroupAttributesInput"} + if s.TargetGroupArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetGroupArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *DescribeTargetGroupAttributesInput) SetTargetGroupArn(v string) *DescribeTargetGroupAttributesInput { + s.TargetGroupArn = &v + return s +} + +type DescribeTargetGroupAttributesOutput struct { + _ struct{} `type:"structure"` + + // Information about the target group attributes + Attributes []*TargetGroupAttribute `type:"list"` +} + +// String returns the string representation +func (s DescribeTargetGroupAttributesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTargetGroupAttributesOutput) GoString() string { + return s.String() +} + +// SetAttributes sets the Attributes field's value. +func (s *DescribeTargetGroupAttributesOutput) SetAttributes(v []*TargetGroupAttribute) *DescribeTargetGroupAttributesOutput { + s.Attributes = v + return s +} + +type DescribeTargetGroupsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the load balancer. + LoadBalancerArn *string `type:"string"` + + // The marker for the next set of results. (You received this marker from a + // previous call.) + Marker *string `type:"string"` + + // The names of the target groups. + Names []*string `type:"list"` + + // The maximum number of results to return with this call. + PageSize *int64 `min:"1" type:"integer"` + + // The Amazon Resource Names (ARN) of the target groups. + TargetGroupArns []*string `type:"list"` +} + +// String returns the string representation +func (s DescribeTargetGroupsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTargetGroupsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeTargetGroupsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTargetGroupsInput"} + if s.PageSize != nil && *s.PageSize < 1 { + invalidParams.Add(request.NewErrParamMinValue("PageSize", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *DescribeTargetGroupsInput) SetLoadBalancerArn(v string) *DescribeTargetGroupsInput { + s.LoadBalancerArn = &v + return s +} + +// SetMarker sets the Marker field's value. +func (s *DescribeTargetGroupsInput) SetMarker(v string) *DescribeTargetGroupsInput { + s.Marker = &v + return s +} + +// SetNames sets the Names field's value. +func (s *DescribeTargetGroupsInput) SetNames(v []*string) *DescribeTargetGroupsInput { + s.Names = v + return s +} + +// SetPageSize sets the PageSize field's value. +func (s *DescribeTargetGroupsInput) SetPageSize(v int64) *DescribeTargetGroupsInput { + s.PageSize = &v + return s +} + +// SetTargetGroupArns sets the TargetGroupArns field's value. +func (s *DescribeTargetGroupsInput) SetTargetGroupArns(v []*string) *DescribeTargetGroupsInput { + s.TargetGroupArns = v + return s +} + +type DescribeTargetGroupsOutput struct { + _ struct{} `type:"structure"` + + // The marker to use when requesting the next set of results. If there are no + // additional results, the string is empty. + NextMarker *string `type:"string"` + + // Information about the target groups. + TargetGroups []*TargetGroup `type:"list"` +} + +// String returns the string representation +func (s DescribeTargetGroupsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTargetGroupsOutput) GoString() string { + return s.String() +} + +// SetNextMarker sets the NextMarker field's value. +func (s *DescribeTargetGroupsOutput) SetNextMarker(v string) *DescribeTargetGroupsOutput { + s.NextMarker = &v + return s +} + +// SetTargetGroups sets the TargetGroups field's value. +func (s *DescribeTargetGroupsOutput) SetTargetGroups(v []*TargetGroup) *DescribeTargetGroupsOutput { + s.TargetGroups = v + return s +} + +type DescribeTargetHealthInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. + // + // TargetGroupArn is a required field + TargetGroupArn *string `type:"string" required:"true"` + + // The targets. + Targets []*TargetDescription `type:"list"` +} + +// String returns the string representation +func (s DescribeTargetHealthInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTargetHealthInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *DescribeTargetHealthInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "DescribeTargetHealthInput"} + if s.TargetGroupArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetGroupArn")) + } + if s.Targets != nil { + for i, v := range s.Targets { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Targets", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *DescribeTargetHealthInput) SetTargetGroupArn(v string) *DescribeTargetHealthInput { + s.TargetGroupArn = &v + return s +} + +// SetTargets sets the Targets field's value. +func (s *DescribeTargetHealthInput) SetTargets(v []*TargetDescription) *DescribeTargetHealthInput { + s.Targets = v + return s +} + +type DescribeTargetHealthOutput struct { + _ struct{} `type:"structure"` + + // Information about the health of the targets. + TargetHealthDescriptions []*TargetHealthDescription `type:"list"` +} + +// String returns the string representation +func (s DescribeTargetHealthOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s DescribeTargetHealthOutput) GoString() string { + return s.String() +} + +// SetTargetHealthDescriptions sets the TargetHealthDescriptions field's value. +func (s *DescribeTargetHealthOutput) SetTargetHealthDescriptions(v []*TargetHealthDescription) *DescribeTargetHealthOutput { + s.TargetHealthDescriptions = v + return s +} + +// Information about an action that returns a custom HTTP response. +type FixedResponseActionConfig struct { + _ struct{} `type:"structure"` + + // The content type. + // + // Valid Values: text/plain | text/css | text/html | application/javascript + // | application/json + ContentType *string `type:"string"` + + // The message. + MessageBody *string `type:"string"` + + // The HTTP response code (2XX, 4XX, or 5XX). + // + // StatusCode is a required field + StatusCode *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s FixedResponseActionConfig) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s FixedResponseActionConfig) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *FixedResponseActionConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "FixedResponseActionConfig"} + if s.StatusCode == nil { + invalidParams.Add(request.NewErrParamRequired("StatusCode")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetContentType sets the ContentType field's value. +func (s *FixedResponseActionConfig) SetContentType(v string) *FixedResponseActionConfig { + s.ContentType = &v + return s +} + +// SetMessageBody sets the MessageBody field's value. +func (s *FixedResponseActionConfig) SetMessageBody(v string) *FixedResponseActionConfig { + s.MessageBody = &v + return s +} + +// SetStatusCode sets the StatusCode field's value. +func (s *FixedResponseActionConfig) SetStatusCode(v string) *FixedResponseActionConfig { + s.StatusCode = &v + return s +} + +// Information about an Elastic Load Balancing resource limit for your AWS account. +type Limit struct { + _ struct{} `type:"structure"` + + // The maximum value of the limit. + Max *string `type:"string"` + + // The name of the limit. The possible values are: + // + // * application-load-balancers + // + // * listeners-per-application-load-balancer + // + // * listeners-per-network-load-balancer + // + // * network-load-balancers + // + // * rules-per-application-load-balancer + // + // * target-groups + // + // * targets-per-application-load-balancer + // + // * targets-per-availability-zone-per-network-load-balancer + // + // * targets-per-network-load-balancer + Name *string `type:"string"` +} + +// String returns the string representation +func (s Limit) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Limit) GoString() string { + return s.String() +} + +// SetMax sets the Max field's value. +func (s *Limit) SetMax(v string) *Limit { + s.Max = &v + return s +} + +// SetName sets the Name field's value. +func (s *Limit) SetName(v string) *Limit { + s.Name = &v + return s +} + +// Information about a listener. +type Listener struct { + _ struct{} `type:"structure"` + + // The SSL server certificate. You must provide a certificate if the protocol + // is HTTPS. + Certificates []*Certificate `type:"list"` + + // The default actions for the listener. + DefaultActions []*Action `type:"list"` + + // The Amazon Resource Name (ARN) of the listener. + ListenerArn *string `type:"string"` + + // The Amazon Resource Name (ARN) of the load balancer. + LoadBalancerArn *string `type:"string"` + + // The port on which the load balancer is listening. + Port *int64 `min:"1" type:"integer"` + + // The protocol for connections from clients to the load balancer. + Protocol *string `type:"string" enum:"ProtocolEnum"` + + // The security policy that defines which ciphers and protocols are supported. + // The default is the current predefined security policy. + SslPolicy *string `type:"string"` +} + +// String returns the string representation +func (s Listener) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Listener) GoString() string { + return s.String() +} + +// SetCertificates sets the Certificates field's value. +func (s *Listener) SetCertificates(v []*Certificate) *Listener { + s.Certificates = v + return s +} + +// SetDefaultActions sets the DefaultActions field's value. +func (s *Listener) SetDefaultActions(v []*Action) *Listener { + s.DefaultActions = v + return s +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *Listener) SetListenerArn(v string) *Listener { + s.ListenerArn = &v + return s +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *Listener) SetLoadBalancerArn(v string) *Listener { + s.LoadBalancerArn = &v + return s +} + +// SetPort sets the Port field's value. +func (s *Listener) SetPort(v int64) *Listener { + s.Port = &v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *Listener) SetProtocol(v string) *Listener { + s.Protocol = &v + return s +} + +// SetSslPolicy sets the SslPolicy field's value. +func (s *Listener) SetSslPolicy(v string) *Listener { + s.SslPolicy = &v + return s +} + +// Information about a load balancer. +type LoadBalancer struct { + _ struct{} `type:"structure"` + + // The Availability Zones for the load balancer. + AvailabilityZones []*AvailabilityZone `type:"list"` + + // The ID of the Amazon Route 53 hosted zone associated with the load balancer. + CanonicalHostedZoneId *string `type:"string"` + + // The date and time the load balancer was created. + CreatedTime *time.Time `type:"timestamp"` + + // The public DNS name of the load balancer. + DNSName *string `type:"string"` + + // The type of IP addresses used by the subnets for your load balancer. The + // possible values are ipv4 (for IPv4 addresses) and dualstack (for IPv4 and + // IPv6 addresses). + IpAddressType *string `type:"string" enum:"IpAddressType"` + + // The Amazon Resource Name (ARN) of the load balancer. + LoadBalancerArn *string `type:"string"` + + // The name of the load balancer. + LoadBalancerName *string `type:"string"` + + // The nodes of an Internet-facing load balancer have public IP addresses. The + // DNS name of an Internet-facing load balancer is publicly resolvable to the + // public IP addresses of the nodes. Therefore, Internet-facing load balancers + // can route requests from clients over the internet. + // + // The nodes of an internal load balancer have only private IP addresses. The + // DNS name of an internal load balancer is publicly resolvable to the private + // IP addresses of the nodes. Therefore, internal load balancers can only route + // requests from clients with access to the VPC for the load balancer. + Scheme *string `type:"string" enum:"LoadBalancerSchemeEnum"` + + // The IDs of the security groups for the load balancer. + SecurityGroups []*string `type:"list"` + + // The state of the load balancer. + State *LoadBalancerState `type:"structure"` + + // The type of load balancer. + Type *string `type:"string" enum:"LoadBalancerTypeEnum"` + + // The ID of the VPC for the load balancer. + VpcId *string `type:"string"` +} + +// String returns the string representation +func (s LoadBalancer) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LoadBalancer) GoString() string { + return s.String() +} + +// SetAvailabilityZones sets the AvailabilityZones field's value. +func (s *LoadBalancer) SetAvailabilityZones(v []*AvailabilityZone) *LoadBalancer { + s.AvailabilityZones = v + return s +} + +// SetCanonicalHostedZoneId sets the CanonicalHostedZoneId field's value. +func (s *LoadBalancer) SetCanonicalHostedZoneId(v string) *LoadBalancer { + s.CanonicalHostedZoneId = &v + return s +} + +// SetCreatedTime sets the CreatedTime field's value. +func (s *LoadBalancer) SetCreatedTime(v time.Time) *LoadBalancer { + s.CreatedTime = &v + return s +} + +// SetDNSName sets the DNSName field's value. +func (s *LoadBalancer) SetDNSName(v string) *LoadBalancer { + s.DNSName = &v + return s +} + +// SetIpAddressType sets the IpAddressType field's value. +func (s *LoadBalancer) SetIpAddressType(v string) *LoadBalancer { + s.IpAddressType = &v + return s +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *LoadBalancer) SetLoadBalancerArn(v string) *LoadBalancer { + s.LoadBalancerArn = &v + return s +} + +// SetLoadBalancerName sets the LoadBalancerName field's value. +func (s *LoadBalancer) SetLoadBalancerName(v string) *LoadBalancer { + s.LoadBalancerName = &v + return s +} + +// SetScheme sets the Scheme field's value. +func (s *LoadBalancer) SetScheme(v string) *LoadBalancer { + s.Scheme = &v + return s +} + +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *LoadBalancer) SetSecurityGroups(v []*string) *LoadBalancer { + s.SecurityGroups = v + return s +} + +// SetState sets the State field's value. +func (s *LoadBalancer) SetState(v *LoadBalancerState) *LoadBalancer { + s.State = v + return s +} + +// SetType sets the Type field's value. +func (s *LoadBalancer) SetType(v string) *LoadBalancer { + s.Type = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *LoadBalancer) SetVpcId(v string) *LoadBalancer { + s.VpcId = &v + return s +} + +// Information about a static IP address for a load balancer. +type LoadBalancerAddress struct { + _ struct{} `type:"structure"` + + // [Network Load Balancers] The allocation ID of the Elastic IP address. + AllocationId *string `type:"string"` + + // The static IP address. + IpAddress *string `type:"string"` +} + +// String returns the string representation +func (s LoadBalancerAddress) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LoadBalancerAddress) GoString() string { + return s.String() +} + +// SetAllocationId sets the AllocationId field's value. +func (s *LoadBalancerAddress) SetAllocationId(v string) *LoadBalancerAddress { + s.AllocationId = &v + return s +} + +// SetIpAddress sets the IpAddress field's value. +func (s *LoadBalancerAddress) SetIpAddress(v string) *LoadBalancerAddress { + s.IpAddress = &v + return s +} + +// Information about a load balancer attribute. +type LoadBalancerAttribute struct { + _ struct{} `type:"structure"` + + // The name of the attribute. + // + // The following attributes are supported by both Application Load Balancers + // and Network Load Balancers: + // + // * deletion_protection.enabled - Indicates whether deletion protection + // is enabled. The value is true or false. The default is false. + // + // The following attributes are supported by only Application Load Balancers: + // + // * access_logs.s3.enabled - Indicates whether access logs are enabled. + // The value is true or false. The default is false. + // + // * access_logs.s3.bucket - The name of the S3 bucket for the access logs. + // This attribute is required if access logs are enabled. The bucket must + // exist in the same region as the load balancer and have a bucket policy + // that grants Elastic Load Balancing permissions to write to the bucket. + // + // * access_logs.s3.prefix - The prefix for the location in the S3 bucket + // for the access logs. + // + // * idle_timeout.timeout_seconds - The idle timeout value, in seconds. The + // valid range is 1-4000 seconds. The default is 60 seconds. + // + // * routing.http2.enabled - Indicates whether HTTP/2 is enabled. The value + // is true or false. The default is true. + // + // The following attributes are supported by only Network Load Balancers: + // + // * load_balancing.cross_zone.enabled - Indicates whether cross-zone load + // balancing is enabled. The value is true or false. The default is false. + Key *string `type:"string"` + + // The value of the attribute. + Value *string `type:"string"` +} + +// String returns the string representation +func (s LoadBalancerAttribute) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LoadBalancerAttribute) GoString() string { + return s.String() +} + +// SetKey sets the Key field's value. +func (s *LoadBalancerAttribute) SetKey(v string) *LoadBalancerAttribute { + s.Key = &v + return s +} + +// SetValue sets the Value field's value. +func (s *LoadBalancerAttribute) SetValue(v string) *LoadBalancerAttribute { + s.Value = &v + return s +} + +// Information about the state of the load balancer. +type LoadBalancerState struct { + _ struct{} `type:"structure"` + + // The state code. The initial state of the load balancer is provisioning. After + // the load balancer is fully set up and ready to route traffic, its state is + // active. If the load balancer could not be set up, its state is failed. + Code *string `type:"string" enum:"LoadBalancerStateEnum"` + + // A description of the state. + Reason *string `type:"string"` +} + +// String returns the string representation +func (s LoadBalancerState) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s LoadBalancerState) GoString() string { + return s.String() +} + +// SetCode sets the Code field's value. +func (s *LoadBalancerState) SetCode(v string) *LoadBalancerState { + s.Code = &v + return s +} + +// SetReason sets the Reason field's value. +func (s *LoadBalancerState) SetReason(v string) *LoadBalancerState { + s.Reason = &v + return s +} + +// Information to use when checking for a successful response from a target. +type Matcher struct { + _ struct{} `type:"structure"` + + // The HTTP codes. + // + // For Application Load Balancers, you can specify values between 200 and 499, + // and the default value is 200. You can specify multiple values (for example, + // "200,202") or a range of values (for example, "200-299"). + // + // For Network Load Balancers, this is 200–399. + // + // HttpCode is a required field + HttpCode *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s Matcher) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Matcher) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Matcher) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Matcher"} + if s.HttpCode == nil { + invalidParams.Add(request.NewErrParamRequired("HttpCode")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetHttpCode sets the HttpCode field's value. +func (s *Matcher) SetHttpCode(v string) *Matcher { + s.HttpCode = &v + return s +} + +type ModifyListenerInput struct { + _ struct{} `type:"structure"` + + // [HTTPS listeners] The default SSL server certificate. You must provide exactly + // one default certificate. To create a certificate list, use AddListenerCertificates. + Certificates []*Certificate `type:"list"` + + // The actions for the default rule. The rule must include one forward action + // or one or more fixed-response actions. + // + // If the action type is forward, you can specify a single target group. The + // protocol of the target group must be HTTP or HTTPS for an Application Load + // Balancer or TCP for a Network Load Balancer. + // + // [HTTPS listener] If the action type is authenticate-oidc, you can use an + // identity provider that is OpenID Connect (OIDC) compliant to authenticate + // users as they access your application. + // + // [HTTPS listener] If the action type is authenticate-cognito, you can use + // Amazon Cognito to authenticate users as they access your application. + // + // [Application Load Balancer] If the action type is redirect, you can redirect + // HTTP and HTTPS requests. + // + // [Application Load Balancer] If the action type is fixed-response, you can + // return a custom HTTP response. + DefaultActions []*Action `type:"list"` + + // The Amazon Resource Name (ARN) of the listener. + // + // ListenerArn is a required field + ListenerArn *string `type:"string" required:"true"` + + // The port for connections from clients to the load balancer. + Port *int64 `min:"1" type:"integer"` + + // The protocol for connections from clients to the load balancer. Application + // Load Balancers support HTTP and HTTPS and Network Load Balancers support + // TCP. + Protocol *string `type:"string" enum:"ProtocolEnum"` + + // [HTTPS listeners] The security policy that defines which protocols and ciphers + // are supported. For more information, see Security Policies (http://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html#describe-ssl-policies) + // in the Application Load Balancers Guide. + SslPolicy *string `type:"string"` +} + +// String returns the string representation +func (s ModifyListenerInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyListenerInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyListenerInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyListenerInput"} + if s.ListenerArn == nil { + invalidParams.Add(request.NewErrParamRequired("ListenerArn")) + } + if s.Port != nil && *s.Port < 1 { + invalidParams.Add(request.NewErrParamMinValue("Port", 1)) + } + if s.DefaultActions != nil { + for i, v := range s.DefaultActions { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "DefaultActions", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificates sets the Certificates field's value. +func (s *ModifyListenerInput) SetCertificates(v []*Certificate) *ModifyListenerInput { + s.Certificates = v + return s +} + +// SetDefaultActions sets the DefaultActions field's value. +func (s *ModifyListenerInput) SetDefaultActions(v []*Action) *ModifyListenerInput { + s.DefaultActions = v + return s +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *ModifyListenerInput) SetListenerArn(v string) *ModifyListenerInput { + s.ListenerArn = &v + return s +} + +// SetPort sets the Port field's value. +func (s *ModifyListenerInput) SetPort(v int64) *ModifyListenerInput { + s.Port = &v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *ModifyListenerInput) SetProtocol(v string) *ModifyListenerInput { + s.Protocol = &v + return s +} + +// SetSslPolicy sets the SslPolicy field's value. +func (s *ModifyListenerInput) SetSslPolicy(v string) *ModifyListenerInput { + s.SslPolicy = &v + return s +} + +type ModifyListenerOutput struct { + _ struct{} `type:"structure"` + + // Information about the modified listener. + Listeners []*Listener `type:"list"` +} + +// String returns the string representation +func (s ModifyListenerOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyListenerOutput) GoString() string { + return s.String() +} + +// SetListeners sets the Listeners field's value. +func (s *ModifyListenerOutput) SetListeners(v []*Listener) *ModifyListenerOutput { + s.Listeners = v + return s +} + +type ModifyLoadBalancerAttributesInput struct { + _ struct{} `type:"structure"` + + // The load balancer attributes. + // + // Attributes is a required field + Attributes []*LoadBalancerAttribute `type:"list" required:"true"` + + // The Amazon Resource Name (ARN) of the load balancer. + // + // LoadBalancerArn is a required field + LoadBalancerArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s ModifyLoadBalancerAttributesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyLoadBalancerAttributesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyLoadBalancerAttributesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyLoadBalancerAttributesInput"} + if s.Attributes == nil { + invalidParams.Add(request.NewErrParamRequired("Attributes")) + } + if s.LoadBalancerArn == nil { + invalidParams.Add(request.NewErrParamRequired("LoadBalancerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttributes sets the Attributes field's value. +func (s *ModifyLoadBalancerAttributesInput) SetAttributes(v []*LoadBalancerAttribute) *ModifyLoadBalancerAttributesInput { + s.Attributes = v + return s +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *ModifyLoadBalancerAttributesInput) SetLoadBalancerArn(v string) *ModifyLoadBalancerAttributesInput { + s.LoadBalancerArn = &v + return s +} + +type ModifyLoadBalancerAttributesOutput struct { + _ struct{} `type:"structure"` + + // Information about the load balancer attributes. + Attributes []*LoadBalancerAttribute `type:"list"` +} + +// String returns the string representation +func (s ModifyLoadBalancerAttributesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyLoadBalancerAttributesOutput) GoString() string { + return s.String() +} + +// SetAttributes sets the Attributes field's value. +func (s *ModifyLoadBalancerAttributesOutput) SetAttributes(v []*LoadBalancerAttribute) *ModifyLoadBalancerAttributesOutput { + s.Attributes = v + return s +} + +type ModifyRuleInput struct { + _ struct{} `type:"structure"` + + // The actions. + // + // If the action type is forward, you can specify a single target group. + // + // If the action type is authenticate-oidc, you can use an identity provider + // that is OpenID Connect (OIDC) compliant to authenticate users as they access + // your application. + // + // If the action type is authenticate-cognito, you can use Amazon Cognito to + // authenticate users as they access your application. + Actions []*Action `type:"list"` + + // The conditions. Each condition specifies a field name and a single value. + // + // If the field name is host-header, you can specify a single host name (for + // example, my.example.com). A host name is case insensitive, can be up to 128 + // characters in length, and can contain any of the following characters. You + // can include up to three wildcard characters. + // + // * A-Z, a-z, 0-9 + // + // * - . + // + // * * (matches 0 or more characters) + // + // * ? (matches exactly 1 character) + // + // If the field name is path-pattern, you can specify a single path pattern. + // A path pattern is case-sensitive, can be up to 128 characters in length, + // and can contain any of the following characters. You can include up to three + // wildcard characters. + // + // * A-Z, a-z, 0-9 + // + // * _ - . $ / ~ " ' @ : + + // + // * & (using &) + // + // * * (matches 0 or more characters) + // + // * ? (matches exactly 1 character) + Conditions []*RuleCondition `type:"list"` + + // The Amazon Resource Name (ARN) of the rule. + // + // RuleArn is a required field + RuleArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s ModifyRuleInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyRuleInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyRuleInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyRuleInput"} + if s.RuleArn == nil { + invalidParams.Add(request.NewErrParamRequired("RuleArn")) + } + if s.Actions != nil { + for i, v := range s.Actions { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Actions", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetActions sets the Actions field's value. +func (s *ModifyRuleInput) SetActions(v []*Action) *ModifyRuleInput { + s.Actions = v + return s +} + +// SetConditions sets the Conditions field's value. +func (s *ModifyRuleInput) SetConditions(v []*RuleCondition) *ModifyRuleInput { + s.Conditions = v + return s +} + +// SetRuleArn sets the RuleArn field's value. +func (s *ModifyRuleInput) SetRuleArn(v string) *ModifyRuleInput { + s.RuleArn = &v + return s +} + +type ModifyRuleOutput struct { + _ struct{} `type:"structure"` + + // Information about the modified rule. + Rules []*Rule `type:"list"` +} + +// String returns the string representation +func (s ModifyRuleOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyRuleOutput) GoString() string { + return s.String() +} + +// SetRules sets the Rules field's value. +func (s *ModifyRuleOutput) SetRules(v []*Rule) *ModifyRuleOutput { + s.Rules = v + return s +} + +type ModifyTargetGroupAttributesInput struct { + _ struct{} `type:"structure"` + + // The attributes. + // + // Attributes is a required field + Attributes []*TargetGroupAttribute `type:"list" required:"true"` + + // The Amazon Resource Name (ARN) of the target group. + // + // TargetGroupArn is a required field + TargetGroupArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s ModifyTargetGroupAttributesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyTargetGroupAttributesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyTargetGroupAttributesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyTargetGroupAttributesInput"} + if s.Attributes == nil { + invalidParams.Add(request.NewErrParamRequired("Attributes")) + } + if s.TargetGroupArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetGroupArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAttributes sets the Attributes field's value. +func (s *ModifyTargetGroupAttributesInput) SetAttributes(v []*TargetGroupAttribute) *ModifyTargetGroupAttributesInput { + s.Attributes = v + return s +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *ModifyTargetGroupAttributesInput) SetTargetGroupArn(v string) *ModifyTargetGroupAttributesInput { + s.TargetGroupArn = &v + return s +} + +type ModifyTargetGroupAttributesOutput struct { + _ struct{} `type:"structure"` + + // Information about the attributes. + Attributes []*TargetGroupAttribute `type:"list"` +} + +// String returns the string representation +func (s ModifyTargetGroupAttributesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyTargetGroupAttributesOutput) GoString() string { + return s.String() +} + +// SetAttributes sets the Attributes field's value. +func (s *ModifyTargetGroupAttributesOutput) SetAttributes(v []*TargetGroupAttribute) *ModifyTargetGroupAttributesOutput { + s.Attributes = v + return s +} + +type ModifyTargetGroupInput struct { + _ struct{} `type:"structure"` + + // The approximate amount of time, in seconds, between health checks of an individual + // target. For Application Load Balancers, the range is 5–300 seconds. For Network + // Load Balancers, the supported values are 10 or 30 seconds. + HealthCheckIntervalSeconds *int64 `min:"5" type:"integer"` + + // [HTTP/HTTPS health checks] The ping path that is the destination for the + // health check request. + HealthCheckPath *string `min:"1" type:"string"` + + // The port the load balancer uses when performing health checks on targets. + HealthCheckPort *string `type:"string"` + + // The protocol the load balancer uses when performing health checks on targets. + // The TCP protocol is supported only if the protocol of the target group is + // TCP. + HealthCheckProtocol *string `type:"string" enum:"ProtocolEnum"` + + // [HTTP/HTTPS health checks] The amount of time, in seconds, during which no + // response means a failed health check. + HealthCheckTimeoutSeconds *int64 `min:"2" type:"integer"` + + // The number of consecutive health checks successes required before considering + // an unhealthy target healthy. + HealthyThresholdCount *int64 `min:"2" type:"integer"` + + // [HTTP/HTTPS health checks] The HTTP codes to use when checking for a successful + // response from a target. + Matcher *Matcher `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. + // + // TargetGroupArn is a required field + TargetGroupArn *string `type:"string" required:"true"` + + // The number of consecutive health check failures required before considering + // the target unhealthy. For Network Load Balancers, this value must be the + // same as the healthy threshold count. + UnhealthyThresholdCount *int64 `min:"2" type:"integer"` +} + +// String returns the string representation +func (s ModifyTargetGroupInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyTargetGroupInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *ModifyTargetGroupInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "ModifyTargetGroupInput"} + if s.HealthCheckIntervalSeconds != nil && *s.HealthCheckIntervalSeconds < 5 { + invalidParams.Add(request.NewErrParamMinValue("HealthCheckIntervalSeconds", 5)) + } + if s.HealthCheckPath != nil && len(*s.HealthCheckPath) < 1 { + invalidParams.Add(request.NewErrParamMinLen("HealthCheckPath", 1)) + } + if s.HealthCheckTimeoutSeconds != nil && *s.HealthCheckTimeoutSeconds < 2 { + invalidParams.Add(request.NewErrParamMinValue("HealthCheckTimeoutSeconds", 2)) + } + if s.HealthyThresholdCount != nil && *s.HealthyThresholdCount < 2 { + invalidParams.Add(request.NewErrParamMinValue("HealthyThresholdCount", 2)) + } + if s.TargetGroupArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetGroupArn")) + } + if s.UnhealthyThresholdCount != nil && *s.UnhealthyThresholdCount < 2 { + invalidParams.Add(request.NewErrParamMinValue("UnhealthyThresholdCount", 2)) + } + if s.Matcher != nil { + if err := s.Matcher.Validate(); err != nil { + invalidParams.AddNested("Matcher", err.(request.ErrInvalidParams)) + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetHealthCheckIntervalSeconds sets the HealthCheckIntervalSeconds field's value. +func (s *ModifyTargetGroupInput) SetHealthCheckIntervalSeconds(v int64) *ModifyTargetGroupInput { + s.HealthCheckIntervalSeconds = &v + return s +} + +// SetHealthCheckPath sets the HealthCheckPath field's value. +func (s *ModifyTargetGroupInput) SetHealthCheckPath(v string) *ModifyTargetGroupInput { + s.HealthCheckPath = &v + return s +} + +// SetHealthCheckPort sets the HealthCheckPort field's value. +func (s *ModifyTargetGroupInput) SetHealthCheckPort(v string) *ModifyTargetGroupInput { + s.HealthCheckPort = &v + return s +} + +// SetHealthCheckProtocol sets the HealthCheckProtocol field's value. +func (s *ModifyTargetGroupInput) SetHealthCheckProtocol(v string) *ModifyTargetGroupInput { + s.HealthCheckProtocol = &v + return s +} + +// SetHealthCheckTimeoutSeconds sets the HealthCheckTimeoutSeconds field's value. +func (s *ModifyTargetGroupInput) SetHealthCheckTimeoutSeconds(v int64) *ModifyTargetGroupInput { + s.HealthCheckTimeoutSeconds = &v + return s +} + +// SetHealthyThresholdCount sets the HealthyThresholdCount field's value. +func (s *ModifyTargetGroupInput) SetHealthyThresholdCount(v int64) *ModifyTargetGroupInput { + s.HealthyThresholdCount = &v + return s +} + +// SetMatcher sets the Matcher field's value. +func (s *ModifyTargetGroupInput) SetMatcher(v *Matcher) *ModifyTargetGroupInput { + s.Matcher = v + return s +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *ModifyTargetGroupInput) SetTargetGroupArn(v string) *ModifyTargetGroupInput { + s.TargetGroupArn = &v + return s +} + +// SetUnhealthyThresholdCount sets the UnhealthyThresholdCount field's value. +func (s *ModifyTargetGroupInput) SetUnhealthyThresholdCount(v int64) *ModifyTargetGroupInput { + s.UnhealthyThresholdCount = &v + return s +} + +type ModifyTargetGroupOutput struct { + _ struct{} `type:"structure"` + + // Information about the modified target group. + TargetGroups []*TargetGroup `type:"list"` +} + +// String returns the string representation +func (s ModifyTargetGroupOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s ModifyTargetGroupOutput) GoString() string { + return s.String() +} + +// SetTargetGroups sets the TargetGroups field's value. +func (s *ModifyTargetGroupOutput) SetTargetGroups(v []*TargetGroup) *ModifyTargetGroupOutput { + s.TargetGroups = v + return s +} + +// Information about a redirect action. +// +// A URI consists of the following components: protocol://hostname:port/path?query. +// You must modify at least one of the following components to avoid a redirect +// loop: protocol, hostname, port, or path. Any components that you do not modify +// retain their original values. +// +// You can reuse URI components using the following reserved keywords: +// +// * #{protocol} +// +// * #{host} +// +// * #{port} +// +// * #{path} (the leading "/" is removed) +// +// * #{query} +// +// For example, you can change the path to "/new/#{path}", the hostname to "example.#{host}", +// or the query to "#{query}&value=xyz". +type RedirectActionConfig struct { + _ struct{} `type:"structure"` + + // The hostname. This component is not percent-encoded. The hostname can contain + // #{host}. + Host *string `min:"1" type:"string"` + + // The absolute path, starting with the leading "/". This component is not percent-encoded. + // The path can contain #{host}, #{path}, and #{port}. + Path *string `min:"1" type:"string"` + + // The port. You can specify a value from 1 to 65535 or #{port}. + Port *string `type:"string"` + + // The protocol. You can specify HTTP, HTTPS, or #{protocol}. You can redirect + // HTTP to HTTP, HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS + // to HTTP. + Protocol *string `type:"string"` + + // The query parameters, URL-encoded when necessary, but not percent-encoded. + // Do not include the leading "?", as it is automatically added. You can specify + // any of the reserved keywords. + Query *string `type:"string"` + + // The HTTP redirect code. The redirect is either permanent (HTTP 301) or temporary + // (HTTP 302). + // + // StatusCode is a required field + StatusCode *string `type:"string" required:"true" enum:"RedirectActionStatusCodeEnum"` +} + +// String returns the string representation +func (s RedirectActionConfig) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RedirectActionConfig) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RedirectActionConfig) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RedirectActionConfig"} + if s.Host != nil && len(*s.Host) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Host", 1)) + } + if s.Path != nil && len(*s.Path) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Path", 1)) + } + if s.StatusCode == nil { + invalidParams.Add(request.NewErrParamRequired("StatusCode")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetHost sets the Host field's value. +func (s *RedirectActionConfig) SetHost(v string) *RedirectActionConfig { + s.Host = &v + return s +} + +// SetPath sets the Path field's value. +func (s *RedirectActionConfig) SetPath(v string) *RedirectActionConfig { + s.Path = &v + return s +} + +// SetPort sets the Port field's value. +func (s *RedirectActionConfig) SetPort(v string) *RedirectActionConfig { + s.Port = &v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *RedirectActionConfig) SetProtocol(v string) *RedirectActionConfig { + s.Protocol = &v + return s +} + +// SetQuery sets the Query field's value. +func (s *RedirectActionConfig) SetQuery(v string) *RedirectActionConfig { + s.Query = &v + return s +} + +// SetStatusCode sets the StatusCode field's value. +func (s *RedirectActionConfig) SetStatusCode(v string) *RedirectActionConfig { + s.StatusCode = &v + return s +} + +type RegisterTargetsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the target group. + // + // TargetGroupArn is a required field + TargetGroupArn *string `type:"string" required:"true"` + + // The targets. + // + // Targets is a required field + Targets []*TargetDescription `type:"list" required:"true"` +} + +// String returns the string representation +func (s RegisterTargetsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RegisterTargetsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RegisterTargetsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RegisterTargetsInput"} + if s.TargetGroupArn == nil { + invalidParams.Add(request.NewErrParamRequired("TargetGroupArn")) + } + if s.Targets == nil { + invalidParams.Add(request.NewErrParamRequired("Targets")) + } + if s.Targets != nil { + for i, v := range s.Targets { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "Targets", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *RegisterTargetsInput) SetTargetGroupArn(v string) *RegisterTargetsInput { + s.TargetGroupArn = &v + return s +} + +// SetTargets sets the Targets field's value. +func (s *RegisterTargetsInput) SetTargets(v []*TargetDescription) *RegisterTargetsInput { + s.Targets = v + return s +} + +type RegisterTargetsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s RegisterTargetsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RegisterTargetsOutput) GoString() string { + return s.String() +} + +type RemoveListenerCertificatesInput struct { + _ struct{} `type:"structure"` + + // The certificate to remove. You can specify one certificate per call. + // + // Certificates is a required field + Certificates []*Certificate `type:"list" required:"true"` + + // The Amazon Resource Name (ARN) of the listener. + // + // ListenerArn is a required field + ListenerArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s RemoveListenerCertificatesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RemoveListenerCertificatesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RemoveListenerCertificatesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RemoveListenerCertificatesInput"} + if s.Certificates == nil { + invalidParams.Add(request.NewErrParamRequired("Certificates")) + } + if s.ListenerArn == nil { + invalidParams.Add(request.NewErrParamRequired("ListenerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetCertificates sets the Certificates field's value. +func (s *RemoveListenerCertificatesInput) SetCertificates(v []*Certificate) *RemoveListenerCertificatesInput { + s.Certificates = v + return s +} + +// SetListenerArn sets the ListenerArn field's value. +func (s *RemoveListenerCertificatesInput) SetListenerArn(v string) *RemoveListenerCertificatesInput { + s.ListenerArn = &v + return s +} + +type RemoveListenerCertificatesOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s RemoveListenerCertificatesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RemoveListenerCertificatesOutput) GoString() string { + return s.String() +} + +type RemoveTagsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the resource. + // + // ResourceArns is a required field + ResourceArns []*string `type:"list" required:"true"` + + // The tag keys for the tags to remove. + // + // TagKeys is a required field + TagKeys []*string `type:"list" required:"true"` +} + +// String returns the string representation +func (s RemoveTagsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RemoveTagsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RemoveTagsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RemoveTagsInput"} + if s.ResourceArns == nil { + invalidParams.Add(request.NewErrParamRequired("ResourceArns")) + } + if s.TagKeys == nil { + invalidParams.Add(request.NewErrParamRequired("TagKeys")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetResourceArns sets the ResourceArns field's value. +func (s *RemoveTagsInput) SetResourceArns(v []*string) *RemoveTagsInput { + s.ResourceArns = v + return s +} + +// SetTagKeys sets the TagKeys field's value. +func (s *RemoveTagsInput) SetTagKeys(v []*string) *RemoveTagsInput { + s.TagKeys = v + return s +} + +type RemoveTagsOutput struct { + _ struct{} `type:"structure"` +} + +// String returns the string representation +func (s RemoveTagsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RemoveTagsOutput) GoString() string { + return s.String() +} + +// Information about a rule. +type Rule struct { + _ struct{} `type:"structure"` + + // The actions. + Actions []*Action `type:"list"` + + // The conditions. + Conditions []*RuleCondition `type:"list"` + + // Indicates whether this is the default rule. + IsDefault *bool `type:"boolean"` + + // The priority. + Priority *string `type:"string"` + + // The Amazon Resource Name (ARN) of the rule. + RuleArn *string `type:"string"` +} + +// String returns the string representation +func (s Rule) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Rule) GoString() string { + return s.String() +} + +// SetActions sets the Actions field's value. +func (s *Rule) SetActions(v []*Action) *Rule { + s.Actions = v + return s +} + +// SetConditions sets the Conditions field's value. +func (s *Rule) SetConditions(v []*RuleCondition) *Rule { + s.Conditions = v + return s +} + +// SetIsDefault sets the IsDefault field's value. +func (s *Rule) SetIsDefault(v bool) *Rule { + s.IsDefault = &v + return s +} + +// SetPriority sets the Priority field's value. +func (s *Rule) SetPriority(v string) *Rule { + s.Priority = &v + return s +} + +// SetRuleArn sets the RuleArn field's value. +func (s *Rule) SetRuleArn(v string) *Rule { + s.RuleArn = &v + return s +} + +// Information about a condition for a rule. +type RuleCondition struct { + _ struct{} `type:"structure"` + + // The name of the field. The possible values are host-header and path-pattern. + Field *string `type:"string"` + + // The condition value. + // + // If the field name is host-header, you can specify a single host name (for + // example, my.example.com). A host name is case insensitive, can be up to 128 + // characters in length, and can contain any of the following characters. You + // can include up to three wildcard characters. + // + // * A-Z, a-z, 0-9 + // + // * - . + // + // * * (matches 0 or more characters) + // + // * ? (matches exactly 1 character) + // + // If the field name is path-pattern, you can specify a single path pattern + // (for example, /img/*). A path pattern is case-sensitive, can be up to 128 + // characters in length, and can contain any of the following characters. You + // can include up to three wildcard characters. + // + // * A-Z, a-z, 0-9 + // + // * _ - . $ / ~ " ' @ : + + // + // * & (using &) + // + // * * (matches 0 or more characters) + // + // * ? (matches exactly 1 character) + Values []*string `type:"list"` +} + +// String returns the string representation +func (s RuleCondition) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RuleCondition) GoString() string { + return s.String() +} + +// SetField sets the Field field's value. +func (s *RuleCondition) SetField(v string) *RuleCondition { + s.Field = &v + return s +} + +// SetValues sets the Values field's value. +func (s *RuleCondition) SetValues(v []*string) *RuleCondition { + s.Values = v + return s +} + +// Information about the priorities for the rules for a listener. +type RulePriorityPair struct { + _ struct{} `type:"structure"` + + // The rule priority. + Priority *int64 `min:"1" type:"integer"` + + // The Amazon Resource Name (ARN) of the rule. + RuleArn *string `type:"string"` +} + +// String returns the string representation +func (s RulePriorityPair) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s RulePriorityPair) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *RulePriorityPair) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "RulePriorityPair"} + if s.Priority != nil && *s.Priority < 1 { + invalidParams.Add(request.NewErrParamMinValue("Priority", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetPriority sets the Priority field's value. +func (s *RulePriorityPair) SetPriority(v int64) *RulePriorityPair { + s.Priority = &v + return s +} + +// SetRuleArn sets the RuleArn field's value. +func (s *RulePriorityPair) SetRuleArn(v string) *RulePriorityPair { + s.RuleArn = &v + return s +} + +type SetIpAddressTypeInput struct { + _ struct{} `type:"structure"` + + // The IP address type. The possible values are ipv4 (for IPv4 addresses) and + // dualstack (for IPv4 and IPv6 addresses). Internal load balancers must use + // ipv4. + // + // IpAddressType is a required field + IpAddressType *string `type:"string" required:"true" enum:"IpAddressType"` + + // The Amazon Resource Name (ARN) of the load balancer. + // + // LoadBalancerArn is a required field + LoadBalancerArn *string `type:"string" required:"true"` +} + +// String returns the string representation +func (s SetIpAddressTypeInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetIpAddressTypeInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *SetIpAddressTypeInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SetIpAddressTypeInput"} + if s.IpAddressType == nil { + invalidParams.Add(request.NewErrParamRequired("IpAddressType")) + } + if s.LoadBalancerArn == nil { + invalidParams.Add(request.NewErrParamRequired("LoadBalancerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetIpAddressType sets the IpAddressType field's value. +func (s *SetIpAddressTypeInput) SetIpAddressType(v string) *SetIpAddressTypeInput { + s.IpAddressType = &v + return s +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *SetIpAddressTypeInput) SetLoadBalancerArn(v string) *SetIpAddressTypeInput { + s.LoadBalancerArn = &v + return s +} + +type SetIpAddressTypeOutput struct { + _ struct{} `type:"structure"` + + // The IP address type. + IpAddressType *string `type:"string" enum:"IpAddressType"` +} + +// String returns the string representation +func (s SetIpAddressTypeOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetIpAddressTypeOutput) GoString() string { + return s.String() +} + +// SetIpAddressType sets the IpAddressType field's value. +func (s *SetIpAddressTypeOutput) SetIpAddressType(v string) *SetIpAddressTypeOutput { + s.IpAddressType = &v + return s +} + +type SetRulePrioritiesInput struct { + _ struct{} `type:"structure"` + + // The rule priorities. + // + // RulePriorities is a required field + RulePriorities []*RulePriorityPair `type:"list" required:"true"` +} + +// String returns the string representation +func (s SetRulePrioritiesInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetRulePrioritiesInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *SetRulePrioritiesInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SetRulePrioritiesInput"} + if s.RulePriorities == nil { + invalidParams.Add(request.NewErrParamRequired("RulePriorities")) + } + if s.RulePriorities != nil { + for i, v := range s.RulePriorities { + if v == nil { + continue + } + if err := v.Validate(); err != nil { + invalidParams.AddNested(fmt.Sprintf("%s[%v]", "RulePriorities", i), err.(request.ErrInvalidParams)) + } + } + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetRulePriorities sets the RulePriorities field's value. +func (s *SetRulePrioritiesInput) SetRulePriorities(v []*RulePriorityPair) *SetRulePrioritiesInput { + s.RulePriorities = v + return s +} + +type SetRulePrioritiesOutput struct { + _ struct{} `type:"structure"` + + // Information about the rules. + Rules []*Rule `type:"list"` +} + +// String returns the string representation +func (s SetRulePrioritiesOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetRulePrioritiesOutput) GoString() string { + return s.String() +} + +// SetRules sets the Rules field's value. +func (s *SetRulePrioritiesOutput) SetRules(v []*Rule) *SetRulePrioritiesOutput { + s.Rules = v + return s +} + +type SetSecurityGroupsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the load balancer. + // + // LoadBalancerArn is a required field + LoadBalancerArn *string `type:"string" required:"true"` + + // The IDs of the security groups. + // + // SecurityGroups is a required field + SecurityGroups []*string `type:"list" required:"true"` +} + +// String returns the string representation +func (s SetSecurityGroupsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetSecurityGroupsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *SetSecurityGroupsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SetSecurityGroupsInput"} + if s.LoadBalancerArn == nil { + invalidParams.Add(request.NewErrParamRequired("LoadBalancerArn")) + } + if s.SecurityGroups == nil { + invalidParams.Add(request.NewErrParamRequired("SecurityGroups")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *SetSecurityGroupsInput) SetLoadBalancerArn(v string) *SetSecurityGroupsInput { + s.LoadBalancerArn = &v + return s +} + +// SetSecurityGroups sets the SecurityGroups field's value. +func (s *SetSecurityGroupsInput) SetSecurityGroups(v []*string) *SetSecurityGroupsInput { + s.SecurityGroups = v + return s +} + +type SetSecurityGroupsOutput struct { + _ struct{} `type:"structure"` + + // The IDs of the security groups associated with the load balancer. + SecurityGroupIds []*string `type:"list"` +} + +// String returns the string representation +func (s SetSecurityGroupsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetSecurityGroupsOutput) GoString() string { + return s.String() +} + +// SetSecurityGroupIds sets the SecurityGroupIds field's value. +func (s *SetSecurityGroupsOutput) SetSecurityGroupIds(v []*string) *SetSecurityGroupsOutput { + s.SecurityGroupIds = v + return s +} + +type SetSubnetsInput struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the load balancer. + // + // LoadBalancerArn is a required field + LoadBalancerArn *string `type:"string" required:"true"` + + // The IDs of the public subnets. You must specify subnets from at least two + // Availability Zones. You can specify only one subnet per Availability Zone. + // You must specify either subnets or subnet mappings. + // + // You cannot specify Elastic IP addresses for your subnets. + SubnetMappings []*SubnetMapping `type:"list"` + + // The IDs of the public subnets. You must specify subnets from at least two + // Availability Zones. You can specify only one subnet per Availability Zone. + // You must specify either subnets or subnet mappings. + Subnets []*string `type:"list"` +} + +// String returns the string representation +func (s SetSubnetsInput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetSubnetsInput) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *SetSubnetsInput) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "SetSubnetsInput"} + if s.LoadBalancerArn == nil { + invalidParams.Add(request.NewErrParamRequired("LoadBalancerArn")) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetLoadBalancerArn sets the LoadBalancerArn field's value. +func (s *SetSubnetsInput) SetLoadBalancerArn(v string) *SetSubnetsInput { + s.LoadBalancerArn = &v + return s +} + +// SetSubnetMappings sets the SubnetMappings field's value. +func (s *SetSubnetsInput) SetSubnetMappings(v []*SubnetMapping) *SetSubnetsInput { + s.SubnetMappings = v + return s +} + +// SetSubnets sets the Subnets field's value. +func (s *SetSubnetsInput) SetSubnets(v []*string) *SetSubnetsInput { + s.Subnets = v + return s +} + +type SetSubnetsOutput struct { + _ struct{} `type:"structure"` + + // Information about the subnet and Availability Zone. + AvailabilityZones []*AvailabilityZone `type:"list"` +} + +// String returns the string representation +func (s SetSubnetsOutput) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SetSubnetsOutput) GoString() string { + return s.String() +} + +// SetAvailabilityZones sets the AvailabilityZones field's value. +func (s *SetSubnetsOutput) SetAvailabilityZones(v []*AvailabilityZone) *SetSubnetsOutput { + s.AvailabilityZones = v + return s +} + +// Information about a policy used for SSL negotiation. +type SslPolicy struct { + _ struct{} `type:"structure"` + + // The ciphers. + Ciphers []*Cipher `type:"list"` + + // The name of the policy. + Name *string `type:"string"` + + // The protocols. + SslProtocols []*string `type:"list"` +} + +// String returns the string representation +func (s SslPolicy) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SslPolicy) GoString() string { + return s.String() +} + +// SetCiphers sets the Ciphers field's value. +func (s *SslPolicy) SetCiphers(v []*Cipher) *SslPolicy { + s.Ciphers = v + return s +} + +// SetName sets the Name field's value. +func (s *SslPolicy) SetName(v string) *SslPolicy { + s.Name = &v + return s +} + +// SetSslProtocols sets the SslProtocols field's value. +func (s *SslPolicy) SetSslProtocols(v []*string) *SslPolicy { + s.SslProtocols = v + return s +} + +// Information about a subnet mapping. +type SubnetMapping struct { + _ struct{} `type:"structure"` + + // [Network Load Balancers] The allocation ID of the Elastic IP address. + AllocationId *string `type:"string"` + + // The ID of the subnet. + SubnetId *string `type:"string"` +} + +// String returns the string representation +func (s SubnetMapping) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s SubnetMapping) GoString() string { + return s.String() +} + +// SetAllocationId sets the AllocationId field's value. +func (s *SubnetMapping) SetAllocationId(v string) *SubnetMapping { + s.AllocationId = &v + return s +} + +// SetSubnetId sets the SubnetId field's value. +func (s *SubnetMapping) SetSubnetId(v string) *SubnetMapping { + s.SubnetId = &v + return s +} + +// Information about a tag. +type Tag struct { + _ struct{} `type:"structure"` + + // The key of the tag. + // + // Key is a required field + Key *string `min:"1" type:"string" required:"true"` + + // The value of the tag. + Value *string `type:"string"` +} + +// String returns the string representation +func (s Tag) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s Tag) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *Tag) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "Tag"} + if s.Key == nil { + invalidParams.Add(request.NewErrParamRequired("Key")) + } + if s.Key != nil && len(*s.Key) < 1 { + invalidParams.Add(request.NewErrParamMinLen("Key", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetKey sets the Key field's value. +func (s *Tag) SetKey(v string) *Tag { + s.Key = &v + return s +} + +// SetValue sets the Value field's value. +func (s *Tag) SetValue(v string) *Tag { + s.Value = &v + return s +} + +// The tags associated with a resource. +type TagDescription struct { + _ struct{} `type:"structure"` + + // The Amazon Resource Name (ARN) of the resource. + ResourceArn *string `type:"string"` + + // Information about the tags. + Tags []*Tag `min:"1" type:"list"` +} + +// String returns the string representation +func (s TagDescription) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TagDescription) GoString() string { + return s.String() +} + +// SetResourceArn sets the ResourceArn field's value. +func (s *TagDescription) SetResourceArn(v string) *TagDescription { + s.ResourceArn = &v + return s +} + +// SetTags sets the Tags field's value. +func (s *TagDescription) SetTags(v []*Tag) *TagDescription { + s.Tags = v + return s +} + +// Information about a target. +type TargetDescription struct { + _ struct{} `type:"structure"` + + // An Availability Zone or all. This determines whether the target receives + // traffic from the load balancer nodes in the specified Availability Zone or + // from all enabled Availability Zones for the load balancer. + // + // This parameter is not supported if the target type of the target group is + // instance. If the IP address is in a subnet of the VPC for the target group, + // the Availability Zone is automatically detected and this parameter is optional. + // If the IP address is outside the VPC, this parameter is required. + // + // With an Application Load Balancer, if the IP address is outside the VPC for + // the target group, the only supported value is all. + AvailabilityZone *string `type:"string"` + + // The ID of the target. If the target type of the target group is instance, + // specify an instance ID. If the target type is ip, specify an IP address. + // + // Id is a required field + Id *string `type:"string" required:"true"` + + // The port on which the target is listening. + Port *int64 `min:"1" type:"integer"` +} + +// String returns the string representation +func (s TargetDescription) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TargetDescription) GoString() string { + return s.String() +} + +// Validate inspects the fields of the type to determine if they are valid. +func (s *TargetDescription) Validate() error { + invalidParams := request.ErrInvalidParams{Context: "TargetDescription"} + if s.Id == nil { + invalidParams.Add(request.NewErrParamRequired("Id")) + } + if s.Port != nil && *s.Port < 1 { + invalidParams.Add(request.NewErrParamMinValue("Port", 1)) + } + + if invalidParams.Len() > 0 { + return invalidParams + } + return nil +} + +// SetAvailabilityZone sets the AvailabilityZone field's value. +func (s *TargetDescription) SetAvailabilityZone(v string) *TargetDescription { + s.AvailabilityZone = &v + return s +} + +// SetId sets the Id field's value. +func (s *TargetDescription) SetId(v string) *TargetDescription { + s.Id = &v + return s +} + +// SetPort sets the Port field's value. +func (s *TargetDescription) SetPort(v int64) *TargetDescription { + s.Port = &v + return s +} + +// Information about a target group. +type TargetGroup struct { + _ struct{} `type:"structure"` + + // The approximate amount of time, in seconds, between health checks of an individual + // target. + HealthCheckIntervalSeconds *int64 `min:"5" type:"integer"` + + // The destination for the health check request. + HealthCheckPath *string `min:"1" type:"string"` + + // The port to use to connect with the target. + HealthCheckPort *string `type:"string"` + + // The protocol to use to connect with the target. + HealthCheckProtocol *string `type:"string" enum:"ProtocolEnum"` + + // The amount of time, in seconds, during which no response means a failed health + // check. + HealthCheckTimeoutSeconds *int64 `min:"2" type:"integer"` + + // The number of consecutive health checks successes required before considering + // an unhealthy target healthy. + HealthyThresholdCount *int64 `min:"2" type:"integer"` + + // The Amazon Resource Names (ARN) of the load balancers that route traffic + // to this target group. + LoadBalancerArns []*string `type:"list"` + + // The HTTP codes to use when checking for a successful response from a target. + Matcher *Matcher `type:"structure"` + + // The port on which the targets are listening. + Port *int64 `min:"1" type:"integer"` + + // The protocol to use for routing traffic to the targets. + Protocol *string `type:"string" enum:"ProtocolEnum"` + + // The Amazon Resource Name (ARN) of the target group. + TargetGroupArn *string `type:"string"` + + // The name of the target group. + TargetGroupName *string `type:"string"` + + // The type of target that you must specify when registering targets with this + // target group. The possible values are instance (targets are specified by + // instance ID) or ip (targets are specified by IP address). + TargetType *string `type:"string" enum:"TargetTypeEnum"` + + // The number of consecutive health check failures required before considering + // the target unhealthy. + UnhealthyThresholdCount *int64 `min:"2" type:"integer"` + + // The ID of the VPC for the targets. + VpcId *string `type:"string"` +} + +// String returns the string representation +func (s TargetGroup) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TargetGroup) GoString() string { + return s.String() +} + +// SetHealthCheckIntervalSeconds sets the HealthCheckIntervalSeconds field's value. +func (s *TargetGroup) SetHealthCheckIntervalSeconds(v int64) *TargetGroup { + s.HealthCheckIntervalSeconds = &v + return s +} + +// SetHealthCheckPath sets the HealthCheckPath field's value. +func (s *TargetGroup) SetHealthCheckPath(v string) *TargetGroup { + s.HealthCheckPath = &v + return s +} + +// SetHealthCheckPort sets the HealthCheckPort field's value. +func (s *TargetGroup) SetHealthCheckPort(v string) *TargetGroup { + s.HealthCheckPort = &v + return s +} + +// SetHealthCheckProtocol sets the HealthCheckProtocol field's value. +func (s *TargetGroup) SetHealthCheckProtocol(v string) *TargetGroup { + s.HealthCheckProtocol = &v + return s +} + +// SetHealthCheckTimeoutSeconds sets the HealthCheckTimeoutSeconds field's value. +func (s *TargetGroup) SetHealthCheckTimeoutSeconds(v int64) *TargetGroup { + s.HealthCheckTimeoutSeconds = &v + return s +} + +// SetHealthyThresholdCount sets the HealthyThresholdCount field's value. +func (s *TargetGroup) SetHealthyThresholdCount(v int64) *TargetGroup { + s.HealthyThresholdCount = &v + return s +} + +// SetLoadBalancerArns sets the LoadBalancerArns field's value. +func (s *TargetGroup) SetLoadBalancerArns(v []*string) *TargetGroup { + s.LoadBalancerArns = v + return s +} + +// SetMatcher sets the Matcher field's value. +func (s *TargetGroup) SetMatcher(v *Matcher) *TargetGroup { + s.Matcher = v + return s +} + +// SetPort sets the Port field's value. +func (s *TargetGroup) SetPort(v int64) *TargetGroup { + s.Port = &v + return s +} + +// SetProtocol sets the Protocol field's value. +func (s *TargetGroup) SetProtocol(v string) *TargetGroup { + s.Protocol = &v + return s +} + +// SetTargetGroupArn sets the TargetGroupArn field's value. +func (s *TargetGroup) SetTargetGroupArn(v string) *TargetGroup { + s.TargetGroupArn = &v + return s +} + +// SetTargetGroupName sets the TargetGroupName field's value. +func (s *TargetGroup) SetTargetGroupName(v string) *TargetGroup { + s.TargetGroupName = &v + return s +} + +// SetTargetType sets the TargetType field's value. +func (s *TargetGroup) SetTargetType(v string) *TargetGroup { + s.TargetType = &v + return s +} + +// SetUnhealthyThresholdCount sets the UnhealthyThresholdCount field's value. +func (s *TargetGroup) SetUnhealthyThresholdCount(v int64) *TargetGroup { + s.UnhealthyThresholdCount = &v + return s +} + +// SetVpcId sets the VpcId field's value. +func (s *TargetGroup) SetVpcId(v string) *TargetGroup { + s.VpcId = &v + return s +} + +// Information about a target group attribute. +type TargetGroupAttribute struct { + _ struct{} `type:"structure"` + + // The name of the attribute. + // + // The following attributes are supported by both Application Load Balancers + // and Network Load Balancers: + // + // * deregistration_delay.timeout_seconds - The amount of time, in seconds, + // for Elastic Load Balancing to wait before changing the state of a deregistering + // target from draining to unused. The range is 0-3600 seconds. The default + // value is 300 seconds. + // + // The following attributes are supported by only Application Load Balancers: + // + // * slow_start.duration_seconds - The time period, in seconds, during which + // a newly registered target receives a linearly increasing share of the + // traffic to the target group. After this time period ends, the target receives + // its full share of traffic. The range is 30-900 seconds (15 minutes). Slow + // start mode is disabled by default. + // + // * stickiness.enabled - Indicates whether sticky sessions are enabled. + // The value is true or false. The default is false. + // + // * stickiness.type - The type of sticky sessions. The possible value is + // lb_cookie. + // + // * stickiness.lb_cookie.duration_seconds - The time period, in seconds, + // during which requests from a client should be routed to the same target. + // After this time period expires, the load balancer-generated cookie is + // considered stale. The range is 1 second to 1 week (604800 seconds). The + // default value is 1 day (86400 seconds). + // + // The following attributes are supported by only Network Load Balancers: + // + // * proxy_protocol_v2.enabled - Indicates whether Proxy Protocol version + // 2 is enabled. The value is true or false. The default is false. + Key *string `type:"string"` + + // The value of the attribute. + Value *string `type:"string"` +} + +// String returns the string representation +func (s TargetGroupAttribute) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TargetGroupAttribute) GoString() string { + return s.String() +} + +// SetKey sets the Key field's value. +func (s *TargetGroupAttribute) SetKey(v string) *TargetGroupAttribute { + s.Key = &v + return s +} + +// SetValue sets the Value field's value. +func (s *TargetGroupAttribute) SetValue(v string) *TargetGroupAttribute { + s.Value = &v + return s +} + +// Information about the current health of a target. +type TargetHealth struct { + _ struct{} `type:"structure"` + + // A description of the target health that provides additional details. If the + // state is healthy, a description is not provided. + Description *string `type:"string"` + + // The reason code. If the target state is healthy, a reason code is not provided. + // + // If the target state is initial, the reason code can be one of the following + // values: + // + // * Elb.RegistrationInProgress - The target is in the process of being registered + // with the load balancer. + // + // * Elb.InitialHealthChecking - The load balancer is still sending the target + // the minimum number of health checks required to determine its health status. + // + // If the target state is unhealthy, the reason code can be one of the following + // values: + // + // * Target.ResponseCodeMismatch - The health checks did not return an expected + // HTTP code. + // + // * Target.Timeout - The health check requests timed out. + // + // * Target.FailedHealthChecks - The health checks failed because the connection + // to the target timed out, the target response was malformed, or the target + // failed the health check for an unknown reason. + // + // * Elb.InternalError - The health checks failed due to an internal error. + // + // If the target state is unused, the reason code can be one of the following + // values: + // + // * Target.NotRegistered - The target is not registered with the target + // group. + // + // * Target.NotInUse - The target group is not used by any load balancer + // or the target is in an Availability Zone that is not enabled for its load + // balancer. + // + // * Target.IpUnusable - The target IP address is reserved for use by a load + // balancer. + // + // * Target.InvalidState - The target is in the stopped or terminated state. + // + // If the target state is draining, the reason code can be the following value: + // + // * Target.DeregistrationInProgress - The target is in the process of being + // deregistered and the deregistration delay period has not expired. + Reason *string `type:"string" enum:"TargetHealthReasonEnum"` + + // The state of the target. + State *string `type:"string" enum:"TargetHealthStateEnum"` +} + +// String returns the string representation +func (s TargetHealth) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TargetHealth) GoString() string { + return s.String() +} + +// SetDescription sets the Description field's value. +func (s *TargetHealth) SetDescription(v string) *TargetHealth { + s.Description = &v + return s +} + +// SetReason sets the Reason field's value. +func (s *TargetHealth) SetReason(v string) *TargetHealth { + s.Reason = &v + return s +} + +// SetState sets the State field's value. +func (s *TargetHealth) SetState(v string) *TargetHealth { + s.State = &v + return s +} + +// Information about the health of a target. +type TargetHealthDescription struct { + _ struct{} `type:"structure"` + + // The port to use to connect with the target. + HealthCheckPort *string `type:"string"` + + // The description of the target. + Target *TargetDescription `type:"structure"` + + // The health information for the target. + TargetHealth *TargetHealth `type:"structure"` +} + +// String returns the string representation +func (s TargetHealthDescription) String() string { + return awsutil.Prettify(s) +} + +// GoString returns the string representation +func (s TargetHealthDescription) GoString() string { + return s.String() +} + +// SetHealthCheckPort sets the HealthCheckPort field's value. +func (s *TargetHealthDescription) SetHealthCheckPort(v string) *TargetHealthDescription { + s.HealthCheckPort = &v + return s +} + +// SetTarget sets the Target field's value. +func (s *TargetHealthDescription) SetTarget(v *TargetDescription) *TargetHealthDescription { + s.Target = v + return s +} + +// SetTargetHealth sets the TargetHealth field's value. +func (s *TargetHealthDescription) SetTargetHealth(v *TargetHealth) *TargetHealthDescription { + s.TargetHealth = v + return s +} + +const ( + // ActionTypeEnumForward is a ActionTypeEnum enum value + ActionTypeEnumForward = "forward" + + // ActionTypeEnumAuthenticateOidc is a ActionTypeEnum enum value + ActionTypeEnumAuthenticateOidc = "authenticate-oidc" + + // ActionTypeEnumAuthenticateCognito is a ActionTypeEnum enum value + ActionTypeEnumAuthenticateCognito = "authenticate-cognito" + + // ActionTypeEnumRedirect is a ActionTypeEnum enum value + ActionTypeEnumRedirect = "redirect" + + // ActionTypeEnumFixedResponse is a ActionTypeEnum enum value + ActionTypeEnumFixedResponse = "fixed-response" +) + +const ( + // AuthenticateCognitoActionConditionalBehaviorEnumDeny is a AuthenticateCognitoActionConditionalBehaviorEnum enum value + AuthenticateCognitoActionConditionalBehaviorEnumDeny = "deny" + + // AuthenticateCognitoActionConditionalBehaviorEnumAllow is a AuthenticateCognitoActionConditionalBehaviorEnum enum value + AuthenticateCognitoActionConditionalBehaviorEnumAllow = "allow" + + // AuthenticateCognitoActionConditionalBehaviorEnumAuthenticate is a AuthenticateCognitoActionConditionalBehaviorEnum enum value + AuthenticateCognitoActionConditionalBehaviorEnumAuthenticate = "authenticate" +) + +const ( + // AuthenticateOidcActionConditionalBehaviorEnumDeny is a AuthenticateOidcActionConditionalBehaviorEnum enum value + AuthenticateOidcActionConditionalBehaviorEnumDeny = "deny" + + // AuthenticateOidcActionConditionalBehaviorEnumAllow is a AuthenticateOidcActionConditionalBehaviorEnum enum value + AuthenticateOidcActionConditionalBehaviorEnumAllow = "allow" + + // AuthenticateOidcActionConditionalBehaviorEnumAuthenticate is a AuthenticateOidcActionConditionalBehaviorEnum enum value + AuthenticateOidcActionConditionalBehaviorEnumAuthenticate = "authenticate" +) + +const ( + // IpAddressTypeIpv4 is a IpAddressType enum value + IpAddressTypeIpv4 = "ipv4" + + // IpAddressTypeDualstack is a IpAddressType enum value + IpAddressTypeDualstack = "dualstack" +) + +const ( + // LoadBalancerSchemeEnumInternetFacing is a LoadBalancerSchemeEnum enum value + LoadBalancerSchemeEnumInternetFacing = "internet-facing" + + // LoadBalancerSchemeEnumInternal is a LoadBalancerSchemeEnum enum value + LoadBalancerSchemeEnumInternal = "internal" +) + +const ( + // LoadBalancerStateEnumActive is a LoadBalancerStateEnum enum value + LoadBalancerStateEnumActive = "active" + + // LoadBalancerStateEnumProvisioning is a LoadBalancerStateEnum enum value + LoadBalancerStateEnumProvisioning = "provisioning" + + // LoadBalancerStateEnumActiveImpaired is a LoadBalancerStateEnum enum value + LoadBalancerStateEnumActiveImpaired = "active_impaired" + + // LoadBalancerStateEnumFailed is a LoadBalancerStateEnum enum value + LoadBalancerStateEnumFailed = "failed" +) + +const ( + // LoadBalancerTypeEnumApplication is a LoadBalancerTypeEnum enum value + LoadBalancerTypeEnumApplication = "application" + + // LoadBalancerTypeEnumNetwork is a LoadBalancerTypeEnum enum value + LoadBalancerTypeEnumNetwork = "network" +) + +const ( + // ProtocolEnumHttp is a ProtocolEnum enum value + ProtocolEnumHttp = "HTTP" + + // ProtocolEnumHttps is a ProtocolEnum enum value + ProtocolEnumHttps = "HTTPS" + + // ProtocolEnumTcp is a ProtocolEnum enum value + ProtocolEnumTcp = "TCP" +) + +const ( + // RedirectActionStatusCodeEnumHttp301 is a RedirectActionStatusCodeEnum enum value + RedirectActionStatusCodeEnumHttp301 = "HTTP_301" + + // RedirectActionStatusCodeEnumHttp302 is a RedirectActionStatusCodeEnum enum value + RedirectActionStatusCodeEnumHttp302 = "HTTP_302" +) + +const ( + // TargetHealthReasonEnumElbRegistrationInProgress is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumElbRegistrationInProgress = "Elb.RegistrationInProgress" + + // TargetHealthReasonEnumElbInitialHealthChecking is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumElbInitialHealthChecking = "Elb.InitialHealthChecking" + + // TargetHealthReasonEnumTargetResponseCodeMismatch is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetResponseCodeMismatch = "Target.ResponseCodeMismatch" + + // TargetHealthReasonEnumTargetTimeout is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetTimeout = "Target.Timeout" + + // TargetHealthReasonEnumTargetFailedHealthChecks is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetFailedHealthChecks = "Target.FailedHealthChecks" + + // TargetHealthReasonEnumTargetNotRegistered is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetNotRegistered = "Target.NotRegistered" + + // TargetHealthReasonEnumTargetNotInUse is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetNotInUse = "Target.NotInUse" + + // TargetHealthReasonEnumTargetDeregistrationInProgress is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetDeregistrationInProgress = "Target.DeregistrationInProgress" + + // TargetHealthReasonEnumTargetInvalidState is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetInvalidState = "Target.InvalidState" + + // TargetHealthReasonEnumTargetIpUnusable is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumTargetIpUnusable = "Target.IpUnusable" + + // TargetHealthReasonEnumElbInternalError is a TargetHealthReasonEnum enum value + TargetHealthReasonEnumElbInternalError = "Elb.InternalError" +) + +const ( + // TargetHealthStateEnumInitial is a TargetHealthStateEnum enum value + TargetHealthStateEnumInitial = "initial" + + // TargetHealthStateEnumHealthy is a TargetHealthStateEnum enum value + TargetHealthStateEnumHealthy = "healthy" + + // TargetHealthStateEnumUnhealthy is a TargetHealthStateEnum enum value + TargetHealthStateEnumUnhealthy = "unhealthy" + + // TargetHealthStateEnumUnused is a TargetHealthStateEnum enum value + TargetHealthStateEnumUnused = "unused" + + // TargetHealthStateEnumDraining is a TargetHealthStateEnum enum value + TargetHealthStateEnumDraining = "draining" + + // TargetHealthStateEnumUnavailable is a TargetHealthStateEnum enum value + TargetHealthStateEnumUnavailable = "unavailable" +) + +const ( + // TargetTypeEnumInstance is a TargetTypeEnum enum value + TargetTypeEnumInstance = "instance" + + // TargetTypeEnumIp is a TargetTypeEnum enum value + TargetTypeEnumIp = "ip" +) diff --git a/vendor/github.com/aws/aws-sdk-go/service/elbv2/doc.go b/vendor/github.com/aws/aws-sdk-go/service/elbv2/doc.go new file mode 100644 index 00000000000..99a2ea81fc1 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/elbv2/doc.go @@ -0,0 +1,76 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +// Package elbv2 provides the client and types for making API +// requests to Elastic Load Balancing. +// +// A load balancer distributes incoming traffic across targets, such as your +// EC2 instances. This enables you to increase the availability of your application. +// The load balancer also monitors the health of its registered targets and +// ensures that it routes traffic only to healthy targets. You configure your +// load balancer to accept incoming traffic by specifying one or more listeners, +// which are configured with a protocol and port number for connections from +// clients to the load balancer. You configure a target group with a protocol +// and port number for connections from the load balancer to the targets, and +// with health check settings to be used when checking the health status of +// the targets. +// +// Elastic Load Balancing supports the following types of load balancers: Application +// Load Balancers, Network Load Balancers, and Classic Load Balancers. +// +// An Application Load Balancer makes routing and load balancing decisions at +// the application layer (HTTP/HTTPS). A Network Load Balancer makes routing +// and load balancing decisions at the transport layer (TCP). Both Application +// Load Balancers and Network Load Balancers can route requests to one or more +// ports on each EC2 instance or container instance in your virtual private +// cloud (VPC). +// +// A Classic Load Balancer makes routing and load balancing decisions either +// at the transport layer (TCP/SSL) or the application layer (HTTP/HTTPS), and +// supports either EC2-Classic or a VPC. For more information, see the Elastic +// Load Balancing User Guide (http://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/). +// +// This reference covers the 2015-12-01 API, which supports Application Load +// Balancers and Network Load Balancers. The 2012-06-01 API supports Classic +// Load Balancers. +// +// To get started, complete the following tasks: +// +// Create a load balancer using CreateLoadBalancer. +// +// Create a target group using CreateTargetGroup. +// +// Register targets for the target group using RegisterTargets. +// +// Create one or more listeners for your load balancer using CreateListener. +// +// To delete a load balancer and its related resources, complete the following +// tasks: +// +// Delete the load balancer using DeleteLoadBalancer. +// +// Delete the target group using DeleteTargetGroup. +// +// All Elastic Load Balancing operations are idempotent, which means that they +// complete at most one time. If you repeat an operation, it succeeds. +// +// See https://docs.aws.amazon.com/goto/WebAPI/elasticloadbalancingv2-2015-12-01 for more information on this service. +// +// See elbv2 package documentation for more information. +// https://docs.aws.amazon.com/sdk-for-go/api/service/elbv2/ +// +// Using the Client +// +// To contact Elastic Load Balancing with the SDK use the New function to create +// a new service client. With that client you can make API requests to the service. +// These clients are safe to use concurrently. +// +// See the SDK's documentation for more information on how to use the SDK. +// https://docs.aws.amazon.com/sdk-for-go/api/ +// +// See aws.Config documentation for more information on configuring SDK clients. +// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config +// +// See the Elastic Load Balancing client ELBV2 for more +// information on creating client for this service. +// https://docs.aws.amazon.com/sdk-for-go/api/service/elbv2/#New +package elbv2 diff --git a/vendor/github.com/aws/aws-sdk-go/service/elbv2/errors.go b/vendor/github.com/aws/aws-sdk-go/service/elbv2/errors.go new file mode 100644 index 00000000000..b813ebeff7a --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/elbv2/errors.go @@ -0,0 +1,219 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package elbv2 + +const ( + + // ErrCodeAllocationIdNotFoundException for service response error code + // "AllocationIdNotFound". + // + // The specified allocation ID does not exist. + ErrCodeAllocationIdNotFoundException = "AllocationIdNotFound" + + // ErrCodeAvailabilityZoneNotSupportedException for service response error code + // "AvailabilityZoneNotSupported". + // + // The specified Availability Zone is not supported. + ErrCodeAvailabilityZoneNotSupportedException = "AvailabilityZoneNotSupported" + + // ErrCodeCertificateNotFoundException for service response error code + // "CertificateNotFound". + // + // The specified certificate does not exist. + ErrCodeCertificateNotFoundException = "CertificateNotFound" + + // ErrCodeDuplicateListenerException for service response error code + // "DuplicateListener". + // + // A listener with the specified port already exists. + ErrCodeDuplicateListenerException = "DuplicateListener" + + // ErrCodeDuplicateLoadBalancerNameException for service response error code + // "DuplicateLoadBalancerName". + // + // A load balancer with the specified name already exists. + ErrCodeDuplicateLoadBalancerNameException = "DuplicateLoadBalancerName" + + // ErrCodeDuplicateTagKeysException for service response error code + // "DuplicateTagKeys". + // + // A tag key was specified more than once. + ErrCodeDuplicateTagKeysException = "DuplicateTagKeys" + + // ErrCodeDuplicateTargetGroupNameException for service response error code + // "DuplicateTargetGroupName". + // + // A target group with the specified name already exists. + ErrCodeDuplicateTargetGroupNameException = "DuplicateTargetGroupName" + + // ErrCodeHealthUnavailableException for service response error code + // "HealthUnavailable". + // + // The health of the specified targets could not be retrieved due to an internal + // error. + ErrCodeHealthUnavailableException = "HealthUnavailable" + + // ErrCodeIncompatibleProtocolsException for service response error code + // "IncompatibleProtocols". + // + // The specified configuration is not valid with this protocol. + ErrCodeIncompatibleProtocolsException = "IncompatibleProtocols" + + // ErrCodeInvalidConfigurationRequestException for service response error code + // "InvalidConfigurationRequest". + // + // The requested configuration is not valid. + ErrCodeInvalidConfigurationRequestException = "InvalidConfigurationRequest" + + // ErrCodeInvalidLoadBalancerActionException for service response error code + // "InvalidLoadBalancerAction". + // + // The requested action is not valid. + ErrCodeInvalidLoadBalancerActionException = "InvalidLoadBalancerAction" + + // ErrCodeInvalidSchemeException for service response error code + // "InvalidScheme". + // + // The requested scheme is not valid. + ErrCodeInvalidSchemeException = "InvalidScheme" + + // ErrCodeInvalidSecurityGroupException for service response error code + // "InvalidSecurityGroup". + // + // The specified security group does not exist. + ErrCodeInvalidSecurityGroupException = "InvalidSecurityGroup" + + // ErrCodeInvalidSubnetException for service response error code + // "InvalidSubnet". + // + // The specified subnet is out of available addresses. + ErrCodeInvalidSubnetException = "InvalidSubnet" + + // ErrCodeInvalidTargetException for service response error code + // "InvalidTarget". + // + // The specified target does not exist, is not in the same VPC as the target + // group, or has an unsupported instance type. + ErrCodeInvalidTargetException = "InvalidTarget" + + // ErrCodeListenerNotFoundException for service response error code + // "ListenerNotFound". + // + // The specified listener does not exist. + ErrCodeListenerNotFoundException = "ListenerNotFound" + + // ErrCodeLoadBalancerNotFoundException for service response error code + // "LoadBalancerNotFound". + // + // The specified load balancer does not exist. + ErrCodeLoadBalancerNotFoundException = "LoadBalancerNotFound" + + // ErrCodeOperationNotPermittedException for service response error code + // "OperationNotPermitted". + // + // This operation is not allowed. + ErrCodeOperationNotPermittedException = "OperationNotPermitted" + + // ErrCodePriorityInUseException for service response error code + // "PriorityInUse". + // + // The specified priority is in use. + ErrCodePriorityInUseException = "PriorityInUse" + + // ErrCodeResourceInUseException for service response error code + // "ResourceInUse". + // + // A specified resource is in use. + ErrCodeResourceInUseException = "ResourceInUse" + + // ErrCodeRuleNotFoundException for service response error code + // "RuleNotFound". + // + // The specified rule does not exist. + ErrCodeRuleNotFoundException = "RuleNotFound" + + // ErrCodeSSLPolicyNotFoundException for service response error code + // "SSLPolicyNotFound". + // + // The specified SSL policy does not exist. + ErrCodeSSLPolicyNotFoundException = "SSLPolicyNotFound" + + // ErrCodeSubnetNotFoundException for service response error code + // "SubnetNotFound". + // + // The specified subnet does not exist. + ErrCodeSubnetNotFoundException = "SubnetNotFound" + + // ErrCodeTargetGroupAssociationLimitException for service response error code + // "TargetGroupAssociationLimit". + // + // You've reached the limit on the number of load balancers per target group. + ErrCodeTargetGroupAssociationLimitException = "TargetGroupAssociationLimit" + + // ErrCodeTargetGroupNotFoundException for service response error code + // "TargetGroupNotFound". + // + // The specified target group does not exist. + ErrCodeTargetGroupNotFoundException = "TargetGroupNotFound" + + // ErrCodeTooManyActionsException for service response error code + // "TooManyActions". + // + // You've reached the limit on the number of actions per rule. + ErrCodeTooManyActionsException = "TooManyActions" + + // ErrCodeTooManyCertificatesException for service response error code + // "TooManyCertificates". + // + // You've reached the limit on the number of certificates per load balancer. + ErrCodeTooManyCertificatesException = "TooManyCertificates" + + // ErrCodeTooManyListenersException for service response error code + // "TooManyListeners". + // + // You've reached the limit on the number of listeners per load balancer. + ErrCodeTooManyListenersException = "TooManyListeners" + + // ErrCodeTooManyLoadBalancersException for service response error code + // "TooManyLoadBalancers". + // + // You've reached the limit on the number of load balancers for your AWS account. + ErrCodeTooManyLoadBalancersException = "TooManyLoadBalancers" + + // ErrCodeTooManyRegistrationsForTargetIdException for service response error code + // "TooManyRegistrationsForTargetId". + // + // You've reached the limit on the number of times a target can be registered + // with a load balancer. + ErrCodeTooManyRegistrationsForTargetIdException = "TooManyRegistrationsForTargetId" + + // ErrCodeTooManyRulesException for service response error code + // "TooManyRules". + // + // You've reached the limit on the number of rules per load balancer. + ErrCodeTooManyRulesException = "TooManyRules" + + // ErrCodeTooManyTagsException for service response error code + // "TooManyTags". + // + // You've reached the limit on the number of tags per load balancer. + ErrCodeTooManyTagsException = "TooManyTags" + + // ErrCodeTooManyTargetGroupsException for service response error code + // "TooManyTargetGroups". + // + // You've reached the limit on the number of target groups for your AWS account. + ErrCodeTooManyTargetGroupsException = "TooManyTargetGroups" + + // ErrCodeTooManyTargetsException for service response error code + // "TooManyTargets". + // + // You've reached the limit on the number of targets. + ErrCodeTooManyTargetsException = "TooManyTargets" + + // ErrCodeUnsupportedProtocolException for service response error code + // "UnsupportedProtocol". + // + // The specified protocol is not supported. + ErrCodeUnsupportedProtocolException = "UnsupportedProtocol" +) diff --git a/vendor/github.com/aws/aws-sdk-go/service/elbv2/service.go b/vendor/github.com/aws/aws-sdk-go/service/elbv2/service.go new file mode 100644 index 00000000000..ad97e8df885 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/elbv2/service.go @@ -0,0 +1,95 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package elbv2 + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/client/metadata" + "github.com/aws/aws-sdk-go/aws/request" + "github.com/aws/aws-sdk-go/aws/signer/v4" + "github.com/aws/aws-sdk-go/private/protocol/query" +) + +// ELBV2 provides the API operation methods for making requests to +// Elastic Load Balancing. See this package's package overview docs +// for details on the service. +// +// ELBV2 methods are safe to use concurrently. It is not safe to +// modify mutate any of the struct's properties though. +type ELBV2 struct { + *client.Client +} + +// Used for custom client initialization logic +var initClient func(*client.Client) + +// Used for custom request initialization logic +var initRequest func(*request.Request) + +// Service information constants +const ( + ServiceName = "elasticloadbalancing" // Name of service. + EndpointsID = ServiceName // ID to lookup a service endpoint with. + ServiceID = "Elastic Load Balancing v2" // ServiceID is a unique identifer of a specific service. +) + +// New creates a new instance of the ELBV2 client with a session. +// If additional configuration is needed for the client instance use the optional +// aws.Config parameter to add your extra config. +// +// Example: +// // Create a ELBV2 client from just a session. +// svc := elbv2.New(mySession) +// +// // Create a ELBV2 client with additional configuration +// svc := elbv2.New(mySession, aws.NewConfig().WithRegion("us-west-2")) +func New(p client.ConfigProvider, cfgs ...*aws.Config) *ELBV2 { + c := p.ClientConfig(EndpointsID, cfgs...) + return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName) +} + +// newClient creates, initializes and returns a new service client instance. +func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *ELBV2 { + svc := &ELBV2{ + Client: client.New( + cfg, + metadata.ClientInfo{ + ServiceName: ServiceName, + ServiceID: ServiceID, + SigningName: signingName, + SigningRegion: signingRegion, + Endpoint: endpoint, + APIVersion: "2015-12-01", + }, + handlers, + ), + } + + // Handlers + svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler) + svc.Handlers.Build.PushBackNamed(query.BuildHandler) + svc.Handlers.Unmarshal.PushBackNamed(query.UnmarshalHandler) + svc.Handlers.UnmarshalMeta.PushBackNamed(query.UnmarshalMetaHandler) + svc.Handlers.UnmarshalError.PushBackNamed(query.UnmarshalErrorHandler) + + // Run custom client initialization if present + if initClient != nil { + initClient(svc.Client) + } + + return svc +} + +// newRequest creates a new request for a ELBV2 operation and runs any +// custom request initialization. +func (c *ELBV2) newRequest(op *request.Operation, params, data interface{}) *request.Request { + req := c.NewRequest(op, params, data) + + // Run custom request initialization if present + if initRequest != nil { + initRequest(req) + } + + return req +} diff --git a/vendor/github.com/aws/aws-sdk-go/service/elbv2/waiters.go b/vendor/github.com/aws/aws-sdk-go/service/elbv2/waiters.go new file mode 100644 index 00000000000..f08f1aaf203 --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/service/elbv2/waiters.go @@ -0,0 +1,270 @@ +// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT. + +package elbv2 + +import ( + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" +) + +// WaitUntilLoadBalancerAvailable uses the Elastic Load Balancing v2 API operation +// DescribeLoadBalancers to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. +func (c *ELBV2) WaitUntilLoadBalancerAvailable(input *DescribeLoadBalancersInput) error { + return c.WaitUntilLoadBalancerAvailableWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilLoadBalancerAvailableWithContext is an extended version of WaitUntilLoadBalancerAvailable. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) WaitUntilLoadBalancerAvailableWithContext(ctx aws.Context, input *DescribeLoadBalancersInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilLoadBalancerAvailable", + MaxAttempts: 40, + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ + { + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "LoadBalancers[].State.Code", + Expected: "active", + }, + { + State: request.RetryWaiterState, + Matcher: request.PathAnyWaiterMatch, Argument: "LoadBalancers[].State.Code", + Expected: "provisioning", + }, + { + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "LoadBalancerNotFound", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeLoadBalancersInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeLoadBalancersRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) +} + +// WaitUntilLoadBalancerExists uses the Elastic Load Balancing v2 API operation +// DescribeLoadBalancers to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. +func (c *ELBV2) WaitUntilLoadBalancerExists(input *DescribeLoadBalancersInput) error { + return c.WaitUntilLoadBalancerExistsWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilLoadBalancerExistsWithContext is an extended version of WaitUntilLoadBalancerExists. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) WaitUntilLoadBalancerExistsWithContext(ctx aws.Context, input *DescribeLoadBalancersInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilLoadBalancerExists", + MaxAttempts: 40, + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ + { + State: request.SuccessWaiterState, + Matcher: request.StatusWaiterMatch, + Expected: 200, + }, + { + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "LoadBalancerNotFound", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeLoadBalancersInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeLoadBalancersRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) +} + +// WaitUntilLoadBalancersDeleted uses the Elastic Load Balancing v2 API operation +// DescribeLoadBalancers to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. +func (c *ELBV2) WaitUntilLoadBalancersDeleted(input *DescribeLoadBalancersInput) error { + return c.WaitUntilLoadBalancersDeletedWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilLoadBalancersDeletedWithContext is an extended version of WaitUntilLoadBalancersDeleted. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) WaitUntilLoadBalancersDeletedWithContext(ctx aws.Context, input *DescribeLoadBalancersInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilLoadBalancersDeleted", + MaxAttempts: 40, + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ + { + State: request.RetryWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "LoadBalancers[].State.Code", + Expected: "active", + }, + { + State: request.SuccessWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "LoadBalancerNotFound", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeLoadBalancersInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeLoadBalancersRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) +} + +// WaitUntilTargetDeregistered uses the Elastic Load Balancing v2 API operation +// DescribeTargetHealth to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. +func (c *ELBV2) WaitUntilTargetDeregistered(input *DescribeTargetHealthInput) error { + return c.WaitUntilTargetDeregisteredWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilTargetDeregisteredWithContext is an extended version of WaitUntilTargetDeregistered. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) WaitUntilTargetDeregisteredWithContext(ctx aws.Context, input *DescribeTargetHealthInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilTargetDeregistered", + MaxAttempts: 40, + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ + { + State: request.SuccessWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "InvalidTarget", + }, + { + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "TargetHealthDescriptions[].TargetHealth.State", + Expected: "unused", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeTargetHealthInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTargetHealthRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) +} + +// WaitUntilTargetInService uses the Elastic Load Balancing v2 API operation +// DescribeTargetHealth to wait for a condition to be met before returning. +// If the condition is not met within the max attempt window, an error will +// be returned. +func (c *ELBV2) WaitUntilTargetInService(input *DescribeTargetHealthInput) error { + return c.WaitUntilTargetInServiceWithContext(aws.BackgroundContext(), input) +} + +// WaitUntilTargetInServiceWithContext is an extended version of WaitUntilTargetInService. +// With the support for passing in a context and options to configure the +// Waiter and the underlying request options. +// +// The context must be non-nil and will be used for request cancellation. If +// the context is nil a panic will occur. In the future the SDK may create +// sub-contexts for http.Requests. See https://golang.org/pkg/context/ +// for more information on using Contexts. +func (c *ELBV2) WaitUntilTargetInServiceWithContext(ctx aws.Context, input *DescribeTargetHealthInput, opts ...request.WaiterOption) error { + w := request.Waiter{ + Name: "WaitUntilTargetInService", + MaxAttempts: 40, + Delay: request.ConstantWaiterDelay(15 * time.Second), + Acceptors: []request.WaiterAcceptor{ + { + State: request.SuccessWaiterState, + Matcher: request.PathAllWaiterMatch, Argument: "TargetHealthDescriptions[].TargetHealth.State", + Expected: "healthy", + }, + { + State: request.RetryWaiterState, + Matcher: request.ErrorWaiterMatch, + Expected: "InvalidInstance", + }, + }, + Logger: c.Config.Logger, + NewRequest: func(opts []request.Option) (*request.Request, error) { + var inCpy *DescribeTargetHealthInput + if input != nil { + tmp := *input + inCpy = &tmp + } + req, _ := c.DescribeTargetHealthRequest(inCpy) + req.SetContext(ctx) + req.ApplyOptions(opts...) + return req, nil + }, + } + w.ApplyOptions(opts...) + + return w.WaitWithContext(ctx) +} diff --git a/vendor/github.com/openshift/hive/contrib/pkg/awstagdeprovision/awstagdeprovision.go b/vendor/github.com/openshift/hive/contrib/pkg/awstagdeprovision/awstagdeprovision.go index d2658b694b1..5eb68866d9e 100644 --- a/vendor/github.com/openshift/hive/contrib/pkg/awstagdeprovision/awstagdeprovision.go +++ b/vendor/github.com/openshift/hive/contrib/pkg/awstagdeprovision/awstagdeprovision.go @@ -29,6 +29,7 @@ import ( "github.com/aws/aws-sdk-go/service/autoscaling" "github.com/aws/aws-sdk-go/service/ec2" "github.com/aws/aws-sdk-go/service/elb" + "github.com/aws/aws-sdk-go/service/elbv2" "github.com/aws/aws-sdk-go/service/iam" "github.com/aws/aws-sdk-go/service/route53" "github.com/aws/aws-sdk-go/service/s3" @@ -266,6 +267,106 @@ func deleteLBs(vpc *ec2.Vpc, awsSession *session.Session, logger log.FieldLogger return false } +// filterV2LBsByVPC will find all the load balancers in the provided list that are under the provided VPC +func filterV2LBsByVPC(lbs []*elbv2.LoadBalancer, vpc *ec2.Vpc, logger log.FieldLogger) []*elbv2.LoadBalancer { + filteredLBs := []*elbv2.LoadBalancer{} + + for _, lb := range lbs { + if *lb.VpcId == *vpc.VpcId { + filteredLBs = append(filteredLBs, lb) + } + } + + return filteredLBs +} + +func deleteV2LBs(vpc *ec2.Vpc, awsSession *session.Session, logger log.FieldLogger) bool { + logger.Debugf("Deleting V2 load balancers (%s)", *vpc.VpcId) + defer logger.Debugf("Exiting deleting V2 load balancers (%s)", *vpc.VpcId) + elbv2Client := elbv2.New(awsSession) + + total := 0 + filteredLBs := []*elbv2.LoadBalancer{} + if err := elbv2Client.DescribeLoadBalancersPages(&elbv2.DescribeLoadBalancersInput{}, func(results *elbv2.DescribeLoadBalancersOutput, lastPage bool) bool { + total += len(results.LoadBalancers) + filteredLBs = append(filteredLBs, filterV2LBsByVPC(results.LoadBalancers, vpc, logger)...) + return lastPage + }); err != nil { + logger.Errorf("Error listing V2 load balancers: %v", err) + return false + } + logger.Debugf("from %d total V2 load balancers, %d scheduled for deletion", total, len(filteredLBs)) + + if len(filteredLBs) == 0 { + // no items left to delete + // see if we can delete target groups. + return deleteTargetGroups(vpc, awsSession, logger) + } + + for _, lb := range filteredLBs { + logger.Debugf("Deleting V2 load balancer: %v", *lb.LoadBalancerName) + _, err := elbv2Client.DeleteLoadBalancer(&elbv2.DeleteLoadBalancerInput{ + LoadBalancerArn: lb.LoadBalancerArn, + }) + if err != nil { + logger.Debugf("Error deleting V2 load balancer %v: %v", *lb.LoadBalancerName, err) + } else { + logger.WithField("name", *lb.LoadBalancerName).Info("Deleted load balancer") + } + } + // cleanup target groups + return deleteTargetGroups(vpc, awsSession, logger) +} + +// filterTargetGroupsByVPC will find all the target groups in the provided list that are under the provided VPC +func filterTargetGroupsByVPC(tgs []*elbv2.TargetGroup, vpc *ec2.Vpc, logger log.FieldLogger) []*elbv2.TargetGroup { + filteredTGs := []*elbv2.TargetGroup{} + + for _, tg := range tgs { + if *tg.VpcId == *vpc.VpcId { + filteredTGs = append(filteredTGs, tg) + } + } + + return filteredTGs +} + +func deleteTargetGroups(vpc *ec2.Vpc, awsSession *session.Session, logger log.FieldLogger) bool { + logger.Debugf("Deleting target groups (%s)", *vpc.VpcId) + defer logger.Debugf("Exiting deleting target groups (%s)", *vpc.VpcId) + elbv2Client := elbv2.New(awsSession) + + total := 0 + filteredTGs := []*elbv2.TargetGroup{} + if err := elbv2Client.DescribeTargetGroupsPages(&elbv2.DescribeTargetGroupsInput{}, func(results *elbv2.DescribeTargetGroupsOutput, lastPage bool) bool { + total += len(results.TargetGroups) + filteredTGs = append(filteredTGs, filterTargetGroupsByVPC(results.TargetGroups, vpc, logger)...) + return lastPage + }); err != nil { + logger.Errorf("Error listing target groups: %v", err) + return false + } + logger.Debugf("from %d total target groups, %d scheduled for deletion", total, len(filteredTGs)) + + if len(filteredTGs) == 0 { + // no items left to delete + return true + } + + for _, tg := range filteredTGs { + logger.Debugf("Deleting target groups: %v", *tg.TargetGroupName) + _, err := elbv2Client.DeleteTargetGroup(&elbv2.DeleteTargetGroupInput{ + TargetGroupArn: tg.TargetGroupArn, + }) + if err != nil { + logger.Debugf("Error deleting target groups %v: %v", *tg.TargetGroupName, err) + } else { + logger.WithField("name", *tg.TargetGroupName).Info("Deleted target group") + } + } + return false +} + // rtHasMainAssociation will check whether a given route table has an association marked 'Main' func rtHasMainAssociation(rt *ec2.RouteTable) bool { for _, association := range rt.Associations { @@ -348,8 +449,9 @@ func deleteVPCs(awsSession *session.Session, filters AWSFilter, clusterName stri for _, vpc := range results.Vpcs { // first delete any Load Balancers under this VPC (not all of them are tagged) - complete := deleteLBs(vpc, awsSession, logger) - if !complete { + v1lbcomplete := deleteLBs(vpc, awsSession, logger) + v2lbcomplete := deleteV2LBs(vpc, awsSession, logger) + if !v1lbcomplete || !v2lbcomplete { logger.Debugf("not finished deleting load balancers, will need to retry") return false, nil }