pero 0.4.2 → 0.5.3

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
  SHA256:
3
- metadata.gz: e71ae384d9b40a6c02b73412d3d8f56cd35ebc08726f001aedad918368919281
4
- data.tar.gz: 7913b4e622a3f11d9b0a63e599090062c0bb934999efa56d67a929246d4f6e70
3
+ metadata.gz: e8fc62fc16984c838f034444f6dc537009aaa019e460a5998bad1184411c8a5b
4
+ data.tar.gz: 02233a95f14a8a58e622cfc1cb23cdc55edb81b2ede70bd015872ad642788189
5
5
  SHA512:
6
- metadata.gz: 77e59a21bd793e8f6df35b5a34043ff7a874974e9093265e6b4bf465c93393427cfc1f566fa2531fb3d099193cf442c94944a0fad6dfcf6c9757b8df0ab4518c
7
- data.tar.gz: 2c09b35e3d0254018e7b84318aed6e3db2c609f0ca0b2bae05819d8fb6ef35a29cdd8bcb0187facec6cc00df5de7d516f61d4757c9875b6aed5e5802aa3982f0
6
+ metadata.gz: 88141e0b5932f838695df5fca5a558a1b9523a8486201d643bf866cbf019771f011d8dede89d363518fe70873b4d5fa86dd1746ba6bc16e2a3cafe6f4af729af
7
+ data.tar.gz: cc8ad0c0c15759f70a318121dcc4cf567138c35e1321e460820563112c132c65efcc1d853bfa69ba2612617436c13e8a338851dd0a29b49eb946ba6da09de1e9
data/lib/pero/cli.rb CHANGED
@@ -55,24 +55,31 @@ module Pero
55
55
  return
56
56
  end
57
57
 
58
+ prepare
59
+ nodes = Pero::History.search(name_regexp)
60
+ return unless nodes
61
+ m = Mutex.new
62
+
58
63
  begin
59
- prepare
60
- nodes = Pero::History.search(name_regexp)
61
- return unless nodes
62
- Parallel.each(nodes, in_process: options["concurrent"]) do |n|
63
- opt = n["last_options"].merge(options)
64
- opt["environment"] = "production" if opt["environment"].nil? || opt["environment"].empty?
65
- if options["image-name"]
66
- opt.delete("server-version")
67
- else
68
- opt.delete("image-name")
69
- end
70
- puppet = Pero::Puppet.new(opt["host"], opt)
64
+ Parallel.each(nodes, in_threads: options["concurrent"]) do |n|
65
+ opt = merge_options(n, options)
66
+ puppet = Pero::Puppet.new(opt["host"], opt, m)
71
67
  puppet.apply
72
68
  end
73
69
  rescue => e
74
70
  Pero.log.error e.backtrace.join("\n")
75
71
  Pero.log.error e.inspect
72
+
73
+ ensure
74
+ if options["one-shot"]
75
+ Pero.log.info "stop puppet master container"
76
+ Parallel.each(nodes, in_threads: options["concurrent"]) do |n|
77
+ opt = merge_options(n, options)
78
+ Pero::Puppet.new(opt["host"], opt, m).stop_master
79
+ end
80
+ else
81
+ Pero.log.info "puppet master container keep running"
82
+ end
76
83
  end
77
84
  end
78
85
 
@@ -83,9 +90,10 @@ module Pero
83
90
  def bootstrap(*hosts)
84
91
  begin
85
92
  options["environment"] = "production" if options["environment"].nil? || options["environment"].empty?
86
- Parallel.each(hosts, in_process: options["concurrent"]) do |host|
93
+ m = Mutex.new
94
+ Parallel.each(hosts, in_threads: options["concurrent"]) do |host|
87
95
  raise "unknown option #{host}" if host =~ /^-/
88
- puppet = Pero::Puppet.new(host, options)
96
+ puppet = Pero::Puppet.new(host, options, m)
89
97
 
90
98
  Pero.log.info "bootstrap pero #{host}"
91
99
  puppet.install
@@ -97,6 +105,17 @@ module Pero
97
105
  end
98
106
 
99
107
  no_commands do
108
+ def merge_options(node, options)
109
+ opt = node["last_options"].merge(options)
110
+ opt["environment"] = "production" if opt["environment"].nil? || opt["environment"].empty?
111
+ if options["image-name"]
112
+ opt.delete("server-version")
113
+ else
114
+ opt.delete("image-name")
115
+ end
116
+ opt
117
+ end
118
+
100
119
  def prepare
101
120
  `bundle install` if File.exists?("Gemfile")
102
121
  `bundle exec librarian-puppet install` if File.exists?("Puppetfile")
data/lib/pero/docker.rb CHANGED
@@ -14,6 +14,7 @@ module Pero
14
14
 
15
15
  def build
16
16
  Pero.log.info "start build container"
17
+ ::Docker.options[:read_timeout] = 300
17
18
  begin
18
19
  image = if image_name
19
20
  ::Docker::Image.create('fromImage' => image_name)
@@ -138,8 +139,26 @@ EOS
138
139
  ["puppet6-release-el-#{el}.noarch.rpm", "puppetserver"]
139
140
  end
140
141
 
142
+ vault_repo = if el == 6
143
+ <<-EOS
144
+ RUN sed -i "s|#baseurl=|baseurl=|g" /etc/yum.repos.d/CentOS-Base.repo \
145
+ && sed -i "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo \
146
+ && sed -i "s|http://mirror\.centos\.org/|http://vault\.centos\.org/|g" /etc/yum.repos.d/CentOS-Base.repo
147
+ EOS
148
+ else
149
+ ''
150
+ end
151
+
152
+ legacy_signing = if Gem::Version.new("3.0.0") > Gem::Version.new(server_version)
153
+ "RUN echo 'LegacySigningMDs md5' >> /etc/pki/tls/legacy-settings"
154
+ else
155
+ ''
156
+ end
157
+
141
158
  <<-EOS
142
159
  FROM #{from_image}
160
+ #{vault_repo}
161
+ #{legacy_signing}
143
162
  RUN curl -L -k -O https://yum.puppetlabs.com/#{release_package} && \
144
163
  rpm -ivh #{release_package}
145
164
  RUN yum install -y #{package_name}-#{server_version}
@@ -149,7 +168,7 @@ RUN echo -e "#{puppet_config.split(/\n/).join("\\n")}" > #{conf_dir}/puppet.conf
149
168
  end
150
169
 
151
170
  def create_ca
152
- release_package,package_name, conf_dir = if Gem::Version.new("5.0.0") > Gem::Version.new(server_version)
171
+ if Gem::Version.new("5.0.0") > Gem::Version.new(server_version)
153
172
  'puppet cert generate `hostname` --dns_alt_names localhost,127.0.0.1'
154
173
  elsif Gem::Version.new("6.0.0") > Gem::Version.new(server_version)
155
174
  'puppet cert generate `hostname` --dns_alt_names localhost,127.0.0.1'
@@ -159,7 +178,12 @@ RUN echo -e "#{puppet_config.split(/\n/).join("\\n")}" > #{conf_dir}/puppet.conf
159
178
  end
160
179
 
161
180
  def run_cmd
162
- release_package,package_name, conf_dir = if Gem::Version.new("5.0.0") > Gem::Version.new(server_version)
181
+ if Gem::Version.new("3.0.0") > Gem::Version.new(server_version)
182
+ # /var/puppet/run is created for the first time by running `puppet master`,
183
+ # but `puppet master` will fail because the permissions are wrong.
184
+ # So, let the `puppet master` fail once, fix the permission of /var/puppet/run, and execute `puppet master` again.
185
+ 'puppet master --no-daemonize --verbose || (chown puppet: /var/puppet/run && puppet master --no-daemonize --verbose)'
186
+ elsif Gem::Version.new("5.0.0") > Gem::Version.new(server_version)
163
187
  'puppet master --no-daemonize --verbose'
164
188
  elsif Gem::Version.new("6.0.0") > Gem::Version.new(server_version)
165
189
  'puppetserver foreground'
data/lib/pero/history.rb CHANGED
@@ -28,6 +28,7 @@ module Pero
28
28
  end
29
29
  options.delete("noop")
30
30
  options.delete("tags")
31
+ options.delete("user")
31
32
  @h = {
32
33
  name: name,
33
34
  last_options: options
data/lib/pero/puppet.rb CHANGED
@@ -23,8 +23,9 @@ module Pero
23
23
  class Puppet
24
24
  extend Pero::SshExecutable
25
25
  attr_reader :specinfra
26
- def initialize(host, options)
26
+ def initialize(host, options, mutex)
27
27
  @options = options.dup
28
+ @mutex = mutex
28
29
 
29
30
  @options[:host] = host
30
31
  so = ssh_options
@@ -90,6 +91,10 @@ module Pero
90
91
  Pero::History::Attribute.new(specinfra, @options).save
91
92
  end
92
93
 
94
+ def stop_master
95
+ run_container.kill if docker.alerady_run?
96
+ end
97
+
93
98
  def serve_master
94
99
  container = run_container
95
100
  begin
@@ -97,19 +102,20 @@ module Pero
97
102
  rescue => e
98
103
  Pero.log.error e.inspect
99
104
  raise e
100
- ensure
101
- if @options["one-shot"]
102
- Pero.log.info "stop puppet master container"
103
- container.kill
104
- else
105
- Pero.log.info "puppet master container keep running"
106
- end
107
105
  end
108
106
  end
109
107
 
108
+ def docker
109
+ Pero::Docker.new(@options["server-version"], @options["image-name"], @options["environment"], @options["volumes"])
110
+ end
111
+
110
112
  def run_container
111
- docker = Pero::Docker.new(@options["server-version"], @options["image-name"], @options["environment"], @options["volumes"])
112
- docker.alerady_run? || docker.run
113
+ begin
114
+ @mutex.lock
115
+ docker.alerady_run? || docker.run
116
+ ensure
117
+ @mutex.unlock
118
+ end
113
119
  end
114
120
 
115
121
  def apply
@@ -172,6 +178,7 @@ module Pero
172
178
  ret << " --#{n}" if options[n]
173
179
  end
174
180
  ret << " --tags #{options["tags"].join(",")}" if options["tags"]
181
+ ret << " --environment #{options["environment"]}" if options["environment"]
175
182
  ret
176
183
  end
177
184
 
data/lib/pero/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pero
2
- VERSION = "0.4.2"
2
+ VERSION = "0.5.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pero
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - pyama86
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-15 00:00:00.000000000 Z
11
+ date: 2021-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  - !ruby/object:Gem::Version
200
200
  version: '0'
201
201
  requirements: []
202
- rubygems_version: 3.1.2
202
+ rubygems_version: 3.1.4
203
203
  signing_key:
204
204
  specification_version: 4
205
205
  summary: tool for puppet apply from our desktop.