fog-proxmox 0.7.0 → 0.8.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60f322bc1b1cd38bb76d5c25e932f68adcc8ec7a18d0060a7e4c6977a7d8db0d
4
- data.tar.gz: bae297b90d4e4aeb2da54d76534a7cb725c7b721b6ee4b4ae1835d04c56c1778
3
+ metadata.gz: 0320a22c2debb1a4e6dcc2f7d90e4bee91aa9015391a56bfc727620d3d72c55d
4
+ data.tar.gz: '075000983c20f5ba9170766ecf1839c0e6c407a57711a0e7efbdcc0cd1b98ef9'
5
5
  SHA512:
6
- metadata.gz: e78294eed3cebd7a5e3a840edd918b3cb239498701b963463aa3616832e697f34cf204ff0efedf064657ca4ad1c3fc7ba4c46f75a3d2e148e313ae03b14dcde9
7
- data.tar.gz: b049b84b24d4bd399ee043f3e7c4896f4b5a055add4607bebcf9f5f546dd9da6898b024f9194e8c433bbe15cf2eb24a9576c78085b37c30335abc70941403328
6
+ metadata.gz: 57e88aae5403f9b7b3487963787b7898b18ce4277c44f4bdb264c10997890c5d9d890dd1af005a3808b6e20035a0941baafe5973caaba35615579e97216c7869
7
+ data.tar.gz: 7bd9493e5601e647f24a5ff1c56231e4543162cd9fbfa57bf66fe9333d06f3cb639633ea1460d27149cd05aa61e6b4a6539827093d04ffb99523697ae45f41c4
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fog-proxmox (0.7.0)
4
+ fog-proxmox (0.8.0)
5
5
  fog-core (~> 2.1)
6
6
  fog-json (~> 1.2)
7
7
  ipaddress (~> 0.8)
@@ -51,7 +51,7 @@ GEM
51
51
  fog-core
52
52
  multi_json (~> 1.10)
53
53
  formatador (0.2.5)
54
- hashdiff (0.3.8)
54
+ hashdiff (0.3.9)
55
55
  ice_nine (0.11.2)
56
56
  ipaddress (0.8.3)
57
57
  jaro_winkler (1.5.2)
@@ -69,7 +69,6 @@ GEM
69
69
  pry (0.12.2)
70
70
  coderay (~> 1.1.0)
71
71
  method_source (~> 0.9.0)
72
- psych (3.1.0)
73
72
  public_suffix (3.0.3)
74
73
  rainbow (3.0.0)
75
74
  rake (12.3.2)
@@ -84,18 +83,17 @@ GEM
84
83
  rspec-mocks (~> 3.8.0)
85
84
  rspec-core (3.8.0)
86
85
  rspec-support (~> 3.8.0)
87
- rspec-expectations (3.8.2)
86
+ rspec-expectations (3.8.3)
88
87
  diff-lcs (>= 1.2.0, < 2.0)
89
88
  rspec-support (~> 3.8.0)
90
89
  rspec-mocks (3.8.0)
91
90
  diff-lcs (>= 1.2.0, < 2.0)
92
91
  rspec-support (~> 3.8.0)
93
92
  rspec-support (3.8.0)
94
- rubocop (0.67.2)
93
+ rubocop (0.68.0)
95
94
  jaro_winkler (~> 1.5.1)
96
95
  parallel (~> 1.10)
97
96
  parser (>= 2.5, != 2.5.1.1)
98
- psych (>= 3.1.0)
99
97
  rainbow (>= 2.2.2, < 4.0)
100
98
  ruby-progressbar (~> 1.7)
101
99
  unicode-display_width (>= 1.4.0, < 1.6)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ![Foreman](fogproxmox.png)
1
+ ![Foreman](.github/fogproxmox.png)
2
2
 
3
3
  # Fog::Proxmox
4
4
 
@@ -65,10 +65,10 @@ USE_VCR=true bundle exec rake spec
65
65
 
66
66
  ## Contributing
67
67
 
68
- You can reach the [contributors](CONTRIBUTORS.md).
68
+ You can reach the [contributors](.github/CONTRIBUTORS.md).
69
69
  Bug reports and pull requests are welcome on GitHub at [Fog-Proxmox](https://github.com/fog/fog-proxmox/issues). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
70
70
 
71
- Please read [how to contribute](CONTRIBUTING.md).
71
+ Please read [how to contribute](.github/CONTRIBUTING.md).
72
72
 
73
73
  ## License
74
74
 
data/fog-proxmox.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.summary = "Module for the 'Fog' gem to support Proxmox VE"
31
31
  spec.description = 'This library can be used as a module for `fog`.'
32
- spec.homepage = 'http://github.com/fog/fog-proxmox'
32
+ spec.homepage = 'https://github.com/fog/fog-proxmox'
33
33
  spec.license = 'GPL-3.0'
34
34
 
35
35
  spec.files = `git ls-files -z`.split("\x0")
@@ -66,6 +66,10 @@ module Fog
66
66
  def flatten
67
67
  Fog::Proxmox::DiskHelper.flatten(attributes)
68
68
  end
69
+
70
+ def to_s
71
+ Fog::Proxmox::Hash.flatten(flatten)
72
+ end
69
73
  end
70
74
  end
71
75
  end
@@ -25,7 +25,7 @@ module Fog
25
25
  # class Interface model
26
26
  class Interface < Fog::Model
27
27
  identity :id
28
- attribute :mac
28
+ attribute :macaddr
29
29
  attribute :model
30
30
  attribute :name
31
31
  attribute :ip
@@ -40,6 +40,10 @@ module Fog
40
40
  def flatten
41
41
  Fog::Proxmox::NicHelper.flatten(attributes)
42
42
  end
43
+
44
+ def to_s
45
+ Fog::Proxmox::Hash.flatten(flatten)
46
+ end
43
47
  end
44
48
  end
45
49
  end
@@ -118,9 +118,9 @@ module Fog
118
118
  nic_hash = {
119
119
  id: key.to_s,
120
120
  model: Fog::Proxmox::NicHelper.extract_nic_id(value),
121
- mac: Fog::Proxmox::NicHelper.extract_mac_address(value)
121
+ macaddr: Fog::Proxmox::NicHelper.extract_mac_address(value)
122
122
  }
123
- names = Fog::Proxmox::Compute::Interface.attributes.reject { |attribute| [:id, :mac, :model].include? attribute }
123
+ names = Fog::Proxmox::Compute::Interface.attributes.reject { |attribute| [:id, :macaddr, :model].include? attribute }
124
124
  names.each { |name| nic_hash.store(name.to_sym, Fog::Proxmox::ControllerHelper.extract(name, value)) }
125
125
  attributes[:interfaces] << Fog::Proxmox::Compute::Interface.new(nic_hash)
126
126
  end
data/lib/fog/proxmox.rb CHANGED
@@ -37,27 +37,33 @@ module Fog
37
37
  service(:storage, 'Storage')
38
38
  service(:network, 'Network')
39
39
 
40
- @cache = {}
40
+ @credentials = {}
41
+ @now = Time.now
41
42
 
42
43
  # Default lifetime ticket is 2 hours
43
44
  @ticket_lifetime = 2 * 60 * 60
44
45
 
45
46
  class << self
46
- attr_accessor :cache
47
+ attr_reader :credentials
47
48
  attr_reader :version
49
+ attr_accessor :now # tests only
48
50
  end
49
51
 
50
- def self.clear_cache
51
- Fog::Proxmox.cache = {}
52
+ def self.clear_credentials
53
+ @credentials = {}
52
54
  end
53
55
 
54
56
  def self.authenticate(options, connection_options = {})
55
57
  get_tokens(options, connection_options)
56
- @cache
58
+ self
57
59
  end
58
60
 
59
61
  def self.authenticated?
60
- !@cache.empty?
62
+ !@credentials.empty?
63
+ end
64
+
65
+ def self.credentials_has_expired?
66
+ authenticated? && @credentials[:deadline] > @now
61
67
  end
62
68
 
63
69
  def self.extract_password(options)
@@ -73,7 +79,8 @@ module Fog
73
79
  uri = URI.parse(url)
74
80
  @api_path = uri.path
75
81
  connection_options = connection_options.merge(path_prefix: @api_path)
76
- retrieve_tokens(uri, connection_options, username, password) unless authenticated?
82
+ password = @credentials[:csrftoken] if credentials_has_expired?
83
+ retrieve_tokens(uri, connection_options, username, password) unless authenticated? && !credentials_has_expired?
77
84
  end
78
85
 
79
86
  def self.retrieve_tokens(uri, connection_options, username, password)
@@ -96,20 +103,17 @@ module Fog
96
103
  ticket = data['ticket']
97
104
  username = data['username']
98
105
  csrftoken = data['CSRFPreventionToken']
99
-
100
- now = Time.now
101
- deadline = Time.at(now.to_i + @ticket_lifetime)
106
+ deadline = Time.at(@now.to_i + @ticket_lifetime)
102
107
  save_token(username, ticket, csrftoken, deadline)
103
108
  end
104
109
 
105
110
  def self.save_token(username, ticket, csrftoken, deadline)
106
- @cache = {
111
+ @credentials = {
107
112
  username: username,
108
113
  ticket: ticket,
109
114
  csrftoken: csrftoken,
110
115
  deadline: deadline
111
116
  }
112
- Fog::Proxmox.cache = @cache
113
117
  end
114
118
  end
115
119
  end
@@ -38,11 +38,9 @@ module Fog
38
38
 
39
39
  def initialize_identity(options)
40
40
  @principal = nil
41
- @pve_must_reauthenticate = true
42
41
  @pve_ticket = nil
43
42
  Fog::Proxmox::Variables.to_variables(self, options, 'pve')
44
43
  @pve_uri = URI.parse(@pve_url)
45
- @pve_must_reauthenticate = true unless @pve_ticket
46
44
  missing_credentials = []
47
45
  missing_credentials << :pve_username unless @pve_username
48
46
 
@@ -78,7 +76,7 @@ module Fog
78
76
  ))
79
77
  rescue Excon::Errors::Unauthorized => error
80
78
  # token expiration and token renewal possible
81
- if error.response.body != 'Bad username or password' && @pve_can_reauthenticate && !retried
79
+ if error.response.body != 'Bad username or password' && !retried
82
80
  authenticate
83
81
  retried = true
84
82
  retry
@@ -115,17 +113,14 @@ module Fog
115
113
  end
116
114
 
117
115
  def authenticate
118
- unless @principal
119
- options = pve_options
120
- options[:pve_ticket] = @pve_must_reauthenticate ? nil : @pve_ticket
121
- credentials = Fog::Proxmox.authenticate(options, @connection_options)
122
- @principal = credentials
123
- @pve_username = credentials[:username]
124
- @pve_ticket = credentials[:ticket]
125
- @pve_deadline = credentials[:deadline]
126
- @pve_csrftoken = credentials[:csrftoken]
127
- @pve_must_reauthenticate = false
128
- end
116
+ options = pve_options
117
+ @pve_ticket = options[:pve_ticket]
118
+ Fog::Proxmox.authenticate(options, @connection_options)
119
+ @principal = Fog::Proxmox.credentials
120
+ @pve_username = Fog::Proxmox.credentials[:username]
121
+ @pve_ticket = Fog::Proxmox.credentials[:ticket]
122
+ @pve_deadline = Fog::Proxmox.credentials[:deadline]
123
+ @pve_csrftoken = Fog::Proxmox.credentials[:csrftoken]
129
124
 
130
125
  @host = @pve_uri.host
131
126
  @api_path = @pve_uri.path
@@ -21,14 +21,19 @@ module Fog
21
21
  module Proxmox
22
22
  # module Hash mixins
23
23
  module Hash
24
+
24
25
  def self.stringify(hash)
25
- return '' unless hash
26
- string = ''
27
- hash.each do |key, value|
28
- string += "#{key}=#{value}," if value
29
- end
30
- string.slice(0, string.length - 1) if string.length > 0
26
+ filtered = hash.reject { |_key,value| value.to_s.empty? }
27
+ a = filtered.to_a.collect { |item| item.join('=') }
28
+ a.join(',')
29
+ end
30
+
31
+ def self.flatten(hash)
32
+ filtered = hash.reject { |_key,value| value.to_s.empty? }
33
+ a = filtered.to_a.collect { |item| item.join(': ') }
34
+ a.join(',')
31
35
  end
36
+
32
37
  end
33
38
  end
34
39
  end
@@ -23,19 +23,36 @@ module Fog
23
23
  module Proxmox
24
24
  # module Disk mixins
25
25
  module DiskHelper
26
+
27
+ DISKS_REGEXP = /^(scsi|sata|mp|rootfs|virtio|ide)(\d+){0,1}$/
28
+ SERVER_DISK_REGEXP = /^(scsi|sata|virtio|ide)(\d+)$/
29
+ MOUNT_POINT_REGEXP = /^(mp)(\d+)$/
30
+ ROOTFS_REGEXP = /^(rootfs)$/
31
+ CDROM_REGEXP = /^(.*)[,]{0,1}(media=cdrom)[,]{0,1}(.*)$/
32
+
26
33
  def self.flatten(disk)
27
- volid = disk[:volid]
28
- value = if volid
29
- "#{disk[:volid]},size=#{disk[:size]}"
30
- else
31
- "#{disk[:storage]}:#{disk[:size]}"
32
- end
33
- opts = disk[:options] if disk.has_key? :options
34
+ id = disk[:id]
35
+ value = ''
36
+ if disk[:volid]
37
+ value += disk[:volid]
38
+ value += ',size=' + disk[:size].to_s if disk[:size]
39
+ elsif disk[:storage] && disk[:size]
40
+ value += disk[:storage] + ':' + disk[:size].to_s
41
+ elsif id == 'ide2'
42
+ value += 'none'
43
+ end
44
+ opts = disk[:options] if disk[:options]
34
45
  main_a = [:id,:volid,:storage,:size]
35
46
  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
38
- { "#{disk[:id]}": value }
47
+ options = ''
48
+ options += Fog::Proxmox::Hash.stringify(opts) if opts
49
+ if id == 'ide2' && !self.cdrom?(options)
50
+ options += ',' if !options.empty?
51
+ options += 'media=cdrom'
52
+ end
53
+ value += ',' if !options.empty? && !value.empty?
54
+ value += options
55
+ { "#{id}": value }
39
56
  end
40
57
 
41
58
  def self.extract_controller(id)
@@ -59,7 +76,7 @@ module Fog
59
76
  def self.extract_storage_volid_size(disk_value)
60
77
  #volid definition: <VOULME_ID>:=<STORAGE_ID>:<storage type dependent volume name>
61
78
  values_a = disk_value.scan(/^(([\w-]+)[:]{0,1}([\w\/\.-]+))/)
62
- no_cdrom = !disk_value.match(/^(.+)[,]{1}(media=cdrom)$/)
79
+ no_cdrom = !disk_value.match(CDROM_REGEXP)
63
80
  creation = disk_value.split(',')[0].match(/^(([\w-]+)[:]{1}([\d]+))$/)
64
81
  values = values_a.first if values_a
65
82
  if no_cdrom
@@ -97,6 +114,30 @@ module Fog
97
114
  size=extract_option('size', disk_value)
98
115
  size ? self.to_bytes(size) : "1G"
99
116
  end
117
+
118
+ def self.disk?(id)
119
+ DISKS_REGEXP.match?(id)
120
+ end
121
+
122
+ def self.cdrom?(value)
123
+ CDROM_REGEXP.match?(value)
124
+ end
125
+
126
+ def self.server_disk?(id)
127
+ SERVER_DISK_REGEXP.match?(id)
128
+ end
129
+
130
+ def self.rootfs?(id)
131
+ ROOTFS_REGEXP.match?(id)
132
+ end
133
+
134
+ def self.mount_point?(id)
135
+ MOUNT_POINT_REGEXP.match?(id)
136
+ end
137
+
138
+ def self.container_disk?(id)
139
+ rootfs?(id) || mount_point?(id)
140
+ end
100
141
  end
101
142
  end
102
143
  end
@@ -24,6 +24,8 @@ module Fog
24
24
  # module NicHelper mixins
25
25
  module NicHelper
26
26
 
27
+ NICS_REGEXP = /^(net)(\d+)/
28
+
27
29
  def self.extract_mac_address(nic_value)
28
30
  nic_value[/([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})/]
29
31
  end
@@ -36,7 +38,7 @@ module Fog
36
38
  /^name=(\w+)[,].+/
37
39
  end
38
40
 
39
- def self.nic_creation_regexp
41
+ def self.nic_update_regexp
40
42
  /^(\w+)[=]{1}([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2}).+/
41
43
  end
42
44
 
@@ -54,13 +56,13 @@ module Fog
54
56
  elsif self.has_name?(nic_value)
55
57
  nic_value.scan(self.name_regexp).first.first
56
58
  else
57
- nic_value.scan(self.nic_creation_regexp).first.first
59
+ nic_value.scan(self.nic_update_regexp).first.first
58
60
  end
59
61
  end
60
62
 
61
63
  def self.to_mac_adresses_array(nics)
62
64
  addresses = []
63
- nics.each { |nic| addresses.push(nic.mac) }
65
+ nics.each { |nic| addresses.push(nic.macaddr) }
64
66
  addresses
65
67
  end
66
68
 
@@ -74,19 +76,25 @@ module Fog
74
76
  end
75
77
  end
76
78
 
77
- def self.flatten(nic)
78
- nic_id = self.nic_name(nic) + "=" + nic[self.nic_name(nic).to_sym]
79
- options = nic.reject { |key, _value| [self.nic_name(nic).to_sym, :id].include? key }
80
- nic_id += ',' + Fog::Proxmox::Hash.stringify(options) unless options.empty?
81
- { "#{nic[:id]}": nic_id }
82
- end
83
-
84
- def self.valid?(key)
85
- key.to_s.match(/^net(\d+)$/)
79
+ def self.flatten(nic_hash)
80
+ nic_id = nic_hash[self.nic_name(nic_hash).to_sym]
81
+ if nic_hash.has_key?(:macaddr)
82
+ nic_value = nic_id + "=" + nic_hash[:macaddr]
83
+ else
84
+ nic_value = self.nic_name(nic_hash) + "=" + nic_id
85
+ end
86
+ options = nic_hash.reject { |key, _value| [self.nic_name(nic_hash).to_sym,:id,:macaddr].include? key.to_sym }
87
+ nic_value += ',' unless options.empty?
88
+ nic_value += Fog::Proxmox::Hash.stringify(options) unless options.empty?
89
+ { "#{nic_hash[:id]}": nic_value }
86
90
  end
87
91
 
88
92
  def self.collect_nics(attributes)
89
- attributes.select { |key| valid?(key.to_s) }
93
+ attributes.select { |key| nic?(key.to_s) }
94
+ end
95
+
96
+ def self.nic?(id)
97
+ NICS_REGEXP.match?(id)
90
98
  end
91
99
  end
92
100
  end
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Fog
21
21
  module Proxmox
22
- VERSION = '0.7.0'
22
+ VERSION = '0.8.0'
23
23
  end
24
24
  end
data/spec/hash_spec.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Tristan Robert
4
+
5
+ # This file is part of Fog::Proxmox.
6
+
7
+ # Fog::Proxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # Fog::Proxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ require 'spec_helper'
21
+ require 'fog/proxmox/hash'
22
+
23
+ describe Fog::Proxmox::Hash do
24
+
25
+ let(:net_vm) do
26
+ { net0: 'virtio=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1' }
27
+ end
28
+ let(:net) do
29
+ { id: 'net0', model: 'virtio', macaddr: '66:89:C5:59:AA:96', z: nil }
30
+ end
31
+
32
+ describe '#flatten' do
33
+ it "returns string net_vm" do
34
+ assert_equal 'net0: virtio=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1', Fog::Proxmox::Hash.flatten(net_vm)
35
+ end
36
+ end
37
+
38
+ describe '#stringify' do
39
+ it "returns stringify hash" do
40
+ assert_equal 'id=net0,model=virtio,macaddr=66:89:C5:59:AA:96', Fog::Proxmox::Hash.stringify(net)
41
+ end
42
+ end
43
+ end
@@ -35,12 +35,20 @@ require 'fog/proxmox/helpers/disk_helper'
35
35
  end
36
36
 
37
37
  let(:virtio1) do
38
- { id: 'virtio1', volid: 'local:108/vm-108-disk-1.qcow2,size=15G' }
39
- end
38
+ { id: 'virtio1', volid: 'local:108/vm-108-disk-1.qcow2,size=15G' }
39
+ end
40
40
 
41
- let(:virtio) do
42
- { virtio1: 'local:108/vm-108-disk-1.qcow2,size=245'}
43
- end
41
+ let(:virtio) do
42
+ { virtio1: 'local:108/vm-108-disk-1.qcow2,size=245'}
43
+ end
44
+
45
+ let(:ide2) do
46
+ { id: 'ide2' }
47
+ end
48
+
49
+ let(:ide2_image) do
50
+ { id: 'ide2', volid: 'local:iso/alpine-virt-3.7.0-x86_64.iso' }
51
+ end
44
52
 
45
53
  let(:cdrom_none) do
46
54
  { ide2: 'none,media=cdrom'}
@@ -59,6 +67,14 @@ require 'fog/proxmox/helpers/disk_helper'
59
67
  disk = Fog::Proxmox::DiskHelper.flatten(scsi0_image)
60
68
  assert_equal({ scsi0: 'local-lvm:vm-100-disk-1,size=1,cache=none' }, disk)
61
69
  end
70
+ it "returns cdrom none string" do
71
+ disk = Fog::Proxmox::DiskHelper.flatten(ide2)
72
+ assert_equal(cdrom_none, disk)
73
+ end
74
+ it "returns cdrom image string" do
75
+ disk = Fog::Proxmox::DiskHelper.flatten(ide2_image)
76
+ assert_equal(cdrom_iso, disk)
77
+ end
62
78
  end
63
79
 
64
80
  describe '#extract_controller' do
@@ -122,4 +138,61 @@ require 'fog/proxmox/helpers/disk_helper'
122
138
  assert_equal(245, size)
123
139
  end
124
140
  end
141
+
142
+ describe '#disk?' do
143
+ it "rootfs returns true" do
144
+ assert Fog::Proxmox::DiskHelper.disk?('rootfs')
145
+ end
146
+ it "mp0 returns true" do
147
+ assert Fog::Proxmox::DiskHelper.disk?('mp0')
148
+ end
149
+ it "scsi0 returns true" do
150
+ assert Fog::Proxmox::DiskHelper.disk?('scsi0')
151
+ end
152
+ it "virtio12 returns true" do
153
+ assert Fog::Proxmox::DiskHelper.disk?('virtio12')
154
+ end
155
+ it "sata2 returns true" do
156
+ assert Fog::Proxmox::DiskHelper.disk?('sata2')
157
+ end
158
+ it "ide0 returns true" do
159
+ assert Fog::Proxmox::DiskHelper.disk?('ide0')
160
+ end
161
+ it "dsfdsfdsfds returns false" do
162
+ assert !Fog::Proxmox::DiskHelper.disk?('dsfdsfdsfds')
163
+ end
164
+ end
165
+
166
+ describe '#server_disk?' do
167
+ it "ide0 returns true" do
168
+ assert Fog::Proxmox::DiskHelper.server_disk?('ide0')
169
+ end
170
+ it "scsi1 returns true" do
171
+ assert Fog::Proxmox::DiskHelper.server_disk?('scsi1')
172
+ end
173
+ it "virtio returns false" do
174
+ assert !Fog::Proxmox::DiskHelper.server_disk?('virtio')
175
+ end
176
+ end
177
+
178
+ describe '#container_disk?' do
179
+ it "rootfs returns true" do
180
+ assert Fog::Proxmox::DiskHelper.container_disk?('rootfs')
181
+ end
182
+ it "mp0 returns true" do
183
+ assert Fog::Proxmox::DiskHelper.container_disk?('mp0')
184
+ end
185
+ it "mp returns false" do
186
+ assert !Fog::Proxmox::DiskHelper.container_disk?('mp')
187
+ end
188
+ end
189
+
190
+ describe '#cdrom?' do
191
+ it "local:iso/alpine-virt-3.7.0-x86_64.iso,media=cdrom returns true" do
192
+ assert Fog::Proxmox::DiskHelper.cdrom?('local:iso/alpine-virt-3.7.0-x86_64.iso,media=cdrom')
193
+ end
194
+ it "local:iso/alpine-virt-3.7.0-x86_64.iso returns false" do
195
+ assert !Fog::Proxmox::DiskHelper.cdrom?('local:iso/alpine-virt-3.7.0-x86_64.iso')
196
+ end
197
+ end
125
198
  end
@@ -38,6 +38,18 @@ require 'fog/proxmox/helpers/nic_helper'
38
38
  { net0: 'name=eth0,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1' }
39
39
  end
40
40
 
41
+ let(:lxc_nic) do
42
+ { id: 'net0', name: 'eth0', macaddr: '66:89:C5:59:AA:96', bridge: 'vmbr0', firewall: 1, link_down: 1, queues: 1, rate: 1, tag: 1 }
43
+ end
44
+
45
+ let(:qemu_nic) do
46
+ { id: 'net1', model: 'virtio', macaddr: '66:89:C5:59:AA:96', bridge: 'vmbr0', firewall: 1, link_down: 1, queues: 1, rate: 1, tag: 1 }
47
+ end
48
+
49
+ let(:qemu_nic_create) do
50
+ { id: 'net1', model: 'virtio', bridge: 'vmbr0', firewall: 1, link_down: 1, queues: 1, rate: 1, tag: 1 }
51
+ end
52
+
41
53
  describe '#extract_model' do
42
54
  it "returns model card" do
43
55
  model = Fog::Proxmox::NicHelper.extract_nic_id(net_vm[:net0])
@@ -71,12 +83,12 @@ require 'fog/proxmox/helpers/nic_helper'
71
83
  end
72
84
  end
73
85
 
74
- describe '#valid?' do
86
+ describe '#nic?' do
75
87
  it "returns true" do
76
- assert Fog::Proxmox::NicHelper.valid?('net0')
88
+ assert Fog::Proxmox::NicHelper.nic?('net0')
77
89
  end
78
90
  it "returns false" do
79
- assert !Fog::Proxmox::NicHelper.valid?('net')
91
+ assert !Fog::Proxmox::NicHelper.nic?('net')
80
92
  end
81
93
  end
82
94
 
@@ -92,4 +104,19 @@ require 'fog/proxmox/helpers/nic_helper'
92
104
  assert nets.empty?
93
105
  end
94
106
  end
107
+
108
+ describe '#flatten' do
109
+ it "returns qemu nic string" do
110
+ flat_qemu = { net1: 'virtio=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1' }
111
+ assert_equal flat_qemu ,Fog::Proxmox::NicHelper.flatten(qemu_nic)
112
+ end
113
+ it "returns qemu nic create string" do
114
+ flat_qemu = { net1: 'model=virtio,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1' }
115
+ assert_equal flat_qemu ,Fog::Proxmox::NicHelper.flatten(qemu_nic_create)
116
+ end
117
+ it "returns lxc nic string" do
118
+ flat_lxc = { net0: 'eth0=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1' }
119
+ assert_equal flat_lxc ,Fog::Proxmox::NicHelper.flatten(lxc_nic)
120
+ end
121
+ end
95
122
  end
data/spec/proxmox_vcr.rb CHANGED
@@ -72,7 +72,7 @@ class ProxmoxVCR
72
72
  @connection_options[:ssl_verify_peer] = false if ENV['SSL_VERIFY_PEER'] == 'false'
73
73
 
74
74
  VCR.use_cassette('identity_ticket') do
75
- Fog::Proxmox.clear_cache
75
+ Fog::Proxmox.clear_credentials
76
76
 
77
77
  @username = 'root@pam'
78
78
  @password = 'proxmox01'
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.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tristan Robert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-20 00:00:00.000000000 Z
11
+ date: 2019-05-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -287,8 +287,14 @@ extra_rdoc_files: []
287
287
  files:
288
288
  - ".bundle/config"
289
289
  - ".codeclimate.yml"
290
+ - ".github/CODE_OF_CONDUCT.md"
291
+ - ".github/CONTRIBUTING.md"
292
+ - ".github/CONTRIBUTORS.md"
293
+ - ".github/ISSUE_TEMPLATE.md"
290
294
  - ".github/ISSUE_TEMPLATE/bug_report.md"
291
295
  - ".github/ISSUE_TEMPLATE/feature_request.md"
296
+ - ".github/SUPPORT.md"
297
+ - ".github/fogproxmox.png"
292
298
  - ".gitignore"
293
299
  - ".gitlab-ci.yml"
294
300
  - ".rubocop.yml"
@@ -298,16 +304,11 @@ files:
298
304
  - ".vscode/launch.json"
299
305
  - ".vscode/settings.json"
300
306
  - ".vscode/tasks.json"
301
- - CODE_OF_CONDUCT.md
302
- - CONTRIBUTING.md
303
- - CONTRIBUTORS.md
304
307
  - Gemfile
305
308
  - Gemfile.lock
306
- - ISSUE_TEMPLATE.md
307
309
  - LICENSE
308
310
  - README.md
309
311
  - Rakefile
310
- - SUPPORT.md
311
312
  - bin/console
312
313
  - bin/setup
313
314
  - docs/compute.md
@@ -317,7 +318,6 @@ files:
317
318
  - examples/compute.rb
318
319
  - examples/identity.rb
319
320
  - fog-proxmox.gemspec
320
- - fogproxmox.png
321
321
  - lib/fog/compute/proxmox.rb
322
322
  - lib/fog/compute/proxmox/models/disk.rb
323
323
  - lib/fog/compute/proxmox/models/disks.rb
@@ -463,6 +463,7 @@ files:
463
463
  - spec/fixtures/proxmox/identity/users.yml
464
464
  - spec/fixtures/proxmox/network/identity_ticket.yml
465
465
  - spec/fixtures/proxmox/network/networks.yml
466
+ - spec/hash_spec.rb
466
467
  - spec/helpers/controller_helper_spec.rb
467
468
  - spec/helpers/cpu_helper_spec.rb
468
469
  - spec/helpers/disk_helper_spec.rb
@@ -471,7 +472,7 @@ files:
471
472
  - spec/network_spec.rb
472
473
  - spec/proxmox_vcr.rb
473
474
  - spec/spec_helper.rb
474
- homepage: http://github.com/fog/fog-proxmox
475
+ homepage: https://github.com/fog/fog-proxmox
475
476
  licenses:
476
477
  - GPL-3.0
477
478
  metadata: {}
@@ -514,6 +515,7 @@ test_files:
514
515
  - spec/fixtures/proxmox/identity/users.yml
515
516
  - spec/fixtures/proxmox/network/identity_ticket.yml
516
517
  - spec/fixtures/proxmox/network/networks.yml
518
+ - spec/hash_spec.rb
517
519
  - spec/helpers/controller_helper_spec.rb
518
520
  - spec/helpers/cpu_helper_spec.rb
519
521
  - spec/helpers/disk_helper_spec.rb