xlogin 0.8.15 → 0.8.18

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: cf4e6280392c93a8aa86966e02e3a70f24f105a0
4
- data.tar.gz: dbf16754da5837d19e13e0932cf0bc5c1d66c6df
3
+ metadata.gz: ada4bef520cb3929924a9de570480b28af0c5ec0
4
+ data.tar.gz: fc80ebec45b43cf0a752376b5981fed03b5f7eff
5
5
  SHA512:
6
- metadata.gz: 0fffcf6ac36faddd71dee62e42a01e5a8db39f4562764b37b1abf44207fa0066f0a926c495ecd683d783852fe3266646a5c6f70a529ef9206b59ebb5466f2917
7
- data.tar.gz: 1913cac1400e7945aaf941ad8060eb60961e1d1030f1d6bbafef3845ed421307e4fdbc04df4bdae6d56e68c32e0520b19988835726409be95b464739290e7004
6
+ metadata.gz: f61d0bfb77b7bd07943ca1eae1356a66d924ffadd35b85314eaec46f6e0708656220925c9f7553eab1fd3ce0024838fba36a30385663a27ea31ae1bf36dba2c5
7
+ data.tar.gz: a8d19a98a7329aee5f8fb2704059e46b773fd456ef15bfd529b8695a6e2e5f65cb8b49abc0c057f54680a2f7d3209abfb2073a207db677a565200918ee62a146
data/lib/xlogin.rb CHANGED
@@ -56,18 +56,45 @@ module Xlogin
56
56
  @authorized = boolean == true || (block && block.call == true)
57
57
  end
58
58
 
59
+ def register(**args)
60
+ factory.set_info(**args)
61
+ end
62
+
59
63
  def source(*source_files)
60
- factory.source(*source_files)
64
+ source_files.compact.each do |file|
65
+ raise SessionError.new("Inventory file not found: #{file}") unless File.exist?(file)
66
+ instance_eval(IO.read(file), file) if File.exist?(file)
67
+ end
68
+ end
69
+
70
+ def template(name, *args, &block)
71
+ return template_dir(name, *args) unless block # for backward compatibility
72
+
73
+ raise ArgumentError.new('missing template name') unless name
74
+ factory.set_template(name, &block)
61
75
  end
62
76
 
63
- def template(*template_dirs)
77
+ def template_dir(*template_dirs)
64
78
  files = template_dirs.flat_map { |dir| Dir.glob(File.join(dir, '*.rb')) }
65
- load_templates(*files)
79
+ template_file(*files)
80
+ end
81
+
82
+ def template_file(*template_files)
83
+ template_files.compact.each do |file|
84
+ raise TemplateError.new("Template file not found: #{file}") unless File.exist?(file)
85
+ name = File.basename(file, '.rb').scan(/\w+/).join('_')
86
+ factory.set_template(name, IO.read(file)) if File.exist?(file)
87
+ end
66
88
  end
67
- alias_method :template_dir, :template
68
89
 
69
- def load_templates(*template_files)
70
- factory.source_template(*template_files)
90
+ def method_missing(method_name, *args, &block)
91
+ type = method_name.to_s.downcase
92
+ name = args[0]
93
+ uri = args[1]
94
+ opts = args[2] || {}
95
+
96
+ super unless args.size == 2 || args.size == 3
97
+ register(type: type, name: name, uri: uri, **opts)
71
98
  end
72
99
 
73
100
  end
data/lib/xlogin/cli.rb CHANGED
@@ -61,14 +61,14 @@ module Xlogin
61
61
 
62
62
  authorize(config.authorize)
63
63
  source(File.expand_path(config.inventory, ENV['PWD']))
64
- load_templates(*config.templates.map { |file| File.expand_path(file, ENV['PWD']) })
64
+ template_file(*config.templates.map { |file| File.expand_path(file, ENV['PWD']) })
65
65
  end
66
66
 
67
67
  config.hostlist = Xlogin.list(*host.to_s.split(/\s+/))
68
68
  raise "No host found: `#{host}`" if config.hostlist.empty?
69
- rescue => e
70
- $stderr.puts e, '', parser
71
- exit 1
69
+ #rescue => e
70
+ # $stderr.puts e, '', parser
71
+ # exit 1
72
72
  end
73
73
 
74
74
  config
@@ -11,13 +11,6 @@ module Xlogin
11
11
  @templates = Hash.new
12
12
  end
13
13
 
14
- def source(*files)
15
- files.compact.each do |file|
16
- raise SessionError.new("Inventory file not found: #{file}") unless File.exist?(file)
17
- instance_eval(IO.read(file), file) if File.exist?(file)
18
- end
19
- end
20
-
21
14
  def set_info(**opts)
22
15
  name = opts[:name]
23
16
  return unless name
@@ -39,17 +32,10 @@ module Xlogin
39
32
  values.reduce(&:&).uniq
40
33
  end
41
34
 
42
- def source_template(*files)
43
- files.compact.each do |file|
44
- raise TemplateError.new("Template file not found: #{file}") unless File.exist?(file)
45
- name = File.basename(file, '.rb').scan(/\w+/).join('_')
46
- set_template(name, IO.read(file)) if File.exist?(file)
47
- end
48
- end
49
-
50
- def set_template(name, text)
35
+ def set_template(name, text = nil, &block)
51
36
  template = get_template(name)
52
- template.instance_eval(text)
37
+ template.instance_eval(text) if text
38
+ template.instance_eval(&block) if block
53
39
  @templates[name.to_s.downcase] = template
54
40
  end
55
41
 
@@ -68,22 +54,10 @@ module Xlogin
68
54
 
69
55
  def build_from_hostname(hostname, **opts)
70
56
  hostinfo = get_info(hostname)
71
- raise Xlogin::SessionError.new("Host not found: '#{hostname}'") unless hostinfo
57
+ raise SessionError.new("Host not found: '#{hostname}'") unless hostinfo
72
58
 
73
59
  build(hostinfo.merge(name: hostname, **opts))
74
60
  end
75
61
 
76
- def method_missing(method_name, *args, &block)
77
- super unless caller_locations.first.label == 'block in source' and args.size >= 2
78
-
79
- type = method_name.to_s.downcase
80
- name = args.shift
81
- uri = args.shift
82
- opts = args.shift || {}
83
-
84
- super if [type, name, uri].any? { |e| e.nil? }
85
- set_info(type: type, name: name, uri: uri, **opts)
86
- end
87
-
88
62
  end
89
63
  end
@@ -16,7 +16,7 @@ module Xlogin
16
16
  description = Rake.application.last_description
17
17
  task 'all' => hostnames unless opts[:bundle] == false
18
18
 
19
- description = opts[:desc] if opts.key?(:desc)
19
+ description = opts[:desc]
20
20
  hostnames.each do |hostname|
21
21
  desc description
22
22
  RakeTask.new(hostname, &block)
@@ -32,6 +32,8 @@ module Xlogin
32
32
  attr_accessor :silent
33
33
  attr_accessor :fail_on_error
34
34
 
35
+ @@graceful_shutdown = false
36
+
35
37
  def initialize(name)
36
38
  @name = name
37
39
  @taskname = [*Rake.application.current_scope.to_a.reverse, name].join(':')
@@ -65,12 +67,14 @@ module Xlogin
65
67
  if lock
66
68
  task(name => lock)
67
69
  file(lock) do
70
+ next if @@graceful_shutdown
68
71
  run_task
69
72
  mkdir_p(File.dirname(lock), verbose: Rake.application.options.trace)
70
73
  touch(lock, verbose: Rake.application.options.trace)
71
74
  end
72
75
  else
73
76
  task(name) do
77
+ next if @@graceful_shutdown
74
78
  run_task
75
79
  end
76
80
  end
@@ -92,7 +96,8 @@ module Xlogin
92
96
  rescue => e
93
97
  output($stderr, buffer.string) if !silent && Rake.application.options.always_multitask
94
98
  output($stderr, "[ERROR] Xlogin - #{e}\n")
95
- raise e if fail_on_error
99
+
100
+ @@graceful_shutdown = true if fail_on_error
96
101
  end
97
102
  end
98
103
 
@@ -0,0 +1,52 @@
1
+ module Xlogin
2
+
3
+ class ExpectationError < StandardError
4
+
5
+ def initialize(expect, actual)
6
+ super("Expected to match #{expect}")
7
+ @actual = actual
8
+ end
9
+
10
+ def full_message
11
+ "#{message},\nbut actually was:\n#{@actual}"
12
+ end
13
+
14
+ end
15
+
16
+ class Expectation
17
+
18
+ def initialize(session, *args)
19
+ @session = session
20
+ @args = args
21
+ end
22
+
23
+ def to_match(regexp)
24
+ return if match(regexp)
25
+ raise ExpectationError.new(@expect, @actual)
26
+ end
27
+
28
+ def not_to_match(regexp)
29
+ return unless match(regexp)
30
+ raise ExpectationError.new(@expect, @actual)
31
+ end
32
+
33
+ private
34
+ def match(regexp)
35
+ regexp = Regexp.new(regexp.to_s) unless regexp.kind_of?(Regexp)
36
+ @expect = regexp.inspect
37
+
38
+ @actual || = @session.cmd(*@args)
39
+ @actual =~ regexp
40
+ end
41
+
42
+ end
43
+
44
+ module SessionModule
45
+
46
+ def expect(*args)
47
+ Expectation.new(self, *args)
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -1,3 +1,3 @@
1
1
  module Xlogin
2
- VERSION = "0.8.15"
2
+ VERSION = "0.8.18"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlogin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.15
4
+ version: 0.8.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - haccht
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-22 00:00:00.000000000 Z
11
+ date: 2018-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-telnet
@@ -148,6 +148,7 @@ files:
148
148
  - lib/xlogin/rake_task.rb
149
149
  - lib/xlogin/session.rb
150
150
  - lib/xlogin/session_pool.rb
151
+ - lib/xlogin/spec.rb
151
152
  - lib/xlogin/ssh.rb
152
153
  - lib/xlogin/telnet.rb
153
154
  - lib/xlogin/template.rb