From c83ba3324bd82c6d292fe2956a5d595e47408e3c Mon Sep 17 00:00:00 2001 From: Jeremy JACQUE Date: Sun, 28 Apr 2024 17:36:21 +0200 Subject: [PATCH] feat: add support for IPv6 --- lib/kitchen/driver/aws/instance_generator.rb | 3 ++ lib/kitchen/driver/ec2.rb | 1 + .../driver/aws/instance_generator_spec.rb | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/lib/kitchen/driver/aws/instance_generator.rb b/lib/kitchen/driver/aws/instance_generator.rb index dbad7f88..45daae2e 100644 --- a/lib/kitchen/driver/aws/instance_generator.rb +++ b/lib/kitchen/driver/aws/instance_generator.rb @@ -173,6 +173,9 @@ def ec2_instance_data if config[:security_group_ids] i[:network_interfaces][0][:groups] = i.delete(:security_group_ids) end + if config[:associate_ipv6] + i[:network_interfaces][0][:ipv_6_address_count] = 1 + end end availability_zone = config[:availability_zone] if availability_zone diff --git a/lib/kitchen/driver/ec2.rb b/lib/kitchen/driver/ec2.rb index a20b2860..b873e8a5 100644 --- a/lib/kitchen/driver/ec2.rb +++ b/lib/kitchen/driver/ec2.rb @@ -85,6 +85,7 @@ class Ec2 < Kitchen::Driver::Base default_config :image_search, nil default_config :username, nil default_config :associate_public_ip, nil + default_config :associate_ipv6, nil default_config :interface, nil default_config :http_proxy, ENV["HTTPS_PROXY"] || ENV.fetch("HTTP_PROXY", nil) default_config :retry_limit, 3 diff --git a/spec/kitchen/driver/aws/instance_generator_spec.rb b/spec/kitchen/driver/aws/instance_generator_spec.rb index 4e898115..9d05d7da 100644 --- a/spec/kitchen/driver/aws/instance_generator_spec.rb +++ b/spec/kitchen/driver/aws/instance_generator_spec.rb @@ -542,6 +542,35 @@ ) end + context "and associate_ipv6 is provided" do + let(:config) do + { + region: "us-east-1", + associate_public_ip: true, + associate_ipv6: true, + } + end + + it "adds a network_interfaces block" do + expect(generator.ec2_instance_data).to eq( + instance_type: nil, + ebs_optimized: nil, + image_id: nil, + key_name: nil, + subnet_id: nil, + private_ip_address: nil, + network_interfaces: [{ + device_index: 0, + associate_public_ip_address: true, + ipv_6_address_count: 1, + delete_on_termination: true, + }], + max_count: 1, + min_count: 1 + ) + end + end + context "and subnet is provided" do let(:config) do {