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  }