7
7
"log"
8
8
"os"
9
9
"os/exec"
10
+ "os/user"
10
11
"strings"
11
12
"unicode"
12
13
@@ -128,23 +129,25 @@ func processUserData(configDriveDir string) error {
128
129
return fmt .Errorf ("could not parse user-data file as YAML: %s" , err )
129
130
}
130
131
131
- /*
132
- // create groups
133
- for _, group := range cc.Groups {
132
+ // create groups
133
+ for _ , group := range cc . Groups {
134
+ if ! groupExists ( group ) {
134
135
output , err := exec .Command ("groupadd" , group ).CombinedOutput ()
135
136
if err != nil {
136
137
log .Printf ("Error creating group '%s': %s\n %s" , group , err , output )
137
138
}
138
- }*/
139
+ }
140
+ }
139
141
140
142
// create users
141
143
var sudoers []string
142
144
for _ , user := range cc .Users {
143
- /*
145
+ if ! userExists ( user . Name ) {
144
146
err = createUser (user )
145
147
if err != nil {
146
148
log .Printf ("Error creating user: %s" , err )
147
- }*/
149
+ }
150
+ }
148
151
149
152
// try to set up ssh keys
150
153
err = AuthorizeSSHKeys (user .Name , "rancher-flatcar-cloudinit" , user .SSHAuthorizedKeys )
@@ -153,19 +156,20 @@ func processUserData(configDriveDir string) error {
153
156
}
154
157
155
158
// set up sudoers
156
- // sudoers = append(sudoers, user.Name+" "+user.Sudo)
159
+ sudoers = append (sudoers , user .Name + " " + user .Sudo )
157
160
}
158
161
159
162
// write sudoers
160
163
if len (sudoers ) > 0 {
161
- f , err := os .OpenFile ("/etc/sudoers.d/rancher-flatcar-cloudinit" , os .O_CREATE , 0440 )
164
+ f , err := os .OpenFile ("/etc/sudoers.d/rancher-flatcar-cloudinit" , os .O_CREATE | os . O_WRONLY , 0440 )
162
165
if err != nil {
163
166
log .Printf ("Error opening sudoers file: %s" , err )
164
167
}
168
+ defer f .Close ()
165
169
166
170
n , err := f .WriteString (strings .Join (sudoers , "\r \n " ))
167
171
if err != nil {
168
- log .Printf ("Error writing suoers file: %s" , err )
172
+ log .Printf ("Error writing sudoers file: %s" , err )
169
173
} else {
170
174
log .Printf ("Wrote %d entries to sudoers file" , n )
171
175
}
@@ -287,3 +291,13 @@ func AuthorizeSSHKeys(user string, keysName string, keys []string) error {
287
291
288
292
return nil
289
293
}
294
+
295
+ func userExists (u string ) bool {
296
+ _ , err := user .Lookup (u )
297
+ return err == nil
298
+ }
299
+
300
+ func groupExists (g string ) bool {
301
+ _ , err := user .LookupGroup (g )
302
+ return err == nil
303
+ }
0 commit comments