6c389a1642a782a0d2e121162bfe434222f3d191
[packages/precise/mcollective.git] / lib / mcollective / pluginpackager / standard_definition.rb
1 module MCollective
2   module PluginPackager
3     class StandardDefinition
4       attr_accessor :path, :packagedata, :metadata, :target_path, :vendor, :iteration
5       attr_accessor :plugintype, :preinstall, :postinstall, :dependencies, :mcname, :mcversion
6
7       def initialize(path, name, vendor, preinstall, postinstall, iteration, dependencies, mcdependency, plugintype)
8         @plugintype = plugintype
9         @path = path
10         @packagedata = {}
11         @iteration = iteration || 1
12         @preinstall = preinstall
13         @postinstall = postinstall
14         @vendor = vendor || "Puppet Labs"
15         @dependencies = dependencies || []
16         @target_path = File.expand_path(@path)
17         @metadata, mcversion = PluginPackager.get_metadata(@path, @plugintype)
18
19         @mcname = mcdependency[:mcname] || "mcollective"
20         @mcversion = mcdependency[:mcversion] || mcversion
21         @dependencies << {:name => "#{mcname}-common", :version => @mcversion}
22         @metadata[:name] = (name || @metadata[:name]).downcase.gsub(/\s+|_/, "-")
23         identify_packages
24       end
25
26       # Identify present packages and populate the packagedata hash
27       def identify_packages
28         common_package = common
29         @packagedata[:common] = common_package if common_package
30         plugin_package = plugin
31         @packagedata[@plugintype] = plugin_package if plugin_package
32       end
33
34       # Obtain standard plugin files and dependencies
35       def plugin
36         plugindata = {:files => [],
37                       :dependencies => @dependencies.clone,
38                       :description => "#{@name} #{@plugintype} plugin for the Marionette Collective."}
39
40         plugindir = File.join(@path, @plugintype.to_s)
41         if PluginPackager.check_dir_present plugindir
42           plugindata[:files] = Dir.glob(File.join(plugindir, "*"))
43         else
44           return nil
45         end
46
47         plugindata[:plugindependency] = {:name => "#{@mcname}-#{@metadata[:name]}-common",
48                                       :version => @metadata[:version],
49                                       :iteration => @iteration} if @packagedata[:common]
50         plugindata
51       end
52
53       # Obtain list of common files
54       def common
55         common = {:files => [],
56                   :dependencies => @dependencies.clone,
57                   :description => "Common libraries for #{@name} connector plugin"}
58
59         commondir = File.join(@path, "util")
60         if PluginPackager.check_dir_present commondir
61           common[:files] = Dir.glob(File.join(commondir, "*"))
62           return common
63         else
64           return nil
65         end
66       end
67     end
68   end
69 end