fog-proxmox 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/Gemfile.lock +1 -1
- data/lib/fog/compute/proxmox/models/container.rb +1 -12
- data/lib/fog/compute/proxmox/models/container_config.rb +29 -5
- data/lib/fog/compute/proxmox/models/containers.rb +8 -5
- data/lib/fog/compute/proxmox/models/disk.rb +4 -2
- data/lib/fog/compute/proxmox/models/disks.rb +4 -0
- data/lib/fog/compute/proxmox/models/interface.rb +3 -2
- data/lib/fog/compute/proxmox/models/server.rb +5 -5
- data/lib/fog/compute/proxmox/models/server_config.rb +4 -4
- data/lib/fog/compute/proxmox/models/servers.rb +8 -6
- data/lib/fog/network/proxmox/requests/update_network.rb +0 -1
- data/lib/fog/proxmox/hash.rb +3 -2
- data/lib/fog/proxmox/helpers/controller_helper.rb +12 -2
- data/lib/fog/proxmox/helpers/disk_helper.rb +5 -2
- data/lib/fog/proxmox/helpers/nic_helper.rb +16 -0
- data/lib/fog/proxmox/version.rb +1 -1
- data/spec/compute_spec.rb +5 -2
- data/spec/helpers/controller_helper_spec.rb +42 -0
- data/spec/helpers/nic_helper_spec.rb +22 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbbdd3aadac2823e21f3a920021fe70067b1f711
|
4
|
+
data.tar.gz: 83d7e18c74cd2eecc897a0732437020a16bfd7d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a0708b3f3b2c6afe53e852e00b15f59b1b7410ba06a10b2339c4aa162168de7fa25b2984d32d24c90a883f4954cbc99bb34d5ad3630ee30517098cda22d6aa6
|
7
|
+
data.tar.gz: e56a28ea1faff24e7023034c3ed8fc082f5b83e15841e23eef4e78cdc4f29f304d40171555019ee361a52edc5144cb3ef317c037e85def22fd130fc788708883
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -31,17 +31,6 @@ module Fog
|
|
31
31
|
attribute :swap
|
32
32
|
attribute :config
|
33
33
|
|
34
|
-
def initialize(attributes = {})
|
35
|
-
prepare_service_value(attributes)
|
36
|
-
set_config(attributes)
|
37
|
-
super
|
38
|
-
end
|
39
|
-
|
40
|
-
def type(attributes = {})
|
41
|
-
@type ||= 'lxc' unless attributes[:type] || attributes['type']
|
42
|
-
@type
|
43
|
-
end
|
44
|
-
|
45
34
|
def restore(backup, options = {})
|
46
35
|
requires :node, :vmid
|
47
36
|
path_params = { node: node, type: type }
|
@@ -66,7 +55,7 @@ module Fog
|
|
66
55
|
end
|
67
56
|
|
68
57
|
def set_config(attributes = {})
|
69
|
-
@config = Fog::Compute::Proxmox::ContainerConfig.new({ service: service }.merge(attributes))
|
58
|
+
@config = Fog::Compute::Proxmox::ContainerConfig.new({ service: service, vmid: vmid }.merge(attributes))
|
70
59
|
end
|
71
60
|
|
72
61
|
def config
|
@@ -19,20 +19,40 @@
|
|
19
19
|
|
20
20
|
require 'fog/proxmox/variables'
|
21
21
|
require 'fog/proxmox/helpers/nic_helper'
|
22
|
+
require 'fog/proxmox/helpers/controller_helper'
|
22
23
|
|
23
24
|
module Fog
|
24
25
|
module Compute
|
25
26
|
class Proxmox
|
26
27
|
# ContainerConfig model
|
27
28
|
class ContainerConfig < Fog::Proxmox::Model
|
28
|
-
identity :
|
29
|
+
identity :vmid
|
30
|
+
attribute :digest
|
29
31
|
attribute :ostype
|
32
|
+
attribute :storage
|
33
|
+
attribute :template
|
30
34
|
attribute :arch
|
31
35
|
attribute :memory
|
32
36
|
attribute :swap
|
33
37
|
attribute :hostname
|
38
|
+
attribute :nameserver
|
39
|
+
attribute :searchdomain
|
40
|
+
attribute :password
|
34
41
|
attribute :onboot
|
42
|
+
attribute :startup
|
35
43
|
attribute :rootfs
|
44
|
+
attribute :cores
|
45
|
+
attribute :cpuunits
|
46
|
+
attribute :cpulimit
|
47
|
+
attribute :description
|
48
|
+
attribute :console
|
49
|
+
attribute :cmode
|
50
|
+
attribute :tty
|
51
|
+
attribute :force
|
52
|
+
attribute :lock
|
53
|
+
attribute :pool
|
54
|
+
attribute :bwlimit
|
55
|
+
attribute :unprivileged
|
36
56
|
attribute :interfaces
|
37
57
|
attribute :mount_points
|
38
58
|
|
@@ -51,10 +71,14 @@ module Fog
|
|
51
71
|
Fog::Proxmox::NicHelper.to_mac_adresses_array(interfaces)
|
52
72
|
end
|
53
73
|
|
74
|
+
def type_console
|
75
|
+
'vnc' # by default. term is available too
|
76
|
+
end
|
77
|
+
|
54
78
|
private
|
55
79
|
|
56
80
|
def compute_nets(attributes)
|
57
|
-
nets = Fog::Proxmox::
|
81
|
+
nets = Fog::Proxmox::NicHelper.collect_nics(attributes)
|
58
82
|
@interfaces ||= Fog::Compute::Proxmox::Interfaces.new
|
59
83
|
nets.each do |key, value|
|
60
84
|
nic_hash = {
|
@@ -69,9 +93,9 @@ module Fog
|
|
69
93
|
end
|
70
94
|
|
71
95
|
def compute_mps(attributes)
|
72
|
-
|
96
|
+
controllers = Fog::Proxmox::ControllerHelper.collect_controllers(attributes)
|
73
97
|
@mount_points ||= Fog::Compute::Proxmox::Disks.new
|
74
|
-
|
98
|
+
controllers.each do |key, value|
|
75
99
|
storage, volid, size = Fog::Proxmox::DiskHelper.extract_storage_volid_size(value)
|
76
100
|
disk_hash = {
|
77
101
|
id: key.to_s,
|
@@ -79,7 +103,7 @@ module Fog
|
|
79
103
|
volid: volid,
|
80
104
|
size: size
|
81
105
|
}
|
82
|
-
names = Fog::Compute::Proxmox::Disk.attributes.reject { |key, _value| %i[id size storage].include? key }
|
106
|
+
names = Fog::Compute::Proxmox::Disk.attributes.reject { |key, _value| %i[id size storage volid].include? key }
|
83
107
|
names.each { |name| disk_hash.store(name.to_sym, Fog::Proxmox::ControllerHelper.extract(name, value)) }
|
84
108
|
@mount_points << Fog::Compute::Proxmox::Disk.new(disk_hash)
|
85
109
|
end
|
@@ -26,13 +26,16 @@ module Fog
|
|
26
26
|
class Containers < Fog::Compute::Proxmox::Servers
|
27
27
|
model Fog::Compute::Proxmox::Container
|
28
28
|
|
29
|
-
def
|
30
|
-
super(
|
29
|
+
def initialize(attributes = {})
|
30
|
+
super(attributes)
|
31
|
+
end
|
32
|
+
|
33
|
+
def type
|
34
|
+
'lxc'
|
31
35
|
end
|
32
36
|
|
33
|
-
def
|
34
|
-
|
35
|
-
@type
|
37
|
+
def new(attributes = {})
|
38
|
+
super({ node: node, type: type }.merge(attributes))
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
@@ -48,8 +48,6 @@ module Fog
|
|
48
48
|
attribute :backup
|
49
49
|
attribute :aio
|
50
50
|
|
51
|
-
CONTROLLERS = %w[ide sata scsi virtio].freeze
|
52
|
-
|
53
51
|
def controller
|
54
52
|
Fog::Proxmox::DiskHelper.extract_controller(id)
|
55
53
|
end
|
@@ -61,6 +59,10 @@ module Fog
|
|
61
59
|
def cdrom?
|
62
60
|
id == 'ide2' && media == 'cdrom'
|
63
61
|
end
|
62
|
+
|
63
|
+
def rootfs?
|
64
|
+
id == 'rootfs'
|
65
|
+
end
|
64
66
|
end
|
65
67
|
end
|
66
68
|
end
|
@@ -36,14 +36,15 @@ module Fog
|
|
36
36
|
identity :id
|
37
37
|
attribute :mac
|
38
38
|
attribute :model
|
39
|
+
attribute :name
|
40
|
+
attribute :ip
|
41
|
+
attribute :ip6
|
39
42
|
attribute :bridge
|
40
43
|
attribute :firewall
|
41
44
|
attribute :link_down
|
42
45
|
attribute :rate
|
43
46
|
attribute :queues
|
44
47
|
attribute :tag
|
45
|
-
|
46
|
-
NAME = 'net'
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
@@ -27,6 +27,7 @@ module Fog
|
|
27
27
|
# Server model
|
28
28
|
class Server < Fog::Compute::Server
|
29
29
|
identity :vmid
|
30
|
+
attribute :id
|
30
31
|
attribute :node
|
31
32
|
attribute :config
|
32
33
|
attribute :name
|
@@ -59,10 +60,9 @@ module Fog
|
|
59
60
|
super
|
60
61
|
end
|
61
62
|
|
62
|
-
def type
|
63
|
-
|
64
|
-
|
65
|
-
end
|
63
|
+
def type
|
64
|
+
attributes[:type]
|
65
|
+
end
|
66
66
|
|
67
67
|
def request(name, body_params = {}, path_params = {})
|
68
68
|
requires :node, :type
|
@@ -149,7 +149,7 @@ module Fog
|
|
149
149
|
end
|
150
150
|
|
151
151
|
def set_config(attributes = {})
|
152
|
-
@config = Fog::Compute::Proxmox::ServerConfig.new({ service: service }.merge(attributes))
|
152
|
+
@config = Fog::Compute::Proxmox::ServerConfig.new({ service: service, vmid: vmid }.merge(attributes))
|
153
153
|
end
|
154
154
|
|
155
155
|
def config
|
@@ -19,6 +19,7 @@
|
|
19
19
|
|
20
20
|
require 'fog/proxmox/variables'
|
21
21
|
require 'fog/proxmox/helpers/nic_helper'
|
22
|
+
require 'fog/proxmox/helpers/controller_helper'
|
22
23
|
require 'fog/proxmox/models/model'
|
23
24
|
|
24
25
|
module Fog
|
@@ -26,7 +27,7 @@ module Fog
|
|
26
27
|
class Proxmox
|
27
28
|
# ServerConfig model
|
28
29
|
class ServerConfig < Fog::Proxmox::Model
|
29
|
-
identity :
|
30
|
+
identity :vmid
|
30
31
|
attribute :digest
|
31
32
|
attribute :description
|
32
33
|
attribute :ostype
|
@@ -79,7 +80,7 @@ module Fog
|
|
79
80
|
private
|
80
81
|
|
81
82
|
def compute_nets(attributes)
|
82
|
-
nets = Fog::Proxmox::
|
83
|
+
nets = Fog::Proxmox::NicHelper.collect_nics(attributes)
|
83
84
|
@interfaces ||= Fog::Compute::Proxmox::Interfaces.new
|
84
85
|
nets.each do |key, value|
|
85
86
|
nic_hash = {
|
@@ -94,8 +95,7 @@ module Fog
|
|
94
95
|
end
|
95
96
|
|
96
97
|
def compute_disks(attributes)
|
97
|
-
controllers =
|
98
|
-
Fog::Compute::Proxmox::Disk::CONTROLLERS.each { |controller| controllers.merge!(Fog::Proxmox::ControllerHelper.to_hash(attributes, controller)) }
|
98
|
+
controllers = Fog::Proxmox::ControllerHelper.collect_controllers(attributes)
|
99
99
|
@disks ||= Fog::Compute::Proxmox::Disks.new
|
100
100
|
controllers.each do |key, value|
|
101
101
|
storage, volid, size = Fog::Proxmox::DiskHelper.extract_storage_volid_size(value)
|
@@ -26,15 +26,17 @@ module Fog
|
|
26
26
|
class Servers < Fog::Proxmox::Collection
|
27
27
|
model Fog::Compute::Proxmox::Server
|
28
28
|
attribute :node
|
29
|
-
attribute :type
|
30
29
|
|
31
|
-
def
|
32
|
-
super(
|
30
|
+
def initialize(attributes = {})
|
31
|
+
super(attributes)
|
32
|
+
end
|
33
|
+
|
34
|
+
def type
|
35
|
+
'qemu'
|
33
36
|
end
|
34
37
|
|
35
|
-
def
|
36
|
-
|
37
|
-
@type
|
38
|
+
def new(attributes = {})
|
39
|
+
super({ node: node, type: type }.merge(attributes))
|
38
40
|
end
|
39
41
|
|
40
42
|
def next_id
|
data/lib/fog/proxmox/hash.rb
CHANGED
@@ -22,11 +22,12 @@ module Fog
|
|
22
22
|
# module Hash mixins
|
23
23
|
module Hash
|
24
24
|
def self.stringify(hash)
|
25
|
+
return '' unless hash
|
25
26
|
string = ''
|
26
27
|
hash.each do |key, value|
|
27
|
-
string += "#{key}=#{value},"
|
28
|
+
string += "#{key}=#{value}," if value
|
28
29
|
end
|
29
|
-
string.slice(0, string.length - 1)
|
30
|
+
string.slice(0, string.length - 1) if string.length > 0
|
30
31
|
end
|
31
32
|
end
|
32
33
|
end
|
@@ -21,6 +21,9 @@ module Fog
|
|
21
21
|
module Proxmox
|
22
22
|
# module ControllerHelper mixins
|
23
23
|
module ControllerHelper
|
24
|
+
|
25
|
+
CONTROLLERS = %w[ide sata scsi virtio mp rootfs].freeze
|
26
|
+
|
24
27
|
def self.extract(name, controller_value)
|
25
28
|
values = controller_value.scan(/#{name}=(\w+)/)
|
26
29
|
name_value = values.first if values
|
@@ -33,7 +36,7 @@ module Fog
|
|
33
36
|
end
|
34
37
|
|
35
38
|
def self.valid?(name, key)
|
36
|
-
key.to_s.match(
|
39
|
+
key.to_s.match(/^#{name}(\d*)$/)
|
37
40
|
end
|
38
41
|
|
39
42
|
def self.last_index(name, values)
|
@@ -47,9 +50,16 @@ module Fog
|
|
47
50
|
indexes.empty? ? -1 : indexes.last
|
48
51
|
end
|
49
52
|
|
50
|
-
def self.
|
53
|
+
def self.select(hash,name)
|
51
54
|
hash.select { |key| valid?(name, key.to_s) }
|
52
55
|
end
|
56
|
+
|
57
|
+
def self.collect_controllers(attributes)
|
58
|
+
controllers = {}
|
59
|
+
CONTROLLERS.each { |controller| controllers.merge!(select(attributes, controller)) }
|
60
|
+
controllers
|
61
|
+
end
|
62
|
+
|
53
63
|
end
|
54
64
|
end
|
55
65
|
end
|
@@ -30,8 +30,11 @@ module Fog
|
|
30
30
|
else
|
31
31
|
"#{disk[:storage]}:#{disk[:size]}"
|
32
32
|
end
|
33
|
-
|
34
|
-
|
33
|
+
opts = disk[:options] if disk.has_key? :options
|
34
|
+
main_a = [:id,:volid,:storage,:size]
|
35
|
+
opts = disk.reject { |key,_value| main_a.include? key } unless opts
|
36
|
+
options = Fog::Proxmox::Hash.stringify(opts) if opts
|
37
|
+
value += ",#{options}" if options
|
35
38
|
{ "#{disk[:id]}": value }
|
36
39
|
end
|
37
40
|
|
@@ -23,6 +23,7 @@ module Fog
|
|
23
23
|
module Proxmox
|
24
24
|
# module NicHelper mixins
|
25
25
|
module NicHelper
|
26
|
+
|
26
27
|
def self.extract_mac_address(nic_value)
|
27
28
|
nic_value[/([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})/]
|
28
29
|
end
|
@@ -57,6 +58,21 @@ module Fog
|
|
57
58
|
model += ',' + Fog::Proxmox::Hash.stringify(options) unless options.empty?
|
58
59
|
{ "#{nic[:id]}": model }
|
59
60
|
end
|
61
|
+
|
62
|
+
def self.container_flatten(nic)
|
63
|
+
name = "name=#{nic[:name]}"
|
64
|
+
options = nic.reject { |key, _value| %i[name id].include? key }
|
65
|
+
name += ',' + Fog::Proxmox::Hash.stringify(options) unless options.empty?
|
66
|
+
{ "#{nic[:id]}": name }
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.valid?(key)
|
70
|
+
key.to_s.match(/^net(\d+)$/)
|
71
|
+
end
|
72
|
+
|
73
|
+
def self.collect_nics(attributes)
|
74
|
+
attributes.select { |key| valid?(key.to_s) }
|
75
|
+
end
|
60
76
|
end
|
61
77
|
end
|
62
78
|
end
|
data/lib/fog/proxmox/version.rb
CHANGED
data/spec/compute_spec.rb
CHANGED
@@ -167,6 +167,8 @@ describe Fog::Compute::Proxmox do
|
|
167
167
|
config_hash = { onboot: 1, keyboard: 'fr', ostype: 'l26', kvm: 0 }
|
168
168
|
server.update(config_hash)
|
169
169
|
# server config
|
170
|
+
#config = server.config
|
171
|
+
#config.identity.must_equal vmid
|
170
172
|
disks = server.config.disks
|
171
173
|
nics = server.config.interfaces
|
172
174
|
nics.wont_be_nil
|
@@ -188,7 +190,7 @@ describe Fog::Compute::Proxmox do
|
|
188
190
|
servers_all.must_include server
|
189
191
|
# server not running exception
|
190
192
|
proc do
|
191
|
-
|
193
|
+
server.start_console(websocket: 1)
|
192
194
|
end.must_raise Fog::Proxmox::Errors::ServiceError
|
193
195
|
# Start server
|
194
196
|
server.action('start')
|
@@ -197,7 +199,7 @@ describe Fog::Compute::Proxmox do
|
|
197
199
|
status.must_equal true
|
198
200
|
# server vga not set exception
|
199
201
|
proc do
|
200
|
-
|
202
|
+
server.start_console(websocket: 1)
|
201
203
|
end.must_raise Fog::Proxmox::Errors::ServiceError
|
202
204
|
# Stop server
|
203
205
|
server.action('stop')
|
@@ -379,6 +381,7 @@ describe Fog::Compute::Proxmox do
|
|
379
381
|
# get container config
|
380
382
|
config = container.config
|
381
383
|
config.wont_be_nil
|
384
|
+
config.identity.must_equal vmid
|
382
385
|
# Get a mac address
|
383
386
|
mac_address = container.config.mac_addresses.first
|
384
387
|
mac_address.wont_be_nil
|
@@ -31,6 +31,15 @@ require 'fog/proxmox/helpers/controller_helper'
|
|
31
31
|
let(:scsi) do
|
32
32
|
{ scsi10: 'local-lvm:1,cache=none' }
|
33
33
|
end
|
34
|
+
let(:cdrom) do
|
35
|
+
{ ide2: 'none,media=cdrom' }
|
36
|
+
end
|
37
|
+
let(:mp) do
|
38
|
+
{ mp0: 'local-lvm:1' }
|
39
|
+
end
|
40
|
+
let(:rootfs) do
|
41
|
+
{ rootfs: 'local-lvm:1' }
|
42
|
+
end
|
34
43
|
|
35
44
|
describe '#extract' do
|
36
45
|
it "returns bridge" do
|
@@ -74,4 +83,37 @@ require 'fog/proxmox/helpers/controller_helper'
|
|
74
83
|
assert !Fog::Proxmox::ControllerHelper.valid?('net','sdfdsf')
|
75
84
|
end
|
76
85
|
end
|
86
|
+
|
87
|
+
describe '#select' do
|
88
|
+
it "returns scsi10" do
|
89
|
+
controllers = Fog::Proxmox::ControllerHelper.select(scsi,'scsi')
|
90
|
+
assert controllers.has_key?(:scsi10)
|
91
|
+
assert controllers.has_value?(scsi[:scsi10])
|
92
|
+
end
|
93
|
+
it "returns empty" do
|
94
|
+
controllers = Fog::Proxmox::ControllerHelper.select(net,'scsi')
|
95
|
+
assert controllers.empty?
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '#collect_controllers' do
|
100
|
+
it "returns scsi0 and ide2" do
|
101
|
+
controllers = Fog::Proxmox::ControllerHelper.collect_controllers(scsi.merge(cdrom))
|
102
|
+
assert controllers.has_key?(:scsi10)
|
103
|
+
assert controllers.has_value?(scsi[:scsi10])
|
104
|
+
assert controllers.has_key?(:ide2)
|
105
|
+
assert controllers.has_value?(cdrom[:ide2])
|
106
|
+
end
|
107
|
+
it "returns rootfs and mp0" do
|
108
|
+
controllers = Fog::Proxmox::ControllerHelper.collect_controllers(rootfs.merge(mp))
|
109
|
+
assert controllers.has_key?(:mp0)
|
110
|
+
assert controllers.has_value?(mp[:mp0])
|
111
|
+
assert controllers.has_key?(:rootfs)
|
112
|
+
assert controllers.has_value?(rootfs[:rootfs])
|
113
|
+
end
|
114
|
+
it "returns empty" do
|
115
|
+
controllers = Fog::Proxmox::ControllerHelper.collect_controllers(net)
|
116
|
+
assert controllers.empty?
|
117
|
+
end
|
118
|
+
end
|
77
119
|
end
|
@@ -70,4 +70,26 @@ require 'fog/proxmox/helpers/nic_helper'
|
|
70
70
|
assert_equal '66:89:C5:59:AA:96', mac_address
|
71
71
|
end
|
72
72
|
end
|
73
|
+
|
74
|
+
describe '#valid?' do
|
75
|
+
it "returns true" do
|
76
|
+
assert Fog::Proxmox::NicHelper.valid?('net0')
|
77
|
+
end
|
78
|
+
it "returns false" do
|
79
|
+
assert !Fog::Proxmox::NicHelper.valid?('net')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe '#collect_nics' do
|
84
|
+
it "returns net0" do
|
85
|
+
nets = Fog::Proxmox::NicHelper.collect_nics(net_vm.merge({'netout': 'sdfdsgfdsf'}))
|
86
|
+
assert nets.has_key?(:net0)
|
87
|
+
assert nets.has_value?(net_vm[:net0])
|
88
|
+
assert !nets.has_key?('netout')
|
89
|
+
end
|
90
|
+
it "returns empty" do
|
91
|
+
nets = Fog::Proxmox::NicHelper.collect_nics({'netout': 'sdfdsgfdsf'})
|
92
|
+
assert nets.empty?
|
93
|
+
end
|
94
|
+
end
|
73
95
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-proxmox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tristan Robert
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|