rake-proxmox 0.3.0 → 0.5.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
  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