oxidized-script 0.3.0 → 0.3.1

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: 1a38be515ce13472269675c5686f022207c5f394
4
- data.tar.gz: 8a08ffbdbe0aa0326d32aaa9c9b59435ca4af3a1
3
+ metadata.gz: f33b06421d3e4c2ab37dd2532a68215b98991d34
4
+ data.tar.gz: e9349537593bfbc2b4194827381ce8f3f400ab8c
5
5
  SHA512:
6
- metadata.gz: 8e0d9f0226991efd74bfb9a4896ed7b896f8f2b5ad86736047aa780c041dae5f77d343506720e975cac80e455fd22a7adf3aa6d7376dd18e64e057f53146c481
7
- data.tar.gz: dff10d69c6fc2e601f8c030465541dff60a086fcd354a7054ea3570981d893abc7b9c667ba4af43f14373ba0b1441d89b20ca3ca97ead77599c8163eaf2633ff
6
+ metadata.gz: 09dbc25da8a981abcadd591ffe630a037c4068c248ef7d5117c60d4272d40be424c5b4efc5e86df5a180541233ac1142237c57a8751ed95561a54b01e4a555b1
7
+ data.tar.gz: 39895ff7b8f342f1e7ff3470ee010b1ea0e9ada7200bee3ce2556ada7d743cc978672b894a652faeb762b3a8b383f929768689208fb814e1568c8eb9a9d8f7a1
@@ -1,3 +1,7 @@
1
+ # 0.3.1
2
+ - FEATURE on --dryrun to get a list of nodes without running a command (by @nertwork)
3
+ - BUGFIX: errors with large config files running in ruby threads - forking instead (by @nertwork)
4
+
1
5
  # 0.3.0
2
6
  - FEATURE on --regex to run commands on hosts matching a regex (by @nertwork)
3
7
  - FEATURE on -g to run commands on entire group (by @nertwork)
data/README.md CHANGED
@@ -46,7 +46,8 @@ Usage: oxs [options] hostname [command]
46
46
  -c, --community snmp community to use for discovery
47
47
  -g, --group group to run commands on (ios, junos, etc), specified in oxidized db
48
48
  -r, --threads specify ammount of threads to use for running group (default: 1)
49
- --regex run on all hosts that match the regexp
49
+ --regex run on all hosts that match the regexp
50
+ --dryrun do a dry run on either groups or regexp to find matching hosts
50
51
  --protocols protocols to use, default "ssh, telnet"
51
52
  -v, --verbose verbose output, e.g. show commands sent
52
53
  -d, --debug turn on debugging
data/Rakefile CHANGED
@@ -1,10 +1,5 @@
1
- begin
2
- require 'rake/testtask'
3
- require 'bundler'
4
- # Bundler.setup
5
- rescue LoadError
6
- warn 'bunler missing'
7
- end
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
8
3
 
9
4
  gemspec = eval(File.read(Dir['*.gemspec'].first))
10
5
  file = [gemspec.name, gemspec.version].join('-') + '.gem'
@@ -17,19 +12,13 @@ end
17
12
  desc 'Run minitest'
18
13
  task :test do
19
14
  Rake::TestTask.new do |t|
20
- t.libs.push "lib"
21
- t.test_files = FileList['spec/*_spec.rb']
15
+ t.libs << 'spec'
16
+ t.test_files = FileList['spec/**/*_spec.rb']
17
+ t.warning = true
22
18
  t.verbose = true
23
19
  end
24
20
  end
25
21
 
26
- desc 'Build gem'
27
- task :build do
28
- system "gem build #{gemspec.name}.gemspec"
29
- FileUtils.mkdir_p 'gems'
30
- FileUtils.mv file, 'gems'
31
- end
32
-
33
22
  desc 'Install gem'
34
23
  task :install => :build do
35
24
  system "sudo -Es sh -c \'umask 022; gem install gems/#{file}\'"
@@ -37,10 +26,17 @@ end
37
26
 
38
27
  desc 'Remove gems'
39
28
  task :clean do
40
- FileUtils.rm_rf 'gems'
29
+ FileUtils.rm_rf 'pkg'
30
+ end
31
+
32
+ desc 'Tag the release'
33
+ task :tag do
34
+ system "git tag #{gemspec.version}"
41
35
  end
42
36
 
43
37
  desc 'Push to rubygems'
44
- task :push do
45
- system "gem push gems/#{file}"
38
+ task :push => :tag do
39
+ system "gem push pkg/#{file}"
46
40
  end
41
+
42
+ task default: :test
@@ -1,7 +1,6 @@
1
1
  module Oxidized
2
2
  require_relative 'script'
3
3
  require 'slop'
4
- require 'thread'
5
4
 
6
5
  class Script
7
6
  class CLI
@@ -12,29 +11,26 @@ module Oxidized
12
11
  def run
13
12
  if @group or @regex
14
13
  nodes = get_hosts
15
- work_q = Queue.new
16
- nodes.each{|node| work_q.push node}
17
- workers = (0...@threads.to_i).map do
18
- Thread.new do
14
+ counter = @threads.to_i
15
+ Signal.trap("CLD") { counter += 1 }
16
+ nodes.each do |node|
17
+ Process.wait if counter <= 0
18
+ puts "Forking " + node if @verbose
19
+ counter -= 1
20
+ fork {
19
21
  begin
20
- while node = work_q.pop(true)
21
- begin
22
- @host = node
23
- connect
24
- if @opts[:commands]
25
- puts run_file @opts[:commands]
26
- elsif @cmd
27
- puts @oxs.cmd @cmd
28
- end
29
- rescue
30
- puts "Couldn't connect to: " + node
31
- end
22
+ @host = node
23
+ connect
24
+ if @opts[:commands]
25
+ puts "Running commands on #{node}:\n#{run_file @opts[:commands]}"
26
+ elsif @cmd
27
+ puts "Running commands on #{node}:\n#{@oxs.cmd @cmd}"
32
28
  end
33
- rescue ThreadError
29
+ rescue => error
30
+ puts "We had the following error on node #{node}:\n#{error}"
34
31
  end
35
- end
32
+ }
36
33
  end
37
- workers.map(&:join)
38
34
  else
39
35
  connect
40
36
  if @opts[:commands]
@@ -69,6 +65,10 @@ module Oxidized
69
65
  end
70
66
  @oxs = nil
71
67
  raise NothingToDo, 'no host given' if not @host and not @group and not @regex
68
+ if @dryrun
69
+ puts get_hosts
70
+ exit
71
+ end
72
72
  raise NothingToDo, 'nothing to do, give command or -x' if not @cmd and not @opts[:commands]
73
73
  end
74
74
  end
@@ -86,6 +86,7 @@ module Oxidized
86
86
  slop.on 'g=', '--group', 'group to run commands on (ios, junos, etc), specified in oxidized db'
87
87
  slop.on 'r=', '--threads', 'specify ammount of threads to use for running group', default: '1'
88
88
  slop.on '--regex=', 'run on all hosts that match the regexp'
89
+ slop.on '--dryrun', 'do a dry run on either groups or regexp to find matching hosts'
89
90
  slop.on '--protocols=','protocols to use, default "ssh, telnet"'
90
91
  slop.on 'v', '--verbose', 'verbose output, e.g. show commands sent'
91
92
  slop.on 'd', '--debug', 'turn on debugging'
@@ -103,6 +104,7 @@ module Oxidized
103
104
  @group = slop[:group]
104
105
  @threads = slop[:threads]
105
106
  @verbose = slop[:verbose]
107
+ @dryrun= slop[:dryrun]
106
108
  @regex = slop[:regex]
107
109
  [slop.parse!, slop]
108
110
  end
@@ -144,18 +146,18 @@ module Oxidized
144
146
  end
145
147
 
146
148
  def get_hosts
147
- if @group and @regex
148
- puts "running list for hosts in group: #{@group} and matching: #{@regex}" if @verbose
149
- nodes_group = run_group @group
150
- nodes_regex = run_regex @regex
151
- return nodes_group & nodes_regex
152
- elsif @regex
153
- puts 'running list for hosts matching: ' + @regex if @verbose
154
- return run_regex @regex
155
- else
156
- puts 'running list for hosts in group: ' + @group if @verbose
157
- return run_group @group
158
- end
149
+ if @group and @regex
150
+ puts "running list for hosts in group: #{@group} and matching: #{@regex}" if @verbose
151
+ nodes_group = run_group @group
152
+ nodes_regex = run_regex @regex
153
+ return nodes_group & nodes_regex
154
+ elsif @regex
155
+ puts 'running list for hosts matching: ' + @regex if @verbose
156
+ return run_regex @regex
157
+ else
158
+ puts 'running list for hosts in group: ' + @group if @verbose
159
+ return run_group @group
160
+ end
159
161
  end
160
162
 
161
163
  def run_group group
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'oxidized-script'
3
- s.version = '0.3.0'
3
+ s.version = '0.3.1'
4
4
  s.licenses = %w( Apache-2.0 )
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = [ 'Saku Ytti' ]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oxidized-script
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Saku Ytti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-23 00:00:00.000000000 Z
11
+ date: 2016-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oxidized