Put variables into the inventory

Instead of using a vars.yaml file and a -e command, just put the
variables into the all group in the inventory file. One less file to
manage, single file to look at for debugging.

Change-Id: I5b1f149ecca649b1434488392cc8232de20cd4fc
This commit is contained in:
Monty Taylor 2017-05-24 08:20:53 -05:00
parent 0d926125cc
commit a54144a292
No known key found for this signature in database
GPG Key ID: 7BAE94BC7141A594
2 changed files with 25 additions and 14 deletions

View File

@ -44,8 +44,15 @@ class TestInventory(ZuulTestCase):
all_nodes = ('ubuntu-xenial',)
self.assertIn('all', inventory)
self.assertIn('hosts', inventory['all'])
self.assertIn('vars', inventory['all'])
for node_name in all_nodes:
self.assertIn(node_name, inventory['all']['hosts'])
self.assertIn('zuul', inventory['all']['vars'])
z_vars = inventory['all']['vars']['zuul']
self.assertIn('executor', z_vars)
self.assertIn('src_root', z_vars['executor'])
self.assertIn('job', z_vars)
self.assertEqual(z_vars['job'], 'single-inventory')
self.executor_server.release()
self.waitUntilSettled()
@ -57,11 +64,19 @@ class TestInventory(ZuulTestCase):
all_nodes = ('controller', 'compute1', 'compute2')
self.assertIn('all', inventory)
self.assertIn('hosts', inventory['all'])
self.assertIn('vars', inventory['all'])
for group_name in ('ceph-osd', 'ceph-monitor'):
self.assertIn(group_name, inventory)
for node_name in all_nodes:
self.assertIn(node_name, inventory['all']['hosts'])
self.assertIn(node_name,
inventory['ceph-monitor']['hosts'])
self.assertIn('zuul', inventory['all']['vars'])
z_vars = inventory['all']['vars']['zuul']
self.assertIn('executor', z_vars)
self.assertIn('src_root', z_vars['executor'])
self.assertIn('job', z_vars)
self.assertEqual(z_vars['job'], 'group-inventory')
self.executor_server.release()
self.waitUntilSettled()

View File

@ -184,7 +184,6 @@ class JobDir(object):
os.makedirs(self.ansible_root)
self.known_hosts = os.path.join(self.ansible_root, 'known_hosts')
self.inventory = os.path.join(self.ansible_root, 'inventory.yaml')
self.vars = os.path.join(self.ansible_root, 'vars.yaml')
self.playbooks = [] # The list of candidate playbooks
self.playbook = None # A pointer to the candidate we have chosen
self.pre_playbooks = []
@ -313,7 +312,7 @@ def _copy_ansible_files(python_module, target_dir):
shutil.copy(os.path.join(library_path, fn), target_dir)
def make_inventory_dict(nodes, groups):
def make_inventory_dict(nodes, groups, all_vars):
hosts = {}
for node in nodes:
@ -322,6 +321,7 @@ def make_inventory_dict(nodes, groups):
inventory = {
'all': {
'hosts': hosts,
'vars': all_vars,
}
}
@ -1103,8 +1103,14 @@ class AnsibleJob(object):
self.jobdir.trusted_roles_path.append(trusted_role_path)
def prepareAnsibleFiles(self, args):
all_vars = dict(args['vars'])
all_vars['zuul']['executor'] = dict(
hostname=self.executor_server.hostname,
src_root=self.jobdir.src_root,
log_root=self.jobdir.log_root)
nodes = self.getHostList(args)
inventory = make_inventory_dict(nodes, args['groups'])
inventory = make_inventory_dict(nodes, args['groups'], all_vars)
with open(self.jobdir.inventory, 'w') as inventory_yaml:
inventory_yaml.write(
@ -1115,14 +1121,6 @@ class AnsibleJob(object):
for key in node['host_keys']:
known_hosts.write('%s\n' % key)
with open(self.jobdir.vars, 'w') as vars_yaml:
zuul_vars = dict(args['vars'])
zuul_vars['zuul']['executor'] = dict(
hostname=self.executor_server.hostname,
src_root=self.jobdir.src_root,
log_root=self.jobdir.log_root)
vars_yaml.write(
yaml.safe_dump(zuul_vars, default_flow_style=False))
self.writeAnsibleConfig(self.jobdir.untrusted_config)
self.writeAnsibleConfig(self.jobdir.trusted_config, trusted=True)
@ -1276,12 +1274,10 @@ class AnsibleJob(object):
else:
verbose = '-v'
cmd = ['ansible-playbook', playbook.path]
cmd = ['ansible-playbook', verbose, playbook.path]
if success is not None:
cmd.extend(['-e', 'success=%s' % str(bool(success))])
cmd.extend(['-e@%s' % self.jobdir.vars, verbose])
return self.runAnsible(
cmd=cmd, timeout=timeout, trusted=playbook.trusted)