1 | 'use strict'
|
2 |
|
3 | const cli = require('heroku-cli-util')
|
4 | const co = require('co')
|
5 | const parsers = require('../../lib/parsers')()
|
6 |
|
7 | function check (val, message) {
|
8 | if (!val) throw new Error(`${message}.\nUSAGE: heroku spaces:vpn:connect --name office --ip 35.161.69.30 --cidrs 172.16.0.0/16,10.0.0.0/24 --space example-space`)
|
9 | }
|
10 |
|
11 | function * run (context, heroku) {
|
12 | let lib = require('../../lib/vpn-connections')(heroku)
|
13 |
|
14 | let space = context.flags.space
|
15 | check(space, 'Space name required')
|
16 |
|
17 | let name = context.flags.name || context.args.name
|
18 | check(name, 'VPN name required')
|
19 |
|
20 | let ip = context.flags.ip
|
21 | check(ip, 'IP required')
|
22 |
|
23 | let cidrs = context.flags.cidrs
|
24 | check(cidrs, 'CIDRs required')
|
25 | cidrs = parsers.splitCsv(cidrs)
|
26 |
|
27 | yield cli.action(`Creating VPN Connection in space ${cli.color.green(space)}`, lib.postVPNConnections(space, name, ip, cidrs))
|
28 | cli.warn('Use spaces:vpn:wait to track allocation.')
|
29 | }
|
30 |
|
31 | module.exports = {
|
32 | topic: 'spaces',
|
33 | command: 'vpn:connect',
|
34 | description: 'create VPN',
|
35 | example: `$ heroku spaces:vpn:connect --name office --ip 35.161.69.30 --cidrs 172.16.0.0/16,10.0.0.0/24 --space my-space
|
36 | Creating VPN Connection in space my-space... done
|
37 | ▸ Use spaces:vpn:wait to track allocation.
|
38 | `,
|
39 | help: `Private Spaces can be connected to another private network via an IPSec VPN connection allowing dynos to connect to hosts on your private networks and vice versa.
|
40 | The connection is established over the public Internet but all traffic is encrypted using IPSec.`,
|
41 | needsApp: false,
|
42 | needsAuth: true,
|
43 | args: [
|
44 | { name: 'name', optional: true, hidden: true }
|
45 | ],
|
46 | flags: [
|
47 | { name: 'name', char: 'n', hasValue: true, description: 'VPN name' },
|
48 | { name: 'ip', char: 'i', hasValue: true, description: 'public IP of customer gateway' },
|
49 | { name: 'cidrs', char: 'c', hasValue: true, description: 'a list of routable CIDRs separated by commas' },
|
50 | { name: 'space', char: 's', hasValue: true, description: 'space name' }
|
51 | ],
|
52 | run: cli.command(co.wrap(run))
|
53 | }
|