github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/google/resource_compute_ssl_certificate.go (about) 1 package google 2 3 import ( 4 "fmt" 5 "log" 6 "strconv" 7 8 "github.com/hashicorp/terraform/helper/schema" 9 "google.golang.org/api/compute/v1" 10 "google.golang.org/api/googleapi" 11 ) 12 13 func resourceComputeSslCertificate() *schema.Resource { 14 return &schema.Resource{ 15 Create: resourceComputeSslCertificateCreate, 16 Read: resourceComputeSslCertificateRead, 17 Delete: resourceComputeSslCertificateDelete, 18 19 Schema: map[string]*schema.Schema{ 20 "name": &schema.Schema{ 21 Type: schema.TypeString, 22 Required: true, 23 ForceNew: true, 24 }, 25 26 "description": &schema.Schema{ 27 Type: schema.TypeString, 28 Optional: true, 29 ForceNew: true, 30 }, 31 32 "certificate": &schema.Schema{ 33 Type: schema.TypeString, 34 Required: true, 35 ForceNew: true, 36 }, 37 38 "private_key": &schema.Schema{ 39 Type: schema.TypeString, 40 Required: true, 41 ForceNew: true, 42 }, 43 44 "self_link": &schema.Schema{ 45 Type: schema.TypeString, 46 Computed: true, 47 }, 48 49 "id": &schema.Schema{ 50 Type: schema.TypeString, 51 Computed: true, 52 }, 53 }, 54 } 55 } 56 57 func resourceComputeSslCertificateCreate(d *schema.ResourceData, meta interface{}) error { 58 config := meta.(*Config) 59 60 // Build the certificate parameter 61 cert := &compute.SslCertificate{ 62 Name: d.Get("name").(string), 63 Certificate: d.Get("certificate").(string), 64 PrivateKey: d.Get("private_key").(string), 65 } 66 67 if v, ok := d.GetOk("description"); ok { 68 cert.Description = v.(string) 69 } 70 71 op, err := config.clientCompute.SslCertificates.Insert( 72 config.Project, cert).Do() 73 74 if err != nil { 75 return fmt.Errorf("Error creating ssl certificate: %s", err) 76 } 77 78 err = computeOperationWaitGlobal(config, op, "Creating SslCertificate") 79 if err != nil { 80 return err 81 } 82 83 d.SetId(cert.Name) 84 85 return resourceComputeSslCertificateRead(d, meta) 86 } 87 88 func resourceComputeSslCertificateRead(d *schema.ResourceData, meta interface{}) error { 89 config := meta.(*Config) 90 91 cert, err := config.clientCompute.SslCertificates.Get( 92 config.Project, d.Id()).Do() 93 if err != nil { 94 if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { 95 log.Printf("[WARN] Removing SSL Certificate %q because it's gone", d.Get("name").(string)) 96 // The resource doesn't exist anymore 97 d.SetId("") 98 99 return nil 100 } 101 102 return fmt.Errorf("Error reading ssl certificate: %s", err) 103 } 104 105 d.Set("self_link", cert.SelfLink) 106 d.Set("id", strconv.FormatUint(cert.Id, 10)) 107 108 return nil 109 } 110 111 func resourceComputeSslCertificateDelete(d *schema.ResourceData, meta interface{}) error { 112 config := meta.(*Config) 113 114 op, err := config.clientCompute.SslCertificates.Delete( 115 config.Project, d.Id()).Do() 116 if err != nil { 117 return fmt.Errorf("Error deleting ssl certificate: %s", err) 118 } 119 120 err = computeOperationWaitGlobal(config, op, "Deleting SslCertificate") 121 if err != nil { 122 return err 123 } 124 125 d.SetId("") 126 return nil 127 }