Skip to content

Instantly share code, notes, and snippets.

@solarce
Created October 29, 2014 19:54
Show Gist options
  • Save solarce/409e5fb2bd688079e6b7 to your computer and use it in GitHub Desktop.
Save solarce/409e5fb2bd688079e6b7 to your computer and use it in GitHub Desktop.
example of ruby code to help drive terraform apply
#!/usr/bin/ruby
# terraform/lib/terraform.rb
require_relative 'aws'
$terraform_dir = "/opt/terraform"
$terraform_templates = "/opt/terraform_templates"
$terraform_bin = "#{$terraform_dir}/terraform"
def set_terraform_variables(network_zone, instance_name, cluster_name)
key_name = "rundeck-stage"
key_path = "/var/lib/rundeck/.ssh/id_rsa"
aws_region = ENV['RD_OPTION_REGION']
aws_access_key = ENV['AWS_ACCESS_KEY']
aws_secret_key = ENV['AWS_SECRET_KEY']
instance_type = ENV['RD_OPTION_INSTANCE_SIZE']
subnet_id = get_subnet_id(aws_region, network_zone)
image_id= ENV['RD_OPTION_AMI_ID']
user_data = create_user_data(instance_name, cluster_name)
variables =
"-var instance_name=#{instance_name} " +
"-var key_name=#{key_name} " +
"-var key_path=#{key_path} " +
"-var aws_region=#{aws_region} " +
"-var aws_access_key=#{aws_access_key} " +
"-var aws_secret_key=#{aws_secret_key} " +
"-var instance_type=#{instance_type} " +
"-var subnet_id=#{subnet_id} " +
"-var image_id=#{image_id} " +
"-var user_data=#{user_data} "
return variables
end
def terraform_apply(network_zone, instance_name, instance_volume_option, cluster_name)
terraform_cluster_state_file = "/var/lib/rundeck/data/terraform_#{cluster_name}.tfstate"
terraform_variables = set_terraform_variables(network_zone, instance_name, cluster_name)
terraform_cmd = "#{$terraform_bin} apply -no-color --state=#{terraform_cluster_state_file} #{terraform_variables} #{$terraform_templates}"
puts "****"
puts "..Launching instance: #{instance_name}"
puts "..Executing #{$terraform_bin} to build #{instance_name}"
instance_id = ""
instance_ip_address = ""
IO.popen(terraform_cmd) do |io|
while (line = io.gets) do
if line =~ /instance_id/
instance_id = line.split("=")[1].strip
elsif line =~ /instance_ip_address/
instance_ip_address = line.split("=")[1].strip
end
puts "...." + line
end
end
return instance_id, instance_ip_address
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment