class InstanceAgent::Plugins::CodeDeployPlugin::CommandBuilder

Attributes

command_array[R]

Public Class Methods

new() click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 75
def initialize()
  @command_array = []
  @copy_targets = Hash.new
  @mkdir_targets = Set.new
  @permission_targets = Set.new
end

Public Instance Methods

cleanup() click to toggle source

Clean up explicitly since these can grow to tens of MBs if the deployment archive is large.

# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 173
def cleanup()
  @command_array.clear
  @command_array = nil
  @copy_targets.clear
  @copy_targets = nil
  @mkdir_targets.clear
  @mkdir_targets = nil
  @permission_targets.clear
  @permission_targets = nil
end
copy(source, destination) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 82
def copy(source, destination)
  destination = sanitize_dir_path(destination)
  log(:debug, "Copying #{source} to #{destination}")
  raise "Duplicate copy instruction to #{destination} from #{source} and #{@copy_targets[destination]}" if @copy_targets.has_key?(destination)
  raise "Duplicate copy instruction to #{destination} from #{source} which is already being installed as a directory" if @mkdir_targets.include?(destination)
  @command_array << CopyCommand.new(source, destination)
  @copy_targets[destination] = source
end
copying_file?(file) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 126
def copying_file?(file)
  file = sanitize_dir_path(file)
  log(:debug, "Checking for #{file} in #{@copy_targets.keys.inspect}")
  @copy_targets.has_key?(file)
end
each(&block) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 168
def each(&block)
  @command_array.each(&block)
end
find_matches(permission) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 138
def find_matches(permission)
  log(:debug, "Finding matches for #{permission.object}")
  matches = []
  if permission.type.include?("file")
    @copy_targets.keys.each do |object|
      log(:debug, "Checking #{object}")
      if (permission.matches_pattern?(object) && !permission.matches_except?(object))
        log(:debug, "Found match #{object}")
        permission.validate_file_acl(object)
        matches << object
      end
    end
  end
  if permission.type.include?("directory")
    @mkdir_targets.each do |object|
      log(:debug, "Checking #{object}")
      if (permission.matches_pattern?(object) && !permission.matches_except?(object))
        log(:debug, "Found match #{object}")
        matches << object
      end
    end
  end
  matches
end
making_directory?(dir) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 132
def making_directory?(dir)
  dir = sanitize_dir_path(dir)
  log(:debug, "Checking for #{dir} in #{@mkdir_targets.inspect}")
  @mkdir_targets.include?(dir)
end
mkdir(destination) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 91
def mkdir(destination)
  destination = sanitize_dir_path(destination)
  log(:debug, "Making directory #{destination}")
  raise "Duplicate mkdir instruction for #{destination} which is already being copied from #{@copy_targets[destination]}" if @copy_targets.has_key?(destination)
  @command_array << MakeDirectoryCommand.new(destination) unless @mkdir_targets.include?(destination)
  @mkdir_targets.add(destination)
end
set_permissions(object, permission) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 99
def set_permissions(object, permission)
  object = sanitize_dir_path(object)
  log(:debug, "Setting permissions on #{object}")
  raise "Duplicate permission setting instructions for #{object}" if @permission_targets.include?(object)
  @permission_targets.add(object)

  if !permission.mode.nil?
    log(:debug, "Setting mode on #{object}")
    @command_array << ChangeModeCommand.new(object, permission.mode.mode)
  end

  if !permission.acls.nil?
    log(:debug, "Setting acl on #{object}")
    @command_array << ChangeAclCommand.new(object, permission.acls)
  end

  if !permission.context.nil?
    log(:debug, "Setting context on #{object}")
    @command_array << ChangeContextCommand.new(object, permission.context)
  end

  if !permission.owner.nil? || !permission.group.nil?
    log(:debug, "Setting ownership of #{object}")
    @command_array << ChangeOwnerCommand.new(object, permission.owner, permission.group)
  end
end
to_json() click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 163
def to_json
  command_json = @command_array.map(&:to_h)
  {:instructions => command_json}.to_json
end

Private Instance Methods

description() click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 190
def description
  self.class.to_s
end
log(severity, message) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 195
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
sanitize_dir_path(path) click to toggle source
# File lib/instance_agent/plugins/codedeploy/install_instruction.rb, line 185
def sanitize_dir_path(path)
  File.expand_path(path)
end