choria-mcorpc-support 2.20.5 → 2.20.6

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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mcollective.rb +1 -1
  3. data/lib/mcollective/application/plugin.rb +19 -7
  4. data/lib/mcollective/ddl/agentddl.rb +4 -0
  5. data/lib/mcollective/ddl/base.rb +14 -1
  6. data/lib/mcollective/pluginpackager/agent_definition.rb +11 -7
  7. data/lib/mcollective/pluginpackager/{puppet_module_packager.rb → forge_packager.rb} +3 -3
  8. data/lib/mcollective/pluginpackager/standard_definition.rb +23 -12
  9. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/README.md.erb +1 -1
  10. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/data/defaults.yaml.erb +0 -0
  11. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/data/plugin.yaml.erb +0 -0
  12. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/hiera.yaml.erb +0 -0
  13. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/manifests/init.pp.erb +0 -0
  14. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/metadata.json.erb +2 -2
  15. metadata +9 -23
  16. data/lib/mcollective/pluginpackager/debpackage_packager.rb +0 -237
  17. data/lib/mcollective/pluginpackager/modulepackage_packager.rb +0 -127
  18. data/lib/mcollective/pluginpackager/ospackage_packager.rb +0 -59
  19. data/lib/mcollective/pluginpackager/rpmpackage_packager.rb +0 -180
  20. data/lib/mcollective/pluginpackager/templates/debian/Makefile.erb +0 -7
  21. data/lib/mcollective/pluginpackager/templates/debian/changelog.erb +0 -5
  22. data/lib/mcollective/pluginpackager/templates/debian/compat.erb +0 -1
  23. data/lib/mcollective/pluginpackager/templates/debian/control.erb +0 -15
  24. data/lib/mcollective/pluginpackager/templates/debian/copyright.erb +0 -8
  25. data/lib/mcollective/pluginpackager/templates/debian/rules.erb +0 -6
  26. data/lib/mcollective/pluginpackager/templates/module/Modulefile.erb +0 -5
  27. data/lib/mcollective/pluginpackager/templates/module/README.md.erb +0 -37
  28. data/lib/mcollective/pluginpackager/templates/module/_manifest.pp.erb +0 -9
  29. data/lib/mcollective/pluginpackager/templates/redhat/rpm_spec.erb +0 -63
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2b40e519fe1594ef21f3842e4786bdfbe9359f1
4
- data.tar.gz: ae87678ad14ba3d22805143c59c5558f271286c4
3
+ metadata.gz: 29d095eecde9726e77979a330ff4ed2a27ac7912
4
+ data.tar.gz: a6aa7aa304f84aa576e711e40184d492c245295e
5
5
  SHA512:
6
- metadata.gz: 92c39adc948b47af880815b13597c4205a4e0dcb3058c82d5e2c8e762cc11a15b7ae15028093bf3a04e9f01458bde03e3a91b678b783fbb49875ea93bbc85786
7
- data.tar.gz: e49b19a7e16acec11b619e1492ef6e7f3cadb819bf93ac0759889fa1032e53529e7432404b8a10cbde6e8152204e069372d493bf0c6ff908ce87684bfd3add8b
6
+ metadata.gz: da30c83fef47986f8acb747d284ace2ecc736cfd9f7045b938c51684c801837080b346dbcdde7ca27a692e00181bb4b616af1d172457312217d26bd0d113bc92
7
+ data.tar.gz: ad9ca3e3fc6e99bad8eafd7a97764519d0e490644d9b80c39933b020d26c1f307ba4891e34d63bf8d79ac207533981dfa6a2a1bc201a99bb9ce9c4798747758c
@@ -54,7 +54,7 @@ module MCollective
54
54
  require "mcollective/util"
55
55
  require "mcollective/validator"
56
56
 
57
- VERSION = "2.20.5".freeze
57
+ VERSION = "2.20.6".freeze
58
58
 
59
59
  def self.version
60
60
  VERSION
@@ -213,7 +213,7 @@ mco plugin package [options] <directory>
213
213
  def load_plugin_ddl(plugin, type)
214
214
  [plugin, "#{plugin}_#{type}"].each do |p|
215
215
  ddl = DDL.new(p, type, false)
216
- if ddl.findddlfile(p, type)
216
+ if ddl.client_activated? && ddl.findddlfile(p, type)
217
217
  ddl.loadddlfile
218
218
  return ddl
219
219
  end
@@ -224,9 +224,14 @@ mco plugin package [options] <directory>
224
224
 
225
225
  # Show application list and plugin help
226
226
  def doc_command
227
- known_plugin_types = [["Agents", :agent], ["Aggregate", :aggregate],
228
- ["Connectors", :connector], ["Data Queries", :data],
229
- ["Discovery Methods", :discovery], ["Validator Plugins", :validator]]
227
+ known_plugin_types = [
228
+ ["Agents", :agent],
229
+ ["Aggregate", :aggregate],
230
+ ["Connectors", :connector],
231
+ ["Data Queries", :data],
232
+ ["Discovery Methods", :discovery],
233
+ ["Validator Plugins", :validator]
234
+ ]
230
235
 
231
236
  if configuration.include?(:target) && configuration[:target] != "."
232
237
  if configuration[:target] =~ /^(.+?)\/(.+)$/
@@ -265,7 +270,11 @@ mco plugin package [options] <directory>
265
270
 
266
271
  PluginManager.find(plugin_type[1], "ddl").each do |ddl|
267
272
  begin
268
- help = DDL.new(ddl, plugin_type[1])
273
+ help = DDL.new(ddl, plugin_type[1], false)
274
+
275
+ next unless help.client_activated?
276
+
277
+ help.loadddlfile
269
278
  pluginname = ddl.gsub(/_#{plugin_type[1]}$/, "")
270
279
  puts " %-25s %s" % [pluginname, help.meta[:description]]
271
280
  rescue => e
@@ -289,7 +298,7 @@ mco plugin package [options] <directory>
289
298
  # Creates the correct package plugin object.
290
299
  def prepare_plugin
291
300
  plugintype = set_plugin_type unless configuration[:plugintype]
292
- configuration[:format] = "puppet_module" unless configuration[:format]
301
+ configuration[:format] = "forge" unless configuration[:format]
293
302
  PluginPackager.load_packagers
294
303
  plugin_class = PluginPackager[configuration[:plugintype]]
295
304
 
@@ -299,7 +308,10 @@ mco plugin package [options] <directory>
299
308
  configuration[:dependency].map!{|dep| {:name => dep, :version => nil}}
300
309
  end
301
310
 
302
- mcdependency = {:mcname => configuration[:mcname], :mcversion => configuration[:mcversion]}
311
+ mcdependency = {
312
+ :mcname => configuration[:mcname],
313
+ :mcversion => configuration[:mcversion]
314
+ }
303
315
 
304
316
  # Deprecation warning for --iteration
305
317
  if configuration[:iteration]
@@ -44,6 +44,10 @@ module MCollective
44
44
  super
45
45
  end
46
46
 
47
+ def client_activated?
48
+ Util.str_to_bool(@config.pluginconf.fetch("%s.activate_client" % @pluginname, ACTIVATION_DEFAULT.to_s))
49
+ end
50
+
47
51
  def input(argument, properties)
48
52
  raise "Input needs a :optional property" unless properties.include?(:optional)
49
53
 
@@ -19,6 +19,8 @@ module MCollective
19
19
  class Base
20
20
  attr_reader :meta, :entities, :pluginname, :plugintype, :usage, :requirements
21
21
 
22
+ ACTIVATION_DEFAULT = true
23
+
22
24
  def initialize(plugin, plugintype=:agent, loadddl=true)
23
25
  @entities = {}
24
26
  @meta = {}
@@ -77,6 +79,10 @@ module MCollective
77
79
  end
78
80
 
79
81
  def loadddlfile
82
+ if @config.mode == :client && !client_activated?
83
+ raise("%s/%s is disabled, cannot load DDL file" % [@plugintype, @pluginname])
84
+ end
85
+
80
86
  if ddlfile = findddlfile
81
87
  instance_eval(File.read(ddlfile), ddlfile, 1)
82
88
  else
@@ -95,7 +101,12 @@ module MCollective
95
101
  return ddlfile
96
102
  end
97
103
  end
98
- return false
104
+
105
+ false
106
+ end
107
+
108
+ def client_activated?
109
+ ACTIVATION_DEFAULT
99
110
  end
100
111
 
101
112
  def validate_requirements
@@ -186,6 +197,8 @@ module MCollective
186
197
  @entities[action][:output][argument] = {:description => properties[:description],
187
198
  :display_as => properties[:display_as],
188
199
  :default => properties[:default]}
200
+
201
+ @entities[action][:output][argument][:type] = properties[:type] if properties[:type]
189
202
  end
190
203
 
191
204
  def requires(requirement)
@@ -12,7 +12,7 @@ module MCollective
12
12
  @revision = configuration[:revision] || 1
13
13
  @preinstall = configuration[:preinstall]
14
14
  @postinstall = configuration[:postinstall]
15
- @vendor = configuration[:vendor] || "Puppet Labs"
15
+ @vendor = configuration[:vendor] || "Choria.IO User"
16
16
  @dependencies = configuration[:dependency] || []
17
17
  @target_path = File.expand_path(@path)
18
18
  @metadata, mcversion = PluginPackager.get_metadata(@path, "agent")
@@ -36,9 +36,11 @@ module MCollective
36
36
 
37
37
  # Obtain Agent package files and dependencies.
38
38
  def agent
39
- agent = {:files => [],
40
- :dependencies => @dependencies.clone,
41
- :description => "Agent plugin for #{@metadata[:name]}"}
39
+ agent = {
40
+ :files => [],
41
+ :dependencies => @dependencies.clone,
42
+ :description => "Agent plugin for #{@metadata[:name]}"
43
+ }
42
44
 
43
45
  agentdir = File.join(@path, "agent")
44
46
 
@@ -69,9 +71,11 @@ module MCollective
69
71
 
70
72
  # Obtain common package files and dependencies.
71
73
  def common
72
- common = {:files =>[],
73
- :dependencies => @dependencies.clone,
74
- :description => "Common libraries for #{@metadata[:name]}"}
74
+ common = {
75
+ :files =>[],
76
+ :dependencies => @dependencies.clone,
77
+ :description => "Common libraries for #{@metadata[:name]}"
78
+ }
75
79
 
76
80
  datadir = File.join(@path, "data", "**")
77
81
  utildir = File.join(@path, "util", "**", "**")
@@ -2,12 +2,12 @@ require "yaml"
2
2
 
3
3
  module MCollective
4
4
  module PluginPackager
5
- class PuppetmodulePackager
5
+ class ForgePackager
6
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__), 'templates', 'puppet_module')
10
+ @module_template = module_template || File.join(File.dirname(__FILE__), 'templates', 'forge')
11
11
  end
12
12
 
13
13
  def which(cmd)
@@ -214,7 +214,7 @@ module MCollective
214
214
  begin
215
215
  PluginPackager.execute_verbosely(@verbose) do
216
216
  Dir.chdir(@tmpdir) do
217
- PluginPackager.safe_system('puppet module build')
217
+ PluginPackager.safe_system('pdk build --force')
218
218
  end
219
219
  end
220
220
  rescue
@@ -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] || "Puppet Labs"
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 = {:files => [],
37
- :dependencies => @dependencies.clone,
38
- :description => "#{@name} #{@plugintype} plugin for the Marionette Collective."}
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
- plugindata[:plugindependency] = {:name => "#{@mcname}-#{@metadata[:name]}-common",
48
- :version => @metadata[:version],
49
- :revision => @revision} if @packagedata[:common]
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 = {:files => [],
56
- :dependencies => @dependencies.clone,
57
- :description => "Common libraries for #{@name} connector plugin"}
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 MCollective plugin please visit <%= @plugin.metadata[:url] %>.
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/).
@@ -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.4.0 < 2.0.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": ">= 4.9.0"
15
+ "version_requirement": ">= 6.0.0"
16
16
  }
17
17
  ]
18
18
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: choria-mcorpc-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.20.5
4
+ version: 2.20.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - R.I.Pienaar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-04 00:00:00.000000000 Z
11
+ date: 2019-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: systemu
@@ -135,28 +135,14 @@ files:
135
135
  - lib/mcollective/pluginmanager.rb
136
136
  - lib/mcollective/pluginpackager.rb
137
137
  - lib/mcollective/pluginpackager/agent_definition.rb
138
- - lib/mcollective/pluginpackager/debpackage_packager.rb
139
- - lib/mcollective/pluginpackager/modulepackage_packager.rb
140
- - lib/mcollective/pluginpackager/ospackage_packager.rb
141
- - lib/mcollective/pluginpackager/puppet_module_packager.rb
142
- - lib/mcollective/pluginpackager/rpmpackage_packager.rb
138
+ - lib/mcollective/pluginpackager/forge_packager.rb
143
139
  - lib/mcollective/pluginpackager/standard_definition.rb
144
- - lib/mcollective/pluginpackager/templates/debian/Makefile.erb
145
- - lib/mcollective/pluginpackager/templates/debian/changelog.erb
146
- - lib/mcollective/pluginpackager/templates/debian/compat.erb
147
- - lib/mcollective/pluginpackager/templates/debian/control.erb
148
- - lib/mcollective/pluginpackager/templates/debian/copyright.erb
149
- - lib/mcollective/pluginpackager/templates/debian/rules.erb
150
- - lib/mcollective/pluginpackager/templates/module/Modulefile.erb
151
- - lib/mcollective/pluginpackager/templates/module/README.md.erb
152
- - lib/mcollective/pluginpackager/templates/module/_manifest.pp.erb
153
- - lib/mcollective/pluginpackager/templates/puppet_module/README.md.erb
154
- - lib/mcollective/pluginpackager/templates/puppet_module/data/defaults.yaml.erb
155
- - lib/mcollective/pluginpackager/templates/puppet_module/data/plugin.yaml.erb
156
- - lib/mcollective/pluginpackager/templates/puppet_module/hiera.yaml.erb
157
- - lib/mcollective/pluginpackager/templates/puppet_module/manifests/init.pp.erb
158
- - lib/mcollective/pluginpackager/templates/puppet_module/metadata.json.erb
159
- - lib/mcollective/pluginpackager/templates/redhat/rpm_spec.erb
140
+ - lib/mcollective/pluginpackager/templates/forge/README.md.erb
141
+ - lib/mcollective/pluginpackager/templates/forge/data/defaults.yaml.erb
142
+ - lib/mcollective/pluginpackager/templates/forge/data/plugin.yaml.erb
143
+ - lib/mcollective/pluginpackager/templates/forge/hiera.yaml.erb
144
+ - lib/mcollective/pluginpackager/templates/forge/manifests/init.pp.erb
145
+ - lib/mcollective/pluginpackager/templates/forge/metadata.json.erb
160
146
  - lib/mcollective/registration/base.rb
161
147
  - lib/mcollective/rpc.rb
162
148
  - lib/mcollective/rpc/actionrunner.rb
@@ -1,237 +0,0 @@
1
- module MCollective
2
- module PluginPackager
3
- class DebpackagePackager
4
- require 'erb'
5
-
6
- def initialize(plugin, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = nil, module_template = nil)
7
- if PluginPackager.command_available?('debuild')
8
- @plugin = plugin
9
- @verbose = verbose
10
- @libdir = pluginpath || '/usr/share/mcollective/plugins/mcollective/'
11
- @signature = signature
12
- @package_name = "#{@plugin.mcname}-#{@plugin.metadata[:name]}"
13
- @keep_artifacts = keep_artifacts
14
- else
15
- raise("Cannot build package. 'debuild' is not present on the system.")
16
- end
17
- end
18
-
19
- # Build process :
20
- # - create buildroot
21
- # - craete buildroot/debian
22
- # - create the relative directories with package contents
23
- # - create install files for each of the plugins that are going to be built
24
- # - create debian build files
25
- # - create tarball
26
- # - create pre and post install files
27
- # - run the build script
28
- # - move packages to cwd
29
- # - clean up
30
- def create_packages
31
- begin
32
- puts "Building packages for #{@package_name} plugin."
33
-
34
- @tmpdir = Dir.mktmpdir('mcollective_packager')
35
- @build_dir = File.join(@tmpdir, "#{@package_name}_#{@plugin.metadata[:version]}")
36
- Dir.mkdir(@build_dir)
37
-
38
- create_debian_dir
39
- @plugin.packagedata.each do |type, data|
40
- prepare_tmpdirs(data)
41
- create_install_file(type, data)
42
- create_pre_and_post_install(type)
43
- end
44
- create_debian_files
45
- create_tar
46
- run_build
47
- move_packages
48
-
49
- puts "Completed building all packages for #{@package_name} plugin."
50
- ensure
51
- if @keep_artifacts
52
- puts 'Keeping build artifacts.'
53
- puts "Build artifacts saved - #{@tmpdir}"
54
- else
55
- puts 'Removing build artifacts.'
56
- cleanup_tmpdirs
57
- end
58
- end
59
- end
60
-
61
- private
62
-
63
- def create_debian_files
64
- ['control', 'Makefile', 'compat', 'rules', 'copyright', 'changelog'].each do |f|
65
- create_file(f)
66
- end
67
- end
68
-
69
- def run_build
70
- FileUtils.cd(@build_dir) do
71
- PluginPackager.execute_verbosely(@verbose) do
72
- if @signature
73
- if @signature.is_a?(String)
74
- PluginPackager.safe_system("debuild --no-lintian -i -k#{@signature}")
75
- else
76
- PluginPackager.safe_system("debuild --no-lintian -i")
77
- end
78
- else
79
- PluginPackager.safe_system("debuild --no-lintian -i -us -uc")
80
- end
81
- end
82
- end
83
- end
84
-
85
- # Creates a string used by the control file to specify dependencies
86
- # Dependencies can be formatted as :
87
- # foo (>= x.x-x)
88
- # foo (>= x.x)
89
- # foo
90
- def build_dependency_string(data)
91
- dependencies = []
92
- PluginPackager.filter_dependencies('debian', data[:dependencies]).each do |dep|
93
- if dep[:version] && dep[:revision]
94
- dependencies << "#{dep[:name]} (>=#{dep[:version]}-#{dep[:revision]}) | puppet-agent"
95
- elsif dep[:version]
96
- dependencies << "#{dep[:name]} (>=#{dep[:version]}) | puppet-agent"
97
- else
98
- dependencies << "#{dep[:name]} | puppet-agent"
99
- end
100
- end
101
-
102
- if data[:plugindependency]
103
- dependencies << "#{data[:plugindependency][:name]} (= ${binary:Version})"
104
- end
105
-
106
- dependencies.join(', ')
107
- end
108
-
109
- # Creates an install file for each of the packages that are going to be created
110
- # for the plugin
111
- def create_install_file(type, data)
112
- install_file = "#{@package_name}-#{type}"
113
- begin
114
- install_file = File.join(@build_dir, 'debian', "#{install_file}.install")
115
- File.open(install_file, 'w') do |file|
116
- data[:files].each do |f|
117
- extended_filename = File.join(@libdir, File.expand_path(f).gsub(/^#{@plugin.target_path}/, ''))
118
- file.puts "#{extended_filename} #{File.dirname(extended_filename)}"
119
- end
120
- end
121
- rescue Errno::EACCES => e
122
- puts "Could not create install file '#{install_file}'. Permission denied"
123
- raise e
124
- rescue => e
125
- puts "Could not create install file '#{install_file}'."
126
- raise e
127
- end
128
- end
129
-
130
- # Move source package and debs to cwd
131
- def move_packages
132
- begin
133
- files_to_copy = Dir.glob(File.join(@tmpdir, '*.{deb,dsc,diff.gz,orig.tar.gz,changes}'))
134
- FileUtils.cp(files_to_copy, '.')
135
- rescue => e
136
- puts 'Could not copy packages to working directory.'
137
- raise e
138
- end
139
- end
140
-
141
- # Create pre and post install files in $buildroot/debian
142
- # from supplied scripts.
143
- # Note that all packages built for the plugin will invoke
144
- # the same pre and post install scripts.
145
- def create_pre_and_post_install(type)
146
- if @plugin.preinstall
147
- if !File.exists?(@plugin.preinstall)
148
- puts "pre-install script '#{@plugin.preinstall}' not found."
149
- raise(Errno::ENOENT, @plugin.preinstall)
150
- else
151
- FileUtils.cp(@plugin.preinstall, File.join(@build_dir, 'debian', "#{@package_name}-#{type}.preinst"))
152
- end
153
- end
154
-
155
- if @plugin.postinstall
156
- if !File.exists?(@plugin.postinstall)
157
- puts "post-install script '#{@plugin.postinstall}' not found."
158
- raise(Errno::ENOENT, @plugin.postinstall)
159
- else
160
- FileUtils.cp(@plugin.postinstall, File.join(@build_dir, 'debian', "#{@package_name}-#{type}.postinst"))
161
- end
162
- end
163
- end
164
-
165
- # Tar up source
166
- # Expects directory : $mcollective-$agent_$version
167
- # Creates file : $buildroot/$mcollective-$agent_$version.orig.tar.gz
168
- def create_tar
169
- name_and_version = "#{@package_name}_#{@plugin.metadata[:version]}"
170
- tarfile = "#{name_and_version}.orig.tar.gz"
171
- begin
172
- PluginPackager.execute_verbosely(@verbose) do
173
- Dir.chdir(@tmpdir) do
174
- PluginPackager.safe_system("tar -Pcvzf #{File.join(@tmpdir, tarfile)} #{name_and_version}")
175
- end
176
- end
177
- rescue Exception => e
178
- puts "Could not create tarball - #{tarfile}"
179
- raise e
180
- end
181
- end
182
-
183
- def create_file(filename)
184
- begin
185
- file = ERB.new(File.read(File.join(File.dirname(__FILE__), 'templates', 'debian', "#{filename}.erb")), nil, '-')
186
- File.open(File.join(@build_dir, 'debian', filename), 'w') do |f|
187
- f.puts file.result(binding)
188
- end
189
- rescue => e
190
- puts "Could not create file - '#{filename}'"
191
- raise e
192
- end
193
- end
194
-
195
- # Move files contained in the plugin to the correct directory
196
- # relative to the build root.
197
- def prepare_tmpdirs(data)
198
- data[:files].each do |file|
199
- begin
200
- targetdir = File.join(@build_dir, @libdir, File.dirname(File.expand_path(file)).gsub(/^#{@plugin.target_path}/, ""))
201
- FileUtils.mkdir_p(targetdir) unless File.directory?(targetdir)
202
- FileUtils.cp_r(file, targetdir)
203
- rescue Errno::EACCES => e
204
- puts "Could not create directory '#{targetdir}'. Permission denied"
205
- raise e
206
- rescue Errno::ENOENT => e
207
- puts "Could not copy file '#{file}' to '#{targetdir}'. File does not exist"
208
- raise e
209
- rescue => e
210
- puts 'Could not prepare build directory'
211
- raise e
212
- end
213
- end
214
- end
215
-
216
- # Create the $buildroot/debian directory
217
- def create_debian_dir
218
- deb_dir = File.join(@build_dir, 'debian')
219
- begin
220
- FileUtils.mkdir_p(deb_dir)
221
- rescue => e
222
- puts "Could not create directory '#{deb_dir}'"
223
- raise e
224
- end
225
- end
226
-
227
- def cleanup_tmpdirs
228
- begin
229
- FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir)
230
- rescue => e
231
- puts "Could not remove temporary build directory - '#{@tmpdir}'"
232
- raise e
233
- end
234
- end
235
- end
236
- end
237
- end
@@ -1,127 +0,0 @@
1
- module MCollective
2
- module PluginPackager
3
- class ModulepackagePackager
4
- require 'erb'
5
-
6
- def initialize(plugin, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = nil, module_template = nil)
7
- assert_new_enough_puppet
8
- @plugin = plugin
9
- @package_name = "#{@plugin.mcname}_#{@plugin.metadata[:name]}".gsub(/-/, '_')
10
- @verbose = verbose
11
- @keep_artifacts = keep_artifacts
12
- @module_template = module_template || File.join(File.dirname(__FILE__), 'templates', 'module')
13
- end
14
-
15
- # Build Process :
16
- # - create module directory
17
- # - run 'puppet module build'
18
- # - move generated package back to cwd
19
- def create_packages
20
- begin
21
- puts "Building module for #{@package_name} plugin."
22
-
23
- @tmpdir = Dir.mktmpdir('mcollective_packager')
24
- make_module
25
- run_build
26
- move_package
27
-
28
- puts "Completed building module for #{@package_name} plugin."
29
- ensure
30
- if @keep_artifacts
31
- puts 'Keeping build artifacts'
32
- puts "Build artifacts saved - #{@tmpdir}"
33
- else
34
- cleanup_tmpdirs
35
- end
36
- end
37
- end
38
-
39
- private
40
-
41
- def assert_new_enough_puppet
42
- unless PluginPackager.command_available?('puppet')
43
- raise("Cannot build package. 'puppet' is not present on the system.")
44
- end
45
-
46
- s = Shell.new('puppet --version')
47
- s.runcommand
48
- actual_version = s.stdout.chomp
49
-
50
- required_version = '3.3.0'
51
- if Util.versioncmp(actual_version, required_version) < 0
52
- raise("Cannot build package. puppet #{required_version} or greater required. We have #{actual_version}.")
53
- end
54
- end
55
-
56
- def make_module
57
- targetdir = File.join(@tmpdir, 'manifests')
58
- FileUtils.mkdir_p(targetdir) unless File.directory?(targetdir)
59
-
60
- # for each subpackage make a subclass
61
- @plugin.packagedata.each do |klass,data|
62
- data[:files].each do |file|
63
- relative_path = File.expand_path(file).gsub(/#{@plugin.target_path}|^\.\//, '')
64
- targetdir = File.join(@tmpdir, 'files', klass.to_s, 'mcollective', File.dirname(relative_path))
65
- FileUtils.mkdir_p(targetdir) unless File.directory?(targetdir)
66
- FileUtils.cp_r(file, targetdir)
67
- end
68
-
69
- @klass = klass.to_s
70
- render_template('_manifest.pp.erb', File.join(@tmpdir, 'manifests', "#{klass}.pp"))
71
- end
72
-
73
- # render all the templates we have
74
- Dir.glob(File.join(@module_template, '*.erb')).each do |template|
75
- filename = File.basename(template, '.erb')
76
- next if filename =~ /^_/ # starting with underscore makes it private
77
- render_template("#{filename}.erb", File.join(@tmpdir, filename))
78
- end
79
- end
80
-
81
- def render_template(template, path)
82
- begin
83
- erb = ERB.new(File.read(File.join(@module_template, template)), nil, '-')
84
- File.open(path, 'w') do |f|
85
- f.puts erb.result(binding)
86
- end
87
- rescue => e
88
- puts "Could not render template to path - '#{path}'"
89
- raise e
90
- end
91
- end
92
-
93
- def run_build
94
- begin
95
- PluginPackager.execute_verbosely(@verbose) do
96
- Dir.chdir(@tmpdir) do
97
- PluginPackager.safe_system('puppet module build')
98
- end
99
- end
100
- rescue => e
101
- puts 'Build process has failed'
102
- raise e
103
- end
104
- end
105
-
106
- # Move built package to cwd
107
- def move_package
108
- begin
109
- package_file = File.join(@tmpdir, 'pkg', "#{@plugin.vendor}-#{@package_name}-#{@plugin.metadata[:version]}.tar.gz")
110
- FileUtils.cp(package_file, '.')
111
- rescue => e
112
- puts 'Could not copy package to working directory'
113
- raise e
114
- end
115
- end
116
-
117
- def cleanup_tmpdirs
118
- begin
119
- FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir)
120
- rescue => e
121
- puts "Could not remove temporary build directory - '#{@tmpdir}'"
122
- raise e
123
- end
124
- end
125
- end
126
- end
127
- end
@@ -1,59 +0,0 @@
1
- module MCollective
2
- module PluginPackager
3
- # MCollective plugin packager general OS implementation.
4
- class OspackagePackager
5
-
6
- attr_accessor :package, :verbose, :packager, :package_type
7
-
8
- # Create packager object with package parameter containing list of files,
9
- # dependencies and package metadata.
10
- def initialize(package, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = false, module_template = nil)
11
-
12
- if File.exists?("/etc/redhat-release")
13
- @packager = PluginPackager["RpmpackagePackager"].new(package, pluginpath, signature, verbose, keep_artifacts, module_template)
14
- @package_type = "RPM"
15
- elsif File.exists?("/etc/debian_version")
16
- @packager = PluginPackager["DebpackagePackager"].new(package, pluginpath, signature, verbose, keep_artifacts, module_template)
17
- @package_type = "Deb"
18
- else
19
- raise "cannot identify operating system."
20
- end
21
-
22
- @package = package
23
- @verbose = verbose
24
- end
25
-
26
- # Hands over package creation to the detected packager implementation
27
- # based on operating system.
28
- def create_packages
29
- @packager.create_packages
30
- end
31
-
32
- # Displays the package metadata and detected files
33
- def package_information
34
- puts
35
- puts "%30s%s" % ["Plugin information : ", @package.metadata[:name]]
36
- puts "%30s%s" % ["-" * 22, "-" * 22]
37
- puts "%30s%s" % ["Plugin Type : ", @package.plugintype.capitalize]
38
- puts "%30s%s" % ["Package Output Format : ", @package_type]
39
- puts "%30s%s" % ["Version : ", @package.metadata[:version]]
40
- puts "%30s%s" % ["Revision : ", @package.revision]
41
- puts "%30s%s" % ["Vendor : ", @package.vendor]
42
- puts "%30s%s" % ["Post Install Script : ", @package.postinstall] if @package.postinstall
43
- puts "%30s%s" % ["Author : ", @package.metadata[:author]]
44
- puts "%30s%s" % ["License : ", @package.metadata[:license]]
45
- puts "%30s%s" % ["URL : ", @package.metadata[:url]]
46
-
47
- if @package.packagedata.size > 0
48
- @package.packagedata.each_with_index do |values, i|
49
- if i == 0
50
- puts "%30s%s" % ["Identified Packages : ", values[0]]
51
- else
52
- puts "%30s%s" % [" ", values[0]]
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,180 +0,0 @@
1
- module MCollective
2
- module PluginPackager
3
- class RpmpackagePackager
4
- require 'erb'
5
-
6
- def initialize(plugin, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = nil, module_template = nil)
7
- if @buildtool = select_command
8
- @plugin = plugin
9
- @package_name = "#{@plugin.mcname}-#{@plugin.metadata[:name]}"
10
- @package_name_and_version = "#{@package_name}-#{@plugin.metadata[:version]}"
11
- @verbose = verbose
12
- @libdir = pluginpath || '/usr/libexec/mcollective/mcollective/'
13
- @signature = signature
14
- @rpmdir = rpmdir
15
- @srpmdir = srpmdir
16
- @keep_artifacts = keep_artifacts
17
- else
18
- raise("Cannot build package. 'rpmbuild' or 'rpmbuild-md5' is not present on the system")
19
- end
20
- end
21
-
22
- # Determine the build tool present on the system
23
- def select_command
24
- if PluginPackager.command_available?('rpmbuild-md5')
25
- return 'rpmbuild-md5'
26
- elsif PluginPackager.command_available?('rpmbuild')
27
- return 'rpmbuild'
28
- else
29
- return nil
30
- end
31
- end
32
-
33
- def rpmdir
34
- `rpm --eval '%_rpmdir'`.chomp
35
- end
36
-
37
- def srpmdir
38
- `rpm --eval '%_srcrpmdir'`.chomp
39
- end
40
-
41
- # Build Process :
42
- # - create temporary buildroot
43
- # - create the spec file
44
- # - create the tarball
45
- # - run the build script
46
- # - move pacakges to cwd
47
- # - clean up
48
- def create_packages
49
- begin
50
- puts "Building packages for #{@package_name} plugin."
51
-
52
- @tmpdir = Dir.mktmpdir('mcollective_packager')
53
- prepare_tmpdirs
54
-
55
- make_spec_file
56
- run_build
57
- move_packages
58
-
59
- puts "Completed building all packages for #{@package_name} plugin."
60
- ensure
61
- if @keep_artifacts
62
- puts 'Keeping build artifacts'
63
- puts "Build artifacts saved - #{@tmpdir}"
64
- else
65
- cleanup_tmpdirs
66
- end
67
- end
68
- end
69
-
70
- private
71
-
72
- def run_build
73
- begin
74
- tarfile = create_tar
75
- PluginPackager.execute_verbosely(@verbose) do
76
- PluginPackager.safe_system("#{@buildtool} -ta#{" --quiet" unless @verbose}#{" --sign" if @signature} #{tarfile}")
77
- end
78
- rescue => e
79
- puts 'Build process has failed'
80
- raise e
81
- end
82
- end
83
-
84
- # Tar up source
85
- # Expects directory $mcollective-$agent-$version
86
- # Creates file : $tmpbuildroot/$mcollective-$agent-$version
87
- def create_tar
88
- tarfile = File.join(@tmpdir, "#{@package_name_and_version}.tgz")
89
- begin
90
- PluginPackager.execute_verbosely(@verbose) do
91
- Dir.chdir(@tmpdir) do
92
- PluginPackager.safe_system("tar -cvzf #{tarfile} #{@package_name_and_version}")
93
- end
94
- end
95
- rescue => e
96
- puts "Could not create tarball - '#{tarfile}'"
97
- raise e
98
- end
99
- tarfile
100
- end
101
-
102
- # Move rpm's and srpm's to cwd
103
- def move_packages
104
- begin
105
- files_to_copy = []
106
- files_to_copy += Dir.glob(File.join(@rpmdir, 'noarch', "#{@package_name}-*-#{@plugin.metadata[:version]}-#{@plugin.revision}*.noarch.rpm"))
107
- files_to_copy += Dir.glob(File.join(@srpmdir, "#{@package_name}-#{@plugin.metadata[:version]}-#{@plugin.revision}*.src.rpm"))
108
- FileUtils.cp(files_to_copy, '.')
109
- rescue => e
110
- puts 'Could not copy packages to working directory'
111
- raise e
112
- end
113
- end
114
-
115
- # Create the specfile and place as $tmpbuildroot/$mcollective-$agent-$version/$mcollective-$agent-$version.spec
116
- def make_spec_file
117
- spec_file = File.join(@tmpdir, @package_name_and_version, "#{@package_name_and_version}.spec")
118
- begin
119
- spec_template = ERB.new(File.read(File.join(File.dirname(__FILE__), 'templates', 'redhat', 'rpm_spec.erb')), nil, '-')
120
- File.open(spec_file, 'w') do |f|
121
- f.puts spec_template.result(binding)
122
- end
123
- rescue => e
124
- puts "Could not create specfile - '#{spec_file}'"
125
- raise e
126
- end
127
- end
128
-
129
- # Move files contained in the plugin to the correct directory
130
- # relative to the build root.
131
- def prepare_tmpdirs
132
- plugin_files.each do |file|
133
- begin
134
- targetdir = File.join(@tmpdir, @package_name_and_version, @libdir, File.dirname(File.expand_path(file)).gsub(@plugin.target_path, ""))
135
- FileUtils.mkdir_p(targetdir) unless File.directory?(targetdir)
136
- FileUtils.cp_r(file, targetdir)
137
- rescue Errno::EACCES => e
138
- puts "Could not create directory '#{targetdir}'. Permission denied"
139
- raise e
140
- rescue Errno::ENOENT => e
141
- puts "Could not copy file '#{file}' to '#{targetdir}'. File does not exist"
142
- raise e
143
- rescue => e
144
- puts 'Could not prepare temporary build directory'
145
- raise e
146
- end
147
- end
148
- end
149
-
150
- # Extract all the package files from the plugin's package data hash
151
- def plugin_files
152
- files = []
153
- @plugin.packagedata.each do |name, data|
154
- files += data[:files].reject{ |f| File.directory?(f) }
155
- end
156
- files
157
- end
158
-
159
- # Extract the package specific files from the file list and omits directories
160
- def package_files(files)
161
- package_files = []
162
- files.each do |f|
163
- if !File.directory?(f)
164
- package_files << File.join(@libdir, File.expand_path(f).gsub(/#{@plugin.target_path}|\.\//, ''))
165
- end
166
- end
167
- package_files
168
- end
169
-
170
- def cleanup_tmpdirs
171
- begin
172
- FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir)
173
- rescue => e
174
- puts "Could not remove temporary build directory - '#{@tmpdir}'"
175
- raise e
176
- end
177
- end
178
- end
179
- end
180
- end
@@ -1,7 +0,0 @@
1
- DESTDIR=
2
-
3
- build:
4
-
5
- clean:
6
-
7
- install:
@@ -1,5 +0,0 @@
1
- <%= @package_name -%> (<%= @plugin.metadata[:version]-%>-<%= @plugin.revision-%>) unstable; urgency=low
2
-
3
- * Automated release for <%= @package_name -%> by mco plugin packager.
4
-
5
- -- The Marionette Collective <mcollective-dev@googlegroups.com> <%= Time.new.strftime('%a, %d %b %Y %H:%M:%S %z') %>
@@ -1,15 +0,0 @@
1
- Source: <%= @package_name %>
2
- Homepage: <%= @plugin.metadata[:url] %>
3
- Section: utils
4
- Priority: extra
5
- Build-Depends: debhelper (>= 7), cdbs, dpatch
6
- Maintainer: <%= @plugin.metadata[:author] %>
7
- Standards-Version: 3.9.1
8
- <% @plugin.packagedata.each do |type, data| %>
9
- Package: <%= "#{@package_name}-#{type}" %>
10
- Architecture: all
11
- Depends: <%= build_dependency_string(data) %>
12
- Description: <%= @plugin.metadata[:description]%>
13
- <%= data[:description]%>
14
- .
15
- <% end -%>
@@ -1,8 +0,0 @@
1
- This package was generated by the MCollective plugin packager on
2
- <%= Time.now%>
3
-
4
- Upstream Author:
5
- <%= @plugin.metadata[:author] %> <%= @plugin.metadata[:url] %>
6
-
7
- License:
8
- <%= @plugin.metadata[:license] -%>
@@ -1,6 +0,0 @@
1
- #!/usr/bin/make -f
2
-
3
- include /usr/share/cdbs/1/rules/debhelper.mk
4
- include /usr/share/cdbs/1/rules/dpatch.mk
5
- include /usr/share/cdbs/1/class/makefile.mk
6
- DEB_MAKE_INVOKE = $(DEB_MAKE_ENVVARS) make -f debian/Makefile -C $(DEB_BUILDDIR)
@@ -1,5 +0,0 @@
1
- name '<%= @plugin.vendor %>-<%= @package_name %>'
2
- version '<%= @plugin.metadata[:version] %>'
3
- description '<%= @plugin.metadata[:description] %>'
4
- project_page '<%= @plugin.metadata[:url]%>'
5
- dependency 'puppetlabs/mcollective', '1.x'
@@ -1,37 +0,0 @@
1
- # <%= @package_name %>
2
-
3
- #### Table of Contents
4
-
5
- 1. [Overview](#overview)
6
- 2. [Module Description - What the module does and why it is useful](#module-description)
7
- 3. [Setup - The basics of getting started with <%= @package_name %>](#setup)
8
- * [What the <%= @package_name %> module affects](#what-the-<%= @package_name %>-module-affects)
9
- * [Setup requirements](#setup-requirements)
10
- 4. [Usage - Configuration options and additional functionality](#usage)
11
- 5. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
12
-
13
-
14
- ## Overview
15
-
16
- The <%= @package_name %> module is a module that wraps a source release of the
17
- <%= @plugin.metadata[:name] %> mcollective plugin for use with the
18
- [puppetlabs mcollective](http://forge.puppetlabs.com/puppetlabs/mcollective)
19
- module.
20
-
21
- ## Module description
22
-
23
- ## Usage
24
-
25
- <% @plugin.packagedata.keys.map { |x| x.to_s }.sort.each do |klass| -%>
26
- <%# Don't document common class -%>
27
- <% if klass != "common" -%>
28
- ### class <%= @package_name %>::<%= klass %>
29
-
30
- Installs the <%= klass %> component of the <%= @plugin.metadata[:name] %> plugin.
31
-
32
- ```puppet
33
- include <%= @package_name%>::<%= klass %>
34
- ```
35
- <% end %>
36
- <% end %>
37
-
@@ -1,9 +0,0 @@
1
- #
2
- class <%= @package_name %>::<%= @klass %> {
3
- <% if @plugin.packagedata[:common] && @klass != 'common' %>
4
- include ::<%= @package_name %>::common
5
- <% end %>
6
- mcollective::plugin { '<%= @package_name %>/<%= @klass %>':
7
- source => 'puppet:///modules/<%= @package_name %>/<%= @klass %>',
8
- }
9
- }
@@ -1,63 +0,0 @@
1
- Name: <%= @package_name %>
2
- Summary: <%= @plugin.metadata[:description] %>
3
- Version: <%= @plugin.metadata[:version] %>
4
- Release: <%= @plugin.revision %>%{?dist}
5
- License: <%= @plugin.metadata[:license]%>
6
- URL: <%= @plugin.metadata[:url]%>
7
- Vendor: <%= @plugin.vendor%>
8
- Packager: <%= @plugin.metadata[:author]%>
9
- BuildArch: noarch
10
- Group: System Tools
11
- BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
12
- Source0: <%= @package_name_and_version%>.tgz
13
-
14
- %description
15
- <%= @plugin.metadata[:description] %>
16
-
17
- %prep
18
- %setup
19
-
20
- %build
21
- <% package_files = plugin_files.map{ |f| File.join(@libdir, File.expand_path(f).gsub(/#{File.expand_path(@plugin.path)}|\.\//, '')) } -%>
22
- <% dirs = package_files.map{ |f| File.dirname(f) }.uniq -%>
23
-
24
- %install
25
- rm -rf %{buildroot}
26
- <% dirs.each do |dir| -%>
27
- %{__install} -d -m0755 %{buildroot}<%= dir%>
28
- <% end -%>
29
- <% package_files.each do |file| -%>
30
- %{__install} -m0644 -v <%= (file[0].chr == '/') ? file[1..file.size-1]: file%> %{buildroot}<%=file %>
31
- <% end -%>
32
-
33
- <% @plugin.packagedata.each do |type, data| %>
34
- %package <%= type %>
35
- Summary: <%= @plugin.metadata[:description] %>
36
- <% if data[:plugindependency] %>
37
- Requires: <%= data[:plugindependency][:name] -%> = <%= data[:plugindependency][:version]%>-<%= data[:plugindependency][:revision]%>%{?dist}
38
- <% end -%>
39
- <% PluginPackager.filter_dependencies('redhat', data[:dependencies]).each do |dep|-%>
40
- Requires: <%= dep[:name] -%> <%= ">= #{dep[:version]}" if dep[:version]%><%="-#{dep[:revision]}" if dep[:revision]%>
41
- <% end -%>
42
- %description <%= type %>
43
- <%= data[:description] %>
44
-
45
- %files <%= type %>
46
- %defattr(-, root, root, -)
47
- <% package_files(data[:files]).each do |file| -%>
48
- <%= file %>
49
- <% end -%>
50
- <% end -%>
51
-
52
- <% if @plugin.preinstall -%>
53
- %pre
54
- <%= @plugin.preinstall %>
55
- <% end -%>
56
- <% if @plugin.postinstall -%>
57
- %post
58
- <%= @plugin.postinstall%>
59
- <% end -%>
60
-
61
- %changelog
62
- * <%= Time.now.strftime("%a %b %d %Y") -%> <%= @plugin.metadata[:author]%> - <%= @plugin.metadata[:version]%>-<%= @plugin.revision %>
63
- - Built Package <%= @plugin.metadata[:name] -%>