lib/engineyard-metadata/chef_dna.rb in engineyard-metadata-0.1.2 vs lib/engineyard-metadata/chef_dna.rb in engineyard-metadata-0.2.0

- old
+ new

@@ -5,141 +5,128 @@ }.each do |active_support_3_requirement| require active_support_3_requirement end if ActiveSupport::VERSION::MAJOR == 3 module EY - module Metadata + class Metadata # An adapter that reads from /etc/chef/dna.json, which is only available on cloud instances. class ChefDna PATH = '/etc/chef/dna.json' include SshAliasHelper - def data # :nodoc: - @data ||= ActiveSupport::JSON.decode File.read(PATH) + def dna # :nodoc: + @dna ||= ActiveSupport::JSON.decode File.read(PATH) end + + def application # :nodoc: + dna['engineyard']['environment']['apps'].detect { |a| a['name'] == EY.metadata.app_name } + end # The present instance's role def present_instance_role - data['instance_role'] + dna['instance_role'] end # The present instance's public hostname. def present_public_hostname - data['engineyard']['environment']['instances'].detect { |i| i['id'] == EY::Metadata.present_instance_id }['public_hostname'] + dna['engineyard']['environment']['instances'].detect { |i| i['id'] == EY.metadata.present_instance_id }['public_hostname'] end # Currently the same as the SSH password. def database_password - data['users'][0]['password'] + dna['users'][0]['password'] end # Currently the same as the SSH username. def database_username - data['users'][0]['username'] + dna['users'][0]['username'] end # For newly deployed applications, equal to the application name. def database_name - data['engineyard']['environment']['apps'][0]['database_name'] + application['database_name'] end # The git repository that you told EngineYard to use for this application. def repository_uri - data['engineyard']['environment']['apps'][0]['repository_name'] + application['repository_name'] end - - # The name of the single app that runs in this environment. - # - # Warning: this gem currently doesn't support multiple apps per environment. - def app_name - data['engineyard']['environment']['apps'][0]['name'] - end - - # The path to the current deploy on app servers. - def current_path - "/data/#{app_name}/current" - end - - # The path to the shared directory on app servers. - def shared_path - "/data/#{app_name}/shared" - end # Public hostname where you should connect to the database. # # Currently the db master public hostname. def database_host db_master end # SSH username. def ssh_username - data['engineyard']['environment']['ssh_username'] + dna['engineyard']['environment']['ssh_username'] end # SSH password. def ssh_password - data['engineyard']['environment']['ssh_password'] + dna['engineyard']['environment']['ssh_password'] end # The public hostnames of all the app servers. # # If you're on a solo app, it counts the solo as an app server. def app_servers - data['engineyard']['environment']['instances'].select { |i| %w{ app_master app solo }.include? i['role'] }.map { |i| i['public_hostname'] }.sort + dna['engineyard']['environment']['instances'].select { |i| %w{ app_master app solo }.include? i['role'] }.map { |i| i['public_hostname'] }.sort end # The public hostnames of all the app slaves. def app_slaves - data['engineyard']['environment']['instances'].select { |i| %w{ app }.include? i['role'] }.map { |i| i['public_hostname'] }.sort + dna['engineyard']['environment']['instances'].select { |i| %w{ app }.include? i['role'] }.map { |i| i['public_hostname'] }.sort end # The public hostnames of all the db servers. # # If you're on a solo app, it counts the solo as a db server. def db_servers - data['engineyard']['environment']['instances'].select { |i| %w{ db_master db_slave solo }.include? i['role'] }.map { |i| i['public_hostname'] }.sort + dna['engineyard']['environment']['instances'].select { |i| %w{ db_master db_slave solo }.include? i['role'] }.map { |i| i['public_hostname'] }.sort end # The public hostnames of all the db slaves. def db_slaves - data['engineyard']['environment']['instances'].select { |i| %w{ db_slave }.include? i['role'] }.map { |i| i['public_hostname'] }.sort + dna['engineyard']['environment']['instances'].select { |i| %w{ db_slave }.include? i['role'] }.map { |i| i['public_hostname'] }.sort end # The public hostnames of all the utility servers. # # If you're on a solo app, it counts the solo as a utility. def utilities - data['engineyard']['environment']['instances'].select { |i| %w{ util solo }.include? i['role'] }.map { |i| i['public_hostname'] }.sort + dna['engineyard']['environment']['instances'].select { |i| %w{ util solo }.include? i['role'] }.map { |i| i['public_hostname'] }.sort end # The public hostname of the app_master. # # If you're on a solo app, it counts the solo as the app_master. def app_master - if x = data['engineyard']['environment']['instances'].detect { |i| i['role'] == 'app_master' } + if x = dna['engineyard']['environment']['instances'].detect { |i| i['role'] == 'app_master' } x['public_hostname'] else solo end end # The public hostname of the db_master. # # If you're on a solo app, it counts the solo as the app_master. def db_master - if x = data['engineyard']['environment']['instances'].detect { |i| i['role'] == 'db_master' } + if x = dna['engineyard']['environment']['instances'].detect { |i| i['role'] == 'db_master' } x['public_hostname'] else solo end end # The public hostname of the solo. def solo - if x = data['engineyard']['environment']['instances'].detect { |i| i['role'] == 'solo' } + if x = dna['engineyard']['environment']['instances'].detect { |i| i['role'] == 'solo' } x['public_hostname'] end end # The shell command for mysql, including username, password, hostname and database @@ -152,15 +139,15 @@ "/usr/bin/mysqldump -h #{database_host} -u #{database_username} -p#{database_password} #{database_name}" end # The name of the EngineYard AppCloud environment. def environment_name - data['environment']['name'] + dna['environment']['name'] end # The stack in use, like nginx_passenger. def stack_name - data['engineyard']['environment']['stack_name'] + dna['engineyard']['environment']['stack_name'] end end end end