terraform-provider-docker/docker/resource_docker_config.go
dubo-dubon-duponey 27a9f37c69 Move to standalone plugin SDK (#200)
Closes #197 
Signed-off-by: dubo-dubon-duponey <dubodubonduponey+github@pm.me>
2019-10-09 20:25:38 +02:00

81 lines
1.8 KiB
Go

package docker
import (
"encoding/base64"
"log"
"context"
"github.com/docker/docker/api/types/swarm"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func resourceDockerConfig() *schema.Resource {
return &schema.Resource{
Create: resourceDockerConfigCreate,
Read: resourceDockerConfigRead,
Delete: resourceDockerConfigDelete,
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Description: "User-defined name of the config",
Required: true,
ForceNew: true,
},
"data": {
Type: schema.TypeString,
Description: "Base64-url-safe-encoded config data",
Required: true,
Sensitive: true,
ForceNew: true,
ValidateFunc: validateStringIsBase64Encoded(),
},
},
}
}
func resourceDockerConfigCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ProviderConfig).DockerClient
data, _ := base64.StdEncoding.DecodeString(d.Get("data").(string))
configSpec := swarm.ConfigSpec{
Annotations: swarm.Annotations{
Name: d.Get("name").(string),
},
Data: data,
}
config, err := client.ConfigCreate(context.Background(), configSpec)
if err != nil {
return err
}
d.SetId(config.ID)
return resourceDockerConfigRead(d, meta)
}
func resourceDockerConfigRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ProviderConfig).DockerClient
config, _, err := client.ConfigInspectWithRaw(context.Background(), d.Id())
if err != nil {
log.Printf("[WARN] Config (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
}
d.SetId(config.ID)
return nil
}
func resourceDockerConfigDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*ProviderConfig).DockerClient
err := client.ConfigRemove(context.Background(), d.Id())
if err != nil {
return err
}
d.SetId("")
return nil
}