github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/ignition/resource_ignition_filesystem.go (about) 1 package ignition 2 3 import ( 4 "fmt" 5 6 "github.com/coreos/ignition/config/types" 7 "github.com/hashicorp/terraform/helper/schema" 8 ) 9 10 func resourceFilesystem() *schema.Resource { 11 return &schema.Resource{ 12 Exists: resourceFilesystemExists, 13 Read: resourceFilesystemRead, 14 Schema: map[string]*schema.Schema{ 15 "name": &schema.Schema{ 16 Type: schema.TypeString, 17 Optional: true, 18 ForceNew: true, 19 }, 20 "mount": &schema.Schema{ 21 Type: schema.TypeList, 22 Optional: true, 23 ForceNew: true, 24 MaxItems: 1, 25 Elem: &schema.Resource{ 26 Schema: map[string]*schema.Schema{ 27 "device": &schema.Schema{ 28 Type: schema.TypeString, 29 Required: true, 30 ForceNew: true, 31 }, 32 "format": &schema.Schema{ 33 Type: schema.TypeString, 34 Required: true, 35 ForceNew: true, 36 }, 37 "create": &schema.Schema{ 38 Type: schema.TypeBool, 39 Optional: true, 40 ForceNew: true, 41 }, 42 "force": &schema.Schema{ 43 Type: schema.TypeBool, 44 Optional: true, 45 ForceNew: true, 46 }, 47 "options": &schema.Schema{ 48 Type: schema.TypeList, 49 Optional: true, 50 ForceNew: true, 51 Elem: &schema.Schema{Type: schema.TypeString}, 52 }, 53 }, 54 }, 55 }, 56 "path": &schema.Schema{ 57 Type: schema.TypeString, 58 Optional: true, 59 ForceNew: true, 60 }, 61 }, 62 } 63 } 64 65 func resourceFilesystemRead(d *schema.ResourceData, meta interface{}) error { 66 id, err := buildFilesystem(d, globalCache) 67 if err != nil { 68 return err 69 } 70 71 d.SetId(id) 72 return nil 73 } 74 75 func resourceFilesystemExists(d *schema.ResourceData, meta interface{}) (bool, error) { 76 id, err := buildFilesystem(d, globalCache) 77 if err != nil { 78 return false, err 79 } 80 81 return id == d.Id(), nil 82 } 83 84 func buildFilesystem(d *schema.ResourceData, c *cache) (string, error) { 85 var mount *types.FilesystemMount 86 if _, ok := d.GetOk("mount"); ok { 87 mount = &types.FilesystemMount{ 88 Device: types.Path(d.Get("mount.0.device").(string)), 89 Format: types.FilesystemFormat(d.Get("mount.0.format").(string)), 90 } 91 92 create, hasCreate := d.GetOk("mount.0.create") 93 force, hasForce := d.GetOk("mount.0.force") 94 options, hasOptions := d.GetOk("mount.0.options") 95 if hasCreate || hasOptions || hasForce { 96 mount.Create = &types.FilesystemCreate{ 97 Force: force.(bool), 98 Options: castSliceInterface(options.([]interface{})), 99 } 100 } 101 102 if !create.(bool) && (hasForce || hasOptions) { 103 return "", fmt.Errorf("create should be true when force or options is used") 104 } 105 } 106 107 var path *types.Path 108 if p, ok := d.GetOk("path"); ok { 109 tp := types.Path(p.(string)) 110 path = &tp 111 } 112 113 if mount != nil && path != nil { 114 return "", fmt.Errorf("mount and path are mutually exclusive") 115 } 116 117 return c.addFilesystem(&types.Filesystem{ 118 Name: d.Get("name").(string), 119 Mount: mount, 120 Path: path, 121 }), nil 122 }