Beispiel #1
0
    def test_run_script_with_env_target_host_in_env(self):
        handle, script = self.mkstemp(dir=self.temp_dir)
        with os.fdopen(handle, "w") as fd:
            fd.writelines([
                "#!/bin/sh\n",
                'if [ "$__object" ]; then echo $__object; else echo no_env; fi\n'
            ])
        os.chmod(script, 0o755)
        handle, remote_exec_path = self.mkstemp(dir=self.temp_dir)
        with os.fdopen(handle, 'w') as fd:
            fd.writelines(["#!/bin/sh\n", 'shift; cmd=$1; shift; $cmd "$@"\n'])
        os.chmod(remote_exec_path, 0o755)
        remote_exec = remote_exec_path
        remote_copy = "echo"
        r = remote.Remote(self.target_host,
                          base_path=self.base_path,
                          remote_exec=remote_exec,
                          remote_copy=remote_copy)
        output = r.run_script(script, return_output=True)
        self.assertEqual(output, "no_env\n")

        handle, remote_exec_path = self.mkstemp(dir=self.temp_dir)
        with os.fdopen(handle, 'w') as fd:
            fd.writelines(["#!/bin/sh\n", 'shift; cmd=$1; eval $cmd\n'])
        os.chmod(remote_exec_path, 0o755)
        remote_exec = remote_exec_path
        env = {
            '__object': 'test_object',
        }
        r = remote.Remote(self.target_host,
                          base_path=self.base_path,
                          remote_exec=remote_exec,
                          remote_copy=remote_copy)
        output = r.run_script(script, env=env, return_output=True)
        self.assertEqual(output, "test_object\n")
Beispiel #2
0
    def setUp(self):
        self.temp_dir           = self.mkdtemp()
        self.local_path         = os.path.join(self.temp_dir, "local")
        self.remote_base_path   = os.path.join(self.temp_dir, "remote")
        os.makedirs(self.remote_base_path)

        self.local = local.Local(
            target_host=self.target_host,
            base_path=self.local_path,
            exec_path=test.cdist_exec_path,
            add_conf_dirs=[conf_dir],
            )

        self.local.create_files_dirs()

        self.remote = remote.Remote(
            target_host=self.target_host, 
            remote_exec=self.remote_exec,
            remote_copy=self.remote_copy,
            base_path=self.remote_base_path)
        self.remote.create_files_dirs()

        self.explorer = explorer.Explorer(
            self.target_host, 
            self.local, 
            self.remote)
Beispiel #3
0
    def setUp(self):
        self.local_dir = self.mkdtemp()
        self.hostdir = cdist.str_hash(self.target_host[0])
        self.host_base_path = os.path.join(self.local_dir, self.hostdir)

        self.local = local.Local(target_host=self.target_host,
                                 target_host_tags=self.target_host_tags,
                                 base_root_path=self.host_base_path,
                                 host_dir_name=self.hostdir,
                                 exec_path=cdist.test.cdist_exec_path,
                                 add_conf_dirs=[conf_dir])
        self.local.create_files_dirs()

        self.remote_dir = self.mkdtemp()
        remote_exec = self.remote_exec
        remote_copy = self.remote_copy
        self.remote = remote.Remote(target_host=self.target_host,
                                    remote_exec=remote_exec,
                                    remote_copy=remote_copy,
                                    base_path=self.remote_dir)
        self.remote.create_files_dirs()

        self.code = code.Code(self.target_host, self.local, self.remote)

        self.cdist_type = core.CdistType(self.local.type_path,
                                         '__dump_environment')
        self.cdist_object = core.CdistObject(self.cdist_type,
                                             self.local.object_path,
                                             'whatever',
                                             self.local.object_marker_name)
        self.cdist_object.create()
Beispiel #4
0
    def setUp(self):
        self.temp_dir = self.mkdtemp()
        self.local_path = os.path.join(self.temp_dir, "local")
        hostdir = cdist.str_hash(self.target_host[0])
        base_root_path = os.path.join(self.local_path, hostdir)
        self.remote_base_path = os.path.join(self.temp_dir, "remote")
        os.makedirs(self.remote_base_path)

        self.local = local.Local(
            target_host=self.target_host,
            target_host_tags=self.target_host_tags,
            base_root_path=base_root_path,
            host_dir_name=hostdir,
            exec_path=test.cdist_exec_path,
            add_conf_dirs=[conf_dir],
        )

        self.local.create_files_dirs()

        self.remote = remote.Remote(target_host=self.target_host,
                                    remote_exec=self.remote_exec,
                                    remote_copy=self.remote_copy,
                                    base_path=self.remote_base_path)
        self.remote.create_files_dirs()

        self.explorer = explorer.Explorer(self.target_host, self.local,
                                          self.remote)
Beispiel #5
0
    def setUp(self):
        self.local_dir = self.mkdtemp()

        self.local = local.Local(target_host=self.target_host,
                                 base_path=self.local_dir,
                                 exec_path=cdist.test.cdist_exec_path,
                                 add_conf_dirs=[conf_dir])
        self.local.create_files_dirs()

        self.remote_dir = self.mkdtemp()
        remote_exec = self.remote_exec
        remote_copy = self.remote_copy
        self.remote = remote.Remote(target_host=self.target_host,
                                    remote_exec=remote_exec,
                                    remote_copy=remote_copy,
                                    base_path=self.remote_dir)
        self.remote.create_files_dirs()

        self.code = code.Code(self.target_host, self.local, self.remote)

        self.cdist_type = core.CdistType(self.local.type_path,
                                         '__dump_environment')
        self.cdist_object = core.CdistObject(self.cdist_type,
                                             self.local.object_path,
                                             'whatever')
        self.cdist_object.create()
Beispiel #6
0
    def setUp(self):
        self.target_host = 'localhost'

        self.local_base_path = local_base_path
        self.out_path = self.mkdtemp()
        self.local = local.Local(self.target_host, self.local_base_path,
                                 self.out_path)
        self.local.create_directories()

        self.remote_base_path = self.mkdtemp()
        self.user = getpass.getuser()
        remote_exec = "ssh -o User=%s -q" % self.user
        remote_copy = "scp -o User=%s -q" % self.user
        self.remote = remote.Remote(self.target_host, self.remote_base_path,
                                    remote_exec, remote_copy)

        self.code = code.Code(self.target_host, self.local, self.remote)

        self.cdist_type = core.CdistType(self.local.type_path,
                                         '__dump_environment')
        self.cdist_object = core.CdistObject(self.cdist_type,
                                             self.local.object_path,
                                             'whatever')
        self.cdist_object.create()

        self.log = logging.getLogger("cdist")
Beispiel #7
0
 def setUp(self):
     self.temp_dir = self.mkdtemp()
     self.target_host = 'localhost'
     self.base_path = self.temp_dir
     user = getpass.getuser()
     remote_exec = "ssh -o User=%s -q" % user
     remote_copy = "scp -o User=%s -q" % user
     self.remote = remote.Remote(self.target_host, self.base_path,
                                 remote_exec, remote_copy)
Beispiel #8
0
 def test_run_target_host_in_env(self):
     handle, remote_exec_path = self.mkstemp(dir=self.temp_dir)
     with os.fdopen(handle, 'w') as fd:
         fd.writelines(["#!/bin/sh\n", "echo $__target_host"])
     os.chmod(remote_exec_path, 0o755)
     remote_exec = remote_exec_path
     remote_copy = "echo"
     r = remote.Remote(self.target_host, self.base_path, remote_exec,
                       remote_copy)
     self.assertEqual(r.run('/bin/true', return_output=True),
                      "%s\n" % self.target_host)
Beispiel #9
0
    def setUp(self):
        # logging.root.setLevel(logging.TRACE)
        save_output_streams = False
        self.temp_dir = self.mkdtemp()

        self.local_dir = os.path.join(self.temp_dir, "local")
        self.hostdir = cdist.str_hash(self.target_host[0])
        self.host_base_path = os.path.join(self.local_dir, self.hostdir)
        os.makedirs(self.host_base_path)
        self.local = local.Local(target_host=self.target_host,
                                 target_host_tags=None,
                                 base_root_path=self.host_base_path,
                                 host_dir_name=self.hostdir,
                                 exec_path=cdist.test.cdist_exec_path,
                                 add_conf_dirs=[conf_dir],
                                 save_output_streams=save_output_streams)
        self.local.create_files_dirs()

        self.remote_dir = self.mkdtemp()
        remote_exec = self.remote_exec
        remote_copy = self.remote_copy
        self.remote = remote.Remote(
            target_host=self.target_host,
            remote_exec=remote_exec,
            remote_copy=remote_copy,
            base_path=self.remote_dir,
            stdout_base_path=self.local.stdout_base_path,
            stderr_base_path=self.local.stderr_base_path,
            save_output_streams=save_output_streams)
        self.remote.create_files_dirs()

        self.code = code.Code(self.target_host, self.local, self.remote)

        self.manifest = manifest.Manifest(self.target_host, self.local)

        self.cdist_type = core.CdistType(self.local.type_path,
                                         '__write_to_stdout_and_stderr')
        self.cdist_object = core.CdistObject(self.cdist_type,
                                             self.local.object_path,
                                             self.local.object_marker_name, '')
        self.cdist_object.create()
        self.output_dirs = {
            'object': {
                'stdout': os.path.join(self.cdist_object.absolute_path,
                                       'stdout'),
                'stderr': os.path.join(self.cdist_object.absolute_path,
                                       'stderr'),
            },
            'init': {
                'stdout': os.path.join(self.local.base_path, 'stdout'),
                'stderr': os.path.join(self.local.base_path, 'stderr'),
            },
        }
Beispiel #10
0
    def _init_remote(self, remote_copy, remote_exec):

        self.remote_base_path = os.environ.get('__cdist_remote_out_dir',
                                               "/var/lib/cdist")
        self.remote_copy = remote_copy
        self.remote_exec = remote_exec

        os.environ['__remote_copy'] = self.remote_copy
        os.environ['__remote_exec'] = self.remote_exec

        self.remote = remote.Remote(self.target_host, self.remote_base_path,
                                    self.remote_exec, self.remote_copy)
Beispiel #11
0
 def create_remote(self, *args, **kwargs):
     if not args:
         args = (self.target_host, )
     kwargs.setdefault('base_path', self.base_path)
     user = getpass.getuser()
     kwargs.setdefault('remote_exec', 'ssh -o User={} -q'.format(user))
     kwargs.setdefault('remote_copy', 'scp -o User={} -q'.format(user))
     if 'stdout_base_path' not in kwargs:
         stdout_path = os.path.join(self.temp_dir, 'stdout')
         os.makedirs(stdout_path, exist_ok=True)
         kwargs['stdout_base_path'] = stdout_path
     if 'stderr_base_path' not in kwargs:
         stderr_path = os.path.join(self.temp_dir, 'stderr')
         os.makedirs(stderr_path, exist_ok=True)
         kwargs['stderr_base_path'] = stderr_path
     return remote.Remote(*args, **kwargs)
Beispiel #12
0
 def setUp(self):
     self.temp_dir = self.mkdtemp()
     self.target_host = (
         'localhost',
         'localhost',
         'localhost',
     )
     # another temp dir for remote base path
     self.base_path = self.mkdtemp()
     user = getpass.getuser()
     remote_exec = "ssh -o User=%s -q" % user
     remote_copy = "scp -o User=%s -q" % user
     self.remote = remote.Remote(self.target_host,
                                 base_path=self.base_path,
                                 remote_exec=remote_exec,
                                 remote_copy=remote_copy)
Beispiel #13
0
    def setUp(self):
        self.target_host = 'localhost'

        self.local_base_path = local_base_path
        self.out_path = self.mkdtemp()
        self.local = local.Local(self.target_host, self.local_base_path, self.out_path)
        self.local.create_directories()

        self.remote_base_path = self.mkdtemp()
        self.user = getpass.getuser()
        remote_exec = "ssh -o User=%s -q" % self.user
        remote_copy = "scp -o User=%s -q" % self.user
        self.remote = remote.Remote(self.target_host, self.remote_base_path, remote_exec, remote_copy)

        self.explorer = explorer.Explorer(self.target_host, self.local, self.remote)

        self.log = logging.getLogger(self.target_host)
Beispiel #14
0
    def __init__(self,
                 target_host,
                 initial_manifest=False,
                 base_path=False,
                 exec_path=sys.argv[0],
                 debug=False):

        self.debug = debug

        self.target_host = target_host

        # Only required for testing
        self.exec_path = exec_path

        # Context logging
        self.log = logging.getLogger(self.target_host)
        self.log.addFilter(self)

        # Local base directory
        self.base_path = (base_path or os.path.abspath(
            os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)))

        # Local temp directory
        # FIXME: if __cdist_out_dir can be given from the outside, the same directory will be used for all hosts
        if '__cdist_out_dir' in os.environ:
            self.out_path = os.environ['__cdist_out_dir']
            self.temp_dir = None
        else:
            self.temp_dir = tempfile.mkdtemp()
            self.out_path = os.path.join(self.temp_dir, "out")

        self.local = local.Local(self.target_host, self.base_path,
                                 self.out_path)

        self.initial_manifest = (initial_manifest or os.path.join(
            self.local.manifest_path, "init"))

        # Remote
        self.remote_base_path = os.environ.get('__cdist_remote_out_dir',
                                               "/var/lib/cdist")
        self.remote_exec = os.environ.setdefault('__remote_exec',
                                                 "ssh -o User=root -q")
        self.remote_copy = os.environ.setdefault('__remote_copy',
                                                 "scp -o User=root -q")
        self.remote = remote.Remote(self.target_host, self.remote_base_path,
                                    self.remote_exec, self.remote_copy)