class AmoebaDeployTools::Node
Public Instance Methods
bootstrap()
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 14 def bootstrap logger.info 'Starting `bootstrap`!' refresh knife_solo :prepare, 'bootstrap-version' => options[:version], ssh: true, interactive: options[:interactive] knife_solo :cook, ssh: true, include_private_key: true, interactive: options[:interactive] do |j| j.run_list = ['role[base]'] end force_deployer pull logger.warn 'Node bootstrapped successfully, you can now push to the node:' logger.warn "\tamoeba node push --node #{options[:node]}\n" end
exec(cmd)
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 118 def exec(cmd) ssh_run(cmd, interactive: true) end
force_deployer()
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 33 def force_deployer logger.info 'Starting force_deployer' data_bag(:nodes)[node.name] = { deployment: { user: node.depoyment_.user || 'deploy' } } end
list()
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 71 def list inside_kitchen do puts Dir.glob('nodes/*.json').sort.map {|n| File.basename(n).sub(/\.json$/, '')} end end
pull()
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 47 def pull logger.info 'Starting `pull`!' force_deployer unless remote_node.deployment_.user raw_json = ssh_run('sudo cat ~deploy/node.json', silent: true) # Store the remote_node databag data_bag(:nodes)[node.name] = JSON.load raw_json # Now check and see if we are missing the private_key on this node private_key = remote_node.private_key || 'default' private_key_raw = remote_node.private_key_raw if private_key_raw # If we don't already have the private_key in our config, let's add it unless config.private_keys_[private_key] logger.info "Saving new private key `#{private_key}` to config file..." config.private_keys![private_key] = private_key_raw config.save end end end
push()
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 39 def push logger.info 'Starting push...' refresh knife_solo :cook, ssh: true, include_private_key: true pull end
refresh()
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 84 def refresh logger.info "Starting `refresh`!" inside_kitchen do # Handle authorized_keys logger.debug '# Refreshing authorized_keys' Dir.glob('authorized_keys/*') do |user_dir| if File.directory? user_dir user_name = File.basename(user_dir) logger.info "Processing SSH keys for user #{user_name}." user_bag = data_bag(:authorized_keys)[user_name] user_bag[:keys] = [] Dir.glob(File.join(user_dir, '*')) do |key_file| logger.debug "Reading key file: #{key_file}" user_bag[:keys] << File.read(key_file).strip end logger.info "Writing #{user_bag.options[:filename]}" user_bag.save else logger.info "Ignoring file in authorized_keys (must be inside a directory): #{f}" end end logger.debug '# Ensuring bundle is up to date' # Handle bundler, ensure it's up to date unless system('bundle check > /dev/null 2>&1') logger.info "Bundle out of date! Running bundle update..." Cocaine::CommandLine.new('bundle', 'install').run end end end
ssh()
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 123 def ssh exec nil end
sudo(cmd)
click to toggle source
# File lib/amoeba_deploy_tools/commands/node.rb, line 128 def sudo(cmd) # pull args off of cmd exec("sudo #{cmd}") end