hocho 0.3.2 → 0.3.7

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: 1a70049bc394f2185d24039b5eb5f8bb47847891681e002bdc3a6bb7ef229c02
4
- data.tar.gz: c3d6dfaca7333206d3fcd54d440facdb534cd2b178f0d83e72d9f881f73e445f
3
+ metadata.gz: 2f5398ffdb759cbfa7f06c5d388d5fa4b5455e81229f7546a302f9a97d9aeb8d
4
+ data.tar.gz: d07ddf5a3b23e81ba9b9d2eda67a909c3a4e84bd2a60a69bffcd682cad7db1e2
5
5
  SHA512:
6
- metadata.gz: eac87e4cf5840f81d2880215a6c50609819518bd3fbe6bfb7aeee7097fefb19e24120e82e369af0b6482bfdbadf0f27fcaedef1a675fef7500f241204e993f0d
7
- data.tar.gz: '06666955518c19926814e909db32e8d4d559c4b204d0de5ad4cb9788a7c20085bcfa6aa79d4be84faa1a45ec2054455a3a16d9404bc2846f6aba5d7584db0bce'
6
+ metadata.gz: 7e41c1eaa65f335385d5dead37cd1784500576f4ad3dfbb39e316771d28517b909097fafa687799e80067d2568a83ada90baa1db2e9030c3bcc6ddaca30020da
7
+ data.tar.gz: fdb35fd1103394c48602a766db80bcc90bec1777fb6d62dc562aebf0be2dfe6f73e3af6618679547d91ab92a07626a0e8c1616033e28f32e7017f5aa72deb31f
data/README.md CHANGED
@@ -27,18 +27,30 @@ Or install it yourself as:
27
27
 
28
28
  $ gem install hocho
29
29
 
30
- ## Setup
30
+ ## Usage
31
31
 
32
32
  ``` yaml
33
33
  # hocho.yml
34
34
  inventory_providers:
35
35
  file:
36
36
  path: './hosts'
37
+
37
38
  property_providers:
39
+ ## Provide default values to host properties (reverse_merge).
38
40
  - add_default:
39
41
  properties:
40
42
  blah: blahblah
41
43
  # preferred_driver: mitamae
44
+ attributes:
45
+ node_attributes_goes_here: hello
46
+
47
+ ## Run ruby script to mutate host properties
48
+ - ruby_script:
49
+ name: name-for-your-convenience # optional
50
+ script: 'host.properties[:hello] = Time.now.xmlschema'
51
+ ## or
52
+ # file: path/to/script.rb
53
+
42
54
  # driver_options:
43
55
  # mitamae:
44
56
  # mitamae_prepare_script: 'wget -O /usr/local/bin/mitamae https://...'
@@ -52,6 +64,8 @@ test.example.org:
52
64
  properties:
53
65
  # preferred_driver: bundler
54
66
  # preferred_driver: mitamae
67
+ attributes:
68
+ node_attributes_goes_here: hello
55
69
  run_list:
56
70
  - roles/app/default.rb
57
71
  ```
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "thor"
22
22
  spec.add_dependency "itamae"
23
- spec.add_dependency "net-ssh"
23
+ spec.add_dependency "net-ssh", ">= 4.1.0"
24
24
  spec.add_dependency "hashie"
25
25
 
26
26
  spec.add_development_dependency "bundler"
@@ -71,7 +71,12 @@ module Hocho
71
71
 
72
72
  temporary_passphrase = SecureRandom.base64(129).chomp
73
73
 
74
- derive = system(*%w(openssl enc -pbkdf2), in: File::NULL, out: File::NULL, err: [:child, :out]) ? %w(-pbkdf2) : []
74
+ local_supports_pbkdf2 = system(*%w(openssl enc -pbkdf2), in: File::NULL, out: File::NULL, err: [:child, :out])
75
+ remote_supports_pbkdf2 = begin
76
+ exitstatus, * = ssh_run("openssl enc -pbkdf2", error: false, &:eof!)
77
+ exitstatus == 0
78
+ end
79
+ derive = local_supports_pbkdf2 && remote_supports_pbkdf2 ? %w(-pbkdf2) : []
75
80
 
76
81
  encrypted_password = IO.pipe do |r,w|
77
82
  w.write temporary_passphrase
@@ -104,30 +109,36 @@ module Hocho
104
109
  end
105
110
 
106
111
  def set_ssh_output_hook(c)
107
- outbuf, errbuf = [], []
108
- check = ->(prefix,data,buf) do
109
- has_newline = data.include?("\n")
112
+ check = ->(prefix, data, buf) do
113
+ data = buf + data unless buf.empty?
114
+ return if data.empty?
115
+
110
116
  lines = data.lines
111
- last = lines.pop
112
- if last[-1] == "\n"
113
- buf << last
114
- end
115
- if has_newline
116
- (buf+lines).join.each_line do |line|
117
- puts "#{prefix} #{line}"
118
- end
119
- buf.replace([])
117
+
118
+ # If data is not NL-terminated, its last line is carried over to next check.call
119
+ if lines.last.end_with?("\n")
120
+ buf.clear
121
+ else
122
+ buf.replace(lines.pop)
120
123
  end
121
- if last[-1] != "\n"
122
- buf << last
124
+
125
+ lines.each do |line|
126
+ puts "#{prefix}#{line}"
123
127
  end
124
128
  end
125
129
 
130
+ outbuf, errbuf = +"", +""
131
+ outpre, errpre = "[#{host.name}] ", "[#{host.name}/ERR] "
132
+
126
133
  c.on_data do |c, data|
127
- check.call "[#{host.name}] ", data, outbuf
134
+ check.call outpre, data, outbuf
128
135
  end
129
136
  c.on_extended_data do |c, _, data|
130
- check.call "[#{host.name}/ERR] ", data, errbuf
137
+ check.call errpre, data, errbuf
138
+ end
139
+ c.on_close do
140
+ puts "#{outpre}#{outbuf}" unless outbuf.empty?
141
+ puts "#{errpre}#{errbuf}" unless errbuf.empty?
131
142
  end
132
143
  end
133
144
 
@@ -1,6 +1,7 @@
1
1
  require 'hocho/utils/symbolize'
2
2
  require 'hashie'
3
3
  require 'net/ssh'
4
+ require 'net/ssh/proxy/jump'
4
5
  require 'net/ssh/proxy/command'
5
6
 
6
7
  module Hocho
@@ -106,7 +107,7 @@ module Hocho
106
107
  when :encryption
107
108
  [["Ciphers", [*value].join(?,)]]
108
109
  when :compression
109
- [["Compression", value]]
110
+ [["Compression", value ? 'yes' : 'no']]
110
111
  when :compression_level
111
112
  [["CompressionLevel", value]]
112
113
  when :timeout
@@ -150,6 +151,8 @@ module Hocho
150
151
  [["Port", value]]
151
152
  when :proxy
152
153
  case value
154
+ when Net::SSH::Proxy::Jump
155
+ [["ProxyJump", value.jump_proxies]]
153
156
  when Net::SSH::Proxy::Command
154
157
  [["ProxyCommand", value.command_line_template]]
155
158
  when false
@@ -163,8 +166,17 @@ module Hocho
163
166
  [["User", value]]
164
167
  when :user_known_hosts_file
165
168
  [["UserKnownHostsFile", value]]
166
- when :proxy_jump
167
- [["ProxyJump", value]]
169
+ when :verify_host_key
170
+ case value
171
+ when :never
172
+ [["StrictHostKeyChecking", "no"]]
173
+ when :accept_new_or_local_tunnel
174
+ [["StrictHostKeyChecking", "accept-new"]]
175
+ when :accept_new
176
+ [["StrictHostKeyChecking", "accept-new"]]
177
+ when :always
178
+ [["StrictHostKeyChecking", "yes"]]
179
+ end
168
180
  end
169
181
  end.compact.map do |keyval|
170
182
  keyval.join(separator)
@@ -198,7 +210,14 @@ module Hocho
198
210
  def make_ssh_connection
199
211
  alt = false
200
212
  begin
201
- Net::SSH.start(name, nil, ssh_options)
213
+ # A workaround for a bug on net-ssh: https://github.com/net-ssh/net-ssh/issues/764
214
+ # :strict_host_key_checking is translated from ssh config. However, Net::SSH.start does not accept
215
+ # the option as valid one. Remove this part when net-ssh fixes the bug.
216
+ options = ssh_options
217
+ unless Net::SSH::VALID_OPTIONS.include?(:strict_host_key_checking)
218
+ options.delete(:strict_host_key_checking)
219
+ end
220
+ Net::SSH.start(name, nil, options)
202
221
  rescue Net::SSH::Exception, Errno::ECONNREFUSED, Net::SSH::Proxy::ConnectError => e
203
222
  raise if alt
204
223
  raise unless alternate_ssh_options_available?
@@ -0,0 +1,27 @@
1
+ module Hocho
2
+ module PropertyProviders
3
+ class RubyScript
4
+ def initialize(name: nil, script: nil, file: nil)
5
+ @template = case
6
+ when script
7
+ compile(script, "(#{name || 'ruby_script'})")
8
+ when file
9
+ compile(File.read(file), name ? "(#{name})" : file)
10
+ end
11
+ end
12
+
13
+ def determine(host)
14
+ @template.new(host).run
15
+ nil
16
+ end
17
+
18
+ private
19
+
20
+ Template = Struct.new(:host)
21
+
22
+ def compile(script, name)
23
+ binding.eval("Class.new(Template) { def run;\n#{script}\nend; }", name, 0)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module Hocho
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hocho
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - sorah (Shota Fukumori)
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-14 00:00:00.000000000 Z
11
+ date: 2020-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 4.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 4.1.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: hashie
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- description:
111
+ description:
112
112
  email:
113
113
  - her@sorah.jp
114
114
  executables:
@@ -142,6 +142,7 @@ files:
142
142
  - lib/hocho/property_providers.rb
143
143
  - lib/hocho/property_providers/add_default.rb
144
144
  - lib/hocho/property_providers/base.rb
145
+ - lib/hocho/property_providers/ruby_script.rb
145
146
  - lib/hocho/runner.rb
146
147
  - lib/hocho/utils/finder.rb
147
148
  - lib/hocho/utils/symbolize.rb
@@ -152,7 +153,7 @@ homepage: https://github.com/sorah/hocho
152
153
  licenses:
153
154
  - MIT
154
155
  metadata: {}
155
- post_install_message:
156
+ post_install_message:
156
157
  rdoc_options: []
157
158
  require_paths:
158
159
  - lib
@@ -168,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
169
  version: '0'
169
170
  requirements: []
170
171
  rubygems_version: 3.1.2
171
- signing_key:
172
+ signing_key:
172
173
  specification_version: 4
173
174
  summary: Server provisioning tool with itamae
174
175
  test_files: []