terraform-provider-docker/docker/resource_docker_registry_image.go

282 lines
7 KiB
Go
Raw Normal View History

2020-03-24 10:34:14 -04:00
package docker
import (
"os"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func resourceDockerRegistryImage() *schema.Resource {
return &schema.Resource{
Create: resourceDockerRegistryImageCreate,
Read: resourceDockerRegistryImageRead,
Delete: resourceDockerRegistryImageDelete,
Update: resourceDockerRegistryImageUpdate,
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"keep_remotely": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"build": &schema.Schema{
Type: schema.TypeList,
Optional: true,
MaxItems: 1,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"suppress_output": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
},
"remote_context": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"no_cache": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
},
"remove": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
},
"force_remove": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
},
"pull_parent": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
},
"isolation": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"cpu_set_cpus": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"cpu_set_mems": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"cpu_shares": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
ForceNew: true,
},
"cpu_quota": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
ForceNew: true,
},
"cpu_period": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
ForceNew: true,
},
"memory": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
ForceNew: true,
},
"memory_swap": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
ForceNew: true,
},
"cgroup_parent": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"network_mode": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"shm_size": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
ForceNew: true,
},
"dockerfile": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Default: "Dockerfile",
ForceNew: true,
},
"ulimit": &schema.Schema{
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"name": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"hard": &schema.Schema{
Type: schema.TypeInt,
Required: true,
ForceNew: true,
},
"soft": &schema.Schema{
Type: schema.TypeInt,
Required: true,
ForceNew: true,
},
},
},
},
"build_args": &schema.Schema{
Type: schema.TypeMap,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"auth_config": &schema.Schema{
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"host_name": &schema.Schema{
Type: schema.TypeString,
Required: true,
},
"user_name": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"password": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"auth": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"email": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"server_address": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"identity_token": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
"registry_token": &schema.Schema{
Type: schema.TypeString,
Optional: true,
},
},
},
},
"context": &schema.Schema{
Type: schema.TypeString,
Required: true,
ForceNew: true,
StateFunc: func(val interface{}) string {
// the context hash is stored to identify changes in the context files
dockerContextTarPath, _ := buildDockerImageContextTar(val.(string))
defer os.Remove(dockerContextTarPath)
contextTarHash, _ := getDockerImageContextTarHash(dockerContextTarPath)
return val.(string) + ":" + contextTarHash
},
},
"labels": &schema.Schema{
Type: schema.TypeMap,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"squash": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
},
"cache_from": &schema.Schema{
Type: schema.TypeList,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"security_opt": &schema.Schema{
Type: schema.TypeList,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"extra_hosts": &schema.Schema{
Type: schema.TypeList,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"target": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"session_id": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"platform": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"version": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"build_id": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
},
},
},
"sha256_digest": {
Type: schema.TypeString,
Computed: true,
},
},
}
}