1 | var txain = require('txain')
|
2 | var utils = require('./utils')
|
3 | var AWS = require('aws-sdk')
|
4 | var _ = require('underscore')
|
5 | var inquirer = require('inquirer')
|
6 |
|
7 | module.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 |
|
19 | module.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 |
|
63 | module.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 | }
|