ansible-ruby 1.0.1 → 1.0.2
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 +4 -4
- data/lib/ansible-ruby.rb +1 -1
- data/lib/ansible/ruby/dsl_builders/args.rb +1 -1
- data/lib/ansible/ruby/dsl_builders/base.rb +3 -3
- data/lib/ansible/ruby/dsl_builders/file_level.rb +4 -4
- data/lib/ansible/ruby/dsl_builders/module_call.rb +29 -11
- data/lib/ansible/ruby/dsl_builders/play.rb +1 -1
- data/lib/ansible/ruby/dsl_builders/task.rb +4 -4
- data/lib/ansible/ruby/dsl_builders/tasks.rb +3 -3
- data/lib/ansible/ruby/modules/{generated.rb → all.rb} +0 -0
- data/lib/ansible/ruby/modules/custom/free_form.rb +4 -3
- data/lib/ansible/ruby/rake/clean.rb +33 -0
- data/lib/ansible/ruby/rake/compile.rb +43 -0
- data/lib/ansible/ruby/rake/execute.rb +60 -0
- data/lib/ansible/ruby/rake/task_util.rb +25 -0
- data/lib/ansible/ruby/rake/tasks.rb +2 -0
- data/lib/ansible/ruby/version.rb +1 -1
- metadata +7 -3
- data/lib/ansible/ruby/rake/task.rb +0 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b7dc314111b76ada2715f1dc9619d2f8f087dc4
|
4
|
+
data.tar.gz: 1a1063f74eef0b00698eb35b2018df427863be4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7db7a733456eaf690c3cef12d995bcde355eb81b88dcb9043fd2bb72746a28538753382219b47e2eab2c3ad2f39c30bfb09c9127aa376b304c8b076e2565fc89
|
7
|
+
data.tar.gz: d5f63ff327a8e9f88771f2e63989594f755d0c8650afe4d21ab7db4466cfdb8d3e8e96687885545081f713228cf7f83766c2bcc7514e9bb63df65a33c273e4c2
|
data/lib/ansible-ruby.rb
CHANGED
@@ -8,7 +8,7 @@ module Ansible
|
|
8
8
|
|
9
9
|
attr_reader :result
|
10
10
|
|
11
|
-
def
|
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
|
-
|
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
|
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.
|
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
|
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.
|
40
|
+
@tasks_builder._evaluate {}
|
41
41
|
else
|
42
42
|
raise "Unknown context #{@context}"
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
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 =
|
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
|
19
|
+
def _klass_name(id)
|
20
20
|
id.to_s.capitalize
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
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
|
-
|
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
|
-
|
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
|
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]
|
@@ -15,7 +15,7 @@ module Ansible
|
|
15
15
|
@task_args = {}
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
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 =
|
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 =
|
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
|
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.
|
14
|
+
@tasks << task_builder._evaluate(&block)
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def _evaluate(*)
|
18
18
|
super
|
19
19
|
Models::Tasks.new tasks: @tasks
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
22
|
+
def _process_method(id, *)
|
23
23
|
raise "undefined local variable or method `#{id}'"
|
24
24
|
end
|
25
25
|
end
|
File without changes
|
@@ -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
|
data/lib/ansible/ruby/version.rb
CHANGED
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.
|
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/
|
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
|