forked from ungleich-public/cdist
		
	Let core use random .cdist directory for objects
Signed-off-by: Nico Schottelius <nico@freiheit.schottelius.org>
This commit is contained in:
		
					parent
					
						
							
								ff00df72ad
							
						
					
				
			
			
				commit
				
					
						73c77dd2d3
					
				
			
		
					 8 changed files with 79 additions and 26 deletions
				
			
		| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2010-2012 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2010-2015 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -41,8 +41,6 @@ BANNER = """
 | 
				
			||||||
   "P'        ""         ""
 | 
					   "P'        ""         ""
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DOT_CDIST   = ".cdist"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
REMOTE_COPY = "scp -o User=root -q"
 | 
					REMOTE_COPY = "scp -o User=root -q"
 | 
				
			||||||
REMOTE_EXEC = "ssh -o User=root -q"
 | 
					REMOTE_EXEC = "ssh -o User=root -q"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
#!/usr/bin/env python3
 | 
					#!/usr/bin/env python3
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2010-2014 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2010-2015 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -162,7 +162,8 @@ class Config(object):
 | 
				
			||||||
    def object_list(self):
 | 
					    def object_list(self):
 | 
				
			||||||
        """Short name for object list retrieval"""
 | 
					        """Short name for object list retrieval"""
 | 
				
			||||||
        for cdist_object in core.CdistObject.list_objects(self.local.object_path,
 | 
					        for cdist_object in core.CdistObject.list_objects(self.local.object_path,
 | 
				
			||||||
                                                         self.local.type_path):
 | 
					                                                         self.local.type_path,
 | 
				
			||||||
 | 
					                                                         self.local.object_marker_name):
 | 
				
			||||||
            if cdist_object.cdist_type.is_install:
 | 
					            if cdist_object.cdist_type.is_install:
 | 
				
			||||||
                self.log.debug("Running in config mode, ignoring install object: {0}".format(cdist_object))
 | 
					                self.log.debug("Running in config mode, ignoring install object: {0}".format(cdist_object))
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2010-2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					# 2010-2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
				
			||||||
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2014-2015 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
				
			||||||
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2011-2015 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
# 2014 Daniel Heule (hda at sfs.biz)
 | 
					# 2014 Daniel Heule (hda at sfs.biz)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ class CdistObject(object):
 | 
				
			||||||
    STATE_RUNNING = "running"
 | 
					    STATE_RUNNING = "running"
 | 
				
			||||||
    STATE_DONE = "done"
 | 
					    STATE_DONE = "done"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, cdist_type, base_path, object_marker=".cdist", object_id=''):
 | 
					    def __init__(self, cdist_type, base_path, object_marker, object_id):
 | 
				
			||||||
        self.cdist_type = cdist_type # instance of Type
 | 
					        self.cdist_type = cdist_type # instance of Type
 | 
				
			||||||
        self.base_path = base_path
 | 
					        self.base_path = base_path
 | 
				
			||||||
        self.object_id = object_id
 | 
					        self.object_id = object_id
 | 
				
			||||||
| 
						 | 
					@ -75,30 +75,34 @@ class CdistObject(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.name = self.join_name(self.cdist_type.name, self.object_id)
 | 
					        self.name = self.join_name(self.cdist_type.name, self.object_id)
 | 
				
			||||||
        self.path = os.path.join(self.cdist_type.path, self.object_id, self.object_marker)
 | 
					        self.path = os.path.join(self.cdist_type.path, self.object_id, self.object_marker)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.absolute_path = os.path.join(self.base_path, self.path)
 | 
					        self.absolute_path = os.path.join(self.base_path, self.path)
 | 
				
			||||||
        self.code_local_path = os.path.join(self.path, "code-local")
 | 
					        self.code_local_path = os.path.join(self.path, "code-local")
 | 
				
			||||||
        self.code_remote_path = os.path.join(self.path, "code-remote")
 | 
					        self.code_remote_path = os.path.join(self.path, "code-remote")
 | 
				
			||||||
        self.parameter_path = os.path.join(self.path, "parameter")
 | 
					        self.parameter_path = os.path.join(self.path, "parameter")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def list_objects(cls, object_base_path, type_base_path):
 | 
					    def list_objects(cls, object_base_path, type_base_path, object_marker):
 | 
				
			||||||
        """Return a list of object instances"""
 | 
					        """Return a list of object instances"""
 | 
				
			||||||
        for object_name in cls.list_object_names(object_base_path):
 | 
					        for object_name in cls.list_object_names(object_base_path, object_marker):
 | 
				
			||||||
            type_name, object_id = cls.split_name(object_name)
 | 
					            type_name, object_id = cls.split_name(object_name)
 | 
				
			||||||
            yield cls(cdist.core.CdistType(type_base_path, type_name), object_base_path, object_id=object_id)
 | 
					            yield cls(cdist.core.CdistType(type_base_path, type_name),
 | 
				
			||||||
 | 
					                base_path=object_base_path,
 | 
				
			||||||
 | 
					                object_marker=object_marker,
 | 
				
			||||||
 | 
					                object_id=object_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @classmethod
 | 
				
			||||||
 | 
					    def list_object_names(cls, object_base_path, object_marker):
 | 
				
			||||||
 | 
					        """Return a list of object names"""
 | 
				
			||||||
 | 
					        for path, dirs, files in os.walk(object_base_path):
 | 
				
			||||||
 | 
					            if object_marker in dirs:
 | 
				
			||||||
 | 
					                yield os.path.relpath(path, object_base_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @classmethod
 | 
				
			||||||
    def list_type_names(cls, object_base_path):
 | 
					    def list_type_names(cls, object_base_path):
 | 
				
			||||||
        """Return a list of type names"""
 | 
					        """Return a list of type names"""
 | 
				
			||||||
        return os.listdir(object_base_path)
 | 
					        return os.listdir(object_base_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					 | 
				
			||||||
    def list_object_names(cls, object_base_path):
 | 
					 | 
				
			||||||
        """Return a list of object names"""
 | 
					 | 
				
			||||||
        for path, dirs, files in os.walk(object_base_path):
 | 
					 | 
				
			||||||
            if self.object_marker in dirs:
 | 
					 | 
				
			||||||
                yield os.path.relpath(path, object_base_path)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def split_name(object_name):
 | 
					    def split_name(object_name):
 | 
				
			||||||
        """split_name('__type_name/the/object_id') -> ('__type_name', 'the/object_id')
 | 
					        """split_name('__type_name/the/object_id') -> ('__type_name', 'the/object_id')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2011-2015 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
				
			||||||
# 2014 Daniel Heule (hda at sfs.biz)
 | 
					# 2014 Daniel Heule (hda at sfs.biz)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -64,9 +64,10 @@ class Emulator(object):
 | 
				
			||||||
            self.global_path    = self.env['__global']
 | 
					            self.global_path    = self.env['__global']
 | 
				
			||||||
            self.target_host    = self.env['__target_host']
 | 
					            self.target_host    = self.env['__target_host']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            # Internally only
 | 
					            # Internal variables
 | 
				
			||||||
            self.object_source  = self.env['__cdist_manifest']
 | 
					            self.object_source  = self.env['__cdist_manifest']
 | 
				
			||||||
            self.type_base_path = self.env['__cdist_type_base_path']
 | 
					            self.type_base_path = self.env['__cdist_type_base_path']
 | 
				
			||||||
 | 
					            self.object_marker  = self.env['__cdist_object_marker']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        except KeyError as e:
 | 
					        except KeyError as e:
 | 
				
			||||||
            raise MissingRequiredEnvironmentVariableError(e.args[0])
 | 
					            raise MissingRequiredEnvironmentVariableError(e.args[0])
 | 
				
			||||||
| 
						 | 
					@ -131,13 +132,16 @@ class Emulator(object):
 | 
				
			||||||
        self.log.debug('Args: %s' % self.args)
 | 
					        self.log.debug('Args: %s' % self.args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def setup_object(self):
 | 
					    def setup_object(self):
 | 
				
			||||||
        # Setup object_id - FIXME: unset / do not setup anymore!
 | 
					        # Setup object - and ensure it is not in args
 | 
				
			||||||
        if not self.cdist_type.is_singleton:
 | 
					        if self.cdist_type.is_singleton:
 | 
				
			||||||
 | 
					            self.object_id = False
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
            self.object_id = self.args.object_id[0]
 | 
					            self.object_id = self.args.object_id[0]
 | 
				
			||||||
            del self.args.object_id
 | 
					            del self.args.object_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Instantiate the cdist object we are defining
 | 
					        # Instantiate the cdist object we are defining
 | 
				
			||||||
        self.cdist_object = core.CdistObject(self.cdist_type, self.object_base_path, self.object_id)
 | 
					        self.cdist_object = core.CdistObject(self.cdist_type, 
 | 
				
			||||||
 | 
					            self.object_base_path, self.object_marker, self.object_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Create object with given parameters
 | 
					        # Create object with given parameters
 | 
				
			||||||
        self.parameters = {}
 | 
					        self.parameters = {}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
				
			||||||
# 2011-2013 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2011-2015 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -66,9 +66,9 @@ class Local(object):
 | 
				
			||||||
        self._init_log()
 | 
					        self._init_log()
 | 
				
			||||||
        self._init_permissions()
 | 
					        self._init_permissions()
 | 
				
			||||||
        self._init_paths()
 | 
					        self._init_paths()
 | 
				
			||||||
 | 
					        self._init_object_marker()
 | 
				
			||||||
        self._init_conf_dirs()
 | 
					        self._init_conf_dirs()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def dist_conf_dir(self):
 | 
					    def dist_conf_dir(self):
 | 
				
			||||||
        return os.path.abspath(os.path.join(os.path.dirname(cdist.__file__), "conf"))
 | 
					        return os.path.abspath(os.path.join(os.path.dirname(cdist.__file__), "conf"))
 | 
				
			||||||
| 
						 | 
					@ -103,6 +103,12 @@ class Local(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.type_path = os.path.join(self.conf_path, "type")
 | 
					        self.type_path = os.path.join(self.conf_path, "type")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _init_object_marker(self):
 | 
				
			||||||
 | 
					        self.object_marker_file = os.path.join(self.base_path, "object_marker")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Does not need to be secure - just randomly different from .cdist
 | 
				
			||||||
 | 
					        self.object_marker_name = tempfile.mktemp(prefix='.cdist-', dir='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _init_conf_dirs(self):
 | 
					    def _init_conf_dirs(self):
 | 
				
			||||||
        self.conf_dirs = []
 | 
					        self.conf_dirs = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -125,6 +131,7 @@ class Local(object):
 | 
				
			||||||
    def _init_directories(self):
 | 
					    def _init_directories(self):
 | 
				
			||||||
        self.mkdir(self.conf_path)
 | 
					        self.mkdir(self.conf_path)
 | 
				
			||||||
        self.mkdir(self.global_explorer_out_path)
 | 
					        self.mkdir(self.global_explorer_out_path)
 | 
				
			||||||
 | 
					        self.mkdir(self.object_path)
 | 
				
			||||||
        self.mkdir(self.bin_path)
 | 
					        self.mkdir(self.bin_path)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def create_files_dirs(self):
 | 
					    def create_files_dirs(self):
 | 
				
			||||||
| 
						 | 
					@ -132,6 +139,13 @@ class Local(object):
 | 
				
			||||||
        self._create_conf_path_and_link_conf_dirs()
 | 
					        self._create_conf_path_and_link_conf_dirs()
 | 
				
			||||||
        self._create_messages()
 | 
					        self._create_messages()
 | 
				
			||||||
        self._link_types_for_emulator()
 | 
					        self._link_types_for_emulator()
 | 
				
			||||||
 | 
					        self._setup_object_marker_file()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _setup_object_marker_file(self):
 | 
				
			||||||
 | 
					        with open(self.object_marker_file, 'w') as fd:
 | 
				
			||||||
 | 
					            fd.write("%s\n" % self.object_marker_name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.log.debug("Object marker %s saved in %s" % (self.object_marker_name, self.object_marker_file))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _init_cache_dir(self, cache_dir):
 | 
					    def _init_cache_dir(self, cache_dir):
 | 
				
			||||||
| 
						 | 
					@ -166,6 +180,9 @@ class Local(object):
 | 
				
			||||||
        # Export __target_host for use in __remote_{copy,exec} scripts
 | 
					        # Export __target_host for use in __remote_{copy,exec} scripts
 | 
				
			||||||
        env['__target_host'] = self.target_host
 | 
					        env['__target_host'] = self.target_host
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Export for emulator
 | 
				
			||||||
 | 
					        env['__cdist_object_marker'] = self.object_marker_name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if message_prefix:
 | 
					        if message_prefix:
 | 
				
			||||||
            message = cdist.message.Message(message_prefix, self.messages_path)
 | 
					            message = cdist.message.Message(message_prefix, self.messages_path)
 | 
				
			||||||
            env.update(message.env)
 | 
					            env.update(message.env)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2013-2015 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										29
									
								
								docs/dev/logs/2015-02-22.allow_dot_cdist
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								docs/dev/logs/2015-02-22.allow_dot_cdist
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,29 @@
 | 
				
			||||||
 | 
					- locate code that references .cdist
 | 
				
			||||||
 | 
					    - cdist_object.py
 | 
				
			||||||
 | 
					- need to change code that handles objects?
 | 
				
			||||||
 | 
					    - setup object marker
 | 
				
			||||||
 | 
					        exec/local.py
 | 
				
			||||||
 | 
					    - cdist/emulator.py
 | 
				
			||||||
 | 
					        - need to know the marker name
 | 
				
			||||||
 | 
					        - shell.py
 | 
				
			||||||
 | 
					        - test/manifest/__init__.py
 | 
				
			||||||
 | 
					        - core/code.py:
 | 
				
			||||||
 | 
					        - core/manifest.py:
 | 
				
			||||||
 | 
					        - core/manifest.py:
 | 
				
			||||||
 | 
					    - list_object_names() needs to know the marker -- used BY:
 | 
				
			||||||
 | 
					        - list_objects 
 | 
				
			||||||
 | 
					            - cdist/test/cdist_object/__init__.py
 | 
				
			||||||
 | 
					            - cdist/config.py
 | 
				
			||||||
 | 
					        - cdist/test/cdist_object/__init__.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - list_object_names
 | 
				
			||||||
 | 
					        - needs to have object_marker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- or modify object code to load name
 | 
				
			||||||
 | 
					- setup a per-run random name
 | 
				
			||||||
 | 
					    - local.py
 | 
				
			||||||
 | 
					- use the per-run random name
 | 
				
			||||||
 | 
					- create test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, cdist_type, base_path, object_marker=".cdist", object_id=''):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue