github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/ignition/resource_ignition_user.go (about) 1 package ignition 2 3 import ( 4 "reflect" 5 6 "github.com/coreos/ignition/config/types" 7 "github.com/hashicorp/terraform/helper/schema" 8 ) 9 10 func resourceUser() *schema.Resource { 11 return &schema.Resource{ 12 Exists: resourceUserExists, 13 Read: resourceUserRead, 14 Schema: map[string]*schema.Schema{ 15 "name": &schema.Schema{ 16 Type: schema.TypeString, 17 Required: true, 18 ForceNew: true, 19 }, 20 "password_hash": &schema.Schema{ 21 Type: schema.TypeString, 22 Optional: true, 23 ForceNew: true, 24 }, 25 "ssh_authorized_keys": &schema.Schema{ 26 Type: schema.TypeList, 27 Optional: true, 28 ForceNew: true, 29 Elem: &schema.Schema{Type: schema.TypeString}, 30 }, 31 "uid": &schema.Schema{ 32 Type: schema.TypeInt, 33 Optional: true, 34 ForceNew: true, 35 }, 36 "gecos": &schema.Schema{ 37 Type: schema.TypeString, 38 Optional: true, 39 ForceNew: true, 40 }, 41 "home_dir": &schema.Schema{ 42 Type: schema.TypeString, 43 Optional: true, 44 ForceNew: true, 45 }, 46 "no_create_home": &schema.Schema{ 47 Type: schema.TypeBool, 48 Optional: true, 49 ForceNew: true, 50 }, 51 "primary_group": &schema.Schema{ 52 Type: schema.TypeString, 53 Optional: true, 54 ForceNew: true, 55 }, 56 "groups": &schema.Schema{ 57 Type: schema.TypeList, 58 Optional: true, 59 ForceNew: true, 60 Elem: &schema.Schema{Type: schema.TypeString}, 61 }, 62 "no_user_group": &schema.Schema{ 63 Type: schema.TypeBool, 64 Optional: true, 65 ForceNew: true, 66 }, 67 "no_log_init": &schema.Schema{ 68 Type: schema.TypeBool, 69 Optional: true, 70 ForceNew: true, 71 }, 72 "shell": &schema.Schema{ 73 Type: schema.TypeString, 74 Optional: true, 75 ForceNew: true, 76 }, 77 }, 78 } 79 } 80 81 func resourceUserRead(d *schema.ResourceData, meta interface{}) error { 82 id, err := buildUser(d, globalCache) 83 if err != nil { 84 return err 85 } 86 87 d.SetId(id) 88 return nil 89 } 90 91 func resourceUserExists(d *schema.ResourceData, meta interface{}) (bool, error) { 92 id, err := buildUser(d, globalCache) 93 if err != nil { 94 return false, err 95 } 96 97 return id == d.Id(), nil 98 } 99 100 func buildUser(d *schema.ResourceData, c *cache) (string, error) { 101 uc := types.UserCreate{ 102 Uid: getUInt(d, "uid"), 103 GECOS: d.Get("gecos").(string), 104 Homedir: d.Get("home_dir").(string), 105 NoCreateHome: d.Get("no_create_home").(bool), 106 PrimaryGroup: d.Get("primary_group").(string), 107 Groups: castSliceInterface(d.Get("groups").([]interface{})), 108 NoUserGroup: d.Get("no_user_group").(bool), 109 NoLogInit: d.Get("no_log_init").(bool), 110 Shell: d.Get("shell").(string), 111 } 112 113 puc := &uc 114 if reflect.DeepEqual(uc, types.UserCreate{}) { // check if the struct is empty 115 puc = nil 116 } 117 118 user := types.User{ 119 Name: d.Get("name").(string), 120 PasswordHash: d.Get("password_hash").(string), 121 SSHAuthorizedKeys: castSliceInterface(d.Get("ssh_authorized_keys").([]interface{})), 122 Create: puc, 123 } 124 125 return c.addUser(&user), nil 126 }