ansible-ruby 1.0.1 → 1.0.2

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: 726f48de14e28ee9631e4c8704701a535a3131ae
4
- data.tar.gz: 436a55d8dedd8638b003db3b2fb43e2607a193ac
3
+ metadata.gz: 0b7dc314111b76ada2715f1dc9619d2f8f087dc4
4
+ data.tar.gz: 1a1063f74eef0b00698eb35b2018df427863be4d
5
5
  SHA512:
6
- metadata.gz: d4b793d6abafddba8d48fafee445e5b2c598285915ba168417eccbf3e248d0da2613088f76b677a5fd88788a1b00701bb451379c4cbe3ac8f9d78ef99e80f330
7
- data.tar.gz: 0f657b0bbd6855399efece357a0d4516ebcc52cca63c6f7229a25d86b7bb3282e70ac5eaea8123fac971a14215686b0ea02ee6e009ea40f9d275feec9b2a8778
6
+ metadata.gz: 7db7a733456eaf690c3cef12d995bcde355eb81b88dcb9043fd2bb72746a28538753382219b47e2eab2c3ad2f39c30bfb09c9127aa376b304c8b076e2565fc89
7
+ data.tar.gz: d5f63ff327a8e9f88771f2e63989594f755d0c8650afe4d21ab7db4466cfdb8d3e8e96687885545081f713228cf7f83766c2bcc7514e9bb63df65a33c273e4c2
@@ -3,5 +3,5 @@
3
3
  require 'ansible/ruby/version'
4
4
  require 'ansible/ruby/serializer'
5
5
  require 'ansible/ruby/dsl_builders/file_level'
6
- require 'ansible/ruby/modules/generated'
6
+ require 'ansible/ruby/modules/all'
7
7
  # rubocop:enable Style/FileName
@@ -9,7 +9,7 @@ module Ansible
9
9
  @result = {}
10
10
  end
11
11
 
12
- def process_method(id, *args)
12
+ def _process_method(id, *args)
13
13
  value = args.length == 1 ? args[0] : args
14
14
  @result[id] = value
15
15
  end
@@ -8,7 +8,7 @@ module Ansible
8
8
 
9
9
  attr_reader :result
10
10
 
11
- def evaluate(*args, &block)
11
+ def _evaluate(*args, &block)
12
12
  if block
13
13
  instance_eval(&block)
14
14
  else
@@ -24,7 +24,7 @@ module Ansible
24
24
 
25
25
  def method_missing(id, *args, &block)
26
26
  result = begin
27
- process_method id, *args, &block
27
+ _process_method id, *args, &block
28
28
  rescue StandardError => our_error
29
29
  begin
30
30
  super
@@ -45,7 +45,7 @@ module Ansible
45
45
  nil
46
46
  end
47
47
 
48
- def implicit_bool(args)
48
+ def _implicit_bool(args)
49
49
  args.empty? || args[0]
50
50
  end
51
51
  end
@@ -18,7 +18,7 @@ module Ansible
18
18
  end
19
19
  @context = :playbook
20
20
  play_builder = Play.new name
21
- @plays << play_builder.evaluate(&block)
21
+ @plays << play_builder._evaluate(&block)
22
22
  end
23
23
 
24
24
  def task(name, &block)
@@ -30,20 +30,20 @@ module Ansible
30
30
  @tasks_builder.task name, &block
31
31
  end
32
32
 
33
- def evaluate(*)
33
+ def _evaluate(*)
34
34
  super
35
35
  case @context
36
36
  when :playbook
37
37
  # TODO: Add a playbook DSL and do this like tasks
38
38
  Models::Playbook.new plays: @plays
39
39
  when :tasks
40
- @tasks_builder.evaluate {}
40
+ @tasks_builder._evaluate {}
41
41
  else
42
42
  raise "Unknown context #{@context}"
43
43
  end
44
44
  end
45
45
 
46
- def process_method(id, *)
46
+ def _process_method(id, *)
47
47
  raise "undefined local variable or method `#{id}'"
48
48
  end
49
49
  end
@@ -10,33 +10,51 @@ module Ansible
10
10
  MODULES_MOD = Ansible::Ruby::Modules
11
11
 
12
12
  def respond_to_missing?(method_name, _)
13
- klass_name = klass_name method_name
13
+ klass_name = _klass_name method_name
14
14
  MODULES_MOD.const_defined?(klass_name) || super
15
15
  end
16
16
 
17
17
  private
18
18
 
19
- def klass_name(id)
19
+ def _klass_name(id)
20
20
  id.to_s.capitalize
21
21
  end
22
22
 
23
- def process_method(id, *module_args, &block)
24
- raise "Unknown module #{id}" unless respond_to_missing? id, true
25
- module_klass = MODULES_MOD.const_get klass_name(id)
23
+ def _process_method(id, *module_args, &block)
24
+ module_klass = _module_klass(id)
25
+ args = _arguments(block, module_args, module_klass)
26
+ @result = module_klass.new(args)
27
+ @result.validate!
28
+ end
29
+
30
+ def _arguments(block, module_args, module_klass)
26
31
  free_form_module = module_klass.include?(Ansible::Ruby::Modules::FreeForm)
27
32
  if module_args.any? && !free_form_module
28
33
  raise "Can't use arguments #{module_args} on this type of module"
29
34
  end
30
- free_form = free_form_arg(module_args) if free_form_module
35
+ if !free_form_module && !block
36
+ raise 'You must supply a block when using this type of module'
37
+ end
38
+ args = {}
39
+ free_form = free_form_module && _free_form_arg(module_args)
40
+ args.merge! _block_args(&block)
41
+ args[:free_form] = free_form if free_form
42
+ args
43
+ end
44
+
45
+ def _module_klass(id)
46
+ raise "Unknown module #{id}" unless respond_to_missing? id, true
47
+ MODULES_MOD.const_get _klass_name(id)
48
+ end
49
+
50
+ def _block_args(&block)
51
+ return {} unless block
31
52
  # Delegate everything to the args builder and apply it to the module class we located
32
53
  module_builder = Args.new
33
- args = module_builder.evaluate(&block)
34
- args[:free_form] = free_form if free_form
35
- @result = module_klass.new(args)
36
- @result.validate!
54
+ module_builder._evaluate(&block)
37
55
  end
38
56
 
39
- def free_form_arg(module_args)
57
+ def _free_form_arg(module_args)
40
58
  if module_args.any?
41
59
  raise 'Expected only 1 argument for this type of module' if module_args.length > 1
42
60
  module_args[0]
@@ -40,7 +40,7 @@ module Ansible
40
40
  connection :local
41
41
  end
42
42
 
43
- def evaluate(*)
43
+ def _evaluate(*)
44
44
  tasks = super
45
45
  args = @playbook_args.merge({})
46
46
  # Don't want to trigger validation
@@ -15,7 +15,7 @@ module Ansible
15
15
  @task_args = {}
16
16
  end
17
17
 
18
- def evaluate(*)
18
+ def _evaluate(*)
19
19
  super
20
20
  args = {
21
21
  module: @module,
@@ -27,7 +27,7 @@ module Ansible
27
27
  end
28
28
 
29
29
  def become(*args)
30
- value = implicit_bool args
30
+ value = _implicit_bool args
31
31
  @task_args[:become] = value
32
32
  end
33
33
 
@@ -64,7 +64,7 @@ module Ansible
64
64
  end
65
65
 
66
66
  def ignore_errors(*args)
67
- value = implicit_bool args
67
+ value = _implicit_bool args
68
68
  @task_args[:ignore_errors] = value
69
69
  end
70
70
 
@@ -74,7 +74,7 @@ module Ansible
74
74
 
75
75
  private
76
76
 
77
- def process_method(id, *args, &block)
77
+ def _process_method(id, *args, &block)
78
78
  # only 1 module, so don't try and do this again
79
79
  raise "undefined local variable or method `#{id}'" if @module
80
80
  module_call_builder = ModuleCall.new
@@ -11,15 +11,15 @@ module Ansible
11
11
 
12
12
  def task(name, &block)
13
13
  task_builder = Task.new name
14
- @tasks << task_builder.evaluate(&block)
14
+ @tasks << task_builder._evaluate(&block)
15
15
  end
16
16
 
17
- def evaluate(*)
17
+ def _evaluate(*)
18
18
  super
19
19
  Models::Tasks.new tasks: @tasks
20
20
  end
21
21
 
22
- def process_method(id, *)
22
+ def _process_method(id, *)
23
23
  raise "undefined local variable or method `#{id}'"
24
24
  end
25
25
  end
@@ -22,10 +22,11 @@ module Ansible
22
22
  module_key = result.keys[0]
23
23
  args = result[module_key]
24
24
  free_form_arg = args.delete :free_form
25
- {
26
- module_key => free_form_arg,
27
- args: args
25
+ result = {
26
+ module_key => free_form_arg
28
27
  }
28
+ result[:args] = args if args.any?
29
+ result
29
30
  end
30
31
  end
31
32
  end
@@ -0,0 +1,33 @@
1
+ # See LICENSE.txt in root of repository
2
+
3
+ require 'rake/tasklib'
4
+ require 'ansible/ruby/rake/task_util'
5
+
6
+ module Ansible
7
+ module Ruby
8
+ module Rake
9
+ class Clean < ::Rake::TaskLib
10
+ include TaskUtil
11
+
12
+ # :reek:Attribute - Rake DSL gets ugly if we don't use a block
13
+ attr_accessor :files
14
+
15
+ def initialize(parameters = :default)
16
+ name, deps = parse_params parameters
17
+ yield self if block_given?
18
+ raise 'You did not supply any files!' unless files && [*files].any?
19
+ clean_files = yaml_filenames [*files]
20
+ task name => deps do
21
+ exist = clean_files.select { |file| File.exist? file }
22
+ if exist.any?
23
+ puts 'Cleaning ansible-ruby files'
24
+ rm_rf exist
25
+ else
26
+ puts 'No ansible-ruby files exist to clean'
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,43 @@
1
+ # See LICENSE.txt in root of repository
2
+ require 'rake/tasklib'
3
+ require 'ansible-ruby'
4
+ require 'ansible/ruby/rake/task_util'
5
+
6
+ module Ansible
7
+ module Ruby
8
+ module Rake
9
+ class Compile < ::Rake::TaskLib
10
+ include TaskUtil
11
+
12
+ # :reek:Attribute - Rake DSL gets ugly if we don't use a block
13
+ attr_accessor :files
14
+
15
+ def initialize(parameters = :default)
16
+ self.class.load_rule
17
+ name, deps = parse_params parameters
18
+ yield self if block_given?
19
+ raise 'You did not supply any files!' unless files && [*files].any?
20
+ deps ||= []
21
+ yml_filenames = yaml_filenames([*files])
22
+ deps = [*deps] + yml_filenames
23
+ task name => deps
24
+ end
25
+
26
+ class << self
27
+ def load_rule
28
+ return if @rule_done
29
+ ::Rake.application.create_rule '.yml' => '.rb' do |filename|
30
+ puts "Updating Ansible file #{filename.name} from #{filename.source}..."
31
+ ruby = File.read filename.source
32
+ playbook_builder = Ansible::Ruby::DslBuilders::FileLevel.new
33
+ playbook = playbook_builder._evaluate ruby
34
+ yml = Ansible::Ruby::Serializer.serialize playbook.to_h
35
+ File.write filename.name, yml
36
+ end
37
+ @rule_done = true
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,60 @@
1
+ require 'rake/tasklib'
2
+ require 'ansible-ruby'
3
+ require 'ansible/ruby/rake/task_util'
4
+ require 'ansible/ruby/rake/compile'
5
+ require 'ansible/ruby/rake/clean'
6
+
7
+ module Ansible
8
+ module Ruby
9
+ module Rake
10
+ class Execute < ::Rake::TaskLib
11
+ include TaskUtil
12
+
13
+ # :reek:Attribute - Rake DSL gets ugly if we don't use a block
14
+ attr_accessor :playbooks
15
+ # :reek:Attribute - Rake DSL gets ugly if we don't use a block
16
+ attr_accessor :options
17
+
18
+ def initialize(parameters = :default)
19
+ name, deps = parse_params parameters
20
+ yield self if block_given?
21
+ raise 'You did not supply any playbooks!' unless playbooks.any?
22
+ deps ||= []
23
+ compile_task_name = "#{name}_compile".to_sym
24
+ deps = [*deps] << compile_task_name
25
+ playbook_yml_files = yaml_filenames playbooks
26
+ task name => deps do
27
+ flat = flat_options
28
+ flat += ' ' unless flat.empty?
29
+ sh "ansible-playbook #{flat}#{playbook_yml_files.join ' '}"
30
+ end
31
+ symbol = name.inspect.to_s
32
+ desc "Compiles YAML files for #{symbol} task"
33
+ compiled_files = playbooks + role_task_files
34
+ Compile.new compile_task_name do |compile_task|
35
+ compile_task.files = compiled_files
36
+ end
37
+ desc "Cleans YAML files for #{symbol} task"
38
+ Clean.new "#{name}_clean".to_sym do |clean_task|
39
+ clean_task.files = compiled_files
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def playbooks
46
+ [*@playbooks]
47
+ end
48
+
49
+ def role_task_files
50
+ FileList['roles/*/tasks/**/*.rb']
51
+ end
52
+
53
+ def flat_options
54
+ array = [*options] << ENV['ANSIBLE_OPTS']
55
+ array.compact.join ' '
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,25 @@
1
+ # See LICENSE.txt for license
2
+ module Ansible
3
+ module Ruby
4
+ module Rake
5
+ module TaskUtil
6
+ def yaml_filenames(ruby_files)
7
+ ruby_files.map { |file| file.sub(/\.[^.]+\z/, '.yml') }
8
+ end
9
+
10
+ def parse_params(parameters)
11
+ deps = nil
12
+ name = case parameters
13
+ when Hash
14
+ name = parameters.keys[0]
15
+ deps = parameters[name]
16
+ name
17
+ else
18
+ parameters
19
+ end
20
+ [name, deps]
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,2 @@
1
+ require 'ansible/ruby/rake/compile'
2
+ require 'ansible/ruby/rake/execute'
@@ -1,5 +1,5 @@
1
1
  module Ansible
2
2
  module Ruby
3
- VERSION = '1.0.1'.freeze
3
+ VERSION = '1.0.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ansible-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brady Wied
@@ -62,13 +62,13 @@ files:
62
62
  - lib/ansible/ruby/models/tasks.rb
63
63
  - lib/ansible/ruby/models/type_generic.rb
64
64
  - lib/ansible/ruby/models/type_validator.rb
65
+ - lib/ansible/ruby/modules/all.rb
65
66
  - lib/ansible/ruby/modules/base.rb
66
67
  - lib/ansible/ruby/modules/custom/commands/command.rb
67
68
  - lib/ansible/ruby/modules/custom/commands/raw.rb
68
69
  - lib/ansible/ruby/modules/custom/commands/script.rb
69
70
  - lib/ansible/ruby/modules/custom/commands/shell.rb
70
71
  - lib/ansible/ruby/modules/custom/free_form.rb
71
- - lib/ansible/ruby/modules/generated.rb
72
72
  - lib/ansible/ruby/modules/generated/core/cloud/amazon/cloudformation.rb
73
73
  - lib/ansible/ruby/modules/generated/core/cloud/amazon/ec2.rb
74
74
  - lib/ansible/ruby/modules/generated/core/cloud/amazon/ec2_ami.rb
@@ -636,7 +636,11 @@ files:
636
636
  - lib/ansible/ruby/modules/generated/extras/windows/win_updates.rb
637
637
  - lib/ansible/ruby/modules/generated/extras/windows/win_uri.rb
638
638
  - lib/ansible/ruby/modules/generated/extras/windows/win_webpicmd.rb
639
- - lib/ansible/ruby/rake/task.rb
639
+ - lib/ansible/ruby/rake/clean.rb
640
+ - lib/ansible/ruby/rake/compile.rb
641
+ - lib/ansible/ruby/rake/execute.rb
642
+ - lib/ansible/ruby/rake/task_util.rb
643
+ - lib/ansible/ruby/rake/tasks.rb
640
644
  - lib/ansible/ruby/serializer.rb
641
645
  - lib/ansible/ruby/version.rb
642
646
  homepage: https://github.com/wied03/ansible-ruby
@@ -1,74 +0,0 @@
1
- require 'rake/tasklib'
2
- require 'ansible-ruby'
3
-
4
- module Ansible
5
- module Ruby
6
- module Rake
7
- class Task < ::Rake::TaskLib
8
- # :reek:Attribute - Rake DSL gets ugly if we don't use a block
9
- attr_accessor :playbooks
10
- # :reek:Attribute - Rake DSL gets ugly if we don't use a block
11
- attr_accessor :options
12
-
13
- def initialize(parameters = :default)
14
- self.class.load_rule
15
- name, deps = parse_params parameters
16
- yield self if block_given?
17
- raise 'You did not supply any playbooks!' unless playbooks && [*playbooks].any?
18
- deps ||= []
19
- playbook_yml_files = yaml_filenames([*playbooks])
20
- role_task_yaml_files = yaml_filenames role_task_files
21
- deps = [*deps] + (playbook_yml_files + role_task_yaml_files)
22
- task name => deps do
23
- flat = flat_options
24
- flat += ' ' unless flat.empty?
25
- sh "ansible-playbook #{flat}#{playbook_yml_files.join ' '}"
26
- end
27
- end
28
-
29
- private
30
-
31
- def flat_options
32
- array = [*options] << ENV['ANSIBLE_OPTS']
33
- array.compact.join ' '
34
- end
35
-
36
- class << self
37
- def load_rule
38
- return if @rule_done
39
- ::Rake.application.create_rule '.yml' => '.rb' do |filename|
40
- puts "Updating Ansible file #{filename.name} from #{filename.source}..."
41
- ruby = File.read filename.source
42
- playbook_builder = Ansible::Ruby::DslBuilders::FileLevel.new
43
- playbook = playbook_builder.evaluate ruby
44
- yml = Ansible::Ruby::Serializer.serialize playbook.to_h
45
- File.write filename.name, yml
46
- end
47
- @rule_done = true
48
- end
49
- end
50
-
51
- def yaml_filenames(ruby_files)
52
- ruby_files.map { |file| file.sub(/\.[^.]+\z/, '.yml') }
53
- end
54
-
55
- def role_task_files
56
- FileList['roles/*/tasks/**/*.rb']
57
- end
58
-
59
- def parse_params(parameters)
60
- deps = nil
61
- name = case parameters
62
- when Hash
63
- name = parameters.keys[0]
64
- deps = parameters[name]
65
- name
66
- else
67
- parameters
68
- end
69
- [name, deps]
70
- end
71
- end
72
- end
73
- end
74
- end