Merge "Put Zuul vars in an ansible vars file" into feature/zuulv3
This commit is contained in:
commit
95508716de
|
@ -676,6 +676,7 @@ class RecordingLaunchServer(zuul.launcher.server.LaunchServer):
|
||||||
"""
|
"""
|
||||||
def __init__(self, *args, **kw):
|
def __init__(self, *args, **kw):
|
||||||
self._run_ansible = kw.pop('_run_ansible', False)
|
self._run_ansible = kw.pop('_run_ansible', False)
|
||||||
|
self._test_root = kw.pop('_test_root', False)
|
||||||
super(RecordingLaunchServer, self).__init__(*args, **kw)
|
super(RecordingLaunchServer, self).__init__(*args, **kw)
|
||||||
self.hold_jobs_in_build = False
|
self.hold_jobs_in_build = False
|
||||||
self.lock = threading.Lock()
|
self.lock = threading.Lock()
|
||||||
|
@ -724,6 +725,9 @@ class RecordingLaunchServer(zuul.launcher.server.LaunchServer):
|
||||||
job.build = build
|
job.build = build
|
||||||
self.running_builds.append(build)
|
self.running_builds.append(build)
|
||||||
self.job_builds[job.unique] = build
|
self.job_builds[job.unique] = build
|
||||||
|
args = json.loads(job.arguments)
|
||||||
|
args['zuul']['_test'] = dict(test_root=self._test_root)
|
||||||
|
job.arguments = json.dumps(args)
|
||||||
super(RecordingLaunchServer, self).launchJob(job)
|
super(RecordingLaunchServer, self).launchJob(job)
|
||||||
|
|
||||||
def stopJob(self, job):
|
def stopJob(self, job):
|
||||||
|
@ -1252,7 +1256,9 @@ class ZuulTestCase(BaseTestCase):
|
||||||
self._startMerger()
|
self._startMerger()
|
||||||
|
|
||||||
self.launch_server = RecordingLaunchServer(
|
self.launch_server = RecordingLaunchServer(
|
||||||
self.config, self.connections, _run_ansible=self.run_ansible)
|
self.config, self.connections,
|
||||||
|
_run_ansible=self.run_ansible,
|
||||||
|
_test_root=self.test_root)
|
||||||
self.launch_server.start()
|
self.launch_server.start()
|
||||||
self.history = self.launch_server.build_history
|
self.history = self.launch_server.build_history
|
||||||
self.builds = self.launch_server.running_builds
|
self.builds = self.launch_server.running_builds
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# TODO(jeblair): Perform an action inside of a test chroot
|
|
||||||
- hosts: all
|
- hosts: all
|
||||||
tasks:
|
tasks:
|
||||||
- file:
|
- file:
|
||||||
path: /tmp/playbook.test
|
path: "{{zuul._test.test_root}}/{{zuul.uuid}}.flag"
|
||||||
state: touch
|
state: touch
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
from tests.base import AnsibleZuulTestCase
|
from tests.base import AnsibleZuulTestCase
|
||||||
|
@ -129,5 +130,7 @@ class TestAnsible(AnsibleZuulTestCase):
|
||||||
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
||||||
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
|
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
|
||||||
self.waitUntilSettled()
|
self.waitUntilSettled()
|
||||||
self.assertEqual(self.getJobFromHistory('python27').result,
|
build = self.getJobFromHistory('python27')
|
||||||
'SUCCESS')
|
self.assertEqual(build.result, 'SUCCESS')
|
||||||
|
flag_path = os.path.join(self.test_root, build.uuid + '.flag')
|
||||||
|
self.assertTrue(os.path.exists(flag_path))
|
||||||
|
|
|
@ -300,6 +300,10 @@ class LaunchClient(object):
|
||||||
[x.change for x in dependent_items]))
|
[x.change for x in dependent_items]))
|
||||||
dependent_items = dependent_items[:]
|
dependent_items = dependent_items[:]
|
||||||
dependent_items.reverse()
|
dependent_items.reverse()
|
||||||
|
# TODOv3(jeblair): This ansible vars data structure will
|
||||||
|
# replace the environment variables below.
|
||||||
|
zuul_params = dict(uuid=uuid)
|
||||||
|
# Legacy environment variables
|
||||||
params = dict(ZUUL_UUID=uuid,
|
params = dict(ZUUL_UUID=uuid,
|
||||||
ZUUL_PROJECT=item.change.project.name)
|
ZUUL_PROJECT=item.change.project.name)
|
||||||
params['ZUUL_PIPELINE'] = pipeline.name
|
params['ZUUL_PIPELINE'] = pipeline.name
|
||||||
|
@ -382,6 +386,7 @@ class LaunchClient(object):
|
||||||
for node in item.current_build_set.getJobNodeSet(job.name).getNodes():
|
for node in item.current_build_set.getJobNodeSet(job.name).getNodes():
|
||||||
nodes.append(dict(name=node.name, image=node.image))
|
nodes.append(dict(name=node.name, image=node.image))
|
||||||
params['nodes'] = nodes
|
params['nodes'] = nodes
|
||||||
|
params['zuul'] = zuul_params
|
||||||
projects = set()
|
projects = set()
|
||||||
for item in all_items:
|
for item in all_items:
|
||||||
if item.change.project not in projects:
|
if item.change.project not in projects:
|
||||||
|
|
|
@ -24,6 +24,7 @@ import tempfile
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
import yaml
|
||||||
|
|
||||||
import gear
|
import gear
|
||||||
|
|
||||||
|
@ -75,6 +76,7 @@ class JobDir(object):
|
||||||
os.makedirs(self.ansible_root)
|
os.makedirs(self.ansible_root)
|
||||||
self.known_hosts = os.path.join(self.ansible_root, 'known_hosts')
|
self.known_hosts = os.path.join(self.ansible_root, 'known_hosts')
|
||||||
self.inventory = os.path.join(self.ansible_root, 'inventory')
|
self.inventory = os.path.join(self.ansible_root, 'inventory')
|
||||||
|
self.vars = os.path.join(self.ansible_root, 'vars.yaml')
|
||||||
self.playbook = None
|
self.playbook = None
|
||||||
self.playbook_root = os.path.join(self.ansible_root, 'playbook')
|
self.playbook_root = os.path.join(self.ansible_root, 'playbook')
|
||||||
os.makedirs(self.playbook_root)
|
os.makedirs(self.playbook_root)
|
||||||
|
@ -444,6 +446,10 @@ class LaunchServer(object):
|
||||||
for k, v in host_vars.items():
|
for k, v in host_vars.items():
|
||||||
inventory.write('%s=%s' % (k, v))
|
inventory.write('%s=%s' % (k, v))
|
||||||
inventory.write('\n')
|
inventory.write('\n')
|
||||||
|
with open(jobdir.vars, 'w') as vars_yaml:
|
||||||
|
zuul_vars = dict(zuul=args['zuul'])
|
||||||
|
vars_yaml.write(
|
||||||
|
yaml.safe_dump(zuul_vars, default_flow_style=False))
|
||||||
with open(jobdir.config, 'w') as config:
|
with open(jobdir.config, 'w') as config:
|
||||||
config.write('[defaults]\n')
|
config.write('[defaults]\n')
|
||||||
config.write('hostfile = %s\n' % jobdir.inventory)
|
config.write('hostfile = %s\n' % jobdir.inventory)
|
||||||
|
@ -499,7 +505,8 @@ class LaunchServer(object):
|
||||||
else:
|
else:
|
||||||
verbose = '-v'
|
verbose = '-v'
|
||||||
|
|
||||||
cmd = ['ansible-playbook', jobdir.playbook, verbose]
|
cmd = ['ansible-playbook', jobdir.playbook,
|
||||||
|
'-e@%s' % jobdir.vars, verbose]
|
||||||
self.log.debug("Ansible command: %s" % (cmd,))
|
self.log.debug("Ansible command: %s" % (cmd,))
|
||||||
# TODOv3: verbose
|
# TODOv3: verbose
|
||||||
proc = subprocess.Popen(
|
proc = subprocess.Popen(
|
||||||
|
|
Loading…
Reference in New Issue