class InstanceAgent::Plugins::CodeDeployPlugin::Installer
Manages install and cleanup files. Also generates and executes install instructions based on the files section of the application specification file.
Attributes
deployment_archive_dir[R]
deployment_instructions_dir[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 11 def initialize(opts = {}) raise "the deployment_archive_dir option is required" if opts[:deployment_archive_dir].nil? raise "the deployment_instructions_dir option is required" if opts[:deployment_instructions_dir].nil? @deployment_archive_dir = opts[:deployment_archive_dir] @deployment_instructions_dir = opts[:deployment_instructions_dir] end
Public Instance Methods
install(deployment_group_id, application_specification)
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 21 def install(deployment_group_id, application_specification) cleanup_file = File.join(deployment_instructions_dir, "#{deployment_group_id}-cleanup") if File.exists?(cleanup_file) commands = InstallInstruction.parse_remove_commands(File.read(cleanup_file)) commands.each do |cmd| cmd.execute end commands.clear FileUtils.rm(cleanup_file) end instructions = generate_instructions(application_specification) install_file = File.join(deployment_instructions_dir, "#{deployment_group_id}-install.json") File.open(install_file, "w") do |f| f.write(instructions.to_json) end File.open(cleanup_file, "w") do |f| instructions.command_array.each do |cmd| cmd.execute(f) end end #Unlink references to the CommandBuilder instance that was yielded to the Proc object(code block) in generate_instructions() instructions.cleanup instructions = nil end
Private Instance Methods
description()
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 135 def description self.class.to_s end
fill_in_missing_ancestors(i, destination)
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 120 def fill_in_missing_ancestors(i, destination) missing_ancestors = [] parent_dir = File.dirname(destination) while !File.exists?(parent_dir) && parent_dir != "." && parent_dir != "/" missing_ancestors.unshift(parent_dir) parent_dir = File.dirname(parent_dir) end missing_ancestors.each do |dir| i.mkdir(dir) end end
generate_directory_copy(i, absolute_source_path, destination)
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 95 def generate_directory_copy(i, absolute_source_path, destination) unless File.directory?(destination) i.mkdir(destination) end (Dir.entries(absolute_source_path) - [".", ".."]).each do |entry| absolute_entry_path = File.join(absolute_source_path, entry) entry_destination = File.join(destination, entry) if File.directory?(absolute_entry_path) generate_directory_copy(i, absolute_entry_path, entry_destination) else generate_normal_copy(i, absolute_entry_path, entry_destination) end end end
generate_instructions(application_specification)
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 53 def generate_instructions(application_specification) InstallInstruction.generate_instructions() do |i| application_specification.files.each do |fi| absolute_source_path = File.join(deployment_archive_dir, fi.source) log(:debug, "generating instructions for copying #{fi.source} to #{fi.destination}") if File.directory?(absolute_source_path) fill_in_missing_ancestors(i, fi.destination) generate_directory_copy(i, absolute_source_path, fi.destination) else file_destination = File.join(fi.destination, File.basename(absolute_source_path)) fill_in_missing_ancestors(i, file_destination) generate_normal_copy(i, absolute_source_path, file_destination) end end (application_specification.permissions || []).each do |permission| object = permission.object log(:debug, "generating instructions for setting permissions on object #{object}") log(:debug, "it is an existing directory - #{File.directory?(object)}") if i.copying_file?(object) if permission.type.include?("file") log(:debug, "found matching file #{object} to set permissions on") permission.validate_file_permission permission.validate_file_acl(object) i.set_permissions(object, permission) end elsif (i.making_directory?(object) || File.directory?(object)) log(:debug, "found matching directory #{object} to search for objects to set permissions on") i.find_matches(permission).each do|match| log(:debug, "found matching object #{match} to set permissions on") i.set_permissions(match, permission) end end end end end
generate_normal_copy(i, absolute_source_path, destination)
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 112 def generate_normal_copy(i, absolute_source_path, destination) raise "File already exists at location #{destination}" if File.exists?(destination) i.copy(absolute_source_path, destination) end
log(severity, message)
click to toggle source
# File lib/instance_agent/plugins/codedeploy/installer.rb, line 140 def log(severity, message) raise ArgumentError, "Unknown severity #{severity.inspect}" unless InstanceAgent::Log::SEVERITIES.include?(severity.to_s) InstanceAgent::Log.send(severity.to_sym, "#{description}: #{message}") end