class FogToTerraform::App
Public Class Methods
start(args)
click to toggle source
# File lib/fog_to_terraform/app.rb, line 7 def self.start(args) # for cyoi extend Cyoi::Cli::Helpers::Settings @settings_dir = File.expand_path(".") credentials_file = "~/.fog" aws_region = "us-west-2" opts = OptionParser.new do |opts| opts.banner = "fog_to_terraform {options} credentials-key" opts.separator "" opts.separator "Options are ..." opts.on_tail("-h", "--help", "-H", "Display this help message.") do puts opts exit 1 end opts.on '--credentials-path="FILE"', '-C', 'Path to the credentials file', lambda { |value| credentials_file = value } end remaining_args = opts.parse(args) all_credentials = YAML.load_file(File.expand_path(credentials_file)) unless credentials_key = remaining_args.shift if all_credentials.keys.size == 1 credentials_key = all_credentials.keys.first else $stderr.puts "#{credentials_file} contains more than one key; pass it as an argument\n\n" puts opts exit 1 end end credentials = all_credentials[credentials_key.to_sym] || all_credentials[credentials_key.to_s] unless credentials $stderr.puts "Cannot find '#{credentials_key}' key in #{credentials_file}\n\n" puts opts exit 1 end # Only AWS supported currently aws_access_key_id = credentials[:aws_access_key_id] aws_secret_access_key = credentials[:aws_secret_access_key] unless aws_access_key_id && aws_secret_access_key $stderr.puts "AWS credentials require :aws_access_key_id and :aws_secret_access_key keys" exit 1 end aws_key_path = "ssh/#{credentials_key.to_s}.pem" aws_key_name = credentials_key.to_s File.open("terraform.tfvars", "w") do |f| f << <<-EOS aws_access_key = "#{aws_access_key_id}" aws_secret_key = "#{aws_secret_access_key}" aws_key_path = "#{aws_key_path}" aws_key_name = "#{aws_key_name}" aws_region = "#{aws_region}" network = "10.10" EOS end puts "created terraform.tfvars" settings.set "provider.name", "aws" settings.set "provider.credentials.aws_access_key_id", aws_access_key_id settings.set "provider.credentials.aws_secret_access_key", aws_secret_access_key settings.set "provider.region", aws_region save_settings! reload_settings! keypair = Cyoi::Cli::KeyPair.new([aws_key_name, settings_dir]) keypair.execute! reload_settings! mkdir_p(File.dirname(aws_key_path)) chmod(0700, File.dirname(aws_key_path)) private_key = settings.key_pair.private_key File.open(aws_key_path, "w") { |file| file << private_key } chmod(0600, aws_key_path) puts "created #{aws_key_path}" end