UNPKG

@heroku-cli/plugin-spaces

Version:

Heroku plugin to manage Heroku Private Spaces

93 lines (85 loc) 3.69 kB
'use strict' const cli = require('heroku-cli-util') const lib = require('../lib/spaces') const parsers = require('../lib/parsers')() const {flags} = require('@heroku-cli/command') const {RegionCompletion} = require('@heroku-cli/command/lib/completions') async function run(context, heroku) { let space = context.flags.space || context.args.space let dollarAmountMonthly = '$1000' let dollarAmountHourly = '$1.39' let spaceType = 'Standard' if (context.flags.shield) { dollarAmountMonthly = '$3000' dollarAmountHourly = '$4.17' spaceType = 'Shield' } if (!space) throw new Error('Space name required.\nUSAGE: heroku spaces:create --space my-space --team my-team') let team = context.flags.team if (!team) throw new Error('No team specified') let request = heroku.request({ method: 'POST', path: '/spaces', body: { name: space, team: team, channel_name: context.flags.channel, region: context.flags.region, features: parsers.splitCsv(context.flags.features), log_drain_url: context.flags['log-drain-url'], shield: context.flags.shield, cidr: context.flags.cidr, kpi_url: context.flags['kpi-url'], data_cidr: context.flags['data-cidr'], }, }) space = await cli.action(`Creating space ${cli.color.green(space)} in team ${cli.color.cyan(team)}`, request) cli.warn(`${cli.color.bold('Spend Alert.')} During the limited GA period, each Heroku ${spaceType} Private Space costs ~${dollarAmountHourly}/hour (max ${dollarAmountMonthly}/month), pro-rated to the second.`) // cli.warn(`${cli.color.bold('Spend Alert.')} Each Heroku ${spaceType} Private Space costs ${dollarAmount} in Add-on Credits/month (pro-rated to the second).`) cli.warn('Use spaces:wait to track allocation.') cli.styledHeader(space.name) cli.styledObject({ ID: space.id, Team: space.team.name, Region: space.region.name, CIDR: space.cidr, 'Data CIDR': space.data_cidr, State: space.state, Shield: lib.displayShieldState(space), 'Created at': space.created_at, }, ['ID', 'Team', 'Region', 'CIDR', 'Data CIDR', 'State', 'Shield', 'Created at']) } module.exports = { topic: 'spaces', command: 'create', description: 'create a new space', help: `Example: $ heroku spaces:create --space my-space --team my-team --region oregon Creating space my-space in team my-team... done === my-space ID: e7b99e37-69b3-4475-ad47-a5cc5d75fd9f Team: my-team Region: oregon CIDR: 10.0.0.0/16 Data CIDR: 172.23.0.0/20 State: allocating Created at: 2016-01-06T03:23:13Z `, needsApp: false, needsAuth: true, wantsOrg: true, args: [{name: 'space', optional: true, hidden: true}], flags: [ {name: 'space', char: 's', hasValue: true, description: 'name of space to create'}, {name: 'channel', hasValue: true, hidden: true}, {name: 'region', hasValue: true, description: 'region name', completion: RegionCompletion}, {name: 'features', hasValue: true, hidden: true, description: 'a list of features separated by commas'}, {name: 'log-drain-url', hasValue: true, hidden: true, description: 'direct log drain url'}, {name: 'shield', hasValue: false, hidden: true, description: 'create a Shield space'}, {name: 'cidr', hasValue: true, description: 'RFC-1918 CIDR the space will use'}, {name: 'kpi-url', hasValue: true, hidden: true, description: 'self-managed KPI endpoint to use'}, {name: 'data-cidr', hasValue: true, description: 'RFC-1918 CIDR used by Heroku Data resources for the space'}, flags.team({name: 'team', hasValue: true}), ], run: cli.command(run), }