forked from ungleich-public/cdist
		
	Add derived env vars for target hostname and fqdn.
This commit is contained in:
		
					parent
					
						
							
								9ce8f6bbb0
							
						
					
				
			
			
				commit
				
					
						dbcc94ab65
					
				
			
		
					 23 changed files with 181 additions and 59 deletions
				
			
		|  | @ -28,6 +28,7 @@ import time | ||||||
| import pprint | import pprint | ||||||
| import itertools | import itertools | ||||||
| import tempfile | import tempfile | ||||||
|  | import socket | ||||||
| 
 | 
 | ||||||
| import cdist | import cdist | ||||||
| 
 | 
 | ||||||
|  | @ -74,7 +75,7 @@ class Config(object): | ||||||
| 
 | 
 | ||||||
|         self.local = local |         self.local = local | ||||||
|         self.remote = remote |         self.remote = remote | ||||||
|         self.log = logging.getLogger(self.local.target_host) |         self.log = logging.getLogger(self.local.target_host[0]) | ||||||
|         self.dry_run = dry_run |         self.dry_run = dry_run | ||||||
| 
 | 
 | ||||||
|         self.explorer = core.Explorer(self.local.target_host, self.local, |         self.explorer = core.Explorer(self.local.target_host, self.local, | ||||||
|  | @ -229,15 +230,37 @@ class Config(object): | ||||||
|             log.debug("remote_copy for host \"{}\": {}".format( |             log.debug("remote_copy for host \"{}\": {}".format( | ||||||
|                 host, remote_copy)) |                 host, remote_copy)) | ||||||
| 
 | 
 | ||||||
|  |             try: | ||||||
|  |                 # getaddrinfo returns a list of 5-tuples: | ||||||
|  |                 # (family, type, proto, canonname, sockaddr) | ||||||
|  |                 # where sockaddr is: | ||||||
|  |                 # (address, port) for AF_INET, | ||||||
|  |                 # (address, port, flow_info, scopeid) for AF_INET6 | ||||||
|  |                 ip_addr = socket.getaddrinfo( | ||||||
|  |                         host, None, type=socket.SOCK_STREAM)[0][4][0] | ||||||
|  |                 host_name = socket.gethostbyaddr(ip_addr)[0] | ||||||
|  |             except socket.gaierror as e: | ||||||
|  |                 log.error("{}: {}".format(e[0], e[1])) | ||||||
|  |                 # in case of error provide empty value | ||||||
|  |                 host_name = None | ||||||
|  | 
 | ||||||
|  |             try: | ||||||
|  |                 host_fqdn = socket.getfqdn(host) | ||||||
|  |             except socket.herror as e: | ||||||
|  |                 log.error("{}: {}".format(e[0], e[1])) | ||||||
|  |                 # in case of error provide empty value | ||||||
|  |                 host_fqdn = None | ||||||
|  |             target_host = (host, host_name, host_fqdn) | ||||||
|  | 
 | ||||||
|             local = cdist.exec.local.Local( |             local = cdist.exec.local.Local( | ||||||
|                 target_host=host, |                 target_host=target_host, | ||||||
|                 base_root_path=host_base_path, |                 base_root_path=host_base_path, | ||||||
|                 host_dir_name=host_dir_name, |                 host_dir_name=host_dir_name, | ||||||
|                 initial_manifest=args.manifest, |                 initial_manifest=args.manifest, | ||||||
|                 add_conf_dirs=args.conf_dir) |                 add_conf_dirs=args.conf_dir) | ||||||
| 
 | 
 | ||||||
|             remote = cdist.exec.remote.Remote( |             remote = cdist.exec.remote.Remote( | ||||||
|                 target_host=host, |                 target_host=target_host, | ||||||
|                 remote_exec=remote_exec, |                 remote_exec=remote_exec, | ||||||
|                 remote_copy=remote_copy) |                 remote_copy=remote_copy) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -36,6 +36,9 @@ common: | ||||||
|     env: |     env: | ||||||
|         PATH: prepend directory with type emulator symlinks == local.bin_path |         PATH: prepend directory with type emulator symlinks == local.bin_path | ||||||
|         __target_host: the target host we are working on |         __target_host: the target host we are working on | ||||||
|  |         __target_hostname: the target hostname provided from __target_host | ||||||
|  |         __target_fqdn: the target's fully qualified domain name provided from | ||||||
|  |                        __target_host | ||||||
|         __cdist_manifest: full qualified path of the manifest == script |         __cdist_manifest: full qualified path of the manifest == script | ||||||
|         __cdist_type_base_path: full qualified path to the directory where |         __cdist_type_base_path: full qualified path to the directory where | ||||||
|                                 types are defined for use in type emulator |                                 types are defined for use in type emulator | ||||||
|  | @ -46,6 +49,9 @@ gencode-local | ||||||
| 
 | 
 | ||||||
|     env: |     env: | ||||||
|         __target_host: the target host we are working on |         __target_host: the target host we are working on | ||||||
|  |         __target_hostname: the target hostname provided from __target_host | ||||||
|  |         __target_fqdn: the target's fully qualified domain name provided from | ||||||
|  |                        __target_host | ||||||
|         __global: full qualified path to the global |         __global: full qualified path to the global | ||||||
|                   output dir == local.out_path |                   output dir == local.out_path | ||||||
|         __object: full qualified path to the object's dir |         __object: full qualified path to the object's dir | ||||||
|  | @ -61,6 +67,9 @@ gencode-remote | ||||||
| 
 | 
 | ||||||
|     env: |     env: | ||||||
|         __target_host: the target host we are working on |         __target_host: the target host we are working on | ||||||
|  |         __target_hostname: the target hostname provided from __target_host | ||||||
|  |         __target_fqdn: the target's fully qualified domain name provided from | ||||||
|  |                        __target_host | ||||||
|         __global: full qualified path to the global |         __global: full qualified path to the global | ||||||
|                   output dir == local.out_path |                   output dir == local.out_path | ||||||
|         __object: full qualified path to the object's dir |         __object: full qualified path to the object's dir | ||||||
|  | @ -89,12 +98,17 @@ class Code(object): | ||||||
|     """Generates and executes cdist code scripts. |     """Generates and executes cdist code scripts. | ||||||
| 
 | 
 | ||||||
|     """ |     """ | ||||||
|  |     # target_host is tuple (target_host, target_hostname, target_fqdn) | ||||||
|     def __init__(self, target_host, local, remote): |     def __init__(self, target_host, local, remote): | ||||||
|         self.target_host = target_host |         self.target_host = target_host[0] | ||||||
|  |         self.target_hostname = target_host[1] | ||||||
|  |         self.target_fqdn = target_host[2] | ||||||
|         self.local = local |         self.local = local | ||||||
|         self.remote = remote |         self.remote = remote | ||||||
|         self.env = { |         self.env = { | ||||||
|             '__target_host': self.target_host, |             '__target_host': self.target_host[0], | ||||||
|  |             '__target_hostname': self.target_host[1], | ||||||
|  |             '__target_fqdn': self.target_host[2], | ||||||
|             '__global': self.local.base_path, |             '__global': self.local.base_path, | ||||||
|             '__files': self.local.files_path, |             '__files': self.local.files_path, | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -68,12 +68,14 @@ class Explorer(object): | ||||||
|     def __init__(self, target_host, local, remote): |     def __init__(self, target_host, local, remote): | ||||||
|         self.target_host = target_host |         self.target_host = target_host | ||||||
| 
 | 
 | ||||||
|         self.log = logging.getLogger(target_host) |         self.log = logging.getLogger(target_host[0]) | ||||||
| 
 | 
 | ||||||
|         self.local = local |         self.local = local | ||||||
|         self.remote = remote |         self.remote = remote | ||||||
|         self.env = { |         self.env = { | ||||||
|             '__target_host': self.target_host, |             '__target_host': self.target_host[0], | ||||||
|  |             '__target_hostname': self.target_host[1], | ||||||
|  |             '__target_fqdn': self.target_host[2], | ||||||
|             '__explorer': self.remote.global_explorer_path, |             '__explorer': self.remote.global_explorer_path, | ||||||
|         } |         } | ||||||
|         self._type_explorers_transferred = [] |         self._type_explorers_transferred = [] | ||||||
|  |  | ||||||
|  | @ -32,6 +32,9 @@ common: | ||||||
|     env: |     env: | ||||||
|         PATH: prepend directory with type emulator symlinks == local.bin_path |         PATH: prepend directory with type emulator symlinks == local.bin_path | ||||||
|         __target_host: the target host we are working on |         __target_host: the target host we are working on | ||||||
|  |         __target_hostname: the target hostname provided from __target_host | ||||||
|  |         __target_fqdn: the target's fully qualified domain name provided from | ||||||
|  |                        __target_host | ||||||
|         __global: full qualified path to the global |         __global: full qualified path to the global | ||||||
|                   output dir == local.out_path |                   output dir == local.out_path | ||||||
|         __cdist_manifest: full qualified path of the manifest == script |         __cdist_manifest: full qualified path of the manifest == script | ||||||
|  | @ -95,14 +98,16 @@ class Manifest(object): | ||||||
|         self.target_host = target_host |         self.target_host = target_host | ||||||
|         self.local = local |         self.local = local | ||||||
| 
 | 
 | ||||||
|         self.log = logging.getLogger(self.target_host) |         self.log = logging.getLogger(self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|         self.env = { |         self.env = { | ||||||
|             'PATH': "%s:%s" % (self.local.bin_path, os.environ['PATH']), |             'PATH': "%s:%s" % (self.local.bin_path, os.environ['PATH']), | ||||||
|             # for use in type emulator |             # for use in type emulator | ||||||
|             '__cdist_type_base_path': self.local.type_path, |             '__cdist_type_base_path': self.local.type_path, | ||||||
|             '__global': self.local.base_path, |             '__global': self.local.base_path, | ||||||
|             '__target_host': self.target_host, |             '__target_host': self.target_host[0], | ||||||
|  |             '__target_hostname': self.target_host[1], | ||||||
|  |             '__target_fqdn': self.target_host[2], | ||||||
|             '__files': self.local.files_path, |             '__files': self.local.files_path, | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -65,6 +65,8 @@ class Emulator(object): | ||||||
|         try: |         try: | ||||||
|             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'] | ||||||
|  |             self.target_hostname = self.env['__target_hostname'] | ||||||
|  |             self.target_fqdn = self.env['__target_fqdn'] | ||||||
| 
 | 
 | ||||||
|             # Internal variables |             # Internal variables | ||||||
|             self.object_source = self.env['__cdist_manifest'] |             self.object_source = self.env['__cdist_manifest'] | ||||||
|  | @ -101,7 +103,7 @@ class Emulator(object): | ||||||
|         else: |         else: | ||||||
|             logging.root.setLevel(logging.INFO) |             logging.root.setLevel(logging.INFO) | ||||||
| 
 | 
 | ||||||
|         self.log = logging.getLogger(self.target_host) |         self.log = logging.getLogger(self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|     def commandline(self): |     def commandline(self): | ||||||
|         """Parse command line""" |         """Parse command line""" | ||||||
|  |  | ||||||
|  | @ -83,7 +83,7 @@ class Local(object): | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
|     def _init_log(self): |     def _init_log(self): | ||||||
|         self.log = logging.getLogger(self.target_host) |         self.log = logging.getLogger(self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|     def _init_permissions(self): |     def _init_permissions(self): | ||||||
|         # Setup file permissions using umask |         # Setup file permissions using umask | ||||||
|  | @ -184,8 +184,11 @@ class Local(object): | ||||||
| 
 | 
 | ||||||
|         if env is None: |         if env is None: | ||||||
|             env = os.environ.copy() |             env = os.environ.copy() | ||||||
|         # Export __target_host for use in __remote_{copy,exec} scripts |         # Export __target_host, __target_hostname, __target_fqdn | ||||||
|         env['__target_host'] = self.target_host |         # for use in __remote_{copy,exec} scripts | ||||||
|  |         env['__target_host'] = self.target_host[0] | ||||||
|  |         env['__target_hostname'] = self.target_host[1] | ||||||
|  |         env['__target_fqdn'] = self.target_host[2] | ||||||
| 
 | 
 | ||||||
|         # Export for emulator |         # Export for emulator | ||||||
|         env['__cdist_object_marker'] = self.object_marker_name |         env['__cdist_object_marker'] = self.object_marker_name | ||||||
|  |  | ||||||
|  | @ -66,7 +66,7 @@ class Remote(object): | ||||||
|         self.type_path = os.path.join(self.conf_path, "type") |         self.type_path = os.path.join(self.conf_path, "type") | ||||||
|         self.global_explorer_path = os.path.join(self.conf_path, "explorer") |         self.global_explorer_path = os.path.join(self.conf_path, "explorer") | ||||||
| 
 | 
 | ||||||
|         self.log = logging.getLogger(self.target_host) |         self.log = logging.getLogger(self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|         self._init_env() |         self._init_env() | ||||||
| 
 | 
 | ||||||
|  | @ -102,12 +102,12 @@ class Remote(object): | ||||||
|                 command = self._copy.split() |                 command = self._copy.split() | ||||||
|                 path = os.path.join(source, f) |                 path = os.path.join(source, f) | ||||||
|                 command.extend([path, '{0}:{1}'.format( |                 command.extend([path, '{0}:{1}'.format( | ||||||
|                     self.target_host, destination)]) |                     self.target_host[0], destination)]) | ||||||
|                 self._run_command(command) |                 self._run_command(command) | ||||||
|         else: |         else: | ||||||
|             command = self._copy.split() |             command = self._copy.split() | ||||||
|             command.extend([source, '{0}:{1}'.format( |             command.extend([source, '{0}:{1}'.format( | ||||||
|                 self.target_host, destination)]) |                 self.target_host[0], destination)]) | ||||||
|             self._run_command(command) |             self._run_command(command) | ||||||
| 
 | 
 | ||||||
|     def run_script(self, script, env=None, return_output=False): |     def run_script(self, script, env=None, return_output=False): | ||||||
|  | @ -128,7 +128,7 @@ class Remote(object): | ||||||
|         """ |         """ | ||||||
|         # prefix given command with remote_exec |         # prefix given command with remote_exec | ||||||
|         cmd = self._exec.split() |         cmd = self._exec.split() | ||||||
|         cmd.append(self.target_host) |         cmd.append(self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|         # FIXME: replace this by -o SendEnv name -o SendEnv name ... to ssh? |         # FIXME: replace this by -o SendEnv name -o SendEnv name ... to ssh? | ||||||
|         # can't pass environment to remote side, so prepend command with |         # can't pass environment to remote side, so prepend command with | ||||||
|  | @ -165,9 +165,12 @@ class Remote(object): | ||||||
|         assert isinstance(command, (list, tuple)), ( |         assert isinstance(command, (list, tuple)), ( | ||||||
|                 "list or tuple argument expected, got: %s" % command) |                 "list or tuple argument expected, got: %s" % command) | ||||||
| 
 | 
 | ||||||
|         # export target_host for use in __remote_{exec,copy} scripts |         # export target_host, target_hostname, target_fqdn | ||||||
|  |         # for use in __remote_{exec,copy} scripts | ||||||
|         os_environ = os.environ.copy() |         os_environ = os.environ.copy() | ||||||
|         os_environ['__target_host'] = self.target_host |         os_environ['__target_host'] = self.target_host[0] | ||||||
|  |         os_environ['__target_hostname'] = self.target_host[1] | ||||||
|  |         os_environ['__target_fqdn'] = self.target_host[2] | ||||||
| 
 | 
 | ||||||
|         self.log.debug("Remote run: %s", command) |         self.log.debug("Remote run: %s", command) | ||||||
|         try: |         try: | ||||||
|  |  | ||||||
|  | @ -38,7 +38,12 @@ class Shell(object): | ||||||
| 
 | 
 | ||||||
|         self.shell = shell |         self.shell = shell | ||||||
| 
 | 
 | ||||||
|         self.target_host = "cdist-shell-no-target-host" |         self.target_host = ( | ||||||
|  |             "cdist-shell-no-target-host", | ||||||
|  |             "cdist-shell-no-target-host", | ||||||
|  |             "cdist-shell-no-target-host", | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|         self.local = cdist.exec.local.Local( |         self.local = cdist.exec.local.Local( | ||||||
|             target_host=self.target_host) |             target_host=self.target_host) | ||||||
| 
 | 
 | ||||||
|  | @ -59,7 +64,9 @@ class Shell(object): | ||||||
|             '__cdist_type_base_path': self.local.type_path, |             '__cdist_type_base_path': self.local.type_path, | ||||||
|             '__cdist_manifest': "cdist shell", |             '__cdist_manifest': "cdist shell", | ||||||
|             '__global': self.local.base_path, |             '__global': self.local.base_path, | ||||||
|             '__target_host': self.target_host, |             '__target_host': self.target_host[0], | ||||||
|  |             '__target_hostname': self.target_host[1], | ||||||
|  |             '__target_fqdn': self.target_host[2], | ||||||
|             '__manifest': self.local.manifest_path, |             '__manifest': self.local.manifest_path, | ||||||
|             '__explorer': self.local.global_explorer_path, |             '__explorer': self.local.global_explorer_path, | ||||||
|             '__files': self.local.files_path, |             '__files': self.local.files_path, | ||||||
|  |  | ||||||
|  | @ -37,7 +37,11 @@ class CdistTestCase(unittest.TestCase): | ||||||
|     remote_exec = os.path.join(global_fixtures_dir, "remote", "exec") |     remote_exec = os.path.join(global_fixtures_dir, "remote", "exec") | ||||||
|     remote_copy = os.path.join(global_fixtures_dir, "remote", "copy") |     remote_copy = os.path.join(global_fixtures_dir, "remote", "copy") | ||||||
| 
 | 
 | ||||||
|     target_host = 'cdisttesthost' |     target_host = ( | ||||||
|  |         'cdisttesthost', | ||||||
|  |         'cdisttesthost', | ||||||
|  |         'cdisttesthost', | ||||||
|  |     ) | ||||||
| 
 | 
 | ||||||
|     def mkdtemp(self, **kwargs): |     def mkdtemp(self, **kwargs): | ||||||
|         return tempfile.mkdtemp(prefix='tmp.cdist.test.', **kwargs) |         return tempfile.mkdtemp(prefix='tmp.cdist.test.', **kwargs) | ||||||
|  |  | ||||||
|  | @ -41,7 +41,7 @@ class CodeTestCase(test.CdistTestCase): | ||||||
| 
 | 
 | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         self.local_dir = self.mkdtemp() |         self.local_dir = self.mkdtemp() | ||||||
|         self.hostdir = cdist.str_hash(self.target_host) |         self.hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         self.host_base_path = os.path.join(self.local_dir, self.hostdir) |         self.host_base_path = os.path.join(self.local_dir, self.hostdir) | ||||||
| 
 | 
 | ||||||
|         self.local = local.Local( |         self.local = local.Local( | ||||||
|  | @ -83,7 +83,12 @@ class CodeTestCase(test.CdistTestCase): | ||||||
|                 junk, value = line.split(': ') |                 junk, value = line.split(': ') | ||||||
|                 key = junk.split(' ')[1] |                 key = junk.split(' ')[1] | ||||||
|                 output_dict[key] = value |                 output_dict[key] = value | ||||||
|         self.assertEqual(output_dict['__target_host'], self.local.target_host) |         self.assertEqual(output_dict['__target_host'], | ||||||
|  |                          self.local.target_host[0]) | ||||||
|  |         self.assertEqual(output_dict['__target_hostname'], | ||||||
|  |                          self.local.target_host[1]) | ||||||
|  |         self.assertEqual(output_dict['__target_fqdn'], | ||||||
|  |                          self.local.target_host[2]) | ||||||
|         self.assertEqual(output_dict['__global'], self.local.base_path) |         self.assertEqual(output_dict['__global'], self.local.base_path) | ||||||
|         self.assertEqual(output_dict['__type'], self.cdist_type.absolute_path) |         self.assertEqual(output_dict['__type'], self.cdist_type.absolute_path) | ||||||
|         self.assertEqual(output_dict['__object'], |         self.assertEqual(output_dict['__object'], | ||||||
|  | @ -101,7 +106,12 @@ class CodeTestCase(test.CdistTestCase): | ||||||
|                 junk, value = line.split(': ') |                 junk, value = line.split(': ') | ||||||
|                 key = junk.split(' ')[1] |                 key = junk.split(' ')[1] | ||||||
|                 output_dict[key] = value |                 output_dict[key] = value | ||||||
|         self.assertEqual(output_dict['__target_host'], self.local.target_host) |         self.assertEqual(output_dict['__target_host'], | ||||||
|  |                          self.local.target_host[0]) | ||||||
|  |         self.assertEqual(output_dict['__target_hostname'], | ||||||
|  |                          self.local.target_host[1]) | ||||||
|  |         self.assertEqual(output_dict['__target_fqdn'], | ||||||
|  |                          self.local.target_host[2]) | ||||||
|         self.assertEqual(output_dict['__global'], self.local.base_path) |         self.assertEqual(output_dict['__global'], self.local.base_path) | ||||||
|         self.assertEqual(output_dict['__type'], self.cdist_type.absolute_path) |         self.assertEqual(output_dict['__type'], self.cdist_type.absolute_path) | ||||||
|         self.assertEqual(output_dict['__object'], |         self.assertEqual(output_dict['__object'], | ||||||
|  |  | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| 
 | 
 | ||||||
| echo "echo __target_host: $__target_host" | echo "echo __target_host: $__target_host" | ||||||
|  | echo "echo __target_hostname: $__target_hostname" | ||||||
|  | echo "echo __target_fqdn: $__target_fqdn" | ||||||
| echo "echo __global: $__global" | echo "echo __global: $__global" | ||||||
| echo "echo __type: $__type" | echo "echo __type: $__type" | ||||||
| echo "echo __object: $__object" | echo "echo __object: $__object" | ||||||
|  |  | ||||||
|  | @ -55,7 +55,7 @@ class ConfigRunTestCase(test.CdistTestCase): | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
| 
 | 
 | ||||||
|         self.local_dir = os.path.join(self.temp_dir, "local") |         self.local_dir = os.path.join(self.temp_dir, "local") | ||||||
|         self.hostdir = cdist.str_hash(self.target_host) |         self.hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         self.host_base_path = os.path.join(self.local_dir, self.hostdir) |         self.host_base_path = os.path.join(self.local_dir, self.hostdir) | ||||||
|         os.makedirs(self.host_base_path) |         os.makedirs(self.host_base_path) | ||||||
|         self.local = cdist.exec.local.Local( |         self.local = cdist.exec.local.Local( | ||||||
|  |  | ||||||
|  | @ -48,7 +48,7 @@ class EmulatorTestCase(test.CdistTestCase): | ||||||
|         handle, self.script = self.mkstemp(dir=self.temp_dir) |         handle, self.script = self.mkstemp(dir=self.temp_dir) | ||||||
|         os.close(handle) |         os.close(handle) | ||||||
|         base_path = self.temp_dir |         base_path = self.temp_dir | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         host_base_path = os.path.join(base_path, hostdir) |         host_base_path = os.path.join(base_path, hostdir) | ||||||
| 
 | 
 | ||||||
|         self.local = local.Local( |         self.local = local.Local( | ||||||
|  | @ -151,7 +151,7 @@ class EmulatorConflictingRequirementsTestCase(test.CdistTestCase): | ||||||
|         handle, self.script = self.mkstemp(dir=self.temp_dir) |         handle, self.script = self.mkstemp(dir=self.temp_dir) | ||||||
|         os.close(handle) |         os.close(handle) | ||||||
|         base_path = self.temp_dir |         base_path = self.temp_dir | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         host_base_path = os.path.join(base_path, hostdir) |         host_base_path = os.path.join(base_path, hostdir) | ||||||
| 
 | 
 | ||||||
|         self.local = local.Local( |         self.local = local.Local( | ||||||
|  | @ -241,7 +241,7 @@ class AutoRequireEmulatorTestCase(test.CdistTestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
|         base_path = os.path.join(self.temp_dir, "out") |         base_path = os.path.join(self.temp_dir, "out") | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         host_base_path = os.path.join(base_path, hostdir) |         host_base_path = os.path.join(base_path, hostdir) | ||||||
| 
 | 
 | ||||||
|         self.local = local.Local( |         self.local = local.Local( | ||||||
|  | @ -274,7 +274,7 @@ class OverrideTestCase(test.CdistTestCase): | ||||||
|         handle, self.script = self.mkstemp(dir=self.temp_dir) |         handle, self.script = self.mkstemp(dir=self.temp_dir) | ||||||
|         os.close(handle) |         os.close(handle) | ||||||
|         base_path = self.temp_dir |         base_path = self.temp_dir | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         host_base_path = os.path.join(base_path, hostdir) |         host_base_path = os.path.join(base_path, hostdir) | ||||||
| 
 | 
 | ||||||
|         self.local = local.Local( |         self.local = local.Local( | ||||||
|  | @ -315,7 +315,7 @@ class ArgumentsTestCase(test.CdistTestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
|         base_path = self.temp_dir |         base_path = self.temp_dir | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         host_base_path = os.path.join(base_path, hostdir) |         host_base_path = os.path.join(base_path, hostdir) | ||||||
|         handle, self.script = self.mkstemp(dir=self.temp_dir) |         handle, self.script = self.mkstemp(dir=self.temp_dir) | ||||||
|         os.close(handle) |         os.close(handle) | ||||||
|  | @ -440,7 +440,7 @@ class StdinTestCase(test.CdistTestCase): | ||||||
| 
 | 
 | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
|         base_path = os.path.join(self.temp_dir, "out") |         base_path = os.path.join(self.temp_dir, "out") | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         host_base_path = os.path.join(base_path, hostdir) |         host_base_path = os.path.join(base_path, hostdir) | ||||||
| 
 | 
 | ||||||
|         self.local = local.Local( |         self.local = local.Local( | ||||||
|  |  | ||||||
|  | @ -1,6 +1,8 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| 
 | 
 | ||||||
| echo "echo __target_host: $__target_host" | echo "echo __target_host: $__target_host" | ||||||
|  | echo "echo __target_hostname: $__target_hostname" | ||||||
|  | echo "echo __target_fqdn: $__target_fqdn" | ||||||
| echo "echo __global: $__global" | echo "echo __global: $__global" | ||||||
| echo "echo __type: $__type" | echo "echo __type: $__type" | ||||||
| echo "echo __object: $__object" | echo "echo __object: $__object" | ||||||
|  |  | ||||||
|  | @ -44,10 +44,14 @@ class LocalTestCase(test.CdistTestCase): | ||||||
| 
 | 
 | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
| 
 | 
 | ||||||
|         target_host = 'localhost' |         target_host = ( | ||||||
|  |             'localhost', | ||||||
|  |             'localhost', | ||||||
|  |             'localhost', | ||||||
|  |         ) | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
|         self.out_parent_path = self.temp_dir |         self.out_parent_path = self.temp_dir | ||||||
|         self.hostdir = cdist.str_hash(target_host) |         self.hostdir = cdist.str_hash(target_host[0]) | ||||||
|         self.host_base_path = op.join(self.out_parent_path, self.hostdir) |         self.host_base_path = op.join(self.out_parent_path, self.hostdir) | ||||||
|         self.out_path = op.join(self.host_base_path, "data") |         self.out_path = op.join(self.host_base_path, "data") | ||||||
| 
 | 
 | ||||||
|  | @ -111,7 +115,11 @@ class LocalTestCase(test.CdistTestCase): | ||||||
|         test_type = "__file" |         test_type = "__file" | ||||||
| 
 | 
 | ||||||
|         link_test_local = local.Local( |         link_test_local = local.Local( | ||||||
|             target_host='localhost', |             target_host=( | ||||||
|  |                 'localhost', | ||||||
|  |                 'localhost', | ||||||
|  |                 'localhost', | ||||||
|  |             ), | ||||||
|             base_root_path=self.host_base_path, |             base_root_path=self.host_base_path, | ||||||
|             host_dir_name=self.hostdir, |             host_dir_name=self.hostdir, | ||||||
|             exec_path=test.cdist_exec_path, |             exec_path=test.cdist_exec_path, | ||||||
|  | @ -130,7 +138,11 @@ class LocalTestCase(test.CdistTestCase): | ||||||
|         test_type = "__cdist_test_type" |         test_type = "__cdist_test_type" | ||||||
| 
 | 
 | ||||||
|         link_test_local = local.Local( |         link_test_local = local.Local( | ||||||
|             target_host='localhost', |             target_host=( | ||||||
|  |                 'localhost', | ||||||
|  |                 'localhost', | ||||||
|  |                 'localhost', | ||||||
|  |             ), | ||||||
|             base_root_path=self.host_base_path, |             base_root_path=self.host_base_path, | ||||||
|             host_dir_name=self.hostdir, |             host_dir_name=self.hostdir, | ||||||
|             exec_path=test.cdist_exec_path, |             exec_path=test.cdist_exec_path, | ||||||
|  | @ -152,7 +164,11 @@ class LocalTestCase(test.CdistTestCase): | ||||||
|         os.environ['CDIST_PATH'] = conf_dir |         os.environ['CDIST_PATH'] = conf_dir | ||||||
| 
 | 
 | ||||||
|         link_test_local = local.Local( |         link_test_local = local.Local( | ||||||
|             target_host='localhost', |             target_host=( | ||||||
|  |                 'localhost', | ||||||
|  |                 'localhost', | ||||||
|  |                 'localhost', | ||||||
|  |             ), | ||||||
|             base_root_path=self.host_base_path, |             base_root_path=self.host_base_path, | ||||||
|             host_dir_name=self.hostdir, |             host_dir_name=self.hostdir, | ||||||
|             exec_path=test.cdist_exec_path, |             exec_path=test.cdist_exec_path, | ||||||
|  |  | ||||||
|  | @ -34,7 +34,11 @@ class RemoteTestCase(test.CdistTestCase): | ||||||
| 
 | 
 | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
|         self.target_host = 'localhost' |         self.target_host = ( | ||||||
|  |             'localhost', | ||||||
|  |             'localhost', | ||||||
|  |             'localhost', | ||||||
|  |         ) | ||||||
|         self.base_path = self.temp_dir |         self.base_path = self.temp_dir | ||||||
|         user = getpass.getuser() |         user = getpass.getuser() | ||||||
|         remote_exec = "ssh -o User=%s -q" % user |         remote_exec = "ssh -o User=%s -q" % user | ||||||
|  | @ -67,22 +71,22 @@ class RemoteTestCase(test.CdistTestCase): | ||||||
|     # /test api |     # /test api | ||||||
| 
 | 
 | ||||||
|     def test_run_success(self): |     def test_run_success(self): | ||||||
|         self.remote.run(['/bin/true']) |         self.remote.run(['true']) | ||||||
| 
 | 
 | ||||||
|     def test_run_fail(self): |     def test_run_fail(self): | ||||||
|         self.assertRaises(cdist.Error, self.remote.run, ['/bin/false']) |         self.assertRaises(cdist.Error, self.remote.run, ['false']) | ||||||
| 
 | 
 | ||||||
|     def test_run_script_success(self): |     def test_run_script_success(self): | ||||||
|         handle, script = self.mkstemp(dir=self.temp_dir) |         handle, script = self.mkstemp(dir=self.temp_dir) | ||||||
|         with os.fdopen(handle, "w") as fd: |         with os.fdopen(handle, "w") as fd: | ||||||
|             fd.writelines(["#!/bin/sh\n", "/bin/true"]) |             fd.writelines(["#!/bin/sh\n", "true"]) | ||||||
|         self.remote.run_script(script) |         self.remote.run_script(script) | ||||||
| 
 | 
 | ||||||
|     def test_run_script_fail(self): |     def test_run_script_fail(self): | ||||||
|         handle, script = self.mkstemp(dir=self.temp_dir) |         handle, script = self.mkstemp(dir=self.temp_dir) | ||||||
|         with os.fdopen(handle, "w") as fd: |         with os.fdopen(handle, "w") as fd: | ||||||
|             fd.writelines(["#!/bin/sh\n", "/bin/false"]) |             fd.writelines(["#!/bin/sh\n", "false"]) | ||||||
|         self.assertRaises(remote.RemoteScriptError, self.remote.run_script, |         self.assertRaises(cdist.Error, self.remote.run_script, | ||||||
|                           script) |                           script) | ||||||
| 
 | 
 | ||||||
|     def test_run_script_get_output(self): |     def test_run_script_get_output(self): | ||||||
|  | @ -121,8 +125,8 @@ class RemoteTestCase(test.CdistTestCase): | ||||||
|         # test if the payload file is in the target directory |         # test if the payload file is in the target directory | ||||||
|         self.assertTrue(os.path.isfile(os.path.join(target, source_file_name))) |         self.assertTrue(os.path.isfile(os.path.join(target, source_file_name))) | ||||||
| 
 | 
 | ||||||
|     def test_create_directories(self): |     def test_create_files_dirs(self): | ||||||
|         self.remote.create_directories() |         self.remote.create_files_dirs() | ||||||
|         self.assertTrue(os.path.isdir(self.remote.base_path)) |         self.assertTrue(os.path.isdir(self.remote.base_path)) | ||||||
|         self.assertTrue(os.path.isdir(self.remote.conf_path)) |         self.assertTrue(os.path.isdir(self.remote.conf_path)) | ||||||
| 
 | 
 | ||||||
|  | @ -135,8 +139,8 @@ class RemoteTestCase(test.CdistTestCase): | ||||||
|         remote_copy = "echo" |         remote_copy = "echo" | ||||||
|         r = remote.Remote(self.target_host, base_path=self.base_path, |         r = remote.Remote(self.target_host, base_path=self.base_path, | ||||||
|                           remote_exec=remote_exec, remote_copy=remote_copy) |                           remote_exec=remote_exec, remote_copy=remote_copy) | ||||||
|         self.assertEqual(r.run('/bin/true', return_output=True), |         self.assertEqual(r.run('true', return_output=True), | ||||||
|                          "%s\n" % self.target_host) |                          "%s\n" % self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|     def test_run_script_target_host_in_env(self): |     def test_run_script_target_host_in_env(self): | ||||||
|         handle, remote_exec_path = self.mkstemp(dir=self.temp_dir) |         handle, remote_exec_path = self.mkstemp(dir=self.temp_dir) | ||||||
|  | @ -149,9 +153,9 @@ class RemoteTestCase(test.CdistTestCase): | ||||||
|                           remote_exec=remote_exec, remote_copy=remote_copy) |                           remote_exec=remote_exec, remote_copy=remote_copy) | ||||||
|         handle, script = self.mkstemp(dir=self.temp_dir) |         handle, script = self.mkstemp(dir=self.temp_dir) | ||||||
|         with os.fdopen(handle, "w") as fd: |         with os.fdopen(handle, "w") as fd: | ||||||
|             fd.writelines(["#!/bin/sh\n", "/bin/true"]) |             fd.writelines(["#!/bin/sh\n", "true"]) | ||||||
|         self.assertEqual(r.run_script(script, return_output=True), |         self.assertEqual(r.run_script(script, return_output=True), | ||||||
|                          "%s\n" % self.target_host) |                          "%s\n" % self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|     def test_run_script_with_env_target_host_in_env(self): |     def test_run_script_with_env_target_host_in_env(self): | ||||||
|         handle, script = self.mkstemp(dir=self.temp_dir) |         handle, script = self.mkstemp(dir=self.temp_dir) | ||||||
|  |  | ||||||
|  | @ -42,7 +42,7 @@ class ExplorerClassTestCase(test.CdistTestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
|         self.local_path = os.path.join(self.temp_dir, "local") |         self.local_path = os.path.join(self.temp_dir, "local") | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         base_root_path = os.path.join(self.local_path, hostdir) |         base_root_path = os.path.join(self.local_path, hostdir) | ||||||
|         self.remote_base_path = os.path.join(self.temp_dir, "remote") |         self.remote_base_path = os.path.join(self.temp_dir, "remote") | ||||||
|         os.makedirs(self.remote_base_path) |         os.makedirs(self.remote_base_path) | ||||||
|  |  | ||||||
|  | @ -49,7 +49,7 @@ class ManifestTestCase(test.CdistTestCase): | ||||||
|         self.temp_dir = self.mkdtemp() |         self.temp_dir = self.mkdtemp() | ||||||
| 
 | 
 | ||||||
|         out_path = self.temp_dir |         out_path = self.temp_dir | ||||||
|         hostdir = cdist.str_hash(self.target_host) |         hostdir = cdist.str_hash(self.target_host[0]) | ||||||
|         base_root_path = os.path.join(out_path, hostdir) |         base_root_path = os.path.join(out_path, hostdir) | ||||||
|         self.local = local.Local( |         self.local = local.Local( | ||||||
|             target_host=self.target_host, |             target_host=self.target_host, | ||||||
|  | @ -60,7 +60,7 @@ class ManifestTestCase(test.CdistTestCase): | ||||||
|         self.local.create_files_dirs() |         self.local.create_files_dirs() | ||||||
| 
 | 
 | ||||||
|         self.manifest = manifest.Manifest(self.target_host, self.local) |         self.manifest = manifest.Manifest(self.target_host, self.local) | ||||||
|         self.log = logging.getLogger(self.target_host) |         self.log = logging.getLogger(self.target_host[0]) | ||||||
| 
 | 
 | ||||||
|     def tearDown(self): |     def tearDown(self): | ||||||
|         os.environ = self.orig_environ |         os.environ = self.orig_environ | ||||||
|  | @ -82,7 +82,12 @@ class ManifestTestCase(test.CdistTestCase): | ||||||
|                 key, value = line.split(': ') |                 key, value = line.split(': ') | ||||||
|                 output_dict[key] = value |                 output_dict[key] = value | ||||||
|         self.assertTrue(output_dict['PATH'].startswith(self.local.bin_path)) |         self.assertTrue(output_dict['PATH'].startswith(self.local.bin_path)) | ||||||
|         self.assertEqual(output_dict['__target_host'], self.local.target_host) |         self.assertEqual(output_dict['__target_host'], | ||||||
|  |                          self.local.target_host[0]) | ||||||
|  |         self.assertEqual(output_dict['__target_hostname'], | ||||||
|  |                          self.local.target_host[1]) | ||||||
|  |         self.assertEqual(output_dict['__target_fqdn'], | ||||||
|  |                          self.local.target_host[2]) | ||||||
|         self.assertEqual(output_dict['__global'], self.local.base_path) |         self.assertEqual(output_dict['__global'], self.local.base_path) | ||||||
|         self.assertEqual(output_dict['__cdist_type_base_path'], |         self.assertEqual(output_dict['__cdist_type_base_path'], | ||||||
|                          self.local.type_path) |                          self.local.type_path) | ||||||
|  | @ -107,7 +112,12 @@ class ManifestTestCase(test.CdistTestCase): | ||||||
|                 key, value = line.split(': ') |                 key, value = line.split(': ') | ||||||
|                 output_dict[key] = value |                 output_dict[key] = value | ||||||
|         self.assertTrue(output_dict['PATH'].startswith(self.local.bin_path)) |         self.assertTrue(output_dict['PATH'].startswith(self.local.bin_path)) | ||||||
|         self.assertEqual(output_dict['__target_host'], self.local.target_host) |         self.assertEqual(output_dict['__target_host'], | ||||||
|  |                          self.local.target_host[0]) | ||||||
|  |         self.assertEqual(output_dict['__target_hostname'], | ||||||
|  |                          self.local.target_host[1]) | ||||||
|  |         self.assertEqual(output_dict['__target_fqdn'], | ||||||
|  |                          self.local.target_host[2]) | ||||||
|         self.assertEqual(output_dict['__global'], self.local.base_path) |         self.assertEqual(output_dict['__global'], self.local.base_path) | ||||||
|         self.assertEqual(output_dict['__cdist_type_base_path'], |         self.assertEqual(output_dict['__cdist_type_base_path'], | ||||||
|                          self.local.type_path) |                          self.local.type_path) | ||||||
|  |  | ||||||
|  | @ -3,6 +3,8 @@ | ||||||
| cat > $__cdist_test_out << DONE | cat > $__cdist_test_out << DONE | ||||||
| PATH: $PATH | PATH: $PATH | ||||||
| __target_host: $__target_host | __target_host: $__target_host | ||||||
|  | __target_hostname: $__target_hostname | ||||||
|  | __target_fqdn: $__target_fqdn | ||||||
| __global: $__global | __global: $__global | ||||||
| __cdist_type_base_path: $__cdist_type_base_path | __cdist_type_base_path: $__cdist_type_base_path | ||||||
| __manifest: $__manifest | __manifest: $__manifest | ||||||
|  |  | ||||||
|  | @ -3,6 +3,8 @@ | ||||||
| cat > $__cdist_test_out << DONE | cat > $__cdist_test_out << DONE | ||||||
| PATH: $PATH | PATH: $PATH | ||||||
| __target_host: $__target_host | __target_host: $__target_host | ||||||
|  | __target_hostname: $__target_hostname | ||||||
|  | __target_fqdn: $__target_fqdn | ||||||
| __global: $__global | __global: $__global | ||||||
| __cdist_type_base_path: $__cdist_type_base_path | __cdist_type_base_path: $__cdist_type_base_path | ||||||
| __type: $__type | __type: $__type | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| Changelog | Changelog | ||||||
| --------- | --------- | ||||||
| next: | next: | ||||||
| 	* New type __filesystem: manage filesystems on devices ( Daniel Heule ) | 	* Core: Add derived env vars for target hostname and fqdn (Darko Poljak) | ||||||
| 
 | 	* New type __filesystem: manage filesystems on devices (Daniel Heule) | ||||||
| 	* New type: __locale_system (Steven Armstrong, Carlos Ortigoza, Nico Schottelius) | 	* New type: __locale_system (Steven Armstrong, Carlos Ortigoza, Nico Schottelius) | ||||||
| 	* New type: __sysctl (Steven Armstrong) | 	* New type: __sysctl (Steven Armstrong) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -53,8 +53,8 @@ Cdist expects the initial manifest at **cdist/conf/manifest/init**. | ||||||
| 
 | 
 | ||||||
| Within this initial manifest you define, which objects should be | Within this initial manifest you define, which objects should be | ||||||
| created on which host. To distinguish between hosts, you can use the | created on which host. To distinguish between hosts, you can use the | ||||||
| environment variable **__target_host**. Let's have a look at a simple | environment variable **__target_host** and/or **__target_hostname** and/or | ||||||
| example:: | **__target_fqdn**. Let's have a look at a simple example:: | ||||||
| 
 | 
 | ||||||
|     __cdistmarker |     __cdistmarker | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -226,7 +226,18 @@ __object_name | ||||||
|     The full qualified name of the current object. |     The full qualified name of the current object. | ||||||
|     Available for: type manifest, type explorer, type gencode. |     Available for: type manifest, type explorer, type gencode. | ||||||
| __target_host | __target_host | ||||||
|     The host we are deploying to. |     The host we are deploying to. This is primary variable. It's content is | ||||||
|  |     literally the one user passed in. | ||||||
|  |     Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. | ||||||
|  | __target_hostname | ||||||
|  |     The hostname of host we are deploying to. This variable is derived from | ||||||
|  |     **__target_host** (using **socket.getaddrinfo(__target_host)** and then | ||||||
|  |     **socket.gethostbyaddr()**). | ||||||
|  |     Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. | ||||||
|  | __target_fqdn | ||||||
|  |     The fully qualified domain name of the host we are deploying to. | ||||||
|  |     This variable is derived from **__target_host** | ||||||
|  |     (using **socket.getfqdn()**). | ||||||
|     Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. |     Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. | ||||||
| __type | __type | ||||||
|     Path to the current type. |     Path to the current type. | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue