rake-proxmox 0.3.0 → 0.5.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
  SHA1:
3
- metadata.gz: 80a3a7211e9b18aef9d3400e0fdb054dbda38ea0
4
- data.tar.gz: 11d14ecd46d0b780b773720cd424436738420bf3
3
+ metadata.gz: 9ab71dcb7672a751abb211bcf76ceb12917f6e90
4
+ data.tar.gz: 6df26683c2409298bed0c02c1a0d3fc9caa382ec
5
5
  SHA512:
6
- metadata.gz: a4de0c41c9c6fc8a24100d48e077d7ba810080a755034f6eefe8bb1bfd09609f77372ca772357025cbcf26f8a0f032651a20a6f4c40fd9f3aae418bdd6c73afd
7
- data.tar.gz: 84a61870ba2c749957b44a7b2907ecc64660b165720fc72921ee702e0163a703d89e87b67786a7091aec1b32dc2a8dda93b6c20d985f0872545d46e98388c560
6
+ metadata.gz: ec767c5c26b6ee8e088a483d43e234f23f4f71328c0f2c2cbe9ce010c8778d85bfdc13ca4f0ee1aaf3f4a4ee5b20e7c7e69d74ecf8364e9ff5c9a9569bc7c8a1
7
+ data.tar.gz: 7838419de10f662b8a6e6b134560504d1cf6e3aac62640c10afa3ae501d43155864a7c49f54fcdabe6d91a8cb0847da0a75d4499fdccafbd421fb2ee66bf4499
data/lib/rake/proxmox.rb CHANGED
@@ -8,8 +8,9 @@ module Rake
8
8
  #
9
9
  class RakeTasks < ::Rake::TaskLib
10
10
  # @yield [self] gives itself to the block
11
- def initialize(ssl_options = {})
12
- unless ENV.include?('PROXMOX_PVE_CLUSTER')
11
+ def initialize(ssl_options = {}, logger = nil)
12
+ unless ENV.include?('PROXMOX_PVE_CLUSTER') &&
13
+ ENV.include?('PROXMOX_NODE')
13
14
  puts ''
14
15
  puts '# Proxmox Tasks are not available without correct environment'
15
16
  puts '#'
@@ -18,6 +19,8 @@ module Rake
18
19
  puts '# export PROXMOX_PVE_CLUSTER='\
19
20
  'https://pve1.example.com:8006/api2/json/'
20
21
  puts '# export PROXMOX_NODE=pve1'
22
+ puts '#'
23
+ puts '# optional add following variables if needed'
21
24
  puts '# export PROXMOX_REALM=pve'
22
25
  puts '# export PROXMOX_USERNAME=vagrant'
23
26
  puts '# export PROXMOX_PASSWORD=vagrant'
@@ -28,10 +31,11 @@ module Rake
28
31
  @proxmox = Rake::Proxmox::ProxmoxApi.new(
29
32
  ENV['PROXMOX_PVE_CLUSTER'],
30
33
  ENV['PROXMOX_NODE'],
31
- ENV['PROXMOX_USERNAME'],
32
- ENV['PROXMOX_PASSWORD'],
33
- ENV['PROXMOX_REALM'],
34
- ssl_options
34
+ ENV['PROXMOX_USERNAME'] ? ENV['PROXMOX_USERNAME'] : 'vagrant',
35
+ ENV['PROXMOX_PASSWORD'] ? ENV['PROXMOX_PASSWORD'] : 'vagrant',
36
+ ENV['PROXMOX_REALM'] ? ENV['PROXMOX_REALM'] : 'pve',
37
+ ssl_options,
38
+ logger
35
39
  )
36
40
 
37
41
  # container for current lxc status
@@ -1,5 +1,8 @@
1
- require 'rest_client'
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'httpclient'
2
4
  require 'json'
5
+ require 'logger'
3
6
 
4
7
  module Rake
5
8
  module Proxmox
@@ -24,8 +27,9 @@ module Rake
24
27
  # {verify_ssl: false})
25
28
  #
26
29
  # rubocop:disable Metrics/ParameterLists
30
+ # rubocop:disable Metrics/AbcSize
27
31
  def initialize(pve_cluster, node, username, password, realm,
28
- ssl_options = {})
32
+ ssl_options = {}, logger = nil)
29
33
  @pve_cluster = pve_cluster
30
34
  @node = node
31
35
  @username = username
@@ -33,7 +37,33 @@ module Rake
33
37
  @realm = realm
34
38
  @ssl_options = ssl_options
35
39
  @connection_status = 'error'
36
- @site = RestClient::Resource.new(@pve_cluster, @ssl_options)
40
+ use_default_logger = logger.nil?
41
+ logger ||= Logger.new STDERR
42
+ # set default loglevel
43
+ logger.level = Logger::WARN if use_default_logger
44
+ user_agent = "rake-proxmox #{Rake::Proxmox::VERSION}"
45
+ @site = Faraday.new(url: @pve_cluster, headers: {
46
+ user_agent: user_agent
47
+ }) do |conn|
48
+ # POST/PUT params encoders:
49
+ conn.request :multipart
50
+ conn.request :url_encoded
51
+
52
+ # allow Faraday to retry request
53
+ conn.request :retry, max: 3, interval: 0.05,
54
+ interval_randomness: 0.5, backoff_factor: 2,
55
+ exceptions: %w[HTTPClient::KeepAliveDisconnected
56
+ Timeout::Error]
57
+
58
+ conn.response :json, content_type: /\bjson$/
59
+ conn.response :logger, logger do |log|
60
+ log.filter(/(Csrfpreventiontoken:)\s+(.*)$/, '\1 "[REMOVED]"')
61
+ log.filter(/(Cookie:)\s+(.*)$/, '\1 "[REMOVED]"')
62
+ end
63
+
64
+ # Last middleware must be the adapter:
65
+ conn.adapter :httpclient
66
+ end
37
67
  @auth_params = create_ticket
38
68
  end
39
69
 
@@ -474,7 +504,7 @@ module Rake
474
504
  "Template #{filename} does not exist locally" unless File.file? filename
475
505
  data = {
476
506
  content: 'vztmpl',
477
- filename: File.new(filename)
507
+ filename: Faraday::UploadIO.new(filename, 'application/gzip')
478
508
  }
479
509
  http_action_post("nodes/#{node}/storage/#{storage}/upload", data)
480
510
  end
@@ -484,18 +514,17 @@ module Rake
484
514
  # Methods manages auth
485
515
  def create_ticket
486
516
  post_param = { username: @username, realm: @realm, password: @password }
487
- @site['access/ticket'].post post_param do |resp, _req, _res, &_block|
488
- if resp.code == 200
489
- extract_ticket resp
490
- else
491
- @connection_status = 'error'
492
- end
517
+ resp = @site.post('access/ticket', post_param)
518
+ if resp.success?
519
+ extract_ticket resp
520
+ else
521
+ @connection_status = 'error'
493
522
  end
494
523
  end
495
524
 
496
525
  # Method create ticket
497
526
  def extract_ticket(response)
498
- data = JSON.parse(response.body)
527
+ data = response.body
499
528
  ticket = data['data']['ticket']
500
529
  csrf_prevention_token = data['data']['CSRFPreventionToken']
501
530
  unless ticket.nil?
@@ -508,40 +537,52 @@ module Rake
508
537
  }
509
538
  end
510
539
 
540
+ def json_decode(response)
541
+ if response.headers.include?('Content-Type') &&
542
+ response.headers['Content-Type'] =~ /\bjson/
543
+ response.body
544
+ else
545
+ JSON.parse(response.body)
546
+ end
547
+ end
548
+
511
549
  # Extract data or return error
512
550
  def check_response(response)
513
- if response.code == 200
514
- JSON.parse(response.body)['data']
551
+ if response.success?
552
+ json_decode(response)['data']
515
553
  else
516
- 'NOK: error code = ' + response.code.to_s \
554
+ 'NOK: error code = ' + response.status.to_s \
517
555
  + 'data = ' + response.body + "\n"
518
556
  end
519
557
  end
520
558
 
521
559
  # Methods manage http dialogs
522
- def http_action_post(url, data = {})
523
- # print "POST #{url}\n#{data}\n"
524
- @site[url].post data, @auth_params do |resp, _req, _res, &_block|
525
- check_response resp
560
+ def http_action_post(url, payload = {})
561
+ resp = @site.post(url, payload) do |req|
562
+ req.headers.merge!(@auth_params)
526
563
  end
564
+ check_response resp
527
565
  end
528
566
 
529
567
  def http_action_put(url, data = {})
530
- @site[url].put data, @auth_params do |resp, _req, _res, &_block|
531
- check_response resp
568
+ resp = @site.put(url, data) do |req|
569
+ req.headers.merge!(@auth_params)
532
570
  end
571
+ check_response resp
533
572
  end
534
573
 
535
574
  def http_action_get(url, data = {})
536
- @site[url].get @auth_params.merge(data) do |resp, _req, _res, &_block|
537
- check_response resp
575
+ resp = @site.get(url, data) do |req|
576
+ req.headers.merge!(@auth_params)
538
577
  end
578
+ check_response resp
539
579
  end
540
580
 
541
581
  def http_action_delete(url)
542
- @site[url].delete @auth_params do |resp, _req, _res, &_block|
543
- check_response resp
582
+ resp = @site.delete(url) do |req|
583
+ req.headers.merge!(@auth_params)
544
584
  end
585
+ check_response resp
545
586
  end
546
587
  end
547
588
  end
@@ -1,5 +1,5 @@
1
1
  module Rake
2
2
  module Proxmox
3
- VERSION = "0.3.0"
3
+ VERSION = '0.5.0'.freeze
4
4
  end
5
5
  end
data/rake-proxmox.gemspec CHANGED
@@ -33,7 +33,9 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency 'rake', '~> 10.0'
34
34
  spec.add_development_dependency 'rspec', '~> 3.0'
35
35
  spec.add_development_dependency 'webmock', '~> 3.0'
36
-
37
- spec.add_runtime_dependency 'rest-client', '~> 2.0', '>= 2.0.2'
36
+
37
+ spec.add_runtime_dependency 'faraday', '~> 0.14.0'
38
+ spec.add_runtime_dependency 'faraday_middleware', '~> 0.12.2'
39
+ spec.add_runtime_dependency 'httpclient', '~> 2.8.3'
38
40
  spec.add_runtime_dependency 'json', '~> 2.1'
39
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-proxmox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Lehn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-21 00:00:00.000000000 Z
11
+ date: 2018-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -67,25 +67,47 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rest-client
70
+ name: faraday
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '2.0'
76
- - - ">="
75
+ version: 0.14.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.14.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: faraday_middleware
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
77
88
  - !ruby/object:Gem::Version
78
- version: 2.0.2
89
+ version: 0.12.2
79
90
  type: :runtime
80
91
  prerelease: false
81
92
  version_requirements: !ruby/object:Gem::Requirement
82
93
  requirements:
83
94
  - - "~>"
84
95
  - !ruby/object:Gem::Version
85
- version: '2.0'
86
- - - ">="
96
+ version: 0.12.2
97
+ - !ruby/object:Gem::Dependency
98
+ name: httpclient
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.8.3
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
87
109
  - !ruby/object:Gem::Version
88
- version: 2.0.2
110
+ version: 2.8.3
89
111
  - !ruby/object:Gem::Dependency
90
112
  name: json
91
113
  requirement: !ruby/object:Gem::Requirement