github.com/sixgill/terraform@v0.9.0-beta2.0.20170316214032-033f6226ae50/builtin/providers/kubernetes/resource_kubernetes_config_map.go (about) 1 package kubernetes 2 3 import ( 4 "log" 5 6 "github.com/hashicorp/terraform/helper/schema" 7 "k8s.io/kubernetes/pkg/api/errors" 8 api "k8s.io/kubernetes/pkg/api/v1" 9 kubernetes "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5" 10 ) 11 12 func resourceKubernetesConfigMap() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceKubernetesConfigMapCreate, 15 Read: resourceKubernetesConfigMapRead, 16 Exists: resourceKubernetesConfigMapExists, 17 Update: resourceKubernetesConfigMapUpdate, 18 Delete: resourceKubernetesConfigMapDelete, 19 Importer: &schema.ResourceImporter{ 20 State: schema.ImportStatePassthrough, 21 }, 22 23 Schema: map[string]*schema.Schema{ 24 "metadata": namespacedMetadataSchema("config map", true), 25 "data": { 26 Type: schema.TypeMap, 27 Description: "A map of the configuration data.", 28 Optional: true, 29 }, 30 }, 31 } 32 } 33 34 func resourceKubernetesConfigMapCreate(d *schema.ResourceData, meta interface{}) error { 35 conn := meta.(*kubernetes.Clientset) 36 37 metadata := expandMetadata(d.Get("metadata").([]interface{})) 38 cfgMap := api.ConfigMap{ 39 ObjectMeta: metadata, 40 Data: expandStringMap(d.Get("data").(map[string]interface{})), 41 } 42 log.Printf("[INFO] Creating new config map: %#v", cfgMap) 43 out, err := conn.CoreV1().ConfigMaps(metadata.Namespace).Create(&cfgMap) 44 if err != nil { 45 return err 46 } 47 log.Printf("[INFO] Submitted new config map: %#v", out) 48 d.SetId(buildId(out.ObjectMeta)) 49 50 return resourceKubernetesConfigMapRead(d, meta) 51 } 52 53 func resourceKubernetesConfigMapRead(d *schema.ResourceData, meta interface{}) error { 54 conn := meta.(*kubernetes.Clientset) 55 56 namespace, name := idParts(d.Id()) 57 log.Printf("[INFO] Reading config map %s", name) 58 cfgMap, err := conn.CoreV1().ConfigMaps(namespace).Get(name) 59 if err != nil { 60 log.Printf("[DEBUG] Received error: %#v", err) 61 return err 62 } 63 log.Printf("[INFO] Received config map: %#v", cfgMap) 64 err = d.Set("metadata", flattenMetadata(cfgMap.ObjectMeta)) 65 if err != nil { 66 return err 67 } 68 d.Set("data", cfgMap.Data) 69 70 return nil 71 } 72 73 func resourceKubernetesConfigMapUpdate(d *schema.ResourceData, meta interface{}) error { 74 conn := meta.(*kubernetes.Clientset) 75 76 metadata := expandMetadata(d.Get("metadata").([]interface{})) 77 namespace, name := idParts(d.Id()) 78 // This is necessary in case the name is generated 79 metadata.Name = name 80 81 cfgMap := api.ConfigMap{ 82 ObjectMeta: metadata, 83 Data: expandStringMap(d.Get("data").(map[string]interface{})), 84 } 85 log.Printf("[INFO] Updating config map: %#v", cfgMap) 86 out, err := conn.CoreV1().ConfigMaps(namespace).Update(&cfgMap) 87 if err != nil { 88 return err 89 } 90 log.Printf("[INFO] Submitted updated config map: %#v", out) 91 d.SetId(buildId(out.ObjectMeta)) 92 93 return resourceKubernetesConfigMapRead(d, meta) 94 } 95 96 func resourceKubernetesConfigMapDelete(d *schema.ResourceData, meta interface{}) error { 97 conn := meta.(*kubernetes.Clientset) 98 99 namespace, name := idParts(d.Id()) 100 log.Printf("[INFO] Deleting config map: %#v", name) 101 err := conn.CoreV1().ConfigMaps(namespace).Delete(name, &api.DeleteOptions{}) 102 if err != nil { 103 return err 104 } 105 106 log.Printf("[INFO] Config map %s deleted", name) 107 108 d.SetId("") 109 return nil 110 } 111 112 func resourceKubernetesConfigMapExists(d *schema.ResourceData, meta interface{}) (bool, error) { 113 conn := meta.(*kubernetes.Clientset) 114 115 namespace, name := idParts(d.Id()) 116 log.Printf("[INFO] Checking config map %s", name) 117 _, err := conn.CoreV1().ConfigMaps(namespace).Get(name) 118 if err != nil { 119 if statusErr, ok := err.(*errors.StatusError); ok && statusErr.ErrStatus.Code == 404 { 120 return false, nil 121 } 122 log.Printf("[DEBUG] Received error: %#v", err) 123 } 124 return true, err 125 }