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 +4 -4
- data/lib/rake/proxmox.rb +10 -6
- data/lib/rake/proxmox/proxmox_api.rb +65 -24
- data/lib/rake/proxmox/version.rb +1 -1
- data/rake-proxmox.gemspec +4 -2
- metadata +31 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ab71dcb7672a751abb211bcf76ceb12917f6e90
|
4
|
+
data.tar.gz: 6df26683c2409298bed0c02c1a0d3fc9caa382ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 '
|
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
|
-
|
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:
|
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
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
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 =
|
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.
|
514
|
-
|
551
|
+
if response.success?
|
552
|
+
json_decode(response)['data']
|
515
553
|
else
|
516
|
-
'NOK: error code = ' + response.
|
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,
|
523
|
-
|
524
|
-
|
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
|
531
|
-
|
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
|
537
|
-
|
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
|
543
|
-
|
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
|
data/lib/rake/proxmox/version.rb
CHANGED
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 '
|
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.
|
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-
|
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:
|
70
|
+
name: faraday
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
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:
|
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:
|
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.
|
110
|
+
version: 2.8.3
|
89
111
|
- !ruby/object:Gem::Dependency
|
90
112
|
name: json
|
91
113
|
requirement: !ruby/object:Gem::Requirement
|