proxmox-api 1.0.1 → 1.1.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: cfffdfb8c0570120b8dd060da7d5d7fa379c00989d83523a4297264616f2d8f3
4
- data.tar.gz: 0a48cc99643a7a2aa894f3f6b5f5ad354b83f428f89b891296701b5bd386aa6e
3
+ metadata.gz: f471fb9bb0268e38e3b45da32b2572d29a53d9805e4702e47a6a0c784351f971
4
+ data.tar.gz: 0364feb0db15bea88f86358ca5299e6c16a70f56a045024db1c63957defa26ec
5
5
  SHA512:
6
- metadata.gz: 7087e2ceba545878007e3d00a006ab22cc50068058d95acf2d8afb95482d94a68a4152394f1a82a710e612fad085d466413d2fc00b27fabba8e2ac41915f7e98
7
- data.tar.gz: a580714df5b78651b3d82583a425f8474825f9c21e4ceee75805802730b9089a7f43ed55acd98ba17596913fd7670eaa5d1a8c2d6b8bde283208ac5d4166e675
6
+ metadata.gz: 4172c20fc513e1772ab19d0acdd94d2393601ac5a6ad4067a24e30ac52698208580d2a011ee2047d0d41edf93a081aeaf2ae988fbaf4f78b2da94a72c1c16d29
7
+ data.tar.gz: 95d4895f5e6323b6f0ab9fb79b3bc64e36ed8a735b3d3f9f80fb244db5559f0d744ba587ca047de6290b5dc6408d62124f3754f9357fa4bc4c85ac93613ffd54
data/lib/proxmox_api.rb CHANGED
@@ -8,7 +8,8 @@ require 'json'
8
8
  #
9
9
  # @author Eugene Lapeko
10
10
  class ProxmoxAPI
11
- AUTH_PARAMS = %i[username realm password otp].freeze
11
+ AUTH_PARAMS = %i[username realm password otp].freeze
12
+ RESOURCE_OPTIONS = %i[headers].freeze
12
13
  REST_METHODS = %i[get post put delete].freeze
13
14
 
14
15
  # This class is used to collect api path before request
@@ -64,6 +65,8 @@ class ProxmoxAPI
64
65
  # @option options [String] :username - username to be used for connection
65
66
  # @option options [String] :password - password to be used for connection
66
67
  # @option options [String] :realm - auth realm, can be given in :username ('user@realm')
68
+ # @option options [String] :token - token to be used instead of username, password, and realm
69
+ # @option options [String] :secret - secret to be used with token
67
70
  # @option options [String] :otp - one-time password for two-factor auth
68
71
  #
69
72
  # @option options [Boolean] :verify_ssl - verify server certificate
@@ -71,11 +74,15 @@ class ProxmoxAPI
71
74
  # You can also pass here all ssl options supported by rest-client gem
72
75
  # @see https://github.com/rest-client/rest-client
73
76
  def initialize(cluster, options)
77
+ if options.key?(:token) && options.key?(:secret)
78
+ options[:headers] = { Authorization: "PVEAPIToken=#{options[:token]}=#{options[:secret]}" }
79
+ end
80
+
74
81
  @connection = RestClient::Resource.new(
75
82
  "https://#{cluster}:#{options[:port] || 8006}/api2/json/",
76
- options.select { |k, _v| RestClient::Request::SSLOptionList.unshift('verify_ssl').include? k.to_s }
83
+ options.select { |k, _v| connection_options.include?(k.to_s) }
77
84
  )
78
- @auth_ticket = create_auth_ticket(options.select { |k, _v| AUTH_PARAMS.include? k })
85
+ @auth_ticket = options.key?(:token) ? {} : create_auth_ticket(options.select { |k, _v| AUTH_PARAMS.include? k })
79
86
  end
80
87
 
81
88
  def [](index)
@@ -90,6 +97,11 @@ class ProxmoxAPI
90
97
  true
91
98
  end
92
99
 
100
+ # The list of options to be passed to RestClient object
101
+ def self.connection_options
102
+ RestClient::Request::SSLOptionList.unshift('verify_ssl') + RESOURCE_OPTIONS
103
+ end
104
+
93
105
  private
94
106
 
95
107
  def raise_on_failure(response, message = 'Proxmox API request failed')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxmox-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Lapeko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-07 00:00:00.000000000 Z
11
+ date: 2022-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -89,12 +89,11 @@ files:
89
89
  - Gemfile
90
90
  - LICENSE
91
91
  - lib/proxmox_api.rb
92
- - spec/api_path_spec.rb
93
- - spec/spec_helper.rb
94
92
  homepage: https://github.com/L-Eugene/proxmox-api
95
93
  licenses:
96
94
  - MIT
97
- metadata: {}
95
+ metadata:
96
+ rubygems_mfa_required: 'true'
98
97
  post_install_message:
99
98
  rdoc_options: []
100
99
  require_paths:
@@ -103,17 +102,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
102
  requirements:
104
103
  - - ">="
105
104
  - !ruby/object:Gem::Version
106
- version: '2.4'
105
+ version: '2.5'
107
106
  required_rubygems_version: !ruby/object:Gem::Requirement
108
107
  requirements:
109
108
  - - ">="
110
109
  - !ruby/object:Gem::Version
111
110
  version: '0'
112
111
  requirements: []
113
- rubygems_version: 3.0.8
112
+ rubygems_version: 3.1.6
114
113
  signing_key:
115
114
  specification_version: 4
116
115
  summary: Proxmox VE REST API wrapper
117
- test_files:
118
- - spec/spec_helper.rb
119
- - spec/api_path_spec.rb
116
+ test_files: []
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rspec'
4
-
5
- describe 'ApiPath' do
6
- before(:each) do
7
- @api_object = double('ProxmoxAPI')
8
- allow(@api_object).to receive(:is_a?).with(ProxmoxAPI) { true }
9
- end
10
-
11
- it 'raises exception when object is not ProxmoxAPI' do
12
- [1, 'String', Class].each do |item|
13
- expect { ProxmoxAPI::ApiPath.new(item) }.to raise_error(ArgumentError)
14
- end
15
- end
16
-
17
- it 'collects api path using methods' do
18
- expect(ProxmoxAPI::ApiPath.new(@api_object).ticket.to_s).to eq 'ticket'
19
- expect(ProxmoxAPI::ApiPath.new(@api_object).nodes.pve1.to_s).to eq 'nodes/pve1'
20
- end
21
-
22
- it 'collects api path using []' do
23
- expect(ProxmoxAPI::ApiPath.new(@api_object)[:ticket].to_s).to eq 'ticket'
24
- expect(ProxmoxAPI::ApiPath.new(@api_object)[:nodes]['pve1'][15].to_s).to eq 'nodes/pve1/15'
25
- end
26
-
27
- it 'collects api path combining [] and methods' do
28
- expect(ProxmoxAPI::ApiPath.new(@api_object).nodes['pve1'].lxc.to_s).to eq 'nodes/pve1/lxc'
29
- end
30
-
31
- %i[get post delete put].each do |method|
32
- it "should send #{method} to ProxmoxAPI" do
33
- expect(@api_object).to receive(:submit).with(method, 'nodes/pve')
34
- ProxmoxAPI::ApiPath.new(@api_object).nodes.pve.__send__(method)
35
- end
36
-
37
- it "should send #{method}! to ProxmoxAPI" do
38
- expect(@api_object).to receive(:submit).with("#{method}!".to_sym, 'nodes/pve')
39
- ProxmoxAPI::ApiPath.new(@api_object).nodes.pve.__send__("#{method}!")
40
- end
41
- end
42
- end
data/spec/spec_helper.rb DELETED
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'proxmox_api'
4
-
5
- # This file was generated by the `rspec --init` command. Conventionally, all
6
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
7
- # The generated `.rspec` file contains `--require spec_helper` which will cause
8
- # this file to always be loaded, without a need to explicitly require it in any
9
- # files.
10
- #
11
- # Given that it is always loaded, you are encouraged to keep this file as
12
- # light-weight as possible. Requiring heavyweight dependencies from this file
13
- # will add to the boot time of your test suite on EVERY test run, even for an
14
- # individual file that may not need all of that loaded. Instead, consider making
15
- # a separate helper file that requires the additional dependencies and performs
16
- # the additional setup, and require it from the spec files that actually need
17
- # it.
18
- #
19
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
20
- RSpec.configure do |config|
21
- # rspec-expectations config goes here. You can use an alternate
22
- # assertion/expectation library such as wrong or the stdlib/minitest
23
- # assertions if you prefer.
24
- config.expect_with :rspec do |expectations|
25
- # This option will default to `true` in RSpec 4. It makes the `description`
26
- # and `failure_message` of custom matchers include text for helper methods
27
- # defined using `chain`, e.g.:
28
- # be_bigger_than(2).and_smaller_than(4).description
29
- # # => "be bigger than 2 and smaller than 4"
30
- # ...rather than:
31
- # # => "be bigger than 2"
32
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
33
- end
34
-
35
- # rspec-mocks config goes here. You can use an alternate test double
36
- # library (such as bogus or mocha) by changing the `mock_with` option here.
37
- config.mock_with :rspec do |mocks|
38
- # Prevents you from mocking or stubbing a method that does not exist on
39
- # a real object. This is generally recommended, and will default to
40
- # `true` in RSpec 4.
41
- mocks.verify_partial_doubles = true
42
- end
43
-
44
- # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
45
- # have no way to turn it off -- the option exists only for backwards
46
- # compatibility in RSpec 3). It causes shared context metadata to be
47
- # inherited by the metadata hash of host groups and examples, rather than
48
- # triggering implicit auto-inclusion in groups with matching metadata.
49
- config.shared_context_metadata_behavior = :apply_to_host_groups
50
- end