UNPKG

2.03 kBJavaScriptView Raw
1'use strict'
2
3const cli = require('heroku-cli-util')
4const co = require('co')
5const parsers = require('../../lib/parsers')()
6
7function 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
11function * 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
31module.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.
40The 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}