bim 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +89 -19
- data/completions/bim.bash +2 -2
- data/lib/bim/action.rb +1 -0
- data/lib/bim/action/pool.rb +37 -2
- data/lib/bim/action/snat.rb +66 -0
- data/lib/bim/action/vs.rb +1 -6
- data/lib/bim/subcommands.rb +1 -0
- data/lib/bim/subcommands/pool.rb +46 -12
- data/lib/bim/subcommands/snat.rb +62 -0
- data/lib/bim/subcommands/vs.rb +4 -12
- data/lib/bim/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a22460bf1ff35db4e0cbfe8f3fd22a46e739a549
|
4
|
+
data.tar.gz: 212c0cc27be235f2a1144f7d36faf5903cd73ca4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f159fae5b2c30d32531b6d4ab3d6dffb91d73cea666719b67f5e83a688f2a9193bd6a057c6dbd36b5e08b5be11279407ef565328f0337d5fc1ae5fc51c7e5569
|
7
|
+
data.tar.gz: 89022d1283c7f7931f4a7aa14906427b99ad5f722ade86f1a221f218d0b1b803d80bca4d975f15430d932b90936ee6c6f6c45ec3bd54fc564698ebdcc49312a0
|
data/README.md
CHANGED
@@ -35,23 +35,7 @@ if you want to use `--test` option, set TEST_VS vriable.
|
|
35
35
|
- `TEST_VS`: set test virtual server
|
36
36
|
|
37
37
|
## Features
|
38
|
-
There are many features
|
39
|
-
|
40
|
-
#### Metadata
|
41
|
-
- get active host in the device group
|
42
|
-
- get group name that BIGIP_HOST belongs
|
43
|
-
|
44
|
-
#### Virtual Server
|
45
|
-
- get virutal server list and detail configuration
|
46
|
-
|
47
|
-
#### Sync
|
48
|
-
- execute sync action
|
49
|
-
- get sync state
|
50
|
-
|
51
|
-
#### SSL
|
52
|
-
- upload key and certificate
|
53
|
-
- create ssl client profile
|
54
|
-
- replace old ssl client profile to new ssl client profile
|
38
|
+
There are many features to help BIG_IP operation.
|
55
39
|
|
56
40
|
## Usage
|
57
41
|
|
@@ -77,7 +61,16 @@ $ bim meta device_groups
|
|
77
61
|
$ bim vs list
|
78
62
|
|
79
63
|
# output one of the virtual server list
|
80
|
-
$ bim vs detail
|
64
|
+
$ bim vs detail VS_Name
|
65
|
+
|
66
|
+
# update global ip address
|
67
|
+
$ bim vs update_global_address VS_Name GLOBAL_IPADDRESS PORT
|
68
|
+
|
69
|
+
# change firewall policy
|
70
|
+
$ bim vs change_nf VS_NAME NETWORK_FIREWALL_FULLPATH
|
71
|
+
|
72
|
+
# change pool
|
73
|
+
$ bim vs change_pool VS_NAME POOL_FULLPATH
|
81
74
|
```
|
82
75
|
|
83
76
|
#### Sync
|
@@ -100,7 +93,7 @@ $ bim ssl bundles
|
|
100
93
|
$ bim ssl profiles
|
101
94
|
|
102
95
|
# output specified ssl profile
|
103
|
-
$ bim ssl detail
|
96
|
+
$ bim ssl detail SSL_Profile_Name
|
104
97
|
|
105
98
|
# upload and create_ssl_profile and replace.
|
106
99
|
$ bim ssl deploy OLD_SSL_PROFILE_NAME NEW_SSL_PROFILE_NAME PRIVATE_KEYFILE CERTIFICATE_FILE CHAIN
|
@@ -127,6 +120,83 @@ $ bim ssl replace OLD_SSL_PROFILE_NAME NEW_SSL_PROFILE_NAME
|
|
127
120
|
$ TEST_VS=test_virtual_server bim replace OLD_SSL_PROFILE_NAME NEW_SSL_PROFILE_NAME --test
|
128
121
|
```
|
129
122
|
|
123
|
+
#### Firewall
|
124
|
+
|
125
|
+
```sh
|
126
|
+
# output firewall policy list
|
127
|
+
$ bim fw ls
|
128
|
+
|
129
|
+
# output firewall detail configuration
|
130
|
+
$ bim fw detail FIREWALL_POLICY_NAME
|
131
|
+
```
|
132
|
+
|
133
|
+
#### Node
|
134
|
+
|
135
|
+
```sh
|
136
|
+
# output node list
|
137
|
+
$ bim node ls
|
138
|
+
|
139
|
+
# output node detail
|
140
|
+
$ bim node detail NODE_NAME
|
141
|
+
|
142
|
+
# create node
|
143
|
+
$ bim node create NODE_NAME IP_ADDRESS
|
144
|
+
|
145
|
+
# delete node
|
146
|
+
$ bim node delete NODE_NAME
|
147
|
+
```
|
148
|
+
|
149
|
+
#### Pool
|
150
|
+
|
151
|
+
```sh
|
152
|
+
# output pool list
|
153
|
+
$ bim pool ls
|
154
|
+
|
155
|
+
# output members belongs pool
|
156
|
+
$ bim pool members POOL_NAME
|
157
|
+
|
158
|
+
# create pool
|
159
|
+
$ bim pool create POOL_NAME [--monitor='monitor name'] [--slow-ramp-time=interger] [--members='[{"name": "NodeName:PORT", "address": "NodeAddress"}, {"name": "NodeName:PORT", "address": "NodeAddress"}]']
|
160
|
+
|
161
|
+
# update pool
|
162
|
+
$ bim pool update POOL_NAME [--monitor='monitor name'] [--slow-ramp-time=interger] [--members='[{"name": "NodeName:PORT", "address": "NodeAddress"}, {"name": "NodeName:PORT", "address": "NodeAddress"}]']
|
163
|
+
|
164
|
+
# enable members
|
165
|
+
$ bim pool enable POOL_NAME --members=IP_ADDRESS:PORT IP_ADDRESS:PORT
|
166
|
+
|
167
|
+
# disable members
|
168
|
+
$ bim pool disable POOL_NAME --members=IP_ADDRESS:PORT IP_ADDRESS:PORT
|
169
|
+
|
170
|
+
# add members
|
171
|
+
$ bim pool add POOL_NAME --members=NODENAME:PORT NODENAME:PORT
|
172
|
+
|
173
|
+
# drop members
|
174
|
+
$ bim pool drop POOL_NAME --members=NODENAME:PORT NODENAME:PORT
|
175
|
+
```
|
176
|
+
|
177
|
+
#### Snat
|
178
|
+
|
179
|
+
```sh
|
180
|
+
# output snat list
|
181
|
+
$ bim snat ls
|
182
|
+
|
183
|
+
# output snat configuration
|
184
|
+
$ bim snat detail SNAT_NAME
|
185
|
+
|
186
|
+
# create snat
|
187
|
+
$ bim snat create SNAT_NAME --translation=GLOBAL_IPADDRESS --addresses=IPADDRESS/MASK IPADDRESS/MASK --vlans=VLAN1 VLAN2
|
188
|
+
# ※ if not set vlans, set false to vlanEnabled and ALL* to vlans.
|
189
|
+
|
190
|
+
# update snat
|
191
|
+
$ bim snat update SNAT_NAME --translation=GLOBAL_IPADDRESS --addresses=IPADDRESS/MASK IPADDRESS/MASK --vlans=VLAN1 VLAN2
|
192
|
+
|
193
|
+
# add address
|
194
|
+
$ bim add_address SNAT_NAME --addresses=IPADDRESS/MASK IPADDRESS/MASK
|
195
|
+
|
196
|
+
# remove address
|
197
|
+
$ bim remove_address SNAT_NAME --addresses=IPADDRESS/MASK IPADDRESS/MASK
|
198
|
+
```
|
199
|
+
|
130
200
|
## License
|
131
201
|
|
132
202
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/completions/bim.bash
CHANGED
@@ -4,10 +4,10 @@ _bim() {
|
|
4
4
|
_get_comp_words_by_ref -n : cur prev
|
5
5
|
|
6
6
|
if [ "$COMP_CWORD" -eq 1 ]; then
|
7
|
-
COMPREPLY=( $(compgen -W "$(
|
7
|
+
COMPREPLY=( $(compgen -W "$(bim help | tail -n +2 | awk '{ print $2}')" -- "$cur") )
|
8
8
|
elif [ $COMP_CWORD -eq 2 ]; then
|
9
9
|
if [ $prev = "ssl" ] || [ $prev = "meta" ] || [ $prev = "sync" ]; then
|
10
|
-
COMPREPLY=( $(compgen -W "$(
|
10
|
+
COMPREPLY=( $(compgen -W "$(bim $prev help | tail -n +2 | awk '{ print $3}')" -- $cur) )
|
11
11
|
fi
|
12
12
|
fi
|
13
13
|
}
|
data/lib/bim/action.rb
CHANGED
data/lib/bim/action/pool.rb
CHANGED
@@ -18,11 +18,20 @@ module Bim
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
def create(name,
|
22
|
-
j =
|
21
|
+
def create(name, monitor, slow_ramp_time, members)
|
22
|
+
j = { 'name' => name, 'monitor' => monitor, 'slowRampTime' => slow_ramp_time }
|
23
|
+
j['members'] = JSON.parse(members.delete('\\')) unless members.nil?
|
23
24
|
post(POOL_URI, j.to_json)
|
24
25
|
end
|
25
26
|
|
27
|
+
def update(name, monitor, slow_ramp_time, members)
|
28
|
+
uri = URI(sub_localhost(specify_link_by_name(POOL_URI, name)))
|
29
|
+
j = { 'name' => name, 'monitor' => monitor, 'slowRampTime' => slow_ramp_time }
|
30
|
+
j['members'] = JSON.parse(members.delete('\\')) unless members.nil?
|
31
|
+
req = request(uri, Bim::AUTH, 'application/json', 'PATCH', j.to_json)
|
32
|
+
http(uri).request(req).body
|
33
|
+
end
|
34
|
+
|
26
35
|
def members(name)
|
27
36
|
cond = proc { |item| name == item['name'] }
|
28
37
|
select_map(POOL_URI, cond) do |item|
|
@@ -32,6 +41,14 @@ module Bim
|
|
32
41
|
end
|
33
42
|
end
|
34
43
|
|
44
|
+
def enable(name, members)
|
45
|
+
{ 'enabled_members': change_session(name, members, 'user-enabled') }
|
46
|
+
end
|
47
|
+
|
48
|
+
def disable(name, members)
|
49
|
+
{ 'disabled_members': change_session(name, members, 'user-disabled') }
|
50
|
+
end
|
51
|
+
|
35
52
|
def drop_members(name, members)
|
36
53
|
members_link = specify_link(POOL_URI, %w[membersReference link]) do |item|
|
37
54
|
item['name'] == name
|
@@ -67,6 +84,24 @@ module Bim
|
|
67
84
|
|
68
85
|
{ 'add_members': add_members }
|
69
86
|
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def change_session(name, members, session_value)
|
91
|
+
uri = URI(sub_localhost(specify_link_by_name(POOL_URI, name, %w[membersReference link])))
|
92
|
+
|
93
|
+
success_members = []
|
94
|
+
cond = proc { |item| members.include?(item['name']) }
|
95
|
+
JSON.parse(select_map(uri, cond) do |item|
|
96
|
+
{ 'name': item['name'], 'self_link': sub_localhost(item['selfLink']) }
|
97
|
+
end).each do |item|
|
98
|
+
uri = URI.parse(item['self_link'])
|
99
|
+
req = request(uri, Bim::AUTH, 'application/json', 'PATCH', { session: session_value }.to_json)
|
100
|
+
success_members.push(item['name']) if http(uri).request(req).code == '200'
|
101
|
+
end
|
102
|
+
|
103
|
+
success_members
|
104
|
+
end
|
70
105
|
end
|
71
106
|
end
|
72
107
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Bim
|
2
|
+
module Action
|
3
|
+
# Snat class uses by Bim::Subcommands::Node
|
4
|
+
class Snat
|
5
|
+
extend Bim::Util
|
6
|
+
|
7
|
+
SNAT_PATH = '/mgmt/tm/ltm/snat'.freeze
|
8
|
+
SNAT_URI = URI.join(Bim::BASE_URL, Bim::Action::Snat::SNAT_PATH)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def ls
|
12
|
+
map(SNAT_URI) do |item|
|
13
|
+
{
|
14
|
+
'name': item['name'],
|
15
|
+
'translation': item['translation'],
|
16
|
+
'address_list': item['origins'].map { |origin| origin['name'] },
|
17
|
+
'vlans': item['vlans']
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def detail(name)
|
23
|
+
specify(SNAT_URI) { |d| d['name'] == name }
|
24
|
+
end
|
25
|
+
|
26
|
+
def create(name, translation, address_list, vlans)
|
27
|
+
j = {
|
28
|
+
'name': name,
|
29
|
+
'translation': translation,
|
30
|
+
'origins': address_list.map { |address| { 'name': address } }
|
31
|
+
}
|
32
|
+
unless vlans.nil?
|
33
|
+
j['vlansEnabled'] = true
|
34
|
+
j['vlans'] = vlans.map { |vlan| "/Common/#{vlan}" }
|
35
|
+
end
|
36
|
+
post(SNAT_URI, j.to_json)
|
37
|
+
end
|
38
|
+
|
39
|
+
def update(name, translation, address_list, vlans)
|
40
|
+
j = {}
|
41
|
+
if address_list
|
42
|
+
j['origins'] = address_list.map { |address| { 'name': address } }
|
43
|
+
end
|
44
|
+
j['translation'] = translation if translation
|
45
|
+
unless vlans.nil?
|
46
|
+
j['vlansEnabled'] = true
|
47
|
+
j['vlans'] = vlans.map { |vlan| "/Common/#{vlan}" }
|
48
|
+
end
|
49
|
+
self_patch(name, SNAT_URI, j.to_json)
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_address(name, addresses)
|
53
|
+
origins = specify_link_by_name(SNAT_URI, name, %(origins))
|
54
|
+
j = { 'origins': origins.push(addresses.map { |address| { 'name': address } }).flatten }
|
55
|
+
self_patch(name, SNAT_URI, j.to_json)
|
56
|
+
end
|
57
|
+
|
58
|
+
def remove_address(name, addresses)
|
59
|
+
origins = specify_link_by_name(SNAT_URI, name, %(origins))
|
60
|
+
j = { 'origins': (origins.map { |origin| origin['name'] } - addresses).map { |address| { 'name': address } } }
|
61
|
+
self_patch(name, SNAT_URI, j.to_json)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/bim/action/vs.rb
CHANGED
@@ -22,16 +22,11 @@ module Bim
|
|
22
22
|
specify(VS_URI) { |d| d['name'] == name }
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
25
|
+
def update_global_address(name, dnat_addr, port)
|
26
26
|
j = { 'destination' => "#{dnat_addr}:#{port}" }.to_json
|
27
27
|
self_patch(name, VS_URI, j)
|
28
28
|
end
|
29
29
|
|
30
|
-
def update_snat(name, snat_addr, bitmask)
|
31
|
-
j = { 'source' => "#{snat_addr}/#{bitmask}" }.to_json
|
32
|
-
self_patch(name, VS_URI, j)
|
33
|
-
end
|
34
|
-
|
35
30
|
def change_nf(name, nf_name)
|
36
31
|
j = { 'fwEnforcedPolicy' => nf_name }.to_json
|
37
32
|
self_patch(name, VS_URI, j)
|
data/lib/bim/subcommands.rb
CHANGED
data/lib/bim/subcommands/pool.rb
CHANGED
@@ -11,35 +11,69 @@ module Bim
|
|
11
11
|
end
|
12
12
|
|
13
13
|
desc(
|
14
|
-
'create [NAME]
|
14
|
+
'create [NAME]',
|
15
15
|
'create pool with node members'
|
16
16
|
)
|
17
|
-
|
18
|
-
|
17
|
+
option :monitor, desc: 'monitor expects string(ex: \'http\', \'http and https\')'
|
18
|
+
option :slow_ramp_time, desc: 'slow_ramp_time expects integer'
|
19
|
+
option :members, desc: 'members expects json array(members: \'[{"name": "NodeName:Port", "address": "NodeAddress"}, {"name": "NodeName:Port", "address": "NodeAddress"}]\')'
|
20
|
+
def create(name)
|
21
|
+
puts Bim::Action::Pool.create(name, options[:monitor], options[:slow_ramp_time], options[:members])
|
22
|
+
end
|
23
|
+
|
24
|
+
desc(
|
25
|
+
'update [NAME]',
|
26
|
+
'update pool with node members'
|
27
|
+
)
|
28
|
+
option :monitor, desc: 'monitor expects string(ex: \'http\', \'http and https\')'
|
29
|
+
option :slow_ramp_time, desc: 'slow_ramp_time expects integer'
|
30
|
+
option :members, desc: 'members expects json array(members: \'[{"name": "NodeName:Port", "address": "NodeAddress"}, {"name": "NodeName:Port", "address": "NodeAddress"}]\')'
|
31
|
+
def update(name)
|
32
|
+
puts Bim::Action::Pool.update(name, options[:monitor], options[:slow_ramp_time], options[:members])
|
19
33
|
end
|
20
34
|
|
21
35
|
desc(
|
22
36
|
'members [NAME]',
|
23
|
-
'output members belongs
|
37
|
+
'output members belongs pool'
|
24
38
|
)
|
25
39
|
def members(name)
|
26
40
|
puts Bim::Action::Pool.members(name)
|
27
41
|
end
|
28
42
|
|
29
43
|
desc(
|
30
|
-
'
|
31
|
-
'
|
44
|
+
'enable [NAME]',
|
45
|
+
'enable node members'
|
46
|
+
)
|
47
|
+
option :members, required: true, type: :array, desc: 'members expects NodeName:Port format'
|
48
|
+
def enable(name)
|
49
|
+
puts Bim::Action::Pool.enable(name, options[:members])
|
50
|
+
end
|
51
|
+
|
52
|
+
desc(
|
53
|
+
'disable [NAME]',
|
54
|
+
'disable node members'
|
55
|
+
)
|
56
|
+
option :members, required: true, type: :array, desc: 'members expects NodeName:Port format'
|
57
|
+
def disable(name)
|
58
|
+
puts Bim::Action::Pool.disable(name, options[:members])
|
59
|
+
end
|
60
|
+
|
61
|
+
desc(
|
62
|
+
'add [NAME]',
|
63
|
+
'add node members'
|
32
64
|
)
|
33
|
-
|
34
|
-
|
65
|
+
option :members, required: true, type: :array, desc: 'members expects NodeName:Port format'
|
66
|
+
def add(name)
|
67
|
+
puts Bim::Action::Pool.add_members(name, options[:members])
|
35
68
|
end
|
36
69
|
|
37
70
|
desc(
|
38
|
-
'
|
39
|
-
'
|
71
|
+
'drop [NAME]',
|
72
|
+
'drop node members'
|
40
73
|
)
|
41
|
-
|
42
|
-
|
74
|
+
option :members, required: true, type: :array, desc: 'members expects NodeName:Port format'
|
75
|
+
def drop(name)
|
76
|
+
puts Bim::Action::Pool.drop_members(name, options[:members])
|
43
77
|
end
|
44
78
|
end
|
45
79
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Bim
|
2
|
+
module Subcommands
|
3
|
+
# Snat class defines subcommands
|
4
|
+
class Snat < Thor
|
5
|
+
desc(
|
6
|
+
'ls',
|
7
|
+
'output snat list'
|
8
|
+
)
|
9
|
+
def ls
|
10
|
+
puts Bim::Action::Snat.ls
|
11
|
+
end
|
12
|
+
|
13
|
+
desc(
|
14
|
+
'detail [NAME]',
|
15
|
+
'output SNAT detail configuration'
|
16
|
+
)
|
17
|
+
def detail(name)
|
18
|
+
puts Bim::Action::Snat.detail(name)
|
19
|
+
end
|
20
|
+
|
21
|
+
desc(
|
22
|
+
'create [NAME]',
|
23
|
+
'create SNAT'
|
24
|
+
)
|
25
|
+
option :vlans, type: :array
|
26
|
+
option :translation, required: true
|
27
|
+
option :address_list, required: true, type: :array, desc: 'address_list expects CIDR format(IPADDR/Mask)'
|
28
|
+
def create(name)
|
29
|
+
puts Bim::Action::Snat.create(name, options[:translation], options[:address_list], options[:vlans])
|
30
|
+
end
|
31
|
+
|
32
|
+
desc(
|
33
|
+
'update [NAME]',
|
34
|
+
'update SNAT'
|
35
|
+
)
|
36
|
+
option :vlans, type: :array
|
37
|
+
option :translation, required: true
|
38
|
+
option :address_list, required: true, type: :array, desc: 'address_list expects CIDR format(IPADDR/Mask)'
|
39
|
+
def update(name)
|
40
|
+
puts Bim::Action::Snat.update(name, options[:translation], options[:address_list], options[:vlans])
|
41
|
+
end
|
42
|
+
|
43
|
+
desc(
|
44
|
+
'add_address [NAME]',
|
45
|
+
'add address for SNAT'
|
46
|
+
)
|
47
|
+
option :addresses, required: true, type: :array, desc: 'addresses expects CIDR format(IPADDR/Mask)'
|
48
|
+
def add_address(name)
|
49
|
+
puts Bim::Action::Snat.add_address(name, options[:addresses])
|
50
|
+
end
|
51
|
+
|
52
|
+
desc(
|
53
|
+
'remove_address [NAME]',
|
54
|
+
'remove address for SNAT'
|
55
|
+
)
|
56
|
+
option :addresses, required: true, type: :array, desc: 'addresses expects CIDR format(IPADDR/Mask)'
|
57
|
+
def remove_address(name)
|
58
|
+
puts Bim::Action::Snat.remove_address(name, options[:addresses])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/bim/subcommands/vs.rb
CHANGED
@@ -19,19 +19,11 @@ module Bim
|
|
19
19
|
end
|
20
20
|
|
21
21
|
desc(
|
22
|
-
'
|
23
|
-
'update
|
22
|
+
'update_global_address [NAME] [GLOBAL_ADDRESS] [PORT]',
|
23
|
+
'update global ip address'
|
24
24
|
)
|
25
|
-
def
|
26
|
-
puts Bim::Action::VS.
|
27
|
-
end
|
28
|
-
|
29
|
-
desc(
|
30
|
-
'update_snat [NAME] [SNAT_ADDRESS] [BIT_MASK]',
|
31
|
-
'update snat configuration'
|
32
|
-
)
|
33
|
-
def update_snat(name, snat_addr, bit_mask)
|
34
|
-
puts Bim::Action::VS.update_snat(name, snat_addr, bit_mask)
|
25
|
+
def update_global_address(name, global_addr, port)
|
26
|
+
puts Bim::Action::VS.update_global_address(name, global_addr, port)
|
35
27
|
end
|
36
28
|
|
37
29
|
desc(
|
data/lib/bim/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- littlekbt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- lib/bim/action/meta.rb
|
91
91
|
- lib/bim/action/node.rb
|
92
92
|
- lib/bim/action/pool.rb
|
93
|
+
- lib/bim/action/snat.rb
|
93
94
|
- lib/bim/action/ssl.rb
|
94
95
|
- lib/bim/action/sync.rb
|
95
96
|
- lib/bim/action/vs.rb
|
@@ -99,6 +100,7 @@ files:
|
|
99
100
|
- lib/bim/subcommands/meta.rb
|
100
101
|
- lib/bim/subcommands/node.rb
|
101
102
|
- lib/bim/subcommands/pool.rb
|
103
|
+
- lib/bim/subcommands/snat.rb
|
102
104
|
- lib/bim/subcommands/ssl.rb
|
103
105
|
- lib/bim/subcommands/sync.rb
|
104
106
|
- lib/bim/subcommands/vs.rb
|