Add enqueue-ref command to client
Change-Id: Icf496a4d54e346f6dea01c8822e7ef7e5ef8f097
This commit is contained in:
parent
cd5012e2e7
commit
91e3459805
@ -2682,7 +2682,7 @@ class TestScheduler(ZuulTestCase):
|
||||
self.worker.release('.*')
|
||||
self.waitUntilSettled()
|
||||
|
||||
def test_client_enqueue(self):
|
||||
def test_client_enqueue_change(self):
|
||||
"Test that the RPC client can enqueue a change"
|
||||
A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
|
||||
A.addApproval('CRVW', 2)
|
||||
@ -2705,6 +2705,24 @@ class TestScheduler(ZuulTestCase):
|
||||
self.assertEqual(A.reported, 2)
|
||||
self.assertEqual(r, True)
|
||||
|
||||
def test_client_enqueue_ref(self):
|
||||
"Test that the RPC client can enqueue a ref"
|
||||
|
||||
client = zuul.rpcclient.RPCClient('127.0.0.1',
|
||||
self.gearman_server.port)
|
||||
r = client.enqueue_ref(
|
||||
pipeline='post',
|
||||
project='org/project',
|
||||
trigger='gerrit',
|
||||
ref='master',
|
||||
oldrev='90f173846e3af9154517b88543ffbd1691f31366',
|
||||
newrev='d479a0bfcb34da57a31adb2a595c0cf687812543')
|
||||
self.waitUntilSettled()
|
||||
job_names = [x.name for x in self.history]
|
||||
self.assertEqual(len(self.history), 1)
|
||||
self.assertIn('project-post', job_names)
|
||||
self.assertEqual(r, True)
|
||||
|
||||
def test_client_enqueue_negative(self):
|
||||
"Test that the RPC client returns errors"
|
||||
client = zuul.rpcclient.RPCClient('127.0.0.1',
|
||||
|
@ -56,6 +56,24 @@ class Client(zuul.cmd.ZuulApp):
|
||||
required=True)
|
||||
cmd_enqueue.set_defaults(func=self.enqueue)
|
||||
|
||||
cmd_enqueue = subparsers.add_parser('enqueue-ref',
|
||||
help='enqueue a ref')
|
||||
cmd_enqueue.add_argument('--trigger', help='trigger name',
|
||||
required=True)
|
||||
cmd_enqueue.add_argument('--pipeline', help='pipeline name',
|
||||
required=True)
|
||||
cmd_enqueue.add_argument('--project', help='project name',
|
||||
required=True)
|
||||
cmd_enqueue.add_argument('--ref', help='ref name',
|
||||
required=True)
|
||||
cmd_enqueue.add_argument(
|
||||
'--oldrev', help='old revision',
|
||||
default='0000000000000000000000000000000000000000')
|
||||
cmd_enqueue.add_argument(
|
||||
'--newrev', help='new revision',
|
||||
default='0000000000000000000000000000000000000000')
|
||||
cmd_enqueue.set_defaults(func=self.enqueue_ref)
|
||||
|
||||
cmd_promote = subparsers.add_parser('promote',
|
||||
help='promote one or more changes')
|
||||
cmd_promote.add_argument('--pipeline', help='pipeline name',
|
||||
@ -82,6 +100,9 @@ class Client(zuul.cmd.ZuulApp):
|
||||
show_running_jobs.set_defaults(func=self.show_running_jobs)
|
||||
|
||||
self.args = parser.parse_args()
|
||||
if self.args.func == self.enqueue_ref:
|
||||
if self.args.oldrev == self.args.newrev:
|
||||
parser.error("The old and new revisions must not be the same.")
|
||||
|
||||
def setup_logging(self):
|
||||
"""Client logging does not rely on conf file"""
|
||||
@ -112,6 +133,16 @@ class Client(zuul.cmd.ZuulApp):
|
||||
change=self.args.change)
|
||||
return r
|
||||
|
||||
def enqueue_ref(self):
|
||||
client = zuul.rpcclient.RPCClient(self.server, self.port)
|
||||
r = client.enqueue_ref(pipeline=self.args.pipeline,
|
||||
project=self.args.project,
|
||||
trigger=self.args.trigger,
|
||||
ref=self.args.ref,
|
||||
oldrev=self.args.oldrev,
|
||||
newrev=self.args.newrev)
|
||||
return r
|
||||
|
||||
def promote(self):
|
||||
client = zuul.rpcclient.RPCClient(self.server, self.port)
|
||||
r = client.promote(pipeline=self.args.pipeline,
|
||||
|
@ -56,6 +56,16 @@ class RPCClient(object):
|
||||
}
|
||||
return not self.submitJob('zuul:enqueue', data).failure
|
||||
|
||||
def enqueue_ref(self, pipeline, project, trigger, ref, oldrev, newrev):
|
||||
data = {'pipeline': pipeline,
|
||||
'project': project,
|
||||
'trigger': trigger,
|
||||
'ref': ref,
|
||||
'oldrev': oldrev,
|
||||
'newrev': newrev,
|
||||
}
|
||||
return not self.submitJob('zuul:enqueue_ref', data).failure
|
||||
|
||||
def promote(self, pipeline, change_ids):
|
||||
data = {'pipeline': pipeline,
|
||||
'change_ids': change_ids,
|
||||
|
@ -48,6 +48,7 @@ class RPCListener(object):
|
||||
|
||||
def register(self):
|
||||
self.worker.registerFunction("zuul:enqueue")
|
||||
self.worker.registerFunction("zuul:enqueue_ref")
|
||||
self.worker.registerFunction("zuul:promote")
|
||||
self.worker.registerFunction("zuul:get_running_jobs")
|
||||
|
||||
@ -83,7 +84,7 @@ class RPCListener(object):
|
||||
except Exception:
|
||||
self.log.exception("Exception while getting job")
|
||||
|
||||
def handle_enqueue(self, job):
|
||||
def _common_enqueue(self, job):
|
||||
args = json.loads(job.arguments)
|
||||
event = model.TriggerEvent()
|
||||
errors = ''
|
||||
@ -106,6 +107,11 @@ class RPCListener(object):
|
||||
else:
|
||||
errors += 'Invalid pipeline: %s\n' % (args['pipeline'],)
|
||||
|
||||
return (args, event, errors, pipeline, project)
|
||||
|
||||
def handle_enqueue(self, job):
|
||||
(args, event, errors, pipeline, project) = self._common_enqueue(job)
|
||||
|
||||
if not errors:
|
||||
event.change_number, event.patch_number = args['change'].split(',')
|
||||
try:
|
||||
@ -119,6 +125,20 @@ class RPCListener(object):
|
||||
self.sched.enqueue(event)
|
||||
job.sendWorkComplete()
|
||||
|
||||
def handle_enqueue_ref(self, job):
|
||||
(args, event, errors, pipeline, project) = self._common_enqueue(job)
|
||||
|
||||
if not errors:
|
||||
event.ref = args['ref']
|
||||
event.oldrev = args['oldrev']
|
||||
event.newrev = args['newrev']
|
||||
|
||||
if errors:
|
||||
job.sendWorkException(errors.encode('utf8'))
|
||||
else:
|
||||
self.sched.enqueue(event)
|
||||
job.sendWorkComplete()
|
||||
|
||||
def handle_promote(self, job):
|
||||
args = json.loads(job.arguments)
|
||||
pipeline_name = args['pipeline']
|
||||
|
Loading…
x
Reference in New Issue
Block a user