choria-mcorpc-support 2.20.5 → 2.21.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/lib/mcollective.rb +1 -1
- data/lib/mcollective/application/facts.rb +8 -0
- data/lib/mcollective/application/plugin.rb +19 -7
- data/lib/mcollective/applications.rb +2 -1
- data/lib/mcollective/ddl/agentddl.rb +17 -11
- data/lib/mcollective/ddl/base.rb +34 -20
- data/lib/mcollective/ddl/dataddl.rb +5 -5
- data/lib/mcollective/ddl/discoveryddl.rb +2 -2
- data/lib/mcollective/ddl/validatorddl.rb +1 -1
- data/lib/mcollective/pluginpackager/agent_definition.rb +33 -19
- data/lib/mcollective/pluginpackager/{puppet_module_packager.rb → forge_packager.rb} +57 -50
- data/lib/mcollective/pluginpackager/standard_definition.rb +23 -12
- data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/README.md.erb +1 -1
- data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/data/defaults.yaml.erb +0 -0
- data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/data/plugin.yaml.erb +0 -0
- data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/hiera.yaml.erb +0 -0
- data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/manifests/init.pp.erb +2 -0
- data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/metadata.json.erb +2 -2
- data/lib/mcollective/validator.rb +2 -2
- data/lib/mcollective/validator/array_validator.rb +1 -1
- data/lib/mcollective/validator/ipv4address_validator.rb +5 -7
- data/lib/mcollective/validator/ipv6address_validator.rb +5 -7
- data/lib/mcollective/validator/shellsafe_validator.rb +1 -1
- data/lib/mcollective/validator/typecheck_validator.rb +19 -15
- metadata +11 -25
- data/lib/mcollective/pluginpackager/debpackage_packager.rb +0 -237
- data/lib/mcollective/pluginpackager/modulepackage_packager.rb +0 -127
- data/lib/mcollective/pluginpackager/ospackage_packager.rb +0 -59
- data/lib/mcollective/pluginpackager/rpmpackage_packager.rb +0 -180
- data/lib/mcollective/pluginpackager/templates/debian/Makefile.erb +0 -7
- data/lib/mcollective/pluginpackager/templates/debian/changelog.erb +0 -5
- data/lib/mcollective/pluginpackager/templates/debian/compat.erb +0 -1
- data/lib/mcollective/pluginpackager/templates/debian/control.erb +0 -15
- data/lib/mcollective/pluginpackager/templates/debian/copyright.erb +0 -8
- data/lib/mcollective/pluginpackager/templates/debian/rules.erb +0 -6
- data/lib/mcollective/pluginpackager/templates/module/Modulefile.erb +0 -5
- data/lib/mcollective/pluginpackager/templates/module/README.md.erb +0 -37
- data/lib/mcollective/pluginpackager/templates/module/_manifest.pp.erb +0 -9
- data/lib/mcollective/pluginpackager/templates/redhat/rpm_spec.erb +0 -63
@@ -2,12 +2,12 @@ require "yaml"
|
|
2
2
|
|
3
3
|
module MCollective
|
4
4
|
module PluginPackager
|
5
|
-
class
|
6
|
-
def initialize(plugin, pluginpath
|
5
|
+
class ForgePackager
|
6
|
+
def initialize(plugin, pluginpath=nil, signature=nil, verbose=false, keep_artifacts=nil, module_template=nil)
|
7
7
|
@plugin = plugin
|
8
8
|
@verbose = verbose
|
9
9
|
@keep_artifacts = keep_artifacts
|
10
|
-
@module_template = module_template || File.join(File.dirname(__FILE__),
|
10
|
+
@module_template = module_template || File.join(File.dirname(__FILE__), "templates", "forge")
|
11
11
|
end
|
12
12
|
|
13
13
|
def which(cmd)
|
@@ -18,11 +18,11 @@ module MCollective
|
|
18
18
|
return exe if File.executable?(exe) && !File.directory?(exe)
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
nil
|
22
22
|
end
|
23
23
|
|
24
24
|
def create_packages
|
25
|
-
|
25
|
+
assert_new_enough_pdk
|
26
26
|
validate_environment
|
27
27
|
|
28
28
|
begin
|
@@ -44,7 +44,7 @@ module MCollective
|
|
44
44
|
ensure
|
45
45
|
if @keep_artifacts
|
46
46
|
puts("Keeping build artifacts")
|
47
|
-
puts("Build artifacts saved in %s" %
|
47
|
+
puts("Build artifacts saved in %s" % @tmpdir)
|
48
48
|
else
|
49
49
|
cleanup_tmpdirs
|
50
50
|
end
|
@@ -81,7 +81,15 @@ module MCollective
|
|
81
81
|
def filelist(type)
|
82
82
|
@plugin.packagedata[type][:files].map do |file|
|
83
83
|
file.gsub(/^\.\//, "") unless File.directory?(file)
|
84
|
-
end.compact
|
84
|
+
end.compact.uniq
|
85
|
+
rescue
|
86
|
+
[]
|
87
|
+
end
|
88
|
+
|
89
|
+
def executablelist(type)
|
90
|
+
@plugin.packagedata[type][:executable_files].map do |file|
|
91
|
+
file.gsub(/^\.\//, "") unless File.directory?(file)
|
92
|
+
end.compact.uniq
|
85
93
|
rescue
|
86
94
|
[]
|
87
95
|
end
|
@@ -100,11 +108,12 @@ module MCollective
|
|
100
108
|
{
|
101
109
|
hierakey(:config_name) => @plugin.metadata[:name].downcase,
|
102
110
|
hierakey(:common_files) => filelist(:common),
|
111
|
+
hierakey(:executable_files) => executablelist(:agent),
|
103
112
|
hierakey(:common_directories) => dirlist(:common),
|
104
113
|
hierakey(:server_files) => filelist(:agent),
|
105
114
|
hierakey(:server_directories) => dirlist(:agent),
|
106
115
|
hierakey(:client_files) => filelist(:client),
|
107
|
-
hierakey(:client_directories) => dirlist(:client)
|
116
|
+
hierakey(:client_directories) => dirlist(:client)
|
108
117
|
}.merge(module_override_data)
|
109
118
|
end
|
110
119
|
|
@@ -123,7 +132,7 @@ module MCollective
|
|
123
132
|
end
|
124
133
|
|
125
134
|
def copy_module_files
|
126
|
-
@plugin.packagedata.
|
135
|
+
@plugin.packagedata.each_value do |data|
|
127
136
|
data[:files].each do |file|
|
128
137
|
clean_dest_file = file.gsub("./lib/mcollective", "")
|
129
138
|
dest_dir = File.expand_path(File.join(@tmpdir, "files", "mcollective", File.dirname(clean_dest_file)))
|
@@ -142,13 +151,18 @@ module MCollective
|
|
142
151
|
agent_name = File.basename(file, ".ddl")
|
143
152
|
json_file = File.join(agent_dir, "%s.json" % agent_name)
|
144
153
|
|
154
|
+
if File.exist?(json_file)
|
155
|
+
Log.warn("JSON DDL %s already exist, not regenerating from the %s" % [json_file, agent_name])
|
156
|
+
next
|
157
|
+
end
|
158
|
+
|
145
159
|
ddl = DDL.new(agent_name, :agent, false)
|
146
160
|
ddl.instance_eval(File.read(file))
|
147
161
|
|
148
162
|
data = {
|
149
163
|
"$schema" => "https://choria.io/schemas/mcorpc/ddl/v1/agent.json",
|
150
164
|
"metadata" => ddl.meta,
|
151
|
-
"actions" => []
|
165
|
+
"actions" => []
|
152
166
|
}
|
153
167
|
|
154
168
|
ddl.actions.sort.each do |action|
|
@@ -165,7 +179,7 @@ module MCollective
|
|
165
179
|
end
|
166
180
|
|
167
181
|
def render_templates
|
168
|
-
templates = Dir.chdir(@module_template) do |
|
182
|
+
templates = Dir.chdir(@module_template) do |_path|
|
169
183
|
Dir.glob("**/*.erb")
|
170
184
|
end
|
171
185
|
|
@@ -177,69 +191,62 @@ module MCollective
|
|
177
191
|
end
|
178
192
|
|
179
193
|
def render_template(infile, outfile)
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
f.puts erb.result(binding)
|
184
|
-
end
|
185
|
-
rescue
|
186
|
-
STDERR.puts("Could not render template %s to %s" % [infile, outfile])
|
187
|
-
raise
|
194
|
+
erb = ERB.new(File.read(infile), nil, "-")
|
195
|
+
File.open(outfile, "w") do |f|
|
196
|
+
f.puts erb.result(binding)
|
188
197
|
end
|
198
|
+
rescue
|
199
|
+
STDERR.puts("Could not render template %s to %s" % [infile, outfile])
|
200
|
+
raise
|
189
201
|
end
|
190
202
|
|
191
203
|
def validate_environment
|
192
204
|
raise("Supplying a vendor is required, please use --vendor") if @plugin.vendor == "Puppet Labs"
|
193
|
-
raise("Vendor names may not have a space in them, please specify a valid vendor using --vendor") if @plugin.vendor.
|
205
|
+
raise("Vendor names may not have a space in them, please specify a valid vendor using --vendor") if @plugin.vendor.include?(" ")
|
194
206
|
end
|
195
207
|
|
196
|
-
def
|
197
|
-
|
198
|
-
|
199
|
-
if !puppet_bin
|
200
|
-
raise("Cannot build package. 'puppet' not found on path, and '/opt/puppetlabs/bin/puppet' is not present on the system.")
|
201
|
-
end
|
208
|
+
def pdk_path
|
209
|
+
pdk_bin = which("pdk")
|
210
|
+
pdk_bin ||= "/opt/puppetlabs/pdk/bin/pdk"
|
202
211
|
|
203
|
-
|
212
|
+
pdk_bin
|
213
|
+
end
|
214
|
+
|
215
|
+
def assert_new_enough_pdk
|
216
|
+
s = Shell.new("#{pdk_path} --version")
|
204
217
|
s.runcommand
|
205
218
|
actual_version = s.stdout.chomp
|
206
|
-
required_version =
|
219
|
+
required_version = "1.12.0"
|
207
220
|
|
208
221
|
if Util.versioncmp(actual_version, required_version) < 0
|
209
|
-
raise("Cannot build package.
|
222
|
+
raise("Cannot build package. pdk #{required_version} or greater required. We have #{actual_version}.")
|
210
223
|
end
|
211
224
|
end
|
212
225
|
|
213
226
|
def run_build
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
PluginPackager.safe_system('puppet module build')
|
218
|
-
end
|
227
|
+
PluginPackager.execute_verbosely(@verbose) do
|
228
|
+
Dir.chdir(@tmpdir) do
|
229
|
+
PluginPackager.safe_system("#{pdk_path} build --force")
|
219
230
|
end
|
220
|
-
rescue
|
221
|
-
STDERR.puts("Build process has failed")
|
222
|
-
raise
|
223
231
|
end
|
232
|
+
rescue
|
233
|
+
STDERR.puts("Build process has failed")
|
234
|
+
raise
|
224
235
|
end
|
225
236
|
|
226
237
|
def move_package
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
raise
|
233
|
-
end
|
238
|
+
package_file = File.join(@tmpdir, "pkg", module_file_name)
|
239
|
+
FileUtils.cp(package_file, ".")
|
240
|
+
rescue
|
241
|
+
STDERR.puts("Could not copy package to working directory")
|
242
|
+
raise
|
234
243
|
end
|
235
244
|
|
236
245
|
def cleanup_tmpdirs
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
raise
|
242
|
-
end
|
246
|
+
FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir)
|
247
|
+
rescue
|
248
|
+
STDERR.puts("Could not remove temporary build directory %s" % [@tmpdir])
|
249
|
+
raise
|
243
250
|
end
|
244
251
|
end
|
245
252
|
end
|
@@ -11,7 +11,7 @@ module MCollective
|
|
11
11
|
@revision = configuration[:revision] || 1
|
12
12
|
@preinstall = configuration[:preinstall]
|
13
13
|
@postinstall = configuration[:postinstall]
|
14
|
-
@vendor = configuration[:vendor] || "
|
14
|
+
@vendor = configuration[:vendor] || "Choria.IO User"
|
15
15
|
@dependencies = configuration[:dependency] || []
|
16
16
|
@target_path = File.expand_path(@path)
|
17
17
|
@metadata, mcversion = PluginPackager.get_metadata(@path, @plugintype)
|
@@ -20,6 +20,7 @@ module MCollective
|
|
20
20
|
@dependencies << {:name => "#{mcname}-common", :version => @mcversion}
|
21
21
|
@metadata[:name] = (configuration[:pluginname] || @metadata[:name]).downcase.gsub(/\s+|_/, "-")
|
22
22
|
@metadata[:version] = (configuration[:version] || @metadata[:version])
|
23
|
+
|
23
24
|
identify_packages
|
24
25
|
end
|
25
26
|
|
@@ -33,9 +34,11 @@ module MCollective
|
|
33
34
|
|
34
35
|
# Obtain standard plugin files and dependencies
|
35
36
|
def plugin
|
36
|
-
plugindata = {
|
37
|
-
|
38
|
-
|
37
|
+
plugindata = {
|
38
|
+
:files => [],
|
39
|
+
:dependencies => @dependencies.clone,
|
40
|
+
:description => "#{@name} #{@plugintype} plugin for the Choria Orchestrator."
|
41
|
+
}
|
39
42
|
|
40
43
|
plugindir = File.join(@path, @plugintype.to_s)
|
41
44
|
if PluginPackager.check_dir_present plugindir
|
@@ -44,25 +47,33 @@ module MCollective
|
|
44
47
|
return nil
|
45
48
|
end
|
46
49
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
+
if @packagedata[:common]
|
51
|
+
plugindata[:plugindependency] = {
|
52
|
+
:name => "#{@mcname}-#{@metadata[:name]}-common",
|
53
|
+
:version => @metadata[:version],
|
54
|
+
:revision => @revision
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
50
58
|
plugindata
|
51
59
|
end
|
52
60
|
|
53
61
|
# Obtain list of common files
|
54
62
|
def common
|
55
|
-
common = {
|
56
|
-
|
57
|
-
|
63
|
+
common = {
|
64
|
+
:files => [],
|
65
|
+
:dependencies => @dependencies.clone,
|
66
|
+
:description => "Common libraries for #{@name} connector plugin"
|
67
|
+
}
|
58
68
|
|
59
69
|
commondir = File.join(@path, "util")
|
60
70
|
if PluginPackager.check_dir_present commondir
|
61
71
|
common[:files] = Dir.glob(File.join(commondir, "*"))
|
72
|
+
|
62
73
|
return common
|
63
|
-
else
|
64
|
-
return nil
|
65
74
|
end
|
75
|
+
|
76
|
+
nil
|
66
77
|
end
|
67
78
|
end
|
68
79
|
end
|
@@ -67,6 +67,6 @@ For a full list of possible configuration settings see the module [source reposi
|
|
67
67
|
|
68
68
|
## Development:
|
69
69
|
|
70
|
-
To contribute to this
|
70
|
+
To contribute to this [Choria.IO](https://choria.io) plugin please visit <%= @plugin.metadata[:url] %>.
|
71
71
|
|
72
72
|
This module was generated using the Choria Plugin Packager based on templates found at the [GitHub Project](https://github.com/choria-io/).
|
data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/data/defaults.yaml.erb
RENAMED
File without changes
|
File without changes
|
File without changes
|
@@ -6,6 +6,7 @@ class <%= module_name %> (
|
|
6
6
|
Array[String] $server_directories = [],
|
7
7
|
Array[String] $common_files = [],
|
8
8
|
Array[String] $common_directories = [],
|
9
|
+
Array[String] $executable_files = [],
|
9
10
|
Boolean $manage_gem_dependencies = true,
|
10
11
|
Hash $gem_dependencies = {},
|
11
12
|
Boolean $manage_package_dependencies = true,
|
@@ -26,6 +27,7 @@ class <%= module_name %> (
|
|
26
27
|
client_files => $client_files,
|
27
28
|
server_files => $server_files,
|
28
29
|
common_files => $common_files,
|
30
|
+
executable_files => $executable_files,
|
29
31
|
client_directories => $client_directories,
|
30
32
|
server_directories => $server_directories,
|
31
33
|
common_directories => $common_directories,
|
@@ -7,12 +7,12 @@
|
|
7
7
|
"source": "<%= @plugin.metadata[:url] %>",
|
8
8
|
"project_page": "<%= @plugin.metadata[:url] %>",
|
9
9
|
"dependencies": [
|
10
|
-
{"name": "choria/mcollective", "version_requirement": ">= 0.
|
10
|
+
{"name": "choria/mcollective", "version_requirement": ">= 0.9.3 < 2.0.0"}
|
11
11
|
],
|
12
12
|
"requirements": [
|
13
13
|
{
|
14
14
|
"name": "puppet",
|
15
|
-
"version_requirement": ">=
|
15
|
+
"version_requirement": ">= 6.0.0"
|
16
16
|
}
|
17
17
|
]
|
18
18
|
}
|
@@ -57,7 +57,7 @@ module MCollective
|
|
57
57
|
Validator.load_validators
|
58
58
|
|
59
59
|
begin
|
60
|
-
if [:integer, :boolean, :float, :number, :string].include?(validation)
|
60
|
+
if [:integer, :boolean, :float, :number, :string, :array, :hash].include?(validation)
|
61
61
|
Validator.typecheck(validator, validation)
|
62
62
|
|
63
63
|
else
|
@@ -76,7 +76,7 @@ module MCollective
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
rescue => e
|
79
|
-
raise ValidatorError, e.to_s
|
79
|
+
raise ValidatorError, e.to_s, e.backtrace
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
@@ -2,7 +2,7 @@ module MCollective
|
|
2
2
|
module Validator
|
3
3
|
class ArrayValidator
|
4
4
|
def self.validate(validator, array)
|
5
|
-
raise ValidatorError, "value should be one of %s" % [
|
5
|
+
raise ValidatorError, "value should be one of %s" % [array.join(", ")] unless array.include?(validator)
|
6
6
|
end
|
7
7
|
end
|
8
8
|
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
module MCollective
|
2
2
|
module Validator
|
3
3
|
class Ipv4addressValidator
|
4
|
-
require
|
4
|
+
require "ipaddr"
|
5
5
|
|
6
6
|
def self.validate(validator)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
raise ValidatorError, "value should be an ipv4 address"
|
12
|
-
end
|
7
|
+
ip = IPAddr.new(validator)
|
8
|
+
raise ValidatorError, "value should be an ipv4 adddress" unless ip.ipv4?
|
9
|
+
rescue
|
10
|
+
raise ValidatorError, "value should be an ipv4 address"
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
module MCollective
|
2
2
|
module Validator
|
3
3
|
class Ipv6addressValidator
|
4
|
-
require
|
4
|
+
require "ipaddr"
|
5
5
|
|
6
6
|
def self.validate(validator)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
raise ValidatorError, "value should be an ipv6 address"
|
12
|
-
end
|
7
|
+
ip = IPAddr.new(validator)
|
8
|
+
raise ValidatorError, "value should be an ipv6 adddress" unless ip.ipv6?
|
9
|
+
rescue
|
10
|
+
raise ValidatorError, "value should be an ipv6 address"
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -4,7 +4,7 @@ module MCollective
|
|
4
4
|
def self.validate(validator)
|
5
5
|
raise ValidatorError, "value should be a String" unless validator.is_a?(String)
|
6
6
|
|
7
|
-
[
|
7
|
+
["`", "$", ";", "|", "&&", ">", "<"].each do |chr|
|
8
8
|
raise ValidatorError, "value should not have #{chr} in it" if validator.match(Regexp.escape(chr))
|
9
9
|
end
|
10
10
|
end
|
@@ -2,25 +2,29 @@ module MCollective
|
|
2
2
|
module Validator
|
3
3
|
class TypecheckValidator
|
4
4
|
def self.validate(validator, validation_type)
|
5
|
-
raise ValidatorError, "value should be a #{validation_type
|
5
|
+
raise ValidatorError, "value should be a #{validation_type}" unless check_type(validator, validation_type)
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.check_type(validator, validation_type)
|
9
9
|
case validation_type
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
10
|
+
when Class
|
11
|
+
validator.is_a?(validation_type)
|
12
|
+
when :integer
|
13
|
+
validator.is_a?(Integer)
|
14
|
+
when :float
|
15
|
+
validator.is_a?(Float)
|
16
|
+
when :number
|
17
|
+
validator.is_a?(Numeric)
|
18
|
+
when :string
|
19
|
+
validator.is_a?(String)
|
20
|
+
when :boolean
|
21
|
+
[TrueClass, FalseClass].include?(validator.class)
|
22
|
+
when :array
|
23
|
+
validator.is_a?(Array)
|
24
|
+
when :hash
|
25
|
+
validator.is_a?(Hash)
|
26
|
+
else
|
27
|
+
false
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|