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