Skip to content

Commit f7027ae

Browse files
committed
resource/alicloud_vpc_ipv6_cidr_block: add new resource
1 parent e2dc138 commit f7027ae

8 files changed

Lines changed: 863 additions & 0 deletions
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
2+
package alicloud
3+
4+
import (
5+
"fmt"
6+
"time"
7+
8+
"github.com/PaesslerAG/jsonpath"
9+
util "github.com/alibabacloud-go/tea-utils/service"
10+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
11+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
13+
)
14+
15+
func dataSourceAliCloudVpcIpv6CidrBlocks() *schema.Resource {
16+
return &schema.Resource{
17+
Read: dataSourceAliCloudVpcIpv6CidrBlockRead,
18+
Schema: map[string]*schema.Schema{
19+
"ids": {
20+
Type: schema.TypeList,
21+
Optional: true,
22+
ForceNew: true,
23+
Elem: &schema.Schema{Type: schema.TypeString},
24+
Computed: true,
25+
},
26+
"vpc_id": {
27+
Type: schema.TypeString,
28+
Required: true,
29+
ForceNew: true,
30+
},
31+
"blocks": {
32+
Type: schema.TypeList,
33+
Computed: true,
34+
Elem: &schema.Resource{
35+
Schema: map[string]*schema.Schema{
36+
"ipv6_cidr_block": {
37+
Type: schema.TypeString,
38+
Computed: true,
39+
},
40+
"id": {
41+
Type: schema.TypeString,
42+
Computed: true,
43+
},
44+
},
45+
},
46+
},
47+
"output_file": {
48+
Type: schema.TypeString,
49+
Optional: true,
50+
ForceNew: true,
51+
},
52+
},
53+
}
54+
}
55+
56+
func dataSourceAliCloudVpcIpv6CidrBlockRead(d *schema.ResourceData, meta interface{}) error {
57+
client := meta.(*connectivity.AliyunClient)
58+
59+
var objects []map[string]interface{}
60+
61+
idsMap := make(map[string]string)
62+
if v, ok := d.GetOk("ids"); ok {
63+
for _, vv := range v.([]interface{}) {
64+
if vv == nil {
65+
continue
66+
}
67+
idsMap[vv.(string)] = vv.(string)
68+
}
69+
}
70+
71+
var request map[string]interface{}
72+
var response map[string]interface{}
73+
var query map[string]interface{}
74+
action := "DescribeVpcAttribute"
75+
var err error
76+
request = make(map[string]interface{})
77+
query = make(map[string]interface{})
78+
request["RegionId"] = client.RegionId
79+
if v, ok := d.GetOk("vpc_id"); ok {
80+
request["VpcId"] = v
81+
}
82+
request["VpcId"] = d.Get("vpc_id")
83+
runtime := util.RuntimeOptions{}
84+
runtime.SetAutoretry(true)
85+
wait := incrementalWait(3*time.Second, 5*time.Second)
86+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
87+
response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true)
88+
89+
if err != nil {
90+
if IsExpectedErrors(err, []string{"LastTokenProcessing", "OperationConflict", "SystemBusy", "ServiceUnavailable", "IncorrectStatus"}) || NeedRetry(err) {
91+
wait()
92+
return resource.RetryableError(err)
93+
}
94+
return resource.NonRetryableError(err)
95+
}
96+
addDebug(action, response, request)
97+
return nil
98+
})
99+
if err != nil {
100+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
101+
}
102+
103+
resp, _ := jsonpath.Get("$.Ipv6CidrBlocks.Ipv6CidrBlock[*]", response)
104+
105+
result, _ := resp.([]interface{})
106+
for _, v := range result {
107+
item := v.(map[string]interface{})
108+
id := fmt.Sprint(request["VpcId"], "#", item["Ipv6CidrBlock"])
109+
if len(idsMap) > 0 {
110+
if _, ok := idsMap[id]; !ok {
111+
continue
112+
}
113+
}
114+
objects = append(objects, item)
115+
}
116+
117+
ids := make([]string, 0)
118+
s := make([]map[string]interface{}, 0)
119+
for _, objectRaw := range objects {
120+
mapping := map[string]interface{}{}
121+
122+
mapping["id"] = fmt.Sprint(request["VpcId"], "#", objectRaw["Ipv6CidrBlock"])
123+
124+
mapping["ipv6_cidr_block"] = objectRaw["Ipv6CidrBlock"]
125+
126+
ids = append(ids, fmt.Sprint(mapping["id"]))
127+
s = append(s, mapping)
128+
}
129+
130+
d.SetId(dataResourceIdHash(ids))
131+
if err := d.Set("ids", ids); err != nil {
132+
return WrapError(err)
133+
}
134+
135+
if err := d.Set("blocks", s); err != nil {
136+
return WrapError(err)
137+
}
138+
139+
if output, ok := d.GetOk("output_file"); ok && output.(string) != "" {
140+
writeToFile(output.(string), s)
141+
}
142+
return nil
143+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
2+
package alicloud
3+
4+
import (
5+
"fmt"
6+
"strings"
7+
"testing"
8+
9+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
10+
"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
11+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
12+
)
13+
14+
func TestAccAliCloudVPCIpv6CidrBlockDataSource(t *testing.T) {
15+
rand := acctest.RandIntRange(1000000, 9999999)
16+
testAccCheckExist, testAccCheckEmpty := VpcIpv6CidrBlockCheckInfo.checkDataSourceAttr(rand)
17+
18+
resource.Test(t, resource.TestCase{
19+
PreCheck: func() {
20+
testAccPreCheckWithRegions(t, true, []connectivity.Region{"cn-hangzhou", "cn-beijing"})
21+
},
22+
Providers: testAccProviders,
23+
Steps: []resource.TestStep{
24+
{
25+
Config: testAccCheckAlicloudVpcIpv6CidrBlockSourceConfig(rand, map[string]interface{}{
26+
"ids": "split(\",\", alicloud_vpc_ipv6_cidr_block.default.id)",
27+
"vpc_id": "alicloud_vpc.defaultVpc.id",
28+
"output_file": "\"./test_output_file\"",
29+
}),
30+
Check: resource.ComposeTestCheckFunc(
31+
testAccCheckExist(nil),
32+
),
33+
},
34+
{
35+
Config: testAccCheckAlicloudVpcIpv6CidrBlockSourceConfig(rand, map[string]interface{}{
36+
"ids": "split(\",\", format(\"%s_fake\", alicloud_vpc_ipv6_cidr_block.default.id))",
37+
"vpc_id": "alicloud_vpc.defaultVpc.id",
38+
}),
39+
Check: resource.ComposeTestCheckFunc(
40+
testAccCheckEmpty(nil),
41+
),
42+
},
43+
},
44+
})
45+
}
46+
47+
var existVpcIpv6CidrBlockMapFunc = func(rand int) map[string]string {
48+
return map[string]string{
49+
"blocks.#": "1",
50+
"blocks.0.ipv6_cidr_block": CHECKSET,
51+
}
52+
}
53+
54+
var fakeVpcIpv6CidrBlockMapFunc = func(rand int) map[string]string {
55+
return map[string]string{
56+
"blocks.#": "0",
57+
}
58+
}
59+
60+
var VpcIpv6CidrBlockCheckInfo = dataSourceAttr{
61+
resourceId: "data.alicloud_vpc_ipv6_cidr_blocks.default",
62+
existMapFunc: existVpcIpv6CidrBlockMapFunc,
63+
fakeMapFunc: fakeVpcIpv6CidrBlockMapFunc,
64+
}
65+
66+
func testAccCheckAlicloudVpcIpv6CidrBlockSourceConfig(rand int, attrMap map[string]interface{}) string {
67+
var pairs []string
68+
for k, v := range attrMap {
69+
pairs = append(pairs, fmt.Sprintf("%s = %v", k, v))
70+
}
71+
config := fmt.Sprintf(`
72+
variable "name" {
73+
default = "tf-testAccVpcIpv6CidrBlock%d"
74+
}
75+
resource "alicloud_vpc_ipam_ipam" "defaultIpam" {
76+
operating_region_list = ["cn-hangzhou", "cn-beijing"]
77+
}
78+
79+
resource "alicloud_vpc_ipam_ipam_pool" "defaultIpv6Pool" {
80+
ipam_scope_id = alicloud_vpc_ipam_ipam.defaultIpam.private_default_scope_id
81+
pool_region_id = alicloud_vpc_ipam_ipam.defaultIpam.region_id
82+
ip_version = "IPv6"
83+
}
84+
85+
resource "alicloud_vpc_ipam_ipam_pool_cidr" "defaultIpv6PoolCidr" {
86+
ipam_pool_id = alicloud_vpc_ipam_ipam_pool.defaultIpv6Pool.id
87+
cidr = "fd03:d00:a000::/48"
88+
}
89+
90+
resource "alicloud_vpc" "defaultVpc" {
91+
cidr_block = "10.0.0.0/8"
92+
vpc_name = "test-ipv6-cidr-block"
93+
94+
lifecycle {
95+
ignore_changes = [enable_ipv6, ipv6_cidr_block, ipv6_cidr_blocks]
96+
}
97+
}
98+
99+
100+
101+
resource "alicloud_vpc_ipv6_cidr_block" "default" {
102+
ipv6_ipam_pool_id = alicloud_vpc_ipam_ipam_pool_cidr.defaultIpv6PoolCidr.ipam_pool_id
103+
vpc_id = alicloud_vpc.defaultVpc.id
104+
ipv6_cidr_block = "fd03:d00:a000::/60"
105+
}
106+
107+
data "alicloud_vpc_ipv6_cidr_blocks" "default" {
108+
%s
109+
}
110+
`, rand, strings.Join(pairs, "\n "))
111+
return config
112+
}

alicloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ func Provider() terraform.ResourceProvider {
172172
},
173173
DataSourcesMap: map[string]*schema.Resource{
174174
"alicloud_amqp_open_source_accounts": dataSourceAliCloudAmqpOpenSourceAccounts(),
175+
"alicloud_vpc_ipv6_cidr_blocks": dataSourceAliCloudVpcIpv6CidrBlocks(),
175176
"alicloud_amqp_open_source_permissions": dataSourceAliCloudAmqpOpenSourcePermissions(),
176177
"alicloud_vpn_gateway_enhanced_vpn_gateways": dataSourceAliCloudVpnGatewayEnhancedVpnGateways(),
177178
"alicloud_cdn_domain_configs": dataSourceAliCloudCdnDomainConfigs(),
@@ -924,6 +925,7 @@ func Provider() terraform.ResourceProvider {
924925
},
925926
ResourcesMap: map[string]*schema.Resource{
926927
"alicloud_amqp_open_source_account": resourceAliCloudAmqpOpenSourceAccount(),
928+
"alicloud_vpc_ipv6_cidr_block": resourceAliCloudVpcIpv6CidrBlock(),
927929
"alicloud_amqp_open_source_permission": resourceAliCloudAmqpOpenSourcePermission(),
928930
"alicloud_vpn_gateway_enhanced_vpn_gateway": resourceAliCloudVpnGatewayEnhancedVpnGateway(),
929931
"alicloud_oss_bucket_object_worm_configuration": resourceAliCloudOssBucketObjectWormConfiguration(),

0 commit comments

Comments
 (0)