Add manual job triggering script.

Change-Id: Ic396c845e5f61a98d3b0e8c3fc08c6f9dbfffc6a
Reviewed-on: https://review.openstack.org/34437
Reviewed-by: Jeremy Stanley <fungi@yuggoth.org>
Approved: Clark Boylan <clark.boylan@gmail.com>
Reviewed-by: Clark Boylan <clark.boylan@gmail.com>
Tested-by: Jenkins
diff --git a/tools/trigger-job.py b/tools/trigger-job.py
new file mode 100755
index 0000000..88c718e
--- /dev/null
+++ b/tools/trigger-job.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+# Copyright 2013 OpenStack Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# This script can be used to manually trigger a job in the same way that
+# Zuul does.  At the moment, it only supports the post set of Zuul
+# parameters.
+
+import argparse
+import time
+import json
+from uuid import uuid4
+
+import gear
+
+
+def main():
+    c = gear.Client()
+
+    parser = argparse.ArgumentParser(description='Trigger a Zuul job.')
+    parser.add_argument('--job', dest='job', required=True,
+                        help='Job Name')
+    parser.add_argument('--project', dest='project', required=True,
+                        help='Project name')
+    parser.add_argument('--pipeline', dest='pipeline', default='release',
+                        help='Zuul pipeline')
+    parser.add_argument('--refname', dest='refname',
+                        help='Ref name')
+    parser.add_argument('--oldrev', dest='oldrev',
+                        default='0000000000000000000000000000000000000000',
+                        help='Old revision (SHA)')
+    parser.add_argument('--newrev', dest='newrev',
+                        help='New revision (SHA)')
+    args = parser.parse_args()
+
+    data = {'ZUUL_PIPELINE': args.pipeline,
+            'ZUUL_PROJECT': args.project,
+            'ZUUL_UUID': str(uuid4().hex),
+            'ZUUL_REF': args.refname,
+            'ZUUL_REFNAME': args.refname,
+            'ZUUL_OLDREV': args.oldrev,
+            'ZUUL_NEWREV': args.newrev,
+            'ZUUL_SHORT_OLDREV': args.oldrev[:7],
+            'ZUUL_SHORT_NEWREV': args.newrev[:7],
+            'ZUUL_COMMIT': args.newrev,
+            }
+
+    c.addServer('127.0.0.1', 4730)
+    c.waitForServer()
+
+    job = gear.Job("build:%s" % args.job,
+                   json.dumps(data),
+                   unique=data['ZUUL_UUID'])
+    c.submitJob(job)
+
+    while not job.complete:
+        time.sleep(1)
+
+if __name__ == '__main__':
+    main()