choria-colt 0.5.1 → 0.6.0

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
  SHA256:
3
- metadata.gz: e5a3d94cfa899f41ced9fc0405ed5f4fb41924267d4b56f6d31ba28420c9b0e7
4
- data.tar.gz: df5bef6793badb31de0ee0185d0f8d3ca44288fedcf64b34084dbb60d1a6de30
3
+ metadata.gz: 4e76e667917bf1958b48d45148712fa5e0d6f2c15280bbbda0d4899b0537e9f8
4
+ data.tar.gz: 17637d3bf6738bef6c28a282aabb1c4ac7680e4b2e8a6f0fe873a27b59079cc1
5
5
  SHA512:
6
- metadata.gz: bba0206e6f84679cd6c7ed5fd1831dc8e2beba052b096b265ac272baadeaf20a69585d6165a37ca1f7db2ca48a6fe532eeb77171c75f656bb0aa9f2c50796ccb
7
- data.tar.gz: 02d6f79e80a664445793596ea9d96f106a14523ba9824893e7c1d43cc2c3484f63e27a1a20173d30e608e48f4d59872db9878385da2b197021d56374c502defa
6
+ metadata.gz: bacccbdfd46669936f1271d05e4fdceae1864e07ae7f14b260f6de3ec2ed1e90d0c3270f57ea3faaa424b267eab59e1460abcdf4262feec421c6ea510bc811d5
7
+ data.tar.gz: ad8aaf32f6f71f349d04955cb795c0439c4ecd30103f290da82b3ce7037c6dce330b7e89123a416c120b61bc194c754debfb97412e6e200af8d53264aaba169c
data/.rubocop_todo.yml CHANGED
@@ -1,16 +1,11 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2022-04-28 09:34:37 UTC using RuboCop version 1.26.0.
3
+ # on 2022-05-03 07:08:32 UTC using RuboCop version 1.26.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 1
10
- # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
11
- Metrics/AbcSize:
12
- Max: 22
13
-
14
9
  # Offense count: 1
15
10
  # Configuration parameters: IgnoredMethods.
16
11
  Metrics/CyclomaticComplexity:
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## [v0.6.0](https://github.com/opus-codium/choria-colt/tree/v0.6.0) (2022-05-16)
4
+
5
+ [Full Changelog](https://github.com/opus-codium/choria-colt/compare/v0.5.1...v0.6.0)
6
+
7
+ **Merged pull requests:**
8
+
9
+ - Allow to run a task from any puppet environment [\#28](https://github.com/opus-codium/choria-colt/pull/28) ([neomilium](https://github.com/neomilium))
10
+ - CLI: Use symbol notation to target `:all` nodes [\#27](https://github.com/opus-codium/choria-colt/pull/27) ([neomilium](https://github.com/neomilium))
11
+ - CLI: Allow targeting on task status requests [\#26](https://github.com/opus-codium/choria-colt/pull/26) ([neomilium](https://github.com/neomilium))
12
+ - Fix `task status` command [\#25](https://github.com/opus-codium/choria-colt/pull/25) ([neomilium](https://github.com/neomilium))
13
+
14
+ ## [v0.5.1](https://github.com/opus-codium/choria-colt/tree/v0.5.1) (2022-05-02)
15
+
16
+ [Full Changelog](https://github.com/opus-codium/choria-colt/compare/v0.5.0...v0.5.1)
17
+
3
18
  ## [v0.5.0](https://github.com/opus-codium/choria-colt/tree/v0.5.0) (2022-05-02)
4
19
 
5
20
  [Full Changelog](https://github.com/opus-codium/choria-colt/compare/v0.4.0...v0.5.0)
data/README.md CHANGED
@@ -51,8 +51,8 @@ To install this gem onto your local machine, run `bundle exec rake install`.
51
51
 
52
52
 
53
53
  To release a new version:
54
- 1. update the version number in `version.rb`
55
- 1. generate CHANGELOG.md with `bundle exec rake changelog`
54
+ 1. update the version number in `lib/choria/colt/version.rb`
55
+ 1. generate `CHANGELOG.md` with `bundle exec rake changelog`
56
56
  1. commit changes
57
57
  1. run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
58
58
 
@@ -9,6 +9,15 @@ module Choria
9
9
  class Colt
10
10
  class CLI < Thor
11
11
  class Tasks < Thor
12
+ def self.define_targets_and_filters_options
13
+ option :targets,
14
+ aliases: ['--target', '-t'],
15
+ desc: 'Identifies the targets of the command.'
16
+ option :targets_with_classes,
17
+ aliases: ['--targets-with-class', '-C'],
18
+ desc: 'Select the targets which have the specified Puppet classes.'
19
+ end
20
+
12
21
  class_option :log_level,
13
22
  desc: 'Set log level for CLI',
14
23
  default: 'info'
@@ -19,28 +28,22 @@ module Choria
19
28
 
20
29
  Parameters take the form parameter=value.
21
30
  DESC
22
- option :targets,
23
- aliases: ['--target', '-t'],
24
- desc: 'Identifies the targets of the command.'
25
- option :targets_with_classes,
26
- aliases: ['--targets-with-class', '-C'],
27
- desc: 'Select the targets which have the specified Puppet classes.'
28
- def run(*args) # rubocop:disable Metrics/AbcSize
29
- input = extract_task_parameters_from_args(args)
30
- targets = extract_targets_from_options
31
-
31
+ define_targets_and_filters_options
32
+ option :environment,
33
+ aliases: ['-E'],
34
+ desc: 'Puppet environment to grab tasks from',
35
+ default: 'production'
36
+ def run(*args)
32
37
  raise Thor::Error, 'Task name is required' if args.empty?
33
- raise Thor::Error, "Too many arguments: #{args}" unless args.count == 1
34
38
 
35
- raise Thor::Error, 'Flag --targets or --targets-with-class is required' if options['targets'].nil? && options['targets_with_classes'].nil?
39
+ input = extract_task_parameters_from_args(args)
40
+ raise Thor::Error, "Too many arguments: #{args}" unless args.count == 1
36
41
 
37
42
  task_name = args.shift
43
+ targets, targets_with_classes = extract_targets_and_filters_from_options
38
44
 
39
- logger.debug "Targets: #{targets}"
40
-
41
- targets_with_classes = options['targets_with_classes']&.split(',')
42
-
43
- results = colt.run_bolt_task task_name, input: input, targets: targets, targets_with_classes: targets_with_classes do |result|
45
+ environment = options['environment']
46
+ results = colt.run_bolt_task task_name, input: input, targets: targets, targets_with_classes: targets_with_classes, environment: environment do |result|
44
47
  $stdout.puts formatter.process_result(result)
45
48
  end
46
49
 
@@ -84,8 +87,11 @@ module Choria
84
87
 
85
88
  A task ID is required to request Choria services and retrieve results.
86
89
  DESC
90
+ define_targets_and_filters_options
87
91
  def status(task_id)
88
- results = colt.wait_bolt_task task_id do |result|
92
+ targets, targets_with_classes = extract_targets_and_filters_from_options
93
+
94
+ results = colt.wait_bolt_task(task_id, targets: targets, targets_with_classes: targets_with_classes) do |result|
89
95
  $stdout.puts formatter.process_result(result)
90
96
  end
91
97
 
@@ -130,8 +136,17 @@ module Choria
130
136
  end.to_h
131
137
  end
132
138
 
139
+ def extract_targets_and_filters_from_options
140
+ raise Thor::Error, 'Flag --targets or --targets-with-class is required' if options['targets'].nil? && options['targets_with_classes'].nil?
141
+
142
+ targets = extract_targets_from_options
143
+ targets_with_classes = options['targets_with_classes']&.split(',')
144
+
145
+ [targets, targets_with_classes]
146
+ end
147
+
133
148
  def extract_targets_from_options
134
- return nil if options['targets'] == 'all'
149
+ return nil if options['targets'] == ':all'
135
150
 
136
151
  targets = options['targets']&.split(',')
137
152
  targets&.map do |t|
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Choria
4
4
  class Colt
5
- VERSION = '0.5.1'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
data/lib/choria/colt.rb CHANGED
@@ -19,9 +19,9 @@ module Choria
19
19
  @orchestrator = Choria::Orchestrator.new logger: @logger
20
20
  end
21
21
 
22
- def run_bolt_task(task_name, input: {}, targets: nil, targets_with_classes: nil, &block)
22
+ def run_bolt_task(task_name, input: {}, targets: nil, targets_with_classes: nil, environment: 'production', &block)
23
23
  logger.debug "Instantiate task '#{task_name}' and validate input"
24
- task = Choria::Orchestrator::Task.new(name: task_name, input: input, orchestrator: orchestrator)
24
+ task = Choria::Orchestrator::Task.new(name: task_name, input: input, environment: environment, orchestrator: orchestrator)
25
25
 
26
26
  task.on_result(&block) if block_given?
27
27
 
@@ -33,11 +33,11 @@ module Choria
33
33
  raise
34
34
  end
35
35
 
36
- def wait_bolt_task(task_id, &block)
37
- task = Choria::Orchestrator::Task.new(id: task_id, orchestrator: orchestrator)
36
+ def wait_bolt_task(task_id, targets: nil, targets_with_classes: nil, &block)
37
+ orchestrator.discover(targets: targets, targets_with_classes: targets_with_classes)
38
38
 
39
+ task = Choria::Orchestrator::Task.new(id: task_id, orchestrator: orchestrator)
39
40
  task.on_result(&block) if block_given?
40
-
41
41
  task.wait
42
42
  task.results
43
43
  rescue Choria::Orchestrator::Error => e
@@ -65,8 +65,8 @@ module Choria
65
65
  end
66
66
 
67
67
  def rpc_results=(results)
68
- pending_results, completed_results = results.partition { |res| res[:data][:exitcode] == -1 }
69
- @pending_targets ||= pending_results.map { |res| res[:sender] }
68
+ completed_results = results.reject { |res| res[:data][:exitcode] == -1 }
69
+ @pending_targets ||= results.map { |res| res[:sender] }
70
70
 
71
71
  new_results = completed_results.select { |res| @pending_targets.include? res[:sender] }
72
72
  new_results.each do |res|
@@ -39,10 +39,16 @@ module Choria
39
39
  @tasks_support ||= MCollective::Util::Choria.new.tasks_support
40
40
  end
41
41
 
42
- def run(task, targets: nil, targets_with_classes: nil, verbose: false) # rubocop:disable Metrics/AbcSize
42
+ def run(task, targets: nil, targets_with_classes: nil, verbose: false)
43
43
  rpc_client.progress = verbose
44
+ discover(targets: targets, targets_with_classes: targets_with_classes)
45
+ raise DiscoverError, 'No requests sent, no nodes discovered' if rpc_client.discover.size.zero?
46
+
47
+ task.run
48
+ end
44
49
 
45
- logger.debug "Running task: '#{task.name}' (targets: #{targets.nil? ? 'all' : targets})"
50
+ def discover(targets: nil, targets_with_classes: nil)
51
+ logger.debug "Targets: #{targets.nil? ? 'all' : targets})"
46
52
  targets&.each { |target| rpc_client.identity_filter target }
47
53
 
48
54
  unless targets_with_classes.nil?
@@ -51,9 +57,7 @@ module Choria
51
57
  end
52
58
 
53
59
  logger.info 'Discovering targets…'
54
- raise DiscoverError, 'No requests sent, no nodes discovered' if rpc_client.discover.size.zero?
55
-
56
- task.run
60
+ rpc_client.discover
57
61
  end
58
62
 
59
63
  def rpc_client
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: choria-colt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Romuald Conty
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-02 00:00:00.000000000 Z
11
+ date: 2022-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport