UNPKG

3.19 kBJavaScriptView Raw
1var txain = require('txain')
2var utils = require('./utils')
3var AWS = require('aws-sdk')
4var _ = require('underscore')
5var inquirer = require('inquirer')
6
7module.exports = function(yargs) {
8 yargs.command('create', 'Creates a new AWS role', function (yargs) {
9 module.exports.create(utils.end)
10 })
11 .command('select', 'Selects an existing AWS role to be used for new controllers', function (yargs) {
12 module.exports.select(utils.end)
13 })
14 .wrap(yargs.terminalWidth())
15 .help('help')
16 .argv
17}
18
19module.exports.create = function(callback) {
20 var region = utils.requiresRegion()
21 console.log('Creating role for region', region)
22 var iam = new AWS.IAM()
23
24 var question = {
25 name: 'name',
26 message: 'Role name',
27 }
28 inquirer.prompt([question], function(answers) {
29 txain(function(callback) {
30 var policyDocument = {
31 "Version": "2012-10-17",
32 "Statement": [
33 {
34 "Sid": "",
35 "Effect": "Allow",
36 "Principal": {
37 "Service": "lambda.amazonaws.com"
38 },
39 "Action": "sts:AssumeRole"
40 }
41 ]
42 }
43 var params = {
44 RoleName: answers.name,
45 AssumeRolePolicyDocument: JSON.stringify(policyDocument),
46 }
47 iam.createRole(params, callback)
48 })
49 .then(function(data, callback) {
50 var role = data.Role
51 var config = utils.readConfig()
52 config.defaults = config.defaults || {}
53 config.defaults.controllers = config.defaults.controllers || {}
54 config.defaults.controllers.role = role.Arn
55 utils.writeConfig(config)
56 console.log('Updated role configuration successfully')
57 callback()
58 })
59 .end(callback)
60 })
61}
62
63module.exports.select = function(callback) {
64 var region = utils.requiresRegion()
65 console.log('Querying roles for region', region)
66
67 var iam = new AWS.IAM()
68
69 txain(function(callback) {
70 iam.listRoles(callback)
71 })
72 .then(function(data, callback) {
73 if (data.Roles.length === 0) {
74 var question = {
75 name: 'create',
76 type: 'confirm',
77 message: 'No existing stages found. Do you want to create a new one?',
78 }
79 inquirer.prompt([question], function(answers) {
80 if (answers.create) {
81 module.exports.create(callback)
82 }
83 })
84 return
85 }
86
87 var choices = data.Roles.map(function(item) {
88 return {
89 name: item.RoleName,
90 value: item,
91 }
92 })
93 choices.push(new inquirer.Separator())
94 choices.push({ name: 'Or create a new role', value: '' })
95
96 var question = {
97 name: 'role',
98 type: 'list',
99 choices: choices,
100 message: 'Choose a role',
101 }
102 inquirer.prompt([question], function(answers) {
103 var role = answers.role
104 if (!role) {
105 return module.exports.create(callback)
106 }
107 var config = utils.readConfig()
108 config.defaults = config.defaults || {}
109 config.defaults.controllers = config.defaults.controllers || {}
110 config.defaults.controllers.role = role.Arn
111 utils.writeConfig(config)
112 console.log('Updated role configuration successfully')
113 callback()
114 })
115 })
116 .end(callback)
117}