class Ec2::SaltCloud

Attributes

config[RW]
hosts_file[W]

Public Class Methods

new() click to toggle source
# File lib/ec2/salt_cloud.rb, line 17
def initialize
end

Public Instance Methods

run() click to toggle source
# File lib/ec2/salt_cloud.rb, line 20
def run
  init_working_dir
  copy_providers
  copy_profiles
  copy_master_config
  copy_deploy_scripts
  init_aws
  render_global_profiles
  render_local_profile
  run_salt_cloud
end

Private Instance Methods

api() click to toggle source
# File lib/ec2/salt_cloud.rb, line 42
def api
  @api ||= QueryApi.new(vpc_id: config[:vpc_id])
end
copy_deploy_scripts() click to toggle source
# File lib/ec2/salt_cloud.rb, line 76
def copy_deploy_scripts
  return if not File.directory? "/etc/salt/cloud.deploy.d"
  FileUtils.cp_r "/etc/salt/cloud.deploy.d", working_dir
end
copy_master_config() click to toggle source
# File lib/ec2/salt_cloud.rb, line 72
def copy_master_config
  FileUtils.cp "/etc/salt/master", working_dir
end
copy_profiles() click to toggle source
# File lib/ec2/salt_cloud.rb, line 64
def copy_profiles
  return if not File.directory? "/etc/salt/cloud.profiles.d"
  Dir["/etc/salt/cloud.profiles.d/*.conf"].each do |f|
    path = Pathname.new f
    FileUtils.cp path, "#{working_dir}/cloud.profiles.d/_#{path.basename}"
  end
end
copy_providers() click to toggle source
# File lib/ec2/salt_cloud.rb, line 59
def copy_providers
  return if not File.directory? "/etc/salt/cloud.providers.d"
  FileUtils.cp_r "/etc/salt/cloud.providers.d", working_dir
end
hosts_file() click to toggle source
# File lib/ec2/salt_cloud.rb, line 50
def hosts_file
  @hosts_file ||= "hosts"
end
init_aws() click to toggle source
# File lib/ec2/salt_cloud.rb, line 34
def init_aws
  if not config[:use_iam]
    credentials = Aws::Credentials.new(config[:aws_key], config[:aws_secret])
    Aws.config[:credentials] = credentials
  end
  Aws.config[:region] = config[:region]
end
init_working_dir() click to toggle source
# File lib/ec2/salt_cloud.rb, line 54
def init_working_dir
  FileUtils.rm_r working_dir if File.directory? working_dir
  FileUtils.mkdir_p "#{working_dir}/cloud.profiles.d"
end
render(path, prefix: nil) click to toggle source
# File lib/ec2/salt_cloud.rb, line 92
def render(path, prefix: nil)
  extname = File.extname path
  name = File.basename(path, extname)
  outfile = "#{working_dir}/cloud.profiles.d/#{prefix}#{name}.conf"
  case extname
  when ".rb"
    profile_dsl = ProfileDsl.new(path, api: api)
    File.open(outfile, "w") { |f| f.write profile_dsl.render }
  when ".erb"
    erb = ErbProfile.new(path, api: api)
    File.open(outfile, "w") { |f| f.write erb.render } 
  end
end
render_global_profiles() click to toggle source
# File lib/ec2/salt_cloud.rb, line 81
def render_global_profiles
  Dir["/etc/salt/cloud.profiles.d/*.erb"].each do |f|
    render(f, prefix: "_")
  end
end
render_local_profile() click to toggle source
# File lib/ec2/salt_cloud.rb, line 87
def render_local_profile
  local_profile = ["profiles.rb", "profiles.erb"].find { |f| File.readable? f }
  render(local_profile) if local_profile
end
run_salt_cloud() click to toggle source
# File lib/ec2/salt_cloud.rb, line 106
def run_salt_cloud
  logger.debug "running salt cloud"
  command =  %Q( salt-cloud -m #{hosts_file} -c #{working_dir} )
  command << " -l debug" if logger.trace?
  system command
end
working_dir() click to toggle source
# File lib/ec2/salt_cloud.rb, line 46
def working_dir
  @working_dir ||= ".salt.tmp"
end