Added mcollective 2.3.1 package
[packages/trusty/mcollective.git] / lib / mcollective / pluginpackager / agent_definition.rb
1 module MCollective
2   module PluginPackager
3     # MCollective Agent Plugin package
4     class AgentDefinition
5       attr_accessor :path, :packagedata, :metadata, :target_path, :vendor, :iteration, :preinstall
6       attr_accessor :plugintype, :dependencies, :postinstall, :mcname, :mcversion
7
8       def initialize(path, name, vendor, preinstall, postinstall, iteration, dependencies, mcdependency, plugintype)
9         @plugintype = plugintype
10         @path = path
11         @packagedata = {}
12         @iteration = iteration || 1
13         @preinstall = preinstall
14         @postinstall = postinstall
15         @vendor = vendor || "Puppet Labs"
16         @dependencies = dependencies || []
17         @target_path = File.expand_path(@path)
18         @metadata, mcversion = PluginPackager.get_metadata(@path, "agent")
19         @mcname = mcdependency[:mcname] ||  "mcollective"
20         @mcversion = mcdependency[:mcversion] || mcversion
21         @dependencies << {:name => "#{@mcname}-common", :version => @mcversion}
22
23         @metadata[:name] = (name || @metadata[:name]).downcase.gsub(/\s+|_/, "-")
24         identify_packages
25       end
26
27       # Identify present packages and populate packagedata hash.
28       def identify_packages
29         common_package = common
30         @packagedata[:common] = common_package if common_package
31         agent_package = agent
32         @packagedata[:agent] = agent_package if agent_package
33         client_package = client
34         @packagedata[:client] = client_package if client_package
35       end
36
37       # Obtain Agent package files and dependencies.
38       def agent
39         agent = {:files => [],
40                  :dependencies => @dependencies.clone,
41                  :description => "Agent plugin for #{@metadata[:name]}"}
42
43         agentdir = File.join(@path, "agent")
44
45         if PluginPackager.check_dir_present agentdir
46           ddls = Dir.glob(File.join(agentdir, "*.ddl"))
47           agent[:files] = (Dir.glob(File.join(agentdir, "*")) - ddls)
48         else
49           return nil
50         end
51         agent[:plugindependency] = {:name => "#{@mcname}-#{@metadata[:name]}-common", :version => @metadata[:version], :iteration => @iteration}
52         agent
53       end
54
55       # Obtain client package files and dependencies.
56       def client
57         client = {:files => [],
58                   :dependencies => @dependencies.clone,
59                   :description => "Client plugin for #{@metadata[:name]}"}
60
61         clientdir = File.join(@path, "application")
62         aggregatedir = File.join(@path, "aggregate")
63
64         client[:files] += Dir.glob(File.join(clientdir, "*")) if PluginPackager.check_dir_present clientdir
65         client[:files] += Dir.glob(File.join(aggregatedir, "*")) if PluginPackager.check_dir_present aggregatedir
66         client[:plugindependency] = {:name => "#{@mcname}-#{@metadata[:name]}-common", :version => @metadata[:version], :iteration => @iteration}
67         client[:files].empty? ? nil : client
68       end
69
70       # Obtain common package files and dependencies.
71       def common
72         common = {:files =>[],
73                   :dependencies => @dependencies.clone,
74                   :description => "Common libraries for #{@metadata[:name]}"}
75
76         datadir = File.join(@path, "data", "**")
77         utildir = File.join(@path, "util", "**", "**")
78         ddldir = File.join(@path, "agent", "*.ddl")
79         validatordir = File.join(@path, "validator", "**")
80
81         [datadir, utildir, validatordir, ddldir].each do |directory|
82           common[:files] += Dir.glob(directory)
83         end
84
85         # We fail if there is no ddl file present
86         if common[:files].grep(/^.*\.ddl$/).empty?
87           raise "cannot create package - No ddl file found in #{File.join(@path, "agent")}"
88         end
89
90         common[:files].empty? ? nil : common
91       end
92     end
93   end
94 end