UNPKG

2.01 kBJavaScriptView Raw
1'use strict'
2
3const cli = require('heroku-cli-util')
4
5function 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
16module.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}