github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/ibm/container_cluster.go (about) 1 // Copyright 2019 The Terraformer Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package ibm 16 17 import ( 18 "fmt" 19 "os" 20 21 "github.com/GoogleCloudPlatform/terraformer/terraformutils" 22 bluemix "github.com/IBM-Cloud/bluemix-go" 23 "github.com/IBM-Cloud/bluemix-go/api/container/containerv1" 24 "github.com/IBM-Cloud/bluemix-go/session" 25 ) 26 27 type ContainerClusterGenerator struct { 28 IBMService 29 } 30 31 func (g ContainerClusterGenerator) loadcluster(clustersID, clusterName string) terraformutils.Resource { 32 resource := terraformutils.NewResource( 33 clustersID, 34 normalizeResourceName(clusterName, false), 35 "ibm_container_cluster", 36 "ibm", 37 map[string]string{ 38 "force_delete_storage": "true", 39 "update_all_workers": "false", 40 "wait_for_worker_update": "true", 41 }, 42 []string{}, 43 map[string]interface{}{}) 44 45 resource.IgnoreKeys = append(resource.IgnoreKeys, 46 "^worker_num$", "^region$", 47 ) 48 return resource 49 } 50 51 func (g ContainerClusterGenerator) loadWorkerPools(clustersID, poolID, poolName string, dependsOn []string) terraformutils.Resource { 52 resources := terraformutils.NewResource( 53 fmt.Sprintf("%s/%s", clustersID, poolID), 54 normalizeResourceName(poolName, true), 55 "ibm_container_worker_pool", 56 "ibm", 57 map[string]string{}, 58 []string{}, 59 map[string]interface{}{ 60 "depends_on": dependsOn, 61 }) 62 return resources 63 } 64 65 func (g ContainerClusterGenerator) loadWorkerPoolZones(clustersID, poolID, zoneID string, dependsOn []string) terraformutils.Resource { 66 resources := terraformutils.NewResource( 67 fmt.Sprintf("%s/%s/%s", clustersID, poolID, zoneID), 68 normalizeResourceName("ibm_container_worker_pool_zone_attachment", true), 69 "ibm_container_worker_pool_zone_attachment", 70 "ibm", 71 map[string]string{}, 72 []string{}, 73 map[string]interface{}{ 74 "depends_on": dependsOn, 75 }) 76 return resources 77 } 78 79 func (g *ContainerClusterGenerator) InitResources() error { 80 bmxConfig := &bluemix.Config{ 81 BluemixAPIKey: os.Getenv("IC_API_KEY"), 82 } 83 sess, err := session.New(bmxConfig) 84 if err != nil { 85 return err 86 } 87 client, err := containerv1.New(sess) 88 if err != nil { 89 return err 90 } 91 92 clusters, err := client.Clusters().List(containerv1.ClusterTargetHeader{}) 93 if err != nil { 94 return err 95 } 96 97 for _, cs := range clusters { 98 g.Resources = append(g.Resources, g.loadcluster(cs.ID, cs.Name)) 99 clusterResourceName := g.Resources[len(g.Resources)-1:][0].ResourceName 100 workerPools, err := client.WorkerPools().ListWorkerPools(cs.ID, containerv1.ClusterTargetHeader{ 101 ResourceGroup: cs.ResourceGroupID, 102 }) 103 if err != nil { 104 return err 105 } 106 for _, pool := range workerPools { 107 var dependsOn []string 108 dependsOn = append(dependsOn, 109 "ibm_container_cluster."+clusterResourceName) 110 g.Resources = append(g.Resources, g.loadWorkerPools(cs.ID, pool.ID, pool.Name, dependsOn)) 111 poolResourceName := g.Resources[len(g.Resources)-1:][0].ResourceName 112 113 dependsOn = append(dependsOn, 114 "ibm_container_worker_pool."+poolResourceName) 115 zones := pool.Zones 116 for _, zone := range zones { 117 g.Resources = append(g.Resources, g.loadWorkerPoolZones(cs.ID, pool.ID, zone.ID, dependsOn)) 118 } 119 } 120 } 121 return nil 122 }