summaryrefslogtreecommitdiff
path: root/vendor/github.com/hashicorp/terraform/builtin/providers/ignition/resource_ignition_filesystem.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/builtin/providers/ignition/resource_ignition_filesystem.go')
-rw-r--r--vendor/github.com/hashicorp/terraform/builtin/providers/ignition/resource_ignition_filesystem.go122
1 files changed, 122 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/builtin/providers/ignition/resource_ignition_filesystem.go b/vendor/github.com/hashicorp/terraform/builtin/providers/ignition/resource_ignition_filesystem.go
new file mode 100644
index 00000000..ce858e80
--- /dev/null
+++ b/vendor/github.com/hashicorp/terraform/builtin/providers/ignition/resource_ignition_filesystem.go
@@ -0,0 +1,122 @@
+package ignition
+
+import (
+ "fmt"
+
+ "github.com/coreos/ignition/config/types"
+ "github.com/hashicorp/terraform/helper/schema"
+)
+
+func resourceFilesystem() *schema.Resource {
+ return &schema.Resource{
+ Exists: resourceFilesystemExists,
+ Read: resourceFilesystemRead,
+ Schema: map[string]*schema.Schema{
+ "name": &schema.Schema{
+ Type: schema.TypeString,
+ Optional: true,
+ ForceNew: true,
+ },
+ "mount": &schema.Schema{
+ Type: schema.TypeList,
+ Optional: true,
+ ForceNew: true,
+ MaxItems: 1,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "device": &schema.Schema{
+ Type: schema.TypeString,
+ Required: true,
+ ForceNew: true,
+ },
+ "format": &schema.Schema{
+ Type: schema.TypeString,
+ Required: true,
+ ForceNew: true,
+ },
+ "create": &schema.Schema{
+ Type: schema.TypeBool,
+ Optional: true,
+ ForceNew: true,
+ },
+ "force": &schema.Schema{
+ Type: schema.TypeBool,
+ Optional: true,
+ ForceNew: true,
+ },
+ "options": &schema.Schema{
+ Type: schema.TypeList,
+ Optional: true,
+ ForceNew: true,
+ Elem: &schema.Schema{Type: schema.TypeString},
+ },
+ },
+ },
+ },
+ "path": &schema.Schema{
+ Type: schema.TypeString,
+ Optional: true,
+ ForceNew: true,
+ },
+ },
+ }
+}
+
+func resourceFilesystemRead(d *schema.ResourceData, meta interface{}) error {
+ id, err := buildFilesystem(d, globalCache)
+ if err != nil {
+ return err
+ }
+
+ d.SetId(id)
+ return nil
+}
+
+func resourceFilesystemExists(d *schema.ResourceData, meta interface{}) (bool, error) {
+ id, err := buildFilesystem(d, globalCache)
+ if err != nil {
+ return false, err
+ }
+
+ return id == d.Id(), nil
+}
+
+func buildFilesystem(d *schema.ResourceData, c *cache) (string, error) {
+ var mount *types.FilesystemMount
+ if _, ok := d.GetOk("mount"); ok {
+ mount = &types.FilesystemMount{
+ Device: types.Path(d.Get("mount.0.device").(string)),
+ Format: types.FilesystemFormat(d.Get("mount.0.format").(string)),
+ }
+
+ create, hasCreate := d.GetOk("mount.0.create")
+ force, hasForce := d.GetOk("mount.0.force")
+ options, hasOptions := d.GetOk("mount.0.options")
+ if hasCreate || hasOptions || hasForce {
+ mount.Create = &types.FilesystemCreate{
+ Force: force.(bool),
+ Options: castSliceInterface(options.([]interface{})),
+ }
+ }
+
+ if !create.(bool) && (hasForce || hasOptions) {
+ return "", fmt.Errorf("create should be true when force or options is used")
+ }
+ }
+
+ var path *types.Path
+ if p, ok := d.GetOk("path"); ok {
+ tp := types.Path(p.(string))
+ path = &tp
+ }
+
+ if mount != nil && path != nil {
+ return "", fmt.Errorf("mount and path are mutually exclusive")
+ }
+
+ return c.addFilesystem(&types.Filesystem{
+ Name: d.Get("name").(string),
+ Mount: mount,
+ Path: path,
+ }), nil
+}