module Hodor
module Cli
class Sandbox < ::Hodor::Command
#
# Manual change required:
#
# edit /etc/hadoop/conf/core-site.xml
#
# Change the following sections to agree with:
#
# hadoop.proxyuser.oozie.hosts
# *
#
#
#
# hadoop.proxyuser.oozie.groups
# *
#
#
no_tasks do
def ssh_user_addr(user_key)
va = "#{env[user_key]}@#{env[:ssh_host]}"
va << " -p #{env[:ssh_port] || 22}"
end
def deploy_ssh_key(user_key)
logger.info "Preventing future password prompts for '#{env[user_key]}' sandbox user."
logger.info "Note: this may require you to enter the password for '#{env[user_key]}'."
remote_cmd = %q['umask 077; mkdir -p ~/.ssh; touch ~/.ssh/authorized_keys; cat >> ~/.ssh/authorized_keys']
env.run_local %Q[cat ~/.ssh/id_rsa.pub | ssh #{ssh_user_addr(user_key)} #{remote_cmd}], echo: true, echo_cmd: true
end
def self.help(shell, subcommand = false)
overview = %Q[Hodor's Sandbox namespace functions as a local proxy for Hortonworks "HDP Sandbox" that you may have
running in a virtual machine. The commands in this namespace are responsible for performing one-time
initialization tasks on the sandbox virtual cluster, so that expected user accounts are created etc.
To be clear, Hodor generally does not require that you run Hortonwork's Sandbox. Only this particular
namespace expects that. So, if you aren't running one, just avoid use of this namespace.
Note: this namespace has not be used in well over a year and is probably broken right now. It needs
to be reviewed and updated or overhauled. Meanwhile, use at your own risk.
].unindent(10)
shell.say overview
result = super
more_help = %Q[Getting More Help:
------------------
To get detailed help on specific Sandbox commands (i.e. setup_ssh), run:
$ hodor help sandbox:setup_ssh
$ hodor sandbox:help setup_ssh # alternate, works the same
].unindent(10)
shell.say more_help
result
end
end
# Set up a hortonworks sandbox. Currently, all this does is copy your SSH key
# to avoid password prompting. In the future, we may want to install components
# we expect to be available, etc.
desc "setup_ssh", "Set up a new sandbox to include required components and SSH keys"
def setup_ssh
deploy_ssh_key(:ssh_user)
end
desc "setup_users", "Set up a new sandbox to include required components and SSH keys"
def setup_users
deploy_ssh_key(:oozie_user)
end
desc "setup_hdfs", "Set up a new sandbox to include hdfs directories with required group settings"
def setup_hdfs
oozie_root = env[:oozie_root] || 'pipeline'
invoke "hdfs:fs", %w[-u hdfs -mkdir /shared]
invoke "hdfs:fs", %W[-u hdfs -mkdir /#{oozie_root}]
invoke "hdfs:fs", %w[-u hdfs -chgrp hadoop /shared]
invoke "hdfs:fs", %W[-u hdfs -chgrp hadoop /#{oozie_root}]
end
end
end
end