ansible_make_role 0.7.0 → 0.7.1
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/README.md +15 -1
- data/exe/ansible-make-role +3 -8
- data/lib/ansible_make_role.rb +26 -27
- data/lib/ansible_make_role/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29ff2c2883c8a8b4d51a218cd24759b9c30800cf3026da0baf6810ff7b277e46
|
4
|
+
data.tar.gz: af5a5ff7ba52f8738d90ae5933c98e31d315596eced5ad283611444867bc2708
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef8c02faa05b9151e13d431a9d85ab96460a19cb2b898bc46f022a860cf57a7d82e83b7dc7974118cbb9364d7d5ecad09ffb2a142abdc6c998373435f72e0bac
|
7
|
+
data.tar.gz: 167cf5397c44fb3d961fb6a63ea0242956dcd7542d92af86f1d6c97449a8a0454c4fe62fc3a087a88bec529f2fedf02d2eec8bc6cd950d028aafcf7b9911fc2d
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ Pre-compiler that turns `make.yml` files into Ansible roles
|
|
5
5
|
## Usage
|
6
6
|
|
7
7
|
```shell
|
8
|
-
ansible-make-role -f|--force -
|
8
|
+
ansible-make-role -f|--force -v|--verbose --version DIR...
|
9
9
|
```
|
10
10
|
|
11
11
|
`ansible-make-role` expects a `make.yml` file in each of the given directories
|
@@ -51,9 +51,23 @@ handlers: # Goes to handlers/main.yml"
|
|
51
51
|
...
|
52
52
|
```
|
53
53
|
|
54
|
+
## Options
|
55
|
+
|
56
|
+
|
57
|
+
`-f, --force`
|
58
|
+
Re-generate all files even if not needed
|
59
|
+
|
60
|
+
`-v, --verbose`
|
61
|
+
Report progress
|
62
|
+
|
63
|
+
`--version`
|
64
|
+
Print version
|
65
|
+
|
66
|
+
|
54
67
|
## Installation
|
55
68
|
|
56
69
|
Install it for the current ruby using:
|
57
70
|
|
58
71
|
$ gem install ansible_make_role
|
59
72
|
|
73
|
+
Please note that the gem name uses underscores but the command uses dashes ('ansible-make-role')
|
data/exe/ansible-make-role
CHANGED
@@ -3,26 +3,21 @@
|
|
3
3
|
require 'ansible_make_role.rb'
|
4
4
|
require "shellopts"
|
5
5
|
|
6
|
-
USAGE = "f,force
|
6
|
+
USAGE = "f,force v,verbose version -- DIRECTORY..."
|
7
7
|
|
8
8
|
force = false
|
9
|
-
target_dir = nil
|
10
9
|
verbose = false
|
11
10
|
|
12
11
|
args = ShellOpts.process(USAGE, ARGV) { |opt, arg|
|
13
12
|
case opt
|
14
13
|
when '-f', '--force'; force = true
|
15
|
-
when '-t', '--target-dir'; target_dir = arg
|
16
14
|
when '-v', '--verbose'; verbose = true
|
15
|
+
when '--version'; puts "ansible-make-role #{AnsibleMakeRole::VERSION}"; exit
|
17
16
|
end
|
18
17
|
}
|
19
18
|
args.size > 0 or args << "."
|
20
19
|
|
21
|
-
include AnsibleMakeRole
|
22
20
|
for source in args
|
23
21
|
File.directory?(source) or ShellOpts.error "Not a directory: #{source.inspect}"
|
24
|
-
|
25
|
-
puts "Source: #{source}"
|
26
|
-
puts "Target: #{target}"
|
27
|
-
make_role(source, target, verbose: verbose, force: force)
|
22
|
+
AnsibleMakeRole.make(source, verbose: verbose, force: force)
|
28
23
|
end
|
data/lib/ansible_make_role.rb
CHANGED
@@ -1,22 +1,37 @@
|
|
1
1
|
require "ansible_make_role/version"
|
2
2
|
|
3
|
+
require "shellopts"
|
4
|
+
|
3
5
|
require "fileutils"
|
4
6
|
|
5
7
|
module AnsibleMakeRole
|
6
|
-
|
7
|
-
|
8
|
+
def self.make(source_dir, verbose: false, force: false)
|
9
|
+
source = "#{source_dir}/make.yml"
|
10
|
+
target_dir = source_dir
|
11
|
+
# TODO: Doesn't belong at this level - catch exceptions in exe instead
|
12
|
+
File.file?(source) or ShellOpts::error "Can't read file #{source.inspect}"
|
13
|
+
File.directory?(target_dir) or ShellOpts::error "Can't find directory #{target_dir}"
|
8
14
|
|
15
|
+
meta_yml = "#{target_dir}/meta/main.yml"
|
16
|
+
if force || !File.exist?(meta_yml) || File.mtime(source) > File.mtime(meta_yml)
|
17
|
+
compile_role(source, target_dir, verbose: verbose)
|
18
|
+
else
|
19
|
+
puts "#{target_dir} is up to date" if verbose
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
9
24
|
# source is a file, target is a directory. Target can be nil and defaults to
|
10
25
|
# dirname of source
|
11
|
-
def compile_role(source, target
|
26
|
+
def self.compile_role(source, target, verbose: false)
|
27
|
+
meta = []
|
12
28
|
sections = {
|
13
|
-
"meta" => [],
|
14
29
|
"defaults" => [],
|
15
30
|
"vars" => [],
|
16
31
|
"tasks" => [],
|
17
32
|
"handlers" => []
|
18
33
|
}
|
19
|
-
|
34
|
+
current_section = meta
|
20
35
|
|
21
36
|
puts "Parsing #{source}" if verbose
|
22
37
|
File.readlines(source).each { |line|
|
@@ -25,17 +40,17 @@ module AnsibleMakeRole
|
|
25
40
|
if line =~ /^(\w+)\s*:/
|
26
41
|
section = $1
|
27
42
|
if sections.key?(section) # Built-in section?
|
28
|
-
|
43
|
+
current_section = sections[section]
|
29
44
|
else # Everything else goes to the meta file incl. section header
|
30
|
-
|
31
|
-
|
45
|
+
current_section = meta
|
46
|
+
current_section << line
|
32
47
|
end
|
33
48
|
else
|
34
|
-
|
49
|
+
current_section << line
|
35
50
|
end
|
36
51
|
}
|
37
52
|
|
38
|
-
sections.each { |section, lines|
|
53
|
+
(sections.to_a + [["meta", meta]]).each { |section, lines|
|
39
54
|
next if lines.empty? && section != "meta"
|
40
55
|
dir = "#{target}/#{section}"
|
41
56
|
file = "#{dir}/main.yml"
|
@@ -49,29 +64,13 @@ module AnsibleMakeRole
|
|
49
64
|
}
|
50
65
|
end
|
51
66
|
|
52
|
-
def make_role(source_dir, target_dir = source_dir, verbose: false, force: false)
|
53
|
-
source = "#{source_dir}/make.yml"
|
54
|
-
target = "#{target_dir}/#{File.basename(source_dir)}"
|
55
|
-
File.file?(source) or ShellOpts::error "Can't read file #{source.inspect}"
|
56
|
-
File.directory?(target_dir) or ShellOpts::error "Can't find directory #{target_dir}"
|
57
|
-
|
58
|
-
meta_yml = "#{target}/meta/main.yml"
|
59
|
-
if force || !File.exist?(meta_yml) || File.mtime(source) > File.mtime(meta_yml)
|
60
|
-
compile_role(source, target, verbose: verbose)
|
61
|
-
else
|
62
|
-
puts "#{target} is up to date" if verbose
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
67
|
# Unindent lines by the indentation of the first non-comment and non-blank
|
68
68
|
# line
|
69
|
-
def unindent(lines)
|
69
|
+
def self.unindent(lines)
|
70
70
|
line = lines.find { |l| l !~ /^\s*#/ && l !~ /^\s*$/ }
|
71
71
|
return lines if line.nil?
|
72
72
|
line =~ /^(\s*)/
|
73
73
|
prefix = $1.dup
|
74
74
|
lines.map { |l| l.sub(/^#{prefix}/, "") }
|
75
75
|
end
|
76
|
-
|
77
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ansible_make_role
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Claus Rasmussen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-02-
|
11
|
+
date: 2020-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|