This repository has been archived by the owner on Oct 9, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 345
/
create.js
150 lines (134 loc) · 4.03 KB
/
create.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
var aws = require('aws-sdk');
var async = require('async');
var iam;
// Variables for the callback...
var theEvent;
var theContext;
var theDoneCallback;
var stackName;
var groupName;
var IAMuserPassword = "0Sa$3mJCC8xY";
var numIamUsers; // num users requested from cfn
var requestedUserCountArray = []; // numIamUsers split and counted
var usersCreatedArray = []; // Hold our created usernames
module.exports = {
createIAM:function(event, context, doneCallback) {
console.log(event);
theEvent = event;
theContext = context;
stackName = event.ResourceProperties.StackName;
groupName = stackName + '-IamGroup';
numIamUsers = event.ResourceProperties.IamUsers;
iam = new aws.IAM();
theDoneCallback = doneCallback;
pushUsers(numIamUsers);
createUsersImplementation();
}
}
function createUsersImplementation() {
async.series([
createIamGroup,
createUsers
], done);
}
function createIamGroup (callback) {
console.log('Creating IAM Group');
var params = {
GroupName: groupName
};
iam.createGroup(params, function(err, data) {
if (err) {
console.log('Error creating group')
return callback(err);
} else {
console.log('Created IAM Group ' + params.GroupName);
callback(null, params.GroupName);
}
});
}
function createUsers (callback) {
async.forEachLimit(requestedUserCountArray, 1, function(item, callback) {
async.waterfall([
async.apply(userCreate, item),
userAddToGroup,
userCreateLoginProfile
], function (err, data) {
if (err) {
return callback(err);
} else{
console.log('Done creating user');
callback(null);
}
});
}, function(err){
if (err) {
return callback(err);
} else {
callback(null);
}
});
}
function userCreate(user, callback){
console.log('Creating user ' + user);
var params = {
UserName: stackName + "-user-" + user
};
iam.createUser(params, function(err, data){
if (err) {
console.log('Error creating user')
return callback(err);
} else {
console.log('Created user ' + params.UserName);
callback(null, params.UserName);
}
});
}
function userAddToGroup(user, callback){
var params = {
GroupName: groupName,
UserName: user
};
iam.addUserToGroup(params, function(err, data) {
if (err) {
console.log('Error adding user to group')
return callback(err);
} else {
console.log('Added user ' + params.UserName + ' to IAM group.');
callback(null, params.UserName);
}
});
}
function userCreateLoginProfile(user, callback){
console.log('Creating login profile for ' + user);
var params = {
Password: IAMuserPassword,
UserName: user,
PasswordResetRequired: false
};
iam.createLoginProfile(params, function(err, data) {
if (err) {
console.log('Error creating login profile for user');
return callback(err);
} else {
console.log('Created login profile for ' + params.UserName);
usersCreatedArray.push(params.UserName);
callback(null);
}
});
}
/**
* Create incrementing user numbers.
* Take numIamUsers from CFN and turn it into an array of numbers counting from 1.
*/
function pushUsers(numIamUsers) {
for (var k = 1; k<=numIamUsers; k++) {
requestedUserCountArray.push(k);
}
}
function done(err, status) {
if(err) {
return theDoneCallback(err, null);
} else {
theDoneCallback(null, usersCreatedArray.toString(), IAMuserPassword, groupName); // pass back params for CFN output
}
}