From c76221182ca98ed804cc0c5259982250fa45f67c Mon Sep 17 00:00:00 2001 From: elijah Date: Wed, 28 Nov 2012 01:40:20 -0800 Subject: give the user a nice error if 'init-node' has not yet been run (or if there are required packages that are missing). --- lib/leap_cli/remote/plugin.rb | 39 +++++++++++++++++++++++++++++++++++---- lib/leap_cli/remote/tasks.rb | 17 +++++------------ 2 files changed, 40 insertions(+), 16 deletions(-) (limited to 'lib/leap_cli/remote') diff --git a/lib/leap_cli/remote/plugin.rb b/lib/leap_cli/remote/plugin.rb index a69cca4..6dafbd8 100644 --- a/lib/leap_cli/remote/plugin.rb +++ b/lib/leap_cli/remote/plugin.rb @@ -4,18 +4,49 @@ module LeapCli; module Remote; module Plugin + def required_packages + "puppet ruby-hiera-puppet rsync lsb-release" + end + def log(*args, &block) LeapCli::Util::log(*args, &block) end - def mkdir(dir) - run "mkdir -p #{dir}" + # + # creates directories that are owned by root and 700 permissions + # + def mkdirs(*dirs) + raise ArgumentError.new('illegal dir name') if dirs.grep(/[\' ]/).any? + run dirs.collect{|dir| "mkdir -m 700 -p #{dir}; "}.join end - def chown_root(dir) - run "chown root -R #{dir} && chmod -R ag-rwx,u+rwX #{dir}" + def assert_initialized + + begin + test_initialized_file = "test -f /srv/leap/initialized" + check_required_packages = "! dpkg-query -W --showformat='${Status}\n' #{required_packages} 2>&1 | grep -q -E '(deinstall|no packages)'" + run "#{test_initialized_file} && #{check_required_packages}" + rescue Capistrano::CommandError => exc + LeapCli::Util.bail! do + exc.hosts.each do |host| + LeapCli::Util.log :error, "running deploy: node not initialized. Run 'leap init-node #{host}'", :host => host + end + end + end end + def mark_initialized + run "touch /srv/leap/initialized" + end + + #def mkdir(dir) + # run "mkdir -p #{dir}" + #end + + #def chown_root(dir) + # run "chown root -R #{dir} && chmod -R ag-rwx,u+rwX #{dir}" + #end + # # takes a block, yielded a server, that should return {:source => '', :dest => ''} # diff --git a/lib/leap_cli/remote/tasks.rb b/lib/leap_cli/remote/tasks.rb index 4a29517..ef41cb0 100644 --- a/lib/leap_cli/remote/tasks.rb +++ b/lib/leap_cli/remote/tasks.rb @@ -9,30 +9,23 @@ MAX_HOSTS = 10 task :install_authorized_keys, :max_hosts => MAX_HOSTS do leap.log :updating, "authorized_keys" do - run 'mkdir -p /root/.ssh && chmod 700 /root/.ssh' + leap.mkdirs '/root/.ssh' upload LeapCli::Path.named_path(:authorized_keys), '/root/.ssh/authorized_keys', :mode => '600' end end task :install_prerequisites, :max_hosts => MAX_HOSTS do - packages = "puppet ruby-hiera-puppet rsync lsb-release" - run "mkdir -p #{puppet_destination}" + leap.mkdirs puppet_destination leap.log :updating, "package list" do run "apt-get update" end leap.log :installing, "required packages" do - run "DEBIAN_FRONTEND=noninteractive apt-get -q -y -o DPkg::Options::=--force-confold install #{packages}" + run "DEBIAN_FRONTEND=noninteractive apt-get -q -y -o DPkg::Options::=--force-confold install #{leap.required_packages}" end + leap.mkdirs("/etc/leap", "/srv/leap") + leap.mark_initialized end -#task :update_platform, :max_hosts => MAX_HOSTS do -# puppet.update_code -#end - -#task :mk_leap_dir, :max_hosts => MAX_HOSTS do -# run 'mkdir -p /root/leap/config && chown -R root /root/leap && chmod -R ag-rwx,u+rwX /root/leap' -#end - task :apply_puppet, :max_hosts => MAX_HOSTS do raise "now such directory #{puppet_source}" unless File.directory?(puppet_source) leap.log :applying, "puppet" do -- cgit v1.2.3