1 | 'use strict'
|
2 |
|
3 | const cli = require('heroku-cli-util')
|
4 |
|
5 | function formatConfigVarsMessage (addon) {
|
6 | let configVars = (addon.config_vars || [])
|
7 |
|
8 | if (configVars.length > 0) {
|
9 | configVars = configVars.map(c => cli.color.configVar(c)).join(', ')
|
10 | return `Created ${cli.color.addon(addon.name)} as ${configVars}`
|
11 | } else {
|
12 | return `Created ${cli.color.addon(addon.name)}`
|
13 | }
|
14 | }
|
15 |
|
16 | module.exports = function * (heroku, app, plan, confirm, wait, options) {
|
17 | const util = require('./util')
|
18 | const waitForAddonProvisioning = require('./addons_wait')
|
19 |
|
20 | function createAddonRequest (confirm) {
|
21 | let body = {
|
22 | confirm,
|
23 | name: options.name,
|
24 | config: options.config,
|
25 | plan: {name: plan},
|
26 | attachment: {name: options.as}
|
27 | }
|
28 |
|
29 | return cli.action(`Creating ${plan} on ${cli.color.app(app)}`,
|
30 | heroku.post(`/apps/${app}/addons`, {
|
31 | body,
|
32 | headers: {
|
33 | 'accept-expansion': 'plan',
|
34 | 'x-heroku-legacy-provider-messages': 'true'
|
35 | }
|
36 | }).then(function (addon) {
|
37 | cli.action.done(cli.color.green(util.formatPrice(addon.plan.price)))
|
38 | return addon
|
39 | })
|
40 | )
|
41 | }
|
42 |
|
43 | let addon = yield util.trapConfirmationRequired(app, confirm, (confirm) => (createAddonRequest(confirm)))
|
44 |
|
45 | if (addon.provision_message) { cli.log(addon.provision_message) }
|
46 |
|
47 | if (addon.state === 'provisioning') {
|
48 | if (wait) {
|
49 | cli.log(`Waiting for ${cli.color.addon(addon.name)}...`)
|
50 | addon = yield waitForAddonProvisioning(heroku, addon, 5)
|
51 | cli.log(formatConfigVarsMessage(addon))
|
52 | } else {
|
53 | cli.log(`${cli.color.addon(addon.name)} is being created in the background. The app will restart when complete...`)
|
54 | cli.log(`Use ${cli.color.cmd('heroku addons:info ' + addon.name)} to check creation progress`)
|
55 | }
|
56 | } else if (addon.state === 'deprovisioned') {
|
57 | throw new Error(`The add-on was unable to be created, with status ${addon.state}`)
|
58 | } else {
|
59 | cli.log(formatConfigVarsMessage(addon))
|
60 | }
|
61 |
|
62 | return addon
|
63 | }
|