fog-proxmox 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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