module Decking::Parser
Constants
- CONTAINER_NAME
Attributes
config[RW]
config_path[RW]
Public Instance Methods
config_file(config_file)
click to toggle source
# File lib/decking/parser.rb, line 8 def config_file config_file config_file ||= 'decking.yaml' @config = Hashie::Mash.new(YAML.load_file(config_file)) @config_path = File.realpath(config_file) confirm_requirements end
parse(cluster)
click to toggle source
# File lib/decking/parser.rb, line 22 def parse cluster parse_images parse_containers parse_clusters parse_groups merge_cluster_config cluster end
print()
click to toggle source
# File lib/decking/parser.rb, line 18 def print puts config.to_yaml end
Private Instance Methods
confirm_requirements()
click to toggle source
# File lib/decking/parser.rb, line 32 def confirm_requirements raise "No Containers Defined" unless config.containers? raise "No Clusters Defined" unless config.clusters? raise "No Images Defined" unless config.images? end
merge_cluster_config(cluster)
click to toggle source
# File lib/decking/parser.rb, line 119 def merge_cluster_config cluster raise "Cluster '" + cluster + "' doesn't exist" unless config.clusters.key? cluster c = Hashie::Mash.new c.containers = Hash.new # Merge primary container configs config.clusters[cluster].containers.each_with_index do |key, idx| c.containers[key] = config.containers[key] end c.containers.each do |k, v| # Merge Global Overrides c.containers[k] = c.containers[k].deep_merge(config.global) if config.key? 'global' # Merge Group Overrides unless config.clusters[cluster].group.nil? c.containers[k] = c.containers[k].deep_merge(config.groups[config.clusters[cluster].group].options) # Merge Group Container Overrides if config.groups[config.clusters[cluster].group].containers.key? k c.containers[k] = c.containers[k].deep_merge(config.groups[config.clusters[cluster].group].containers[k]) end end c.containers[k].name = k + '.' + cluster c.containers[k].env.CONTAINER_NAME = k + '.' + cluster c.containers[k].domainname = cluster + '.' + config.global.domainname if config.key?('global') && config.global.key?('domainname') end images = self.config.images group = self.config.clusters[cluster].group self.config = c self.config.images = images self.config.cluster = cluster self.config.group = group self.config end
parse_clusters()
click to toggle source
# File lib/decking/parser.rb, line 87 def parse_clusters config.clusters.each do |key, val| if config.clusters[key].instance_of? Array cont_ar = config.clusters[key] config.clusters[key] = Hashie::Mash.new config.clusters[key].containers = cont_ar end if (config.clusters[key].key? 'group') && (!config.groups.key?(config.clusters[key].group)) raise "Cluster '" + key + "' references invalid group '" + config.clusters[key].group end if (!config.clusters[key].key? 'group') && (config.groups.key? key) config.clusters[key].group = key end raise "Cluster '" + key + "' is empty" unless config.clusters[key].key? "containers" raise "Cluster '" + key + "' containers should be an Array" unless config.clusters[key].containers.instance_of? Array end end
parse_containers()
click to toggle source
# File lib/decking/parser.rb, line 51 def parse_containers config.containers.each do |key, val| config.containers[key] ||= Hashie::Mash.new config.containers[key].links ||= Array.new config.containers[key].binds ||= Array.new config.containers[key].lxc_conf ||= Array.new config.containers[key].domainname ||= "" config.containers[key].command ||= "" config.containers[key].entrypoint ||= nil config.containers[key].memory ||= 0 config.containers[key].memory_swap ||= 0 config.containers[key].cpu_shares ||= 0 config.containers[key].cpu_set ||= "" config.containers[key].attach_stdout ||= false config.containers[key].attach_stderr ||= false config.containers[key].attach_stdin ||= false config.containers[key].tty ||= false config.containers[key].open_stdin ||= false config.containers[key].stdin_once ||= false config.containers[key].volumes_from ||= Array.new config.containers[key].image ||= key config.containers[key].port ||= Array.new config.containers[key].aliases ||= Array.new config.containers[key].data ||= false config.containers[key].hostname ||= key config.containers[key].links.each_with_index do |v, idx| config.containers[key].links[idx] = resolve_dependency v unless v.instance_of? Hash end config.containers[key].volumes_from.each_with_index do |v, idx| unless config.containers.key? v raise "'volumes_from' dependency '" + v + "' of container '" + key + "' does not exist" end end end end
parse_groups()
click to toggle source
# File lib/decking/parser.rb, line 105 def parse_groups config.groups.each do |key, val| config.groups[key].options = Hashie::Mash.new unless config.groups[key].key? 'options' config.groups[key].containers = Hashie::Mash.new unless config.groups[key].key? 'containers' config.groups[key].containers.each do |c_key, c_val| if config.groups[key].containers[c_key].key? 'links' config.groups[key].containers[c_key].links.each_with_index do |v, idx| config.groups[key].containers[c_key].links[idx] = resolve_dependency v end end end end end
parse_images()
click to toggle source
# File lib/decking/parser.rb, line 38 def parse_images config.images.each do |key, val| if val.nil? config.images[key] = Hashie::Mash.new config.images[key].name = "#{key}:latest" elsif val.is_a?(String) config.images[key] = Hashie::Mash.new config.images[key].name = val end config.images[key].tag ||= "latest" end end
resolve_dependency(dep)
click to toggle source
# File lib/decking/parser.rb, line 153 def resolve_dependency dep ret = Hash.new spl = dep.split ':' ret["dep"] = spl[0] unless spl[1].nil? ret["alias"] = spl[1] else ret["alias"] = spl[0] end ret end