add support for the banner :-)

Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
This commit is contained in:
Nico Schottelius 2011-09-08 22:40:12 +02:00
parent f31f33418f
commit ab0cd9430f
2 changed files with 56 additions and 35 deletions

View file

@ -28,6 +28,21 @@ import shutil
import sys import sys
import tempfile import tempfile
BANNER = """
.. . .x+=:. s
dF @88> z` ^% :8
'88bu. %8P . <k .88
. '*88888bu . .@8Ned8" :888ooo
.udR88N ^"*8888N .@88u .@^%8888" -*8888888
<888'888k beWE "888L ''888E` x88: `)8b. 8888
9888 'Y" 888E 888E 888E 8888N=*8888 8888
9888 888E 888E 888E %8" R88 8888
9888 888E 888F 888E @8Wou 9% .8888Lu=
?8888u../ .888N..888 888& .888888P` ^%888*
"8888P' `"888*"" R888" ` ^"F 'Y"
"P' "" ""
"""
# Given paths from installation # Given paths from installation
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
CONF_DIR = os.path.join(BASE_DIR, "conf") CONF_DIR = os.path.join(BASE_DIR, "conf")
@ -72,6 +87,12 @@ log = logging.getLogger()
def list_types(): def list_types():
return os.listdir(TYPE_DIR) return os.listdir(TYPE_DIR)
def banner():
"""Guess what :-)"""
print(BANNER)
class Cdist: class Cdist:
"""Cdist main class to hold arbitrary data""" """Cdist main class to hold arbitrary data"""
@ -166,6 +187,10 @@ class Cdist:
"""Return list of available explorers""" """Return list of available explorers"""
return os.listdir(GLOBAL_EXPLORER_DIR) return os.listdir(GLOBAL_EXPLORER_DIR)
def list_type_explorers(self, type):
"""Return list of available explorers for a specific type"""
return os.listdir(type_explorer_dir(type))
def list_object_paths(self, starting_point = False): def list_object_paths(self, starting_point = False):
"""Return list of paths of existing objects""" """Return list of paths of existing objects"""
object_paths = [] object_paths = []
@ -199,27 +224,35 @@ class Cdist:
object_paths = self.list_object_paths(starting_point) object_paths = self.list_object_paths(starting_point)
objects = [] objects = []
log.debug("Paths recieved: %s", object_paths) log.debug("Paths recieved: %s", object_paths)
log.debug("And te starting point: %s", starting_point)
for path in object_paths: for path in object_paths:
objects.append(os.path.relpath(path, starting_point)) objects.append(os.path.relpath(path, starting_point))
return objects return objects
def type_explorer_dir(self, type):
"""Return directory that holds the explorers of a type"""
return os.path.join(TYPE_DIR, type, "explorer")
def remote_type_explorer_dir(type):
"""Return remote directory that holds the explorers of a type"""
return os.path.join(REMOTE_TYPE_DIR, type, "explorer")
def transfer_global_explorers(self): def transfer_global_explorers(self):
self.transfer_dir(GLOBAL_EXPLORER_DIR, REMOTE_GLOBAL_EXPLORER_DIR) self.transfer_dir(GLOBAL_EXPLORER_DIR, REMOTE_GLOBAL_EXPLORER_DIR)
def transfer_type_explorers(self, type): def transfer_type_explorers(self, type):
"""Transfer explorers of a type, but only once""" """Transfer explorers of a type, but only once"""
if type in self.type_explorers_transferred: if type in self.type_explorers_transferred:
log.debug("Skipping retransfer for %s", type)
return return
src = os.path.join(TYPE_DIR, type) src = self.type_explorer_dir(type)
base = os.path.join(REMOTE_TYPE_DIR, type) remote_base = os.path.join(REMOTE_TYPE_DIR, type)
dst = os.path.join(base, "explorer") dst = self.type_explorer_dir(type)
# Ensure the path path exists # Ensure the path path exists
self.remote_run_or_fail(["mkdir", "-p", base]) self.remote_run_or_fail(["mkdir", "-p", remote_base])
self.transfer_dir(src, dst) self.transfer_dir(src, dst)
# Do not retransfer # Do not retransfer
@ -258,6 +291,17 @@ class Cdist:
type = self.get_type_from_object(cdist_object) type = self.get_type_from_object(cdist_object)
self.transfer_type_explorers(type) self.transfer_type_explorers(type)
cmd = []
cmd.append("__explorer=" + REMOTE_GLOBAL_EXPLORER_DIR)
cmd.append("__type_explorer=" + remote_type_explorer_dir(type))
explorers = list_type_explorers(type)
for explorer in explorers:
remote_cmd = cmd
remote_cmd.append(os.path.join(remote_type_explorer_dir(type), explorer))
self.remote_run_or_fail(remote_cmd)
def init_deploy(self): def init_deploy(self):
log.info("Creating clean directory structure") log.info("Creating clean directory structure")
@ -306,6 +350,9 @@ class Cdist:
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description='cdist ' + VERSION) parser = argparse.ArgumentParser(description='cdist ' + VERSION)
parser.add_argument('host', nargs='+', help='one or more hosts to operate on') parser.add_argument('host', nargs='+', help='one or more hosts to operate on')
parser.add_argument('-b', '--banner',
help='Show cdist banner',
action='store_true', dest='banner')
parser.add_argument('-d', '--debug', help='set log level to debug', parser.add_argument('-d', '--debug', help='set log level to debug',
action='store_true') action='store_true')
parser.add_argument('-i', '--initial-manifest', parser.add_argument('-i', '--initial-manifest',
@ -322,6 +369,10 @@ if __name__ == "__main__":
if args.debug: if args.debug:
logging.root.setLevel(logging.DEBUG) logging.root.setLevel(logging.DEBUG)
if args.banner:
banner()
sys.exit(0)
try: try:
log.debug(args) log.debug(args)

View file

@ -1,30 +0,0 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Check whether file exists or not
#
destination="/$__object_id"
if [ -e "$destination" ]; then
echo yes
else
echo no
fi