hetzner-bootstrap 1.3.0 → 1.4.1

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
- SHA1:
3
- metadata.gz: 8bf1d898badf605ad733e48df7c1db2a1bff957d
4
- data.tar.gz: d0d6a8f60c224e6ba97295181cc41457d0af5bb7
2
+ SHA256:
3
+ metadata.gz: c046fd83b8ed81c4c74dfe015a5940f058fa12da1201f81e44255edc9e3e1393
4
+ data.tar.gz: 55e2a6efaac4d0740f19155460c3f61b4954f6b93f5001b617235583e4305abd
5
5
  SHA512:
6
- metadata.gz: 0004bc998eceb029b1b863c04f306651af61b9613939ab8807a6772f6055e535b39f0564980a743b8daf9885557f99770429d6889b4328dafefb01604c37b043
7
- data.tar.gz: 7bd0f9235eba8cce42781acf228eaa3e959ae070346ff3cbb5a9f2f1150802cbb77148a4dd080acb2d85a1821b7491d2a3e44d2ab366a8a7607a27b3aff6d567
6
+ metadata.gz: d5e34d87321153b348a88e7a1f9eab7144a6cf65338aed28198ba8ced434b6ddc8c9ea16ef7968c24bd9ebfff71f8f6bf1dcb267f0c11d3e9d3a4e3a1793832a
7
+ data.tar.gz: 445f109cd2029f0b530ae757a5603c6539e42d001d827f34bec57f1bb0ea196d761ba0c91e202bf9e11242f51eec48f6301e4477875dfbe3e2af4db0d28a8753
@@ -1,15 +1,21 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.6
3
+
1
4
  Metrics/LineLength:
2
5
  Enabled: false
3
6
 
4
7
  Metrics/MethodLength:
5
8
  Enabled: false
6
9
 
7
- Style/FileName:
10
+ Naming/FileName:
8
11
  Enabled: false
9
12
 
10
13
  Style/Documentation:
11
14
  Enabled: false
12
15
 
16
+ Layout/IndentHeredoc:
17
+ EnforcedStyle: squiggly
18
+
13
19
  Metrics/ClassLength:
14
20
  Enabled: false
15
21
 
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in hetzner.gemspec
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Moriz GmbH, Roland Moriz, http://moriz.de/
1
+ Copyright (c) 2019 Moriz GmbH, Roland Moriz, http://moriz.de/
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -50,6 +50,7 @@ require 'hetzner-bootstrap'
50
50
  bs = Hetzner::Bootstrap.new(api: Hetzner::API.new(ENV['ROBOT_USER'], ENV['ROBOT_PASSWORD']))
51
51
 
52
52
  template = <<EOT
53
+ # see https://github.com/hetzneronline/installimage/
53
54
  DRIVE1 /dev/sda
54
55
  DRIVE2 /dev/sdb
55
56
 
@@ -128,7 +129,7 @@ post_install = <<EOT
128
129
  # knife bootstrap <%= ip %> -N <%= hostname %> "role[base],role[kvm_host]"
129
130
  EOT
130
131
 
131
- bs << {
132
+ bs << {
132
133
  ip: '1.2.3.4',
133
134
  template: template, # string will be parsed by erubis
134
135
  hostname: 'server100.example.com', # will be used for setting the systems' hostname
@@ -136,7 +137,7 @@ bs << {
136
137
  post_install: post_install # will be called locally at the end and can be used e.g. to run a chef bootstrap
137
138
  }
138
139
 
139
- bs << {
140
+ bs << {
140
141
  ip: '1.2.3.5',
141
142
  template: template, # string will be parsed by erubis
142
143
  hostname: 'server101.example.com', # will be used for setting the systems' hostname
@@ -144,7 +145,7 @@ bs << {
144
145
  post_install: post_install # will be called locally at the end and can be used e.g. to run a chef bootstrap
145
146
  }
146
147
 
147
-
148
+ ...
148
149
  bs.bootstrap!
149
150
 
150
151
 
@@ -159,23 +160,13 @@ Warnings:
159
160
  ---------
160
161
 
161
162
  * All existing data on the system will be wiped on bootstrap!
162
- * This is not an official Hetzner AG project.
163
- * The gem and the author are not related to Hetzner AG!
163
+ * This is not an official Hetzner Online GmbH project.
164
+ * The gem and the author are not related to Hetzner Online GmbH !
164
165
 
165
166
  **Use at your very own risk. Satisfaction is NOT guaranteed.**
166
167
 
167
- Commercial Support available through:
168
- -------------------------------------
169
-
170
- [![Moriz GmbH](https://moriz.de/images/logo.png)](http://moriz.de/)
171
-
172
- [Moriz GmbH, München](http://moriz.de/)
173
-
174
168
 
175
169
  Copyright
176
170
  ---------
177
171
 
178
- Copyright © 2013 [Roland Moriz](https://roland.io), [Moriz GmbH](https://moriz.de/)
179
-
180
- [![LinkedIn](http://www.linkedin.com/img/webpromo/btn_viewmy_160x25.png)](http://www.linkedin.com/in/rmoriz)
181
- [![Twitter](http://i.imgur.com/1kYFHlu.png)](https://twitter.com/rmoriz)
172
+ Copyright © 2019 [Roland Moriz](https://roland.io), [Moriz GmbH](https://moriz.de/)
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler'
2
4
  Bundler::GemHelper.install_tasks
data/example.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
2
4
  require 'rubygems'
3
5
  require 'hetzner-bootstrap'
4
6
 
@@ -16,90 +18,90 @@ bs = Hetzner::Bootstrap.new(api: Hetzner::API.new(
16
18
  ))
17
19
 
18
20
  # 2 disks, software raid 1, etc.
19
- template = <<EOT
20
- DRIVE1 /dev/sda
21
- DRIVE2 /dev/sdb
22
- FORMATDRIVE2 0
23
-
24
- ## ===============
25
- ## SOFTWARE RAID:
26
- ## ===============
27
-
28
- ## activate software RAID? < 0 | 1 >
29
- SWRAID 1
30
-
31
- ## Choose the level for the software RAID < 0 | 1 >
32
- SWRAIDLEVEL 1
33
-
34
- ## which bootloader should be used? < lilo | grub >
35
- BOOTLOADER grub
36
-
37
- HOSTNAME <%= hostname %>
38
-
39
- ## PART <mountpoint/lvm> <filesystem/VG> <size in MB>
40
- ##
41
- ## * <mountpoint/lvm> mountpoint for this filesystem *OR* keyword 'lvm'
42
- ## to use this PART as volume group (VG) for LVM
43
- ## * <filesystem/VG> can be ext2, ext3, reiserfs, xfs, swap *OR* name
44
- ## of the LVM volume group (VG), if this PART is a VG
45
- ## * <size> you can use the keyword 'all' to assign all the
46
- ## remaining space of the drive to the *last* partition.
47
- ## you can use M/G/T for unit specification in MIB/GIB/TIB
48
- ##
49
- ## notes:
50
- ## - extended partitions are created automatically
51
- ## - '/boot' cannot be on a xfs filesystem!
52
- ## - '/boot' cannot be on LVM!
53
- ## - when using software RAID 0, you need a '/boot' partition
54
-
55
- PART /boot ext2 1G
56
- PART lvm host 75G
57
- PART lvm guest all
58
-
59
- #LV <VG> <name> <mount> <filesystem> <size>
60
- LV host root / ext3 50G
61
- LV host swap swap swap 5G
62
-
63
-
64
- ## ========================
65
- ## OPERATING SYSTEM IMAGE:
66
- ## ========================
67
-
68
- ## full path to the operating system image
69
- ## supported image sources: local dir, ftp, http, nfs
70
- ## supported image types: tar, tar.gz, tar.bz, tar.bz2, tgz, tbz
71
- ## examples:
72
- #
73
- # local: /path/to/image/filename.tar.gz
74
- # ftp: ftp://<user>:<password>@hostname/path/to/image/filename.tar.bz2
75
- # http: http://<user>:<password>@hostname/path/to/image/filename.tbz
76
- # https: https://<user>:<password>@hostname/path/to/image/filename.tbz
77
- # nfs: hostname:/path/to/image/filename.tgz
78
-
79
- # Default images provided by hetzner as of October 2014:
80
- # Archlinux-2014-64-minmal.tar.gz
81
- # CentOS-65-32-minimal.tar.gz
82
- # CentOS-65-64-cpanel.tar.gz
83
- # CentOS-65-64-minimal.tar.gz
84
- # CentOS-70-64-minimal.tar.gz
85
- # Debian-76-wheezy-32-minimal.tar.gz
86
- # Debian-76-wheezy-64-LAMP.tar.gz
87
- # Debian-76-wheezy-64-minimal.tar.gz
88
- # openSUSE-131-64-minimal.tar.gz
89
- # Ubuntu-1204-precise-64-minimal.tar.gz
90
- # Ubuntu-1404-trusty-64-minimal.tar.gz
91
-
92
-
93
- IMAGE /root/images/Ubuntu-1204-precise-64-minimal.tar.gz
94
-
95
- EOT
21
+ template = <<~END_OF_TEMPLATE
22
+ DRIVE1 /dev/sda
23
+ DRIVE2 /dev/sdb
24
+ FORMATDRIVE2 0
25
+
26
+ ## ===============
27
+ ## SOFTWARE RAID:
28
+ ## ===============
29
+
30
+ ## activate software RAID? < 0 | 1 >
31
+ SWRAID 1
32
+
33
+ ## Choose the level for the software RAID < 0 | 1 >
34
+ SWRAIDLEVEL 1
35
+
36
+ ## which bootloader should be used? < lilo | grub >
37
+ BOOTLOADER grub
38
+
39
+ HOSTNAME <%= hostname %>
40
+
41
+ ## PART <mountpoint/lvm> <filesystem/VG> <size in MB>
42
+ ##
43
+ ## * <mountpoint/lvm> mountpoint for this filesystem *OR* keyword 'lvm'
44
+ ## to use this PART as volume group (VG) for LVM
45
+ ## * <filesystem/VG> can be ext2, ext3, reiserfs, xfs, swap *OR* name
46
+ ## of the LVM volume group (VG), if this PART is a VG
47
+ ## * <size> you can use the keyword 'all' to assign all the
48
+ ## remaining space of the drive to the *last* partition.
49
+ ## you can use M/G/T for unit specification in MIB/GIB/TIB
50
+ ##
51
+ ## notes:
52
+ ## - extended partitions are created automatically
53
+ ## - '/boot' cannot be on a xfs filesystem!
54
+ ## - '/boot' cannot be on LVM!
55
+ ## - when using software RAID 0, you need a '/boot' partition
56
+
57
+ PART /boot ext2 1G
58
+ PART lvm host 75G
59
+ PART lvm guest all
60
+
61
+ #LV <VG> <name> <mount> <filesystem> <size>
62
+ LV host root / ext3 50G
63
+ LV host swap swap swap 5G
64
+
65
+
66
+ ## ========================
67
+ ## OPERATING SYSTEM IMAGE:
68
+ ## ========================
69
+
70
+ ## full path to the operating system image
71
+ ## supported image sources: local dir, ftp, http, nfs
72
+ ## supported image types: tar, tar.gz, tar.bz, tar.bz2, tgz, tbz
73
+ ## examples:
74
+ #
75
+ # local: /path/to/image/filename.tar.gz
76
+ # ftp: ftp://<user>:<password>@hostname/path/to/image/filename.tar.bz2
77
+ # http: http://<user>:<password>@hostname/path/to/image/filename.tbz
78
+ # https: https://<user>:<password>@hostname/path/to/image/filename.tbz
79
+ # nfs: hostname:/path/to/image/filename.tgz
80
+
81
+ # Default images provided by hetzner as of October 2014:
82
+ # Archlinux-2014-64-minmal.tar.gz
83
+ # CentOS-65-32-minimal.tar.gz
84
+ # CentOS-65-64-cpanel.tar.gz
85
+ # CentOS-65-64-minimal.tar.gz
86
+ # CentOS-70-64-minimal.tar.gz
87
+ # Debian-76-wheezy-32-minimal.tar.gz
88
+ # Debian-76-wheezy-64-LAMP.tar.gz
89
+ # Debian-76-wheezy-64-minimal.tar.gz
90
+ # openSUSE-131-64-minimal.tar.gz
91
+ # Ubuntu-1204-precise-64-minimal.tar.gz
92
+ # Ubuntu-1404-trusty-64-minimal.tar.gz
93
+
94
+
95
+ IMAGE /root/images/Ubuntu-1204-precise-64-minimal.tar.gz
96
+
97
+ END_OF_TEMPLATE
96
98
 
97
99
  # the post_install hook is a great place to setup further
98
100
  # software/system provisioning
99
101
  #
100
- post_install = <<EOT
102
+ post_install = <<END_OF_POST_INSTALL
101
103
  # knife bootstrap <%= ip %> -N <%= hostname %> "role[base],role[kvm_host]"
102
- EOT
104
+ END_OF_POST_INSTALL
103
105
 
104
106
  # duplicate entry for each system
105
107
  bs << { ip: '1.2.3.4',
@@ -1,5 +1,6 @@
1
- # -*- encoding: utf-8 -*-
2
- $LOAD_PATH.push File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
3
4
  require 'hetzner/bootstrap/version'
4
5
 
5
6
  Gem::Specification.new do |s|
@@ -8,17 +9,20 @@ Gem::Specification.new do |s|
8
9
  s.platform = Gem::Platform::RUBY
9
10
  s.authors = ['Roland Moriz']
10
11
  s.email = ['roland@moriz.de']
11
- s.homepage = 'http://moriz.de/opensource/hetzner-api'
12
+ s.homepage = 'https://github.com/rmoriz/hetzner-bootstrap'
12
13
  s.summary = 'Easy bootstrapping of hetzner.de rootservers using hetzner-api'
13
14
  s.description = 'Easy bootstrapping of hetzner.de rootservers using hetzner-api'
14
15
 
15
- s.add_dependency 'hetzner-api', '>= 1.1.0'
16
- s.add_dependency 'net-ssh', '>= 2.6.0'
17
- s.add_dependency 'erubis', '>= 2.7.0'
16
+ s.add_dependency 'bcrypt_pbkdf', '>= 1.0', '< 2.0'
17
+ s.add_dependency 'ed25519', '>= 1.2', '< 2.0'
18
+ s.add_dependency 'hetzner-api', '>= 1.1.0'
19
+ s.add_dependency 'net-ssh', '>= 5.1.0'
20
+
21
+ s.add_dependency 'erubis', '>= 2.7.0'
18
22
 
19
- s.add_development_dependency 'rspec', '~> 3.4.0'
20
23
  s.add_development_dependency 'rake'
21
- s.add_development_dependency 'rubocop', '~> 0.36.0'
24
+ s.add_development_dependency 'rspec', '~> 3.4.0'
25
+ s.add_development_dependency 'rubocop', '~> 0.63.1'
22
26
 
23
27
  s.files = `git ls-files`.split("\n")
24
28
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'benchmark'
2
4
  require 'logger'
3
5
 
@@ -15,7 +17,7 @@ module Hetzner
15
17
 
16
18
  def initialize(options = {})
17
19
  @targets = []
18
- @actions = %w(enable_rescue_mode
20
+ @actions = %w[enable_rescue_mode
19
21
  reset
20
22
  wait_for_ssh_down
21
23
  wait_for_ssh_up
@@ -27,7 +29,7 @@ module Hetzner
27
29
  copy_ssh_keys
28
30
  update_local_known_hosts
29
31
  post_install
30
- post_install_remote)
32
+ post_install_remote]
31
33
  @api = options[:api]
32
34
  @logger = options[:logger] || Logger.new(STDOUT)
33
35
  end
@@ -65,7 +67,7 @@ module Hetzner
65
67
  end
66
68
  target.logger.info "#{loghack}[#{action}] FINISHED in #{format '%.5f', d} seconds"
67
69
  end
68
- rescue => e
70
+ rescue StandardError => e
69
71
  puts "something bad happened unexpectedly: #{e.class} => #{e.message}"
70
72
  end
71
73
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'erubis'
2
4
  require 'net/ssh'
3
5
  require 'socket'
@@ -14,8 +16,8 @@ module Hetzner
14
16
  attr_accessor :rescue_os_bit
15
17
  attr_accessor :actions
16
18
  attr_accessor :hostname
17
- attr_accessor :post_install
18
- attr_accessor :post_install_remote
19
+ attr_writer :post_install
20
+ attr_writer :post_install_remote
19
21
  attr_accessor :public_keys
20
22
  attr_accessor :bootstrap_cmd
21
23
  attr_accessor :logger
@@ -30,7 +32,7 @@ module Hetzner
30
32
 
31
33
  @template = Template.new options.delete(:template)
32
34
 
33
- fail NoTemplateProvidedError 'No imageinstall template provided.' unless @template
35
+ raise NoTemplateProvidedError 'No imageinstall template provided.' unless @template
34
36
 
35
37
  options.each_pair do |k, v|
36
38
  send("#{k}=", v)
@@ -46,7 +48,7 @@ module Hetzner
46
48
  logger.info "IP: #{ip} => password: #{@password}"
47
49
  elsif @retries > 3
48
50
  logger.error 'rescue system could not be activated'
49
- fail CantActivateRescueSystemError, result
51
+ raise CantActivateRescueSystemError, result
50
52
  else
51
53
  @retries += 1
52
54
 
@@ -65,7 +67,7 @@ module Hetzner
65
67
  reset_retries
66
68
  elsif @retries > 3
67
69
  logger.error 'resetting through webservice failed.'
68
- fail CantResetSystemError, result
70
+ raise CantResetSystemError, result
69
71
  else
70
72
  @retries += 1
71
73
  logger.warn "problem while trying to reset/reboot system (retries: #{@retries})"
@@ -85,7 +87,8 @@ module Hetzner
85
87
  loop do
86
88
  sleep 2
87
89
  Timeout.timeout(4) do
88
- fail Errno::ECONNREFUSED unless port_open? @ip, 22
90
+ raise Errno::ECONNREFUSED unless port_open? @ip, 22
91
+
89
92
  logger.debug 'SSH UP'
90
93
  end
91
94
  end
@@ -96,7 +99,7 @@ module Hetzner
96
99
  def wait_for_ssh_up
97
100
  loop do
98
101
  Timeout.timeout(4) do
99
- fail Errno::ECONNREFUSED unless port_open? @ip, 22
102
+ raise Errno::ECONNREFUSED unless port_open? @ip, 22
100
103
 
101
104
  logger.debug 'SSH UP'
102
105
  return true
@@ -117,42 +120,38 @@ module Hetzner
117
120
  output = ssh.exec!(@bootstrap_cmd)
118
121
  logger.info output.gsub(`clear`, '')
119
122
  end
120
-
121
- rescue Net::SSH::Disconnect
122
- puts 'SSH connection was closed.'
123
123
  end
124
124
 
125
125
  def reboot
126
126
  remote do |ssh|
127
127
  ssh.exec!('reboot')
128
128
  end
129
- rescue Net::SSH::Disconnect
130
- puts 'SSH connection was closed.'
129
+ rescue IOError, Net::SSH::Disconnect
130
+ logger.debug 'SSH connection was closed as anticipated.'
131
131
  end
132
132
 
133
133
  def verify_installation
134
134
  remote do |ssh|
135
135
  working_hostname = ssh.exec!('cat /etc/hostname')
136
- unless @hostname == working_hostname.chomp
137
- logger.debug "hostnames do not match: assumed #{@hostname} but received #{working_hostname}"
138
- end
136
+ working_hostname.chomp!
137
+ logger.debug "hostnames do not match: assumed #{@hostname} but received #{working_hostname}" unless @hostname == working_hostname.chomp
139
138
  end
140
139
  end
141
140
 
142
141
  def copy_ssh_keys
143
- if @public_keys
144
- remote do |ssh|
145
- ssh.exec!('mkdir /root/.ssh')
146
- Array(@public_keys).each do |key|
147
- pub = File.read(File.expand_path(key))
148
- ssh.exec!("echo \"#{pub}\" >> /root/.ssh/authorized_keys")
149
- end
142
+ return unless @public_keys
143
+
144
+ remote do |ssh|
145
+ ssh.exec!('mkdir /root/.ssh')
146
+ Array(@public_keys).each do |key|
147
+ pub = File.read(File.expand_path(key))
148
+ ssh.exec!("echo \"#{pub}\" >> /root/.ssh/authorized_keys")
150
149
  end
151
150
  end
152
151
  end
153
152
 
154
153
  def update_local_known_hosts
155
- remote(verify_host_key: true) do |ssh|
154
+ remote(verify_host_key: :accept_new_or_local_tunnel) do |ssh|
156
155
  # dummy
157
156
  end
158
157
  rescue Net::SSH::HostKeyMismatch => e
@@ -181,6 +180,8 @@ module Hetzner
181
180
  ssh.exec!(cmd)
182
181
  end
183
182
  end
183
+ rescue IOError, Net::SSH::Disconnect
184
+ logger.debug 'SSH connection was closed.'
184
185
  end
185
186
 
186
187
  def render_template
@@ -215,7 +216,7 @@ module Hetzner
215
216
  end
216
217
 
217
218
  def remote(options = {})
218
- default = { verify_host_key: false, password: @password }
219
+ default = { verify_host_key: :never, password: @password }
219
220
  default.merge! options
220
221
 
221
222
  Net::SSH.start(@ip, @login, default) do |ssh|
@@ -238,7 +239,7 @@ module Hetzner
238
239
 
239
240
  def default_log_formatter
240
241
  proc do |_severity, datetime, _progname, msg|
241
- caller[4] =~ /`(.*?)'/
242
+ caller(5..5).first =~ /`(.*?)'/
242
243
  "[#{datetime.strftime '%H:%M:%S'}][#{format '%-15s', ip}]" \
243
244
  "[#{Regexp.last_match(1)}] #{msg}\n"
244
245
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Hetzner
2
4
  class Bootstrap
3
5
  class Template
@@ -13,7 +15,7 @@ module Hetzner
13
15
  # also run: $ installimage -h
14
16
  #
15
17
  if param.is_a? Hetzner::Bootstrap::Template
16
- return param
18
+ param
17
19
  elsif param.is_a? String
18
20
  @raw_template = param
19
21
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hetzner
3
4
  class Bootstrap
4
- VERSION = '1.3.0'.freeze
5
+ VERSION = '1.4.1'
5
6
  end
6
7
  end
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'hetzner-api'
2
4
  require 'hetzner-bootstrap'
3
5
 
6
+ # rubocop:disable Metrics/BlockLength
4
7
  describe 'Bootstrap' do
5
8
  let(:bs) do
6
9
  Hetzner::Bootstrap.new(api: Hetzner::API.new(API_USERNAME, API_PASSWORD))
@@ -33,10 +36,11 @@ describe 'Bootstrap' do
33
36
  end
34
37
 
35
38
  def improper_target_without_template
36
- proper_target.select { |k, _v| k != :template }
39
+ proper_target.reject { |k, _v| k == :template }
37
40
  end
38
41
 
39
42
  def default_template
40
43
  'string'
41
44
  end
42
45
  end
46
+ # rubocop:enable Metrics/BlockLength
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # This file was generated by the `rspec --init` command. Conventionally, all
3
4
  # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
4
5
  # The generated `.rspec` file contains `--require spec_helper` which will cause
@@ -94,5 +95,5 @@ RSpec.configure do |config|
94
95
  # Kernel.srand config.seed
95
96
  end
96
97
 
97
- API_USERNAME = 'api-login'.freeze
98
- API_PASSWORD = 'password'.freeze
98
+ API_USERNAME = 'api-login'
99
+ API_PASSWORD = 'password'
metadata CHANGED
@@ -1,15 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hetzner-bootstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roland Moriz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-21 00:00:00.000000000 Z
11
+ date: 2019-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bcrypt_pbkdf
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: ed25519
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.2'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '1.2'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.0'
13
53
  - !ruby/object:Gem::Dependency
14
54
  name: hetzner-api
15
55
  requirement: !ruby/object:Gem::Requirement
@@ -30,14 +70,14 @@ dependencies:
30
70
  requirements:
31
71
  - - ">="
32
72
  - !ruby/object:Gem::Version
33
- version: 2.6.0
73
+ version: 5.1.0
34
74
  type: :runtime
35
75
  prerelease: false
36
76
  version_requirements: !ruby/object:Gem::Requirement
37
77
  requirements:
38
78
  - - ">="
39
79
  - !ruby/object:Gem::Version
40
- version: 2.6.0
80
+ version: 5.1.0
41
81
  - !ruby/object:Gem::Dependency
42
82
  name: erubis
43
83
  requirement: !ruby/object:Gem::Requirement
@@ -53,47 +93,47 @@ dependencies:
53
93
  - !ruby/object:Gem::Version
54
94
  version: 2.7.0
55
95
  - !ruby/object:Gem::Dependency
56
- name: rspec
96
+ name: rake
57
97
  requirement: !ruby/object:Gem::Requirement
58
98
  requirements:
59
- - - "~>"
99
+ - - ">="
60
100
  - !ruby/object:Gem::Version
61
- version: 3.4.0
101
+ version: '0'
62
102
  type: :development
63
103
  prerelease: false
64
104
  version_requirements: !ruby/object:Gem::Requirement
65
105
  requirements:
66
- - - "~>"
106
+ - - ">="
67
107
  - !ruby/object:Gem::Version
68
- version: 3.4.0
108
+ version: '0'
69
109
  - !ruby/object:Gem::Dependency
70
- name: rake
110
+ name: rspec
71
111
  requirement: !ruby/object:Gem::Requirement
72
112
  requirements:
73
- - - ">="
113
+ - - "~>"
74
114
  - !ruby/object:Gem::Version
75
- version: '0'
115
+ version: 3.4.0
76
116
  type: :development
77
117
  prerelease: false
78
118
  version_requirements: !ruby/object:Gem::Requirement
79
119
  requirements:
80
- - - ">="
120
+ - - "~>"
81
121
  - !ruby/object:Gem::Version
82
- version: '0'
122
+ version: 3.4.0
83
123
  - !ruby/object:Gem::Dependency
84
124
  name: rubocop
85
125
  requirement: !ruby/object:Gem::Requirement
86
126
  requirements:
87
127
  - - "~>"
88
128
  - !ruby/object:Gem::Version
89
- version: 0.36.0
129
+ version: 0.63.1
90
130
  type: :development
91
131
  prerelease: false
92
132
  version_requirements: !ruby/object:Gem::Requirement
93
133
  requirements:
94
134
  - - "~>"
95
135
  - !ruby/object:Gem::Version
96
- version: 0.36.0
136
+ version: 0.63.1
97
137
  description: Easy bootstrapping of hetzner.de rootservers using hetzner-api
98
138
  email:
99
139
  - roland@moriz.de
@@ -116,7 +156,7 @@ files:
116
156
  - lib/hetzner/bootstrap/version.rb
117
157
  - spec/hetzner_bootstrap_spec.rb
118
158
  - spec/spec_helper.rb
119
- homepage: http://moriz.de/opensource/hetzner-api
159
+ homepage: https://github.com/rmoriz/hetzner-bootstrap
120
160
  licenses: []
121
161
  metadata: {}
122
162
  post_install_message:
@@ -135,7 +175,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
175
  version: '0'
136
176
  requirements: []
137
177
  rubyforge_project:
138
- rubygems_version: 2.6.11
178
+ rubygems_version: 2.7.6
139
179
  signing_key:
140
180
  specification_version: 4
141
181
  summary: Easy bootstrapping of hetzner.de rootservers using hetzner-api