commands/addons/create.js
'use strict'
const cli = require('heroku-cli-util')
const co = require('co')
function parseConfig (args) {
let config = {}
while (args.length > 0) {
let key = args.shift()
if (!key.startsWith('--')) throw new Error(`Unexpected argument ${key}`)
key = key.replace(/^--/, '')
let val
if (key.includes('=')) {
[key, ...val] = key.split('=')
val = val.join('=')
if (val === 'true') { val = true }
config[key] = val
} else {
val = args.shift()
if (!val) {
config[key] = true
} else if (val.startsWith('--')) {
config[key] = true
args.unshift(val)
} else {
config[key] = val
}
}
}
return config
}
function * run (context, heroku) {
let createAddon = require('../../lib/create_addon')
let {app, flags, args} = context
if (args.length === 0) {
throw new Error('Usage: heroku addons:create SERVICE:PLAN')
}
let {name, as} = flags
let config = parseConfig(args.slice(1))
let addon = yield createAddon(heroku, app, args[0], context.flags.confirm, context.flags.wait, {config, name, as})
yield context.config.runHook('recache', {type: 'addon', app, addon})
cli.log(`Use ${cli.color.cmd('heroku addons:docs ' + addon.addon_service.name)} to view documentation`)
}
const cmd = {
topic: 'addons',
description: 'create a new add-on resource',
needsAuth: true,
needsApp: true,
args: [{name: 'service:plan'}],
variableArgs: true,
flags: [
{name: 'name', description: 'name for the add-on resource', hasValue: true},
{name: 'as', description: 'name for the initial add-on attachment', hasValue: true},
{name: 'confirm', description: 'overwrite existing config vars or existing add-on attachments', hasValue: true},
{name: 'wait', description: 'watch add-on creation status and exit when complete'}
],
run: cli.command({preauth: true}, co.wrap(run))
}
module.exports = [
Object.assign({command: 'create'}, cmd),
Object.assign({command: 'add', hidden: true}, cmd)
]