Merge lp:~1chb1n/ubuntu-openstack-ci/ss8-redeploy into lp:ubuntu-openstack-ci

Proposed by Ryan Beisner
Status: Merged
Merged at revision: 392
Proposed branch: lp:~1chb1n/ubuntu-openstack-ci/ss8-redeploy
Merge into: lp:ubuntu-openstack-ci
Diff against target: 21600 lines (+3286/-14486)
210 files modified
.bzrignore (+9/-16)
README.deploy (+0/-107)
README.hacking (+0/-74)
README.jobs (+0/-35)
deploy-prep.sh (+0/-10)
deploy/README.md (+11/-0)
deploy/assets/bashrc (+0/-2)
deploy/assets/environment-series.yaml (+1/-1)
deploy/assets/environments.yaml (+1/-1)
deploy/assets/osci-repo-boot-clean.sh (+6/-0)
deploy/assets/osci-repo-boot.sh (+9/-0)
deploy/assets/other_host_keys (+2/-0)
deploy/assets/pip.conf (+1/-1)
deploy/config/env-common (+28/-0)
deploy/config/juju-apps/osci-lab.yaml (+4/-0)
deploy/config/juju-apps/osci-master.yaml (+8/-0)
deploy/config/juju-apps/osci-slave.yaml (+4/-0)
deploy/config/juju-apps/osci-task.yaml (+4/-0)
deploy/config/nets-and-models.yaml (+13/-24)
deploy/jobs-static/_bak_jenkins_home_no_build_history/config.xml (+7/-18)
deploy/jobs-static/_bootstrap/config.xml (+110/-0)
deploy/jobs-static/_bucket_junk_cleanup/config.xml (+8/-19)
deploy/jobs-static/_bucket_reset_object_headers/config.xml (+26/-86)
deploy/jobs-static/_bucket_update_indices/config.xml (+9/-17)
deploy/jobs-static/_destroy_controller/config.xml (+110/-0)
deploy/jobs-static/_destroy_model/config.xml (+110/-0)
deploy/jobs-static/_no_op/config.xml (+10/-158)
deploy/jobs-static/_no_op2/config.xml (+25/-17)
deploy/jobs-static/_no_op3/config.xml (+25/-17)
deploy/jobs-static/_none/config.xml (+63/-0)
deploy/jobs-static/_system_tools_init/config.xml (+10/-91)
deploy/jobs-static/charm_build/config.xml (+34/-31)
deploy/jobs-static/sim_sandbox_pipeline/config.xml (+49/-37)
deploy/jobs-static/sim_sandbox_pipeline_full/config.xml (+20/-26)
deploy/jobs-static/sim_sub_a/config.xml (+7/-18)
deploy/jobs-static/sim_sub_b/config.xml (+11/-22)
deploy/jobs-static/sim_sub_c/config.xml (+9/-20)
deploy/jobs-static/sim_sub_d/config.xml (+9/-20)
deploy/jobs-static/sim_sub_e/config.xml (+9/-20)
deploy/jobs-static/test_charm_amulet_full/config.xml (+8/-16)
deploy/jobs-static/test_charm_amulet_smoke/config.xml (+28/-25)
deploy/jobs-static/test_charm_lint/config.xml (+9/-18)
deploy/jobs-static/test_charm_pipeline/config.xml (+54/-51)
deploy/jobs-static/test_charm_pipeline_amulet_full/config.xml (+45/-40)
deploy/jobs-static/test_charm_single/config.xml (+12/-19)
deploy/jobs-static/test_charm_unit/config.xml (+8/-18)
deploy/lib/__init__.py (+3/-0)
deploy/lib/osci_deploy_helpers.py (+355/-0)
deploy/osci-controller-setup.sh (+19/-0)
deploy/osci-float-all-instances.sh (+18/-0)
deploy/osci-model-deploy.sh (+68/-0)
deploy/osci-nets-and-models.py (+191/-547)
deploy/osci-set-subnets-dns.sh (+14/-0)
deploy/post-deploy/100-repo-boot.sh (+20/-0)
deploy/post-deploy/101-ssh-imports.sh (+9/-0)
deploy/post-deploy/102-ssh-creds.sh (+27/-28)
deploy/post-deploy/103-cs-go-cookies.sh (+9/-15)
deploy/post-deploy/104-dirs-and-packages.sh (+8/-21)
deploy/post-deploy/105-novarc-artifactweb-credentials-distribute.sh (+12/-15)
deploy/post-deploy/110-set-plugin-proxy-serverstack.sh (+14/-14)
deploy/post-deploy/125-jobs-static-initial.sh (+19/-18)
deploy/requirements.txt (+9/-0)
deploy/templates/oscirc (+14/-0)
deploy/tests/sample-juju-status.yaml (+591/-0)
deploy/tox.ini (+33/-0)
deploy/z-deprecated/100-jenkins-user.sh (+8/-8)
deploy/z-deprecated/120-install-plugins.sh (+31/-32)
deploy/z-deprecated/225-juju-gui-float.sh (+17/-18)
deploy/z-deprecated/common/osci_utils.py (+3/-164)
deploy/z-deprecated/dev/populate.py (+2/-1)
deploy/z-deprecated/dev/scan_url_group.py (+1/-1)
deploy/z-deprecated/tools/nova_instances_summarize.py (+1/-0)
deploy/z-deprecated/tools/scan_branch_revs.py (+1/-0)
deploy/z-deprecated/tools/scan_merge_props.py (+1/-0)
deployment/111-osci1-xenial.yaml (+0/-63)
deployment/jobs/charm_pusher_aodh_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_aodh_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_barbican-softhsm_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_barbican-softhsm_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_barbican_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_barbican_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceilometer-agent_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceilometer-agent_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceilometer_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceilometer_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-fs_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-fs_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-mon_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-mon_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-osd_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-osd_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-proxy_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-proxy_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-radosgw_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph-radosgw_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_ceph_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_cinder-backup_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_cinder-backup_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_cinder-ceph_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_cinder-ceph_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_cinder_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_cinder_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_designate-bind_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_designate-bind_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_designate_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_designate_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_glance_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_glance_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_hacluster_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_hacluster_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_heat_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_heat_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_keystone-ldap_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_keystone-ldap_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_keystone_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_keystone_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_lxd_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_lxd_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_manila-generic_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_manila-generic_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_manila_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_manila_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-api-odl_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-api-odl_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-api_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-api_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-gateway_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-gateway_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-openvswitch_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_neutron-openvswitch_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_noop_debug/config.xml (+0/-143)
deployment/jobs/charm_pusher_nova-cloud-controller_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_nova-cloud-controller_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_nova-compute-proxy_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_nova-compute-proxy_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_nova-compute_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_nova-compute_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_odl-controller_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_odl-controller_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_openstack-dashboard_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_openstack-dashboard_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_openvswitch-odl_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_openvswitch-odl_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_percona-cluster_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_percona-cluster_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_rabbitmq-server_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_rabbitmq-server_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_swift-proxy_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_swift-proxy_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_swift-storage_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_swift-storage_stable/config.xml (+0/-143)
deployment/jobs/charm_pusher_tempest_master/config.xml (+0/-143)
deployment/jobs/charm_pusher_tempest_stable/config.xml (+0/-143)
deployment/post-deploy.sh (+0/-39)
env-common (+0/-28)
operate/bare-copy-jobs.sh (+21/-15)
operate/maint-relation-jig.sh (+17/-0)
run/Makefile (+5/-1)
run/job-parts/build_amulet_smoke.sh (+7/-8)
run/job-parts/build_amulet_test.sh (+22/-34)
run/job-parts/build_bak.sh (+14/-0)
run/job-parts/build_bucket_junk_cleanup.sh (+18/-30)
run/job-parts/build_bucket_reset_object_headers.sh (+3/-3)
run/job-parts/build_bucket_update_indices.sh (+3/-2)
run/job-parts/build_charm_build_and_archive.sh (+2/-2)
run/job-parts/build_charm_pusher.sh (+3/-3)
run/job-parts/build_charm_single.sh (+77/-86)
run/job-parts/build_cs_deploy_charm.sh (+12/-0)
run/job-parts/build_deploy_test.sh (+3/-4)
run/job-parts/build_gerrit_change_ci_sandbox.sh (+2/-2)
run/job-parts/build_git_deploy_test.sh (+3/-4)
run/job-parts/build_juju_bootstrap.sh (+4/-0)
run/job-parts/build_juju_destroy_controller.sh (+4/-0)
run/job-parts/build_juju_destroy_model.sh (+4/-0)
run/job-parts/build_lint_test.sh (+6/-31)
run/job-parts/build_mojo_runner.sh (+3/-19)
run/job-parts/build_none.sh (+3/-0)
run/job-parts/build_prescribe.sh (+2/-2)
run/job-parts/build_simulate.sh (+4/-5)
run/job-parts/build_unit_test.sh (+22/-26)
run/job-parts/deprecated/build_deployer_quickcheck.sh (+2/-3)
run/job-parts/deprecated/build_juju_bootstrap.sh (+2/-2)
run/job-parts/deprecated/build_juju_deploy_single_charm.sh (+4/-4)
run/job-parts/deprecated/build_juju_stat.sh (+2/-2)
run/job-parts/deprecated/build_maint_nodes.sh (+1/-1)
run/job-parts/deprecated/build_nova_list_overcloud.sh (+1/-1)
run/job-parts/deprecated/build_nova_list_undercloud.sh (+1/-1)
run/job-parts/deprecated/build_osi.sh (+2/-2)
run/job-parts/deprecated/build_sync_gh2lp.sh (+1/-1)
run/job-parts/deprecated/build_sync_lp2gh.sh (+1/-1)
run/job-parts/deprecated/juju1_bighammer_destroy.sh (+2/-2)
run/job-parts/deprecated/osci_apt_common.sh (+0/-62)
run/job-parts/deprecated/trigger_by_branch_scanner.sh (+1/-1)
run/job-parts/deprecated/trigger_by_mojo_group.sh (+1/-1)
run/job-parts/deprecated/trigger_by_mp_scanner.sh (+1/-1)
run/job-parts/func_exec.sh (+5/-3)
run/job-parts/get_pkg_info.sh (+1/-1)
run/job-parts/osci_gerrit_common.sh (+5/-15)
run/job-parts/osci_job_common.sh (+221/-402)
run/job-parts/osci_juju1_common.sh (+92/-0)
run/job-parts/osci_layerci_common.sh (+19/-0)
run/job-parts/osci_mojo_common.sh (+1/-1)
run/job-parts/osci_openstack_common.sh (+142/-213)
run/job-parts/osci_repos_common.sh (+66/-90)
run/job-parts/part_gerrit_review.sh (+3/-3)
run/job-parts/part_workspace_cleanup.sh (+1/-1)
run/populate/deprecated/create_credentials.py (+5/-5)
run/test-requirements.txt (+1/-0)
run/tox.ini (+14/-6)
To merge this branch: bzr merge lp:~1chb1n/ubuntu-openstack-ci/ss8-redeploy
Reviewer Review Type Date Requested Status
Andrew McLeod (community) Approve
Review via email: mp+322222@code.launchpad.net

Commit message

[1chb1n, r=admcleod] Refactor for redeploy on serverstack8 with Juju2 below and on top

Rearrange directories to separate run-time from deploy-time

Switch to scripted deploy due to fat pack deb needs of the jenkins charms

Update deploy scripts

Refactor helpers

Update tox config

Refactor openstack client usage for ksv3

Update post-deploy scripts

Add func_exec tox coverage

Update charm-test-infra usage

Activate clients for gerrit review builder part

Update bucket junk cleanup

Remove references to juju1 bighammer destroyer

Move rsync backup snipped from job to script

Clean up lint runner script

Add layerci_build_if_necessary

Add destroy builder

Add bootstrap builder

Update post-destroy info dump and juju status

Update juju-wait calls

Add cs_deploy_charm builder

Update amulet runners

Update amulet full runner

Use updated log puller

Update charm single runner for config file name

Description of the change

Beware - this was a major refactor and deprecation of a ton of legacy things.

OSCI has been running live on this since April, and gate jobs are A-OK.

To post a comment you must log in.
468. By Ryan Beisner

Clean up _junk

469. By Ryan Beisner

Prefer py35 unit tests over p27

470. By Ryan Beisner

Revert to preferring py27 as py35 is not supported across all repos yet

471. By Ryan Beisner

Prefer py35 for layers and interfaces; py27 for classic charms

472. By Ryan Beisner

Switch oscirc back to official repo in prep for branch landing

Revision history for this message
Andrew McLeod (admcleod) wrote :

Lvvl&GTM +1

review: Approve
473. By Ryan Beisner

Use merged bot-control master branch

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2017-02-17 17:08:22 +0000
3+++ .bzrignore 2017-05-27 00:22:36 +0000
4@@ -1,20 +1,13 @@
5-deployment/precise
6-deployment/trusty
7-deployment/utopic
8-precise
9-trusty
10-utopic
11-deployment/out
12-deployment/deploy-files/id_dsa
13-deployment/deploy-files/id_dsa.pub
14-deployment/deploy-files/id_rsa
15-deployment/deploy-files/id_rsa.pub
16-deployment/deploy-files/uosci-bot-go-cookies.tar.bz2
17-populate/credentials
18+*.tmp
19+id_*
20+*cookies*
21+credentials
22 hooks
23 bin
24-deployment/jobs/jobs-static-initial.tgz
25+jobs-static-initial.tgz
26 temp.py
27 .coverage
28-deployment/deploy-files/novarc-artifactcloud
29-*/.tox
30+novarc*
31+*.tox
32+secrets
33+deploy/jobs-static/charm_pusher*
34
35=== removed file 'README.deploy'
36--- README.deploy 2015-09-23 15:02:04 +0000
37+++ README.deploy 1970-01-01 00:00:00 +0000
38@@ -1,107 +0,0 @@
39-Ubuntu OpenStack CI - Jenkins Environment
40-
41-====={ DEPLOYMENT README }=====
42-
43-Purpose & requirements:
44- * 'Deployment' in this doc and in the ./deployment directory is in relation
45- to deployment of the jenkins environment, not the environments which may
46- be deployed by tests controlled by that jenkins environment.
47-
48- * Creates a new jenkins master+slave(s) juju deployment in an openstack
49- tenant, upgrades jenkins war to latest release (via war, not deb).
50-
51- * This will deploy the deployer bundle defined in config.yaml to your
52- default local juju environment.
53-
54- * This will add new neutron networks and subnets, 1 per master and 1 per
55- slave, and connect them to the router specified in config.yaml, unless
56- networks splits are set to False in that config yaml.
57-
58- * Must have OpenStack credentials sourced. ie. source ~/novarc
59-
60- * Must have a local Juju environment configured for use with the host
61- openstack environment.
62-
63- * Intended to be run from a bastion or other system admin instance within
64- the tenant. This local unit will not participate in the jenkins enviro
65- other than for admin purposes.
66-
67-Prep:
68- * Review and adjust deploy-config.yaml and the
69- deploy-files/environments.yaml template file.
70-
71- * Review and adjust deploy-files xml files. ie. build publish password
72- is not set, but target is. Some jenkins config is/can be pre-populated
73- there, such as plugin proxy.
74-
75- * Ensure that neutron network quotas and ip space make sense for your
76- values, and be aware that this is only aware of /16 and /24 net blocks
77- for the jenkins master & slave isolated networks.
78-
79- * For Jenkins on Trusty, it is advisable to download the jenkins.deb
80- and deploy from a local branch of the charm specified in the deployer
81- bundle yaml, as the jenkins repo seems to have some bad days.
82-
83- * For the launchpad librarian python routines to authenticate, you should
84- create the OAUTH 'credentials' file using the
85- ./populate/create_credentials.py and place it in
86- /var/lib/jenkins/.config/tarmac/credentials on the jenkins master. The
87- merge proposal scanner and tarmac require it. There is an admin script
88- to push it to all units.
89-
90-Jenkins Infrastructure Deployment:
91- ./deploy.py
92- cd deployment
93- ./post-deploy.sh
94-
95- Or use deployer without post-configuration:
96- cd deployment
97- juju-deployer -B -c 110-uosci-trusty.yaml
98-
99-
100-Directories:
101- ./ root of this branch
102- env-common configurable environment variables for admin and deployment
103-
104- deployment/ infrastructure (jenkins) deployment & static system jobs
105- bin/ deployment scripts
106- deploy-files/ supporting content for deployment
107- jobs/ initial static jenkins job(s)
108- bundle-dev/ unused WIP / experimental files
109- out/ output may be created by deploy or post-deploy routines
110-
111- admin/ misc administrative and debug scripts
112- common/ shared code for admin, deployment, ongoing use
113- dev/ work-in-progress or temporary work-arounds, patches, etc.
114- populate/ see README.jobs
115- tools/ command line tools used in automation/manual testing
116-
117-
118-Notes:
119-
120- * See other READMEs for job creation, etc.
121-
122- * Jenkins admin login is ubuntu/ubuntu.
123-
124- * deploy.py is intended to be safe to run on top of a deployed environment,
125- such as for updating juju environment yamls, IP scheme, etc. YMMV
126-
127- * While this is not a charm, it may be someday, this may use charm helpers.
128-
129- * Scripts use juju ssh instead of juju run for two reasons:
130- - exit codes (it is desired stop on failure)
131- - juju run --all isn't useful here as most of the methods don't apply to
132- non-jenkins service units.
133-
134- * NOTE(beisner): The charms do not currently support configuration of the
135- proxy.xml file which is necessary for installing plugins behind a proxy.
136- Plugins and proxy configuration are handled in post-deploy. Bug #1356915:
137- "jenkins charm needs proxy support for plugin installation..." Some
138- manual/static accomodations exist here, specific to serverstack w/ proxy.
139-
140- * The deploy-files/plugins file is a list of plugins to install, 1 per line.
141- The post-deploy script (via scripts in bin/) takes care of proxy.xml and
142- plugin installation.
143-
144- * The deployed Jenkins version is likely out-dated. It is recommended to
145- upgrade jenkins via the war from trunk. The post-deploy script does that.
146
147=== removed file 'README.hacking'
148--- README.hacking 2015-09-25 13:29:23 +0000
149+++ README.hacking 1970-01-01 00:00:00 +0000
150@@ -1,74 +0,0 @@
151-# Ubuntu OpenStack CI - Hacking Readme
152-
153-## Local Development
154-
155-/!\ BEWARE of BUILD SCRIPTS /!\
156-*******************************
157-Most, if not all, of the build scripts are destructive by default:
158-
159- - All juju environments, juju deployments and lxc containers defined on all
160- Jenkins slave units are ephemeral, throw-away bits.
161-
162- - If executing a build script locally, bad things WILL happen to existing
163- environments, containers and/or deployments.
164-
165- - All detectable juju environments and lxc containers will be automatically
166- and unequivocally destroyed and torn down without confirmation,
167- including those found in ```~/.juju```, ```~/.cloud-install```,
168- or by ```juju switch -l```.
169-
170- - The .ssh/known_hosts file will be cleaned and left with only launchpad entries.
171-
172- - The ~/workspace, ~/tools, ~/.juju/environments/, ~/checkout, and ~/.cloud-install
173- directories will also be routinely wiped.
174-
175- - The ~/tools (uosci and o-c-t) checkouts will be purged and re-checked
176- out on every run. If you have customized that locally, and fire
177- off a build script manually in a console, those changes will vanish.
178-
179- - This big-hammer approach is the default behavior so that each job will
180- always have a fresh and clean environment.
181-
182-
183-
184-### Environment Variables
185-When developing and iterating a job or script outside of Jenkins, it may be helpful to
186-have your tools checkout dir NOT blown away and refreshed. Or perhaps you need to
187-leave the deployment intact after the script completes, and not automatically tear
188-it down. There are a number of controls that can be exercised via env var exports:
189-```
190-export NO_TOOLS_REFRESH="True" # Skip UOSCI and O-C-T branch removal and refresh.
191-TODO - Not Implemented: NO_PRE_DESTROY # As a safety mechanism for devs.
192-export NO_POST_DESTROY="True" # Skip post-deployment environment destruction.
193-```
194-
195-Notes:
196- - Jenkins passes True (check boxes, etc.) as true, while Python likes True. Usage varies.
197- - There are many env vars not yet documented here. See build_osi.sh, and osci_*.sh.
198-
199-
200-## Running Individual Helpers
201-The ```job-parts``` directory contains all of the job/script glue in the form of
202-helpers in the ```osci_*.sh``` files. These helper functions can be manually
203-called with ```./func_exec.sh``` (presuming you have crafted and exported all
204-pertinent environment variables).
205-```
206-$ ./func_exec.sh
207-A tool to manually trigger functions from CLI.
208- Presumes jenkins environment variables and the
209- overcloud novarc are sourced.
210-Usage: <this script> <function name>
211-Available 'f_' functions:
212- f_amulet_no_teardown
213- f_amulet_patch_no_symbols
214- f_amulet_patch_timeout_seconds_announce
215- f_amulet_set_network_env_vars
216- ...snip...
217-```
218-
219-
220-## The Dual-Purpose Build Script
221-A thoughtfully-constructed Jenkins build script can be functional when called
222-manually in a local shell, as well as serve the purpose of the test automation.
223-The ```job-parts/build_osi.sh``` makes use of default values when none are
224-detected, as an example of how to achieve this.
225
226=== removed file 'README.jobs'
227--- README.jobs 2014-10-16 15:39:49 +0000
228+++ README.jobs 1970-01-01 00:00:00 +0000
229@@ -1,35 +0,0 @@
230-Ubuntu OpenStack CI - Jenkins Environment
231-
232-
233-Purpose & requirements:
234- The (re)populate scripts and methods are intended to be run as the jenkins
235- user from the jenkins master unit console (not from bastion).
236-
237-Initial Population:
238- At the moment, initial jobs are created from tarball in the post-deployment
239- shell script.
240-
241-Updating:
242- * The populate/mappings.yaml data file should be updated each development
243- cycle. The branch scanner jobs utilize that data in triggering jobs.
244-
245- * Jenkins is set to run ./scan_branches.py every 30 minutes, which uses bzr
246- to check the revno and revid of the trigger branches defined in
247- mappings.yaml. If ANY of the branches change, a deployment of the trigger
248- jobs commences.
249-
250- * ./scan_merge_props.py also runs every 30 minutes, which uses LP API
251- to check for merge proposals agains the branches defined in mappings.yaml.
252-
253-Directories & Files:
254- ./ root of this branch
255- env-common configurable environment variables for admin and deployment
256- scan_branches.py see above in 'Updating'
257- populate.py testing only, generates tarmac conf file
258- populate/ templates, scripts and config data related to jobs
259- deployment/ infrastructure (jenkins) deployment and static system jobs
260- admin/ misc administrative and debug scripts
261-
262-Notes:
263-
264- * See other READMEs for deployment, setup etc.
265
266=== added directory 'deploy'
267=== removed file 'deploy-prep.sh'
268--- deploy-prep.sh 2016-08-29 11:47:39 +0000
269+++ deploy-prep.sh 1970-01-01 00:00:00 +0000
270@@ -1,10 +0,0 @@
271-#!/bin/bash -e
272-
273-# Pre-deployment prep for bastion instance
274-
275-sudo apt-get update -y
276-sudo apt-get install make python-flake8 python-distro-info python-jinja2 pastebinit distro-info
277-
278-# Depending on state of upstream jenkins repos, you may have to
279-# download and place jenkins.deb in a local charm. Might add that
280-# here as the standard installation method.
281
282=== added file 'deploy/README.md'
283--- deploy/README.md 1970-01-01 00:00:00 +0000
284+++ deploy/README.md 2017-05-27 00:22:36 +0000
285@@ -0,0 +1,11 @@
286+### OSCI Deployment
287+
288+For Juju 2.1.2, on a Xenial-Ocata HA KSV3 undercloud.
289+
290+* osci-controller-setup.sh
291+* osci-model-deploy.sh
292+* May have to `juju resolved osci-master/0` to trigger a hook retry. The jenkins charm as of 2017 Apr 13 has a race condition which consistently requires one re-run of the storage-attached hook.
293+* osci-float-all-instances.sh
294+* osci-nets-and-models.py
295+* osci-set-subnets-dns.sh
296+* post-deploy/* # Look first, use with intent and caution.
297
298=== renamed directory 'deployment/deploy-files' => 'deploy/assets'
299=== modified file 'deploy/assets/bashrc'
300--- deployment/deploy-files/bashrc 2016-08-29 18:45:24 +0000
301+++ deploy/assets/bashrc 2017-05-27 00:22:36 +0000
302@@ -116,6 +116,4 @@
303 fi
304 fi
305
306-
307 export AMULET_HTTP_PROXY='http://squid.internal:3128'
308-alias juju=juju-1 # Default to juju 1.x binary
309
310=== modified file 'deploy/assets/environment-series.yaml'
311--- deployment/deploy-files/environment-series.yaml 2016-07-14 19:49:34 +0000
312+++ deploy/assets/environment-series.yaml 2017-05-27 00:22:36 +0000
313@@ -1,5 +1,5 @@
314 ubuntu:
315+ - zesty
316 - yakkety
317 - xenial
318 - trusty
319- - precise
320
321=== modified file 'deploy/assets/environments.yaml'
322--- deployment/deploy-files/environments.yaml 2016-06-10 13:35:34 +0000
323+++ deploy/assets/environments.yaml 2017-05-27 00:22:36 +0000
324@@ -1,4 +1,4 @@
325-# Ubuntu OpenStack CI - juju environment
326+# Ubuntu OpenStack CI - juju 1.x model/environment file
327 default: __ENVIRO__
328 environments:
329 __ENVIRO__:
330
331=== added file 'deploy/assets/osci-repo-boot-clean.sh'
332--- deploy/assets/osci-repo-boot-clean.sh 1970-01-01 00:00:00 +0000
333+++ deploy/assets/osci-repo-boot-clean.sh 2017-05-27 00:22:36 +0000
334@@ -0,0 +1,6 @@
335+#!/bin/bash -ue
336+# Remove existing code checkout if it exists and do a bare minimum code checkout for a job
337+. ~/oscirc
338+rm -rf $OSCI_ROOT ||:
339+mkdir -vp $OSCI_ROOT
340+bzr co --lightweight $OSCI_REPO $OSCI_ROOT
341
342=== added file 'deploy/assets/osci-repo-boot.sh'
343--- deploy/assets/osci-repo-boot.sh 1970-01-01 00:00:00 +0000
344+++ deploy/assets/osci-repo-boot.sh 2017-05-27 00:22:36 +0000
345@@ -0,0 +1,9 @@
346+#!/bin/bash -ue
347+# Do a bare minimum code checkout for a job if it doesn't already exist.
348+. ~/oscirc
349+stat --format="%n %F %y" $OSCI_ROOT/run ||\
350+(
351+ rm -rf $OSCI_ROOT ||:
352+ mkdir -vp $OSCI_ROOT
353+ bzr co --lightweight $OSCI_REPO $OSCI_ROOT
354+)
355
356=== modified file 'deploy/assets/other_host_keys'
357--- deployment/deploy-files/other_host_keys 2016-09-02 21:38:35 +0000
358+++ deploy/assets/other_host_keys 2017-05-27 00:22:36 +0000
359@@ -2,3 +2,5 @@
360 |1|cmsiVx+RyX606psYhBnusb3Z1ZA=|D03P9eiFcN2uEL3ZKWQA/FPjQpo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGSR3ogUx83TEhmaKks1IZDC287ry3Mc1N8x/hCS6HvUgsZuC3etBWRSqXSKGmzxotpBSU//eehf1YEQ/glkmFg=
361 |1|G7bqYoGs0/7WcgVONKheHbvjbW0=|EWaUmfiDVX5psurof0gbxBW6djs= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHfg+sp98jxYz9zhxM33ouLNx0rDhXrTLVWU2fZQiMmOCc91H376aU9VzDYd+GRjSewqyz67zpSqsDHd1t6e+J0=
362 |1|/uNVERTIWkRm/NIA2HQGM/e+WSs=|584GneqB0FnxjW4yPzufWpoZ3Xw= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHfg+sp98jxYz9zhxM33ouLNx0rDhXrTLVWU2fZQiMmOCc91H376aU9VzDYd+GRjSewqyz67zpSqsDHd1t6e+J0=
363+|1|pJss/g21mdSvAv7PCtXEl6ikX8s=|lu9UENRQqyzTsGJdMPRJ3YPb4gQ= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDIYipSuaupaQ0PVZiaGWY8oc+r1SLI2PtVyXJA3WcfqrJ79Of7ZOSoHHwwNDkKnzOGj2yu7gohyWBJY2HP83WU=
364+
365
366=== modified file 'deploy/assets/pip.conf'
367--- deployment/deploy-files/pip.conf 2016-02-09 11:59:39 +0000
368+++ deploy/assets/pip.conf 2017-05-27 00:22:36 +0000
369@@ -1,2 +1,2 @@
370 # [global]
371-# index-url = http://10.245.162.102:3141/root/pypi/+simple/
372+# index-url = http://t.b.d:3141/root/pypi/+simple/
373
374=== added directory 'deploy/config'
375=== added file 'deploy/config/env-common'
376--- deploy/config/env-common 1970-01-01 00:00:00 +0000
377+++ deploy/config/env-common 2017-05-27 00:22:36 +0000
378@@ -0,0 +1,28 @@
379+#!/bin/bash
380+
381+# Mostly in place for the post-deploy script
382+
383+. ~/novarc
384+
385+MASTER='osci-master/0'
386+JENKINS_HOME=/var/lib/jenkins
387+U_HOME=/home/ubuntu
388+#OPENSTACK_UBUNTU_ROOT=/var/lib/jenkins/openstack-ubuntu-testing
389+#OPENSTACK_UBUNTU_REPO=lp:openstack-ubuntu-testing
390+#http_proxy="http://squid.internal:3128"
391+#https_proxy="https://squid.internal:3128"
392+#HTTP_PROXY=$http_proxy
393+#HTTPS_PROXY=$https_proxy
394+FILE_TRIGGER_DIR="${JENKINS_HOME}/file-triggers"
395+
396+# master and all slaves
397+UNITS=$(juju status --format=yaml | egrep "osci[-]?(master|slave|lab|task)?/[0-9]{1,10}:" \
398+ | cut -d ":" -f 1 | sed 's/^ *//')
399+
400+LP_ID="uosci-testing-bot"
401+BZR_WHOAMI="uoscibot <uosci-testing-bot@ubuntu.com>"
402+
403+# deployment/deploy-files
404+PRIV_KEY=id_rsa
405+PUB_KEY=id_rsa.pub
406+SSH_CONF=config
407
408=== added directory 'deploy/config/juju-apps'
409=== added file 'deploy/config/juju-apps/osci-lab.yaml'
410--- deploy/config/juju-apps/osci-lab.yaml 1970-01-01 00:00:00 +0000
411+++ deploy/config/juju-apps/osci-lab.yaml 2017-05-27 00:22:36 +0000
412@@ -0,0 +1,4 @@
413+osci-lab:
414+ slave-executors: 1
415+ tools: build-essential ubuntu-dev-tools bzr git git-review python-virtualenv python3-virtualenv tox snapd snapcraft iptraf htop colordiff nmap nload multitail wget ipcalc libffi-dev libssl-dev libdbus-1-dev libdbus-glib-1-dev python3-pytest lxd python-jinja2 python-launchpadlib python-pika pwgen ipcalc python3-dev tree
416+ labels: lab
417
418=== added file 'deploy/config/juju-apps/osci-master.yaml'
419--- deploy/config/juju-apps/osci-master.yaml 1970-01-01 00:00:00 +0000
420+++ deploy/config/juju-apps/osci-master.yaml 2017-05-27 00:22:36 +0000
421@@ -0,0 +1,8 @@
422+osci-master:
423+ master-executors: 1
424+ remove-unlisted-plugins: "no"
425+ # place jenkins.deb in charm ./files/ dir before deploy
426+ release: bundle
427+ tools: build-essential ubuntu-dev-tools bzr git git-review python-virtualenv python3-virtualenv tox snapd snapcraft iptraf htop colordiff nmap nload multitail wget ipcalc libffi-dev libssl-dev libdbus-1-dev libdbus-glib-1-dev python3-pytest lxd python-jinja2 python-launchpadlib python-pika pwgen ipcalc python3-dev tree
428+ username: ubuntu
429+ password: ubuntu
430
431=== added file 'deploy/config/juju-apps/osci-slave.yaml'
432--- deploy/config/juju-apps/osci-slave.yaml 1970-01-01 00:00:00 +0000
433+++ deploy/config/juju-apps/osci-slave.yaml 2017-05-27 00:22:36 +0000
434@@ -0,0 +1,4 @@
435+osci-slave:
436+ slave-executors: 1
437+ tools: build-essential ubuntu-dev-tools bzr git git-review python-virtualenv python3-virtualenv tox snapd snapcraft iptraf htop colordiff nmap nload multitail wget ipcalc libffi-dev libssl-dev libdbus-1-dev libdbus-glib-1-dev python3-pytest lxd python-jinja2 python-launchpadlib python-pika pwgen ipcalc python3-dev tree
438+ labels: slave
439
440=== added file 'deploy/config/juju-apps/osci-task.yaml'
441--- deploy/config/juju-apps/osci-task.yaml 1970-01-01 00:00:00 +0000
442+++ deploy/config/juju-apps/osci-task.yaml 2017-05-27 00:22:36 +0000
443@@ -0,0 +1,4 @@
444+osci-task:
445+ slave-executors: 16
446+ tools: build-essential ubuntu-dev-tools bzr git git-review python-virtualenv python3-virtualenv tox snapd snapcraft iptraf htop colordiff nmap nload multitail wget ipcalc libffi-dev libssl-dev libdbus-1-dev libdbus-glib-1-dev python3-pytest lxd python-jinja2 python-launchpadlib python-pika pwgen ipcalc python3-dev tree
447+ labels: task
448
449=== renamed file 'deployment/deploy-config.yaml' => 'deploy/config/nets-and-models.yaml'
450--- deployment/deploy-config.yaml 2016-08-29 12:59:23 +0000
451+++ deploy/config/nets-and-models.yaml 2017-05-27 00:22:36 +0000
452@@ -1,24 +1,23 @@
453 # Config options for deployment and post-deployment actions
454 osci:
455- deployer-bundle: "deployment/111-osci1-xenial.yaml"
456-
457 network:
458 # True causes creation of 1 new unique neutron network per jenkins slave,
459 # which is cooked into its juju model, and added to a single existing
460 # tenant router. False negates all of the following (leaves flat).
461 split: True
462
463- # Base network for jenkins slave juju models, to have its octet
464- # incremented X number of times. Stick with /24 and /16!
465+ # Starting point for generating network CIDRs, to be used for OSCI slave
466+ # networks. Stick with /24 and /16!
467 cidr: "172.17.99.0/24"
468
469- # Define which octet to increment for each slave juju enviro: ie. 1.2.3.4
470+ # Define which octet to increment for each slave juju model: ie. 1.2.3.4
471+ # For /24, use 3; for /16, use 2.
472 var-octet: "3"
473
474- # Name of existing neutron router to wire new networks
475+ # Name of existing neutron router for wiring up the new networks
476 neutron-router: "osci_router"
477
478- # Name of default network for instance
479+ # Name of default network
480 default-network: "osci_admin_net"
481
482 # Base name of new networks and subnets, to be appended by slave var-octet.
483@@ -26,26 +25,16 @@
484 neutron-sub: "oscisub"
485
486 # DNS servers (comma separated) for the new subnet:
487- neutron-dns: "10.5.0.3"
488-
489- # Neutron network name for creating floating IP(s),
490- # And substring to identify existing floating IP (not cidr, just str):
491- ext-net: "ext_net"
492- fip-str: "10.245.162"
493-
494- enviro:
495- # New juju model naming control:
496- env-name-base: "osci"
497+ neutron-dns: "10.5.0.8"
498+
499+ model:
500+ # Naming control for generated Juju model names:
501+ model-name-base: "auto-osci"
502 master-abbrv: "ma"
503 slave-abbrv: "sv"
504 task-abbrv: "tk"
505 lab-abbrv: "lb"
506
507- # Template for new juju environments.yaml files:
508- env-template: "deployment/deploy-files/environments.yaml"
509-
510- # Local juju model; will pull apt proxy from first env found:
511- env-reference: "/home/ubuntu/.juju/environments.yaml"
512-
513+ other:
514 # Directory for misc output files:
515- out-dir: "deployment/out"
516+ out-dir: "out.tmp"
517
518=== added directory 'deploy/jobs-static'
519=== renamed directory 'deployment/jobs/_bak_jenkins_home_no_build_history' => 'deploy/jobs-static/_bak_jenkins_home_no_build_history'
520=== modified file 'deploy/jobs-static/_bak_jenkins_home_no_build_history/config.xml'
521--- deployment/jobs/_bak_jenkins_home_no_build_history/config.xml 2016-09-21 19:36:25 +0000
522+++ deploy/jobs-static/_bak_jenkins_home_no_build_history/config.xml 2017-05-27 00:22:36 +0000
523@@ -19,9 +19,7 @@
524 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
525 <maxConcurrentPerNode>1</maxConcurrentPerNode>
526 <maxConcurrentTotal>1</maxConcurrentTotal>
527- <categories class="java.util.concurrent.CopyOnWriteArrayList">
528- <string>false</string>
529- </categories>
530+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
531 <throttleEnabled>true</throttleEnabled>
532 <throttleOption>project</throttleOption>
533 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
534@@ -43,29 +41,20 @@
535 <concurrentBuild>false</concurrentBuild>
536 <builders>
537 <hudson.tasks.Shell>
538- <command>#!/bin/bash -eu
539-
540-if [[ -z $BAK_REMOTE_BASE_DIR ]] || [[ -z $BAK_USER_HOST ]]; then
541- echo &quot; ! Missing one or more of the required env vars: BAK_REMOTE_BASE_DIR BAK_USER_HOST&quot;
542- exit 1
543-fi
544-
545-keep=50
546-date_str=&quot;$(date -I)-$(date +%s)&quot; # YYYY-MM-DD-EPOCH
547-excludes=&quot;--exclude builds --exclude lastStable --exclude lastSuccessful --exclude fingerprints --exclude jobs-* --exclude temp --exclude tools --exclude checkout&quot;
548-ssh $BAK_USER_HOST &quot;mkdir -vp $BAK_REMOTE_BASE_DIR/$date_str&quot;
549-rsync -avE $excludes /var/lib/jenkins/ $BAK_USER_HOST:$BAK_REMOTE_BASE_DIR/$date_str
550-ssh $BAK_USER_HOST &quot;(cd $BAK_REMOTE_BASE_DIR; ls -1tr | head -n -$keep | xargs rm -rf;)&quot;
551+ <command>#!/bin/bash -eux
552+. ~/oscirc
553+~/osci-repo-boot-clean.sh
554+. $OSCI_ROOT/run/job-parts/build_bak.sh
555 </command>
556 </hudson.tasks.Shell>
557 </builders>
558 <publishers/>
559 <buildWrappers>
560- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
561+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
562 <deleteDirs>false</deleteDirs>
563 <cleanupParameter></cleanupParameter>
564 <externalDelete></externalDelete>
565 </hudson.plugins.ws__cleanup.PreBuildCleanup>
566- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
567+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
568 </buildWrappers>
569 </project>
570\ No newline at end of file
571
572=== added directory 'deploy/jobs-static/_bootstrap'
573=== added file 'deploy/jobs-static/_bootstrap/config.xml'
574--- deploy/jobs-static/_bootstrap/config.xml 1970-01-01 00:00:00 +0000
575+++ deploy/jobs-static/_bootstrap/config.xml 2017-05-27 00:22:36 +0000
576@@ -0,0 +1,110 @@
577+<?xml version='1.0' encoding='UTF-8'?>
578+<project>
579+ <actions/>
580+ <description>Use to initialize tools branches on master and slave nodes. Chicken, egg, chicken. Gotta have code there for the other jobs to call.</description>
581+ <keepDependencies>false</keepDependencies>
582+ <properties>
583+ <jenkins.model.BuildDiscarderProperty>
584+ <strategy class="hudson.tasks.LogRotator">
585+ <daysToKeep>-1</daysToKeep>
586+ <numToKeep>100</numToKeep>
587+ <artifactDaysToKeep>90</artifactDaysToKeep>
588+ <artifactNumToKeep>90</artifactNumToKeep>
589+ </strategy>
590+ </jenkins.model.BuildDiscarderProperty>
591+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
592+ <autoRebuild>false</autoRebuild>
593+ <rebuildDisabled>false</rebuildDisabled>
594+ </com.sonyericsson.rebuild.RebuildSettings>
595+ <hudson.model.ParametersDefinitionProperty>
596+ <parameterDefinitions>
597+ <org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterDefinition plugin="nodelabelparameter@1.7.2">
598+ <name></name>
599+ <description></description>
600+ <allowedSlaves>
601+ <string>master</string>
602+ <string>osci-lab-0</string>
603+ <string>osci-lab-1</string>
604+ <string>osci-lab-2</string>
605+ <string>osci-lab-3</string>
606+ <string>osci-slave-0</string>
607+ <string>osci-slave-1</string>
608+ <string>osci-slave-10</string>
609+ <string>osci-slave-11</string>
610+ <string>osci-slave-2</string>
611+ <string>osci-slave-3</string>
612+ <string>osci-slave-4</string>
613+ <string>osci-slave-5</string>
614+ <string>osci-slave-6</string>
615+ <string>osci-slave-7</string>
616+ <string>osci-slave-8</string>
617+ <string>osci-slave-9</string>
618+ </allowedSlaves>
619+ <defaultSlaves>
620+ <string>osci-lab-0</string>
621+ <string>osci-lab-1</string>
622+ <string>osci-lab-2</string>
623+ <string>osci-lab-3</string>
624+ <string>osci-slave-0</string>
625+ <string>osci-slave-1</string>
626+ <string>osci-slave-10</string>
627+ <string>osci-slave-11</string>
628+ <string>osci-slave-2</string>
629+ <string>osci-slave-3</string>
630+ <string>osci-slave-4</string>
631+ <string>osci-slave-5</string>
632+ <string>osci-slave-6</string>
633+ <string>osci-slave-7</string>
634+ <string>osci-slave-8</string>
635+ <string>osci-slave-9</string>
636+ </defaultSlaves>
637+ <triggerIfResult>allowMultiSelectionForConcurrentBuilds</triggerIfResult>
638+ <allowMultiNodeSelection>true</allowMultiNodeSelection>
639+ <triggerConcurrentBuilds>true</triggerConcurrentBuilds>
640+ <ignoreOfflineNodes>false</ignoreOfflineNodes>
641+ <nodeEligibility class="org.jvnet.jenkins.plugins.nodelabelparameter.node.AllNodeEligibility"/>
642+ </org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterDefinition>
643+ </parameterDefinitions>
644+ </hudson.model.ParametersDefinitionProperty>
645+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
646+ <maxConcurrentPerNode>1</maxConcurrentPerNode>
647+ <maxConcurrentTotal>6</maxConcurrentTotal>
648+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
649+ <throttleEnabled>true</throttleEnabled>
650+ <throttleOption>project</throttleOption>
651+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
652+ <paramsToUseForLimit></paramsToUseForLimit>
653+ </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
654+ <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
655+ </properties>
656+ <scm class="hudson.scm.NullSCM"/>
657+ <canRoam>true</canRoam>
658+ <disabled>false</disabled>
659+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
660+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
661+ <triggers>
662+ <hudson.triggers.TimerTrigger>
663+ <spec>45 23 * * *</spec>
664+ </hudson.triggers.TimerTrigger>
665+ </triggers>
666+ <concurrentBuild>true</concurrentBuild>
667+ <builders>
668+ <hudson.tasks.Shell>
669+ <command>#!/bin/bash -uex
670+. ~/oscirc
671+~/osci-repo-boot-clean.sh
672+. ${OSCI_ROOT}/run/job-parts/osci_job_common.sh
673+${OSCI_ROOT}/run/job-parts/build_juju_bootstrap.sh
674+</command>
675+ </hudson.tasks.Shell>
676+ </builders>
677+ <publishers/>
678+ <buildWrappers>
679+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
680+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
681+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;}</template>
682+ <runAtStart>true</runAtStart>
683+ <runAtEnd>true</runAtEnd>
684+ </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
685+ </buildWrappers>
686+</project>
687\ No newline at end of file
688
689=== renamed directory 'deployment/jobs/_bucket_junk_cleanup' => 'deploy/jobs-static/_bucket_junk_cleanup'
690=== modified file 'deploy/jobs-static/_bucket_junk_cleanup/config.xml'
691--- deployment/jobs/_bucket_junk_cleanup/config.xml 2016-09-21 19:36:25 +0000
692+++ deploy/jobs-static/_bucket_junk_cleanup/config.xml 2017-05-27 00:22:36 +0000
693@@ -28,7 +28,7 @@
694 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
695 </properties>
696 <scm class="hudson.scm.NullSCM"/>
697- <assignedNode>slave||lab</assignedNode>
698+ <assignedNode>task</assignedNode>
699 <canRoam>false</canRoam>
700 <disabled>false</disabled>
701 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
702@@ -41,33 +41,22 @@
703 <concurrentBuild>false</concurrentBuild>
704 <builders>
705 <hudson.tasks.Shell>
706- <command>#!/bin/bash -e
707-# Ensure we have a checkout of UOSCI code
708-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
709- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
710- rm -rf $OSCI_ROOT ||:
711- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
712- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
713-fi
714-echo &quot;UOSCI revno: $(bzr revno $OSCI_ROOT)&quot;
715-</command>
716- </hudson.tasks.Shell>
717- <hudson.tasks.Shell>
718- <command>#!/bin/bash -e
719-${OSCI_ROOT}/job-parts/build_bucket_junk_cleanup.sh
720-</command>
721+ <command>#!/bin/bash -ue
722+. ~/oscirc
723+~/osci-repo-boot-clean.sh
724+${OSCI_ROOT}/run/job-parts/build_bucket_junk_cleanup.sh</command>
725 </hudson.tasks.Shell>
726 </builders>
727 <publishers/>
728 <buildWrappers>
729- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
730+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
731 <deleteDirs>false</deleteDirs>
732 <cleanupParameter></cleanupParameter>
733 <externalDelete></externalDelete>
734 </hudson.plugins.ws__cleanup.PreBuildCleanup>
735- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
736+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
737 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
738- <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}</template>
739+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;}</template>
740 <runAtStart>true</runAtStart>
741 <runAtEnd>true</runAtEnd>
742 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
743
744=== renamed directory 'deployment/jobs/_bucket_reset_object_headers' => 'deploy/jobs-static/_bucket_reset_object_headers'
745=== modified file 'deploy/jobs-static/_bucket_reset_object_headers/config.xml'
746--- deployment/jobs/_bucket_reset_object_headers/config.xml 2016-05-19 21:18:38 +0000
747+++ deploy/jobs-static/_bucket_reset_object_headers/config.xml 2017-05-27 00:22:36 +0000
748@@ -3,14 +3,20 @@
749 <actions/>
750 <description>Not scheduled. Use to reset .txt and .html content-type object headers in the swift/radosgw container.&#xd;
751 </description>
752- <logRotator class="hudson.tasks.LogRotator">
753- <daysToKeep>-1</daysToKeep>
754- <numToKeep>100</numToKeep>
755- <artifactDaysToKeep>90</artifactDaysToKeep>
756- <artifactNumToKeep>90</artifactNumToKeep>
757- </logRotator>
758 <keepDependencies>false</keepDependencies>
759 <properties>
760+ <jenkins.model.BuildDiscarderProperty>
761+ <strategy class="hudson.tasks.LogRotator">
762+ <daysToKeep>-1</daysToKeep>
763+ <numToKeep>100</numToKeep>
764+ <artifactDaysToKeep>90</artifactDaysToKeep>
765+ <artifactNumToKeep>90</artifactNumToKeep>
766+ </strategy>
767+ </jenkins.model.BuildDiscarderProperty>
768+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
769+ <autoRebuild>false</autoRebuild>
770+ <rebuildDisabled>false</rebuildDisabled>
771+ </com.sonyericsson.rebuild.RebuildSettings>
772 <hudson.model.ParametersDefinitionProperty>
773 <parameterDefinitions>
774 <hudson.model.StringParameterDefinition>
775@@ -20,20 +26,19 @@
776 </hudson.model.StringParameterDefinition>
777 </parameterDefinitions>
778 </hudson.model.ParametersDefinitionProperty>
779- <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
780- <autoRebuild>false</autoRebuild>
781- <rebuildDisabled>false</rebuildDisabled>
782- </com.sonyericsson.rebuild.RebuildSettings>
783- <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.8.4">
784+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
785 <maxConcurrentPerNode>1</maxConcurrentPerNode>
786 <maxConcurrentTotal>2</maxConcurrentTotal>
787+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
788 <throttleEnabled>true</throttleEnabled>
789 <throttleOption>project</throttleOption>
790+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
791+ <paramsToUseForLimit></paramsToUseForLimit>
792 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
793 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
794 </properties>
795 <scm class="hudson.scm.NullSCM"/>
796- <assignedNode>slave</assignedNode>
797+ <assignedNode>task</assignedNode>
798 <canRoam>false</canRoam>
799 <disabled>false</disabled>
800 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
801@@ -43,89 +48,24 @@
802 <builders>
803 <hudson.tasks.Shell>
804 <command>#!/bin/bash -e
805-# Ensure we have a checkout of UOSCI code
806-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
807- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
808- rm -rf $OSCI_ROOT ||:
809- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
810- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
811-fi
812-echo &quot;UOSCI revno: $(bzr revno $OSCI_ROOT)&quot;
813+. ~/oscirc
814+~/osci-repo-boot-clean.sh
815+${OSCI_ROOT}/run/job-parts/build_bucket_reset_object_headers.sh
816 </command>
817 </hudson.tasks.Shell>
818- <hudson.tasks.Shell>
819- <command>#!/bin/bash -e
820-#${OSCI_ROOT}/job-parts/build_bucket_reset_object_headers.sh
821-
822-. ${OSCI_ROOT}/job-parts/osci_job_common.sh
823-f_skip_juju_lxc
824-
825-f_gerrit_set_blob_vars
826-env | egrep &quot;BUILD|JOB_|GERRIT|UOSCI|HUDSON|JENKINS|WORKSPACE&quot; | sort
827-f_novarc_undercloud
828-
829-function bucket_reset_txt_html_object_headers(){
830- # This is a quick and dirty fix to set object header data in radosgw/swift container.
831- # Objects uploaded with &gt;= liberty clients are likely set as binary content-type
832-
833- [[ -z &quot;$OBJECT_MATCH_PATTERN&quot; ]] &amp;&amp; export OBJECT_MATCH_PATTERN=&quot;&quot;
834-
835- f_line &quot;Updating *.txt and *.html content-type object headers&quot;
836-
837- work_dir=&quot;$(mktemp -d)&quot;
838- tmp_object_list=&quot;$(mktemp)&quot;
839-
840- echo &quot; . Selecting .txt and .html files in $UOSCI_BUCKET_NAME...&quot;
841- echo &quot; . OBJECT_MATCH_PATTERN: $OBJECT_MATCH_PATTERN&quot;
842- swift list $UOSCI_BUCKET_NAME | egrep &quot;.txt$|.html$&quot; | grep &quot;$OBJECT_MATCH_PATTERN&quot; &gt; $tmp_object_list ||:
843-
844- if [[ &quot;$(wc -l $tmp_object_list)&quot; == &quot;0 $tmp_object_list&quot; ]]; then
845- echo &quot; . No objects found to update&quot;
846- fi
847-
848- cd $work_dir
849-
850- while read -r line; do
851- # Trim whitespace if it exists
852- line=&quot;$(echo $line | sed &apos;s/^[ \t]*//;s/[ \t]*$//&apos;)&quot;
853-
854- # Update object
855- if [[ -n &quot;$line&quot; ]]; then
856- echo &quot; - Updating object: $line&quot;
857- if [[ &quot;$line&quot; == *.html ]]; then
858- swift post $UOSCI_BUCKET_NAME $line -H &quot;content-type:text/html&quot;
859- elif [[ &quot;$line&quot; == *.txt ]]; then
860- swift post $UOSCI_BUCKET_NAME $line -H &quot;content-type:text/plain&quot;
861- else
862- echo &quot; ! Ignoring: $line&quot;
863- fi
864- else
865- # Let&apos;s not modify the container itself!
866- echo &quot; ! Skipping dangerous variable as read: $line&quot;
867- fi
868- done &lt; &quot;$tmp_object_list&quot;
869-
870- rm -fv $tmp_object_list
871-
872- f_line &quot;END: Updating txt and html object headers&quot;
873-}
874-
875-bucket_reset_txt_html_object_headers
876-
877-f_nice_finish
878-f_check_fail</command>
879- </hudson.tasks.Shell>
880 </builders>
881 <publishers/>
882 <buildWrappers>
883- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.28">
884+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
885 <deleteDirs>false</deleteDirs>
886 <cleanupParameter></cleanupParameter>
887 <externalDelete></externalDelete>
888 </hudson.plugins.ws__cleanup.PreBuildCleanup>
889- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.6"/>
890- <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.3">
891- <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}</template>
892+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
893+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
894+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;}</template>
895+ <runAtStart>true</runAtStart>
896+ <runAtEnd>true</runAtEnd>
897 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
898 </buildWrappers>
899 </project>
900\ No newline at end of file
901
902=== renamed directory 'deployment/jobs/_bucket_update_indices' => 'deploy/jobs-static/_bucket_update_indices'
903=== modified file 'deploy/jobs-static/_bucket_update_indices/config.xml'
904--- deployment/jobs/_bucket_update_indices/config.xml 2016-09-21 19:36:25 +0000
905+++ deploy/jobs-static/_bucket_update_indices/config.xml 2017-05-27 00:22:36 +0000
906@@ -24,49 +24,41 @@
907 <throttleOption>project</throttleOption>
908 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
909 <paramsToUseForLimit></paramsToUseForLimit>
910+ <configVersion>1</configVersion>
911 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
912 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
913 </properties>
914 <scm class="hudson.scm.NullSCM"/>
915- <assignedNode>master||slave||lab</assignedNode>
916+ <assignedNode>task</assignedNode>
917 <canRoam>false</canRoam>
918 <disabled>false</disabled>
919 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
920 <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
921 <triggers>
922 <hudson.triggers.TimerTrigger>
923- <spec>H/10 * * * *</spec>
924+ <spec>H * * * *</spec>
925 </hudson.triggers.TimerTrigger>
926 </triggers>
927 <concurrentBuild>false</concurrentBuild>
928 <builders>
929 <hudson.tasks.Shell>
930 <command>#!/bin/bash -e
931-# Ensure we have a checkout of UOSCI code
932-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
933- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
934- rm -rf $OSCI_ROOT ||:
935- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
936- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
937-fi
938-echo &quot;UOSCI revno: $(bzr revno $OSCI_ROOT)&quot;
939+. ~/oscirc
940+~/osci-repo-boot-clean.sh
941+. $OSCI_ROOT/run/job-parts/build_bucket_update_indices.sh
942 </command>
943 </hudson.tasks.Shell>
944- <hudson.tasks.Shell>
945- <command>#!/bin/bash -e
946-${OSCI_ROOT}/job-parts/build_bucket_update_indices.sh</command>
947- </hudson.tasks.Shell>
948 </builders>
949 <publishers/>
950 <buildWrappers>
951- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
952+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
953 <deleteDirs>false</deleteDirs>
954 <cleanupParameter></cleanupParameter>
955 <externalDelete></externalDelete>
956 </hudson.plugins.ws__cleanup.PreBuildCleanup>
957- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
958+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
959 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
960- <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}</template>
961+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;}</template>
962 <runAtStart>true</runAtStart>
963 <runAtEnd>true</runAtEnd>
964 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
965
966=== added directory 'deploy/jobs-static/_destroy_controller'
967=== added file 'deploy/jobs-static/_destroy_controller/config.xml'
968--- deploy/jobs-static/_destroy_controller/config.xml 1970-01-01 00:00:00 +0000
969+++ deploy/jobs-static/_destroy_controller/config.xml 2017-05-27 00:22:36 +0000
970@@ -0,0 +1,110 @@
971+<?xml version='1.0' encoding='UTF-8'?>
972+<project>
973+ <actions/>
974+ <description></description>
975+ <keepDependencies>false</keepDependencies>
976+ <properties>
977+ <jenkins.model.BuildDiscarderProperty>
978+ <strategy class="hudson.tasks.LogRotator">
979+ <daysToKeep>-1</daysToKeep>
980+ <numToKeep>100</numToKeep>
981+ <artifactDaysToKeep>90</artifactDaysToKeep>
982+ <artifactNumToKeep>90</artifactNumToKeep>
983+ </strategy>
984+ </jenkins.model.BuildDiscarderProperty>
985+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
986+ <autoRebuild>false</autoRebuild>
987+ <rebuildDisabled>false</rebuildDisabled>
988+ </com.sonyericsson.rebuild.RebuildSettings>
989+ <hudson.model.ParametersDefinitionProperty>
990+ <parameterDefinitions>
991+ <org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterDefinition plugin="nodelabelparameter@1.7.2">
992+ <name></name>
993+ <description></description>
994+ <allowedSlaves>
995+ <string>master</string>
996+ <string>osci-lab-0</string>
997+ <string>osci-lab-1</string>
998+ <string>osci-lab-2</string>
999+ <string>osci-lab-3</string>
1000+ <string>osci-slave-0</string>
1001+ <string>osci-slave-1</string>
1002+ <string>osci-slave-10</string>
1003+ <string>osci-slave-11</string>
1004+ <string>osci-slave-2</string>
1005+ <string>osci-slave-3</string>
1006+ <string>osci-slave-4</string>
1007+ <string>osci-slave-5</string>
1008+ <string>osci-slave-6</string>
1009+ <string>osci-slave-7</string>
1010+ <string>osci-slave-8</string>
1011+ <string>osci-slave-9</string>
1012+ </allowedSlaves>
1013+ <defaultSlaves>
1014+ <string>osci-lab-0</string>
1015+ <string>osci-lab-1</string>
1016+ <string>osci-lab-2</string>
1017+ <string>osci-lab-3</string>
1018+ <string>osci-slave-0</string>
1019+ <string>osci-slave-1</string>
1020+ <string>osci-slave-10</string>
1021+ <string>osci-slave-11</string>
1022+ <string>osci-slave-2</string>
1023+ <string>osci-slave-3</string>
1024+ <string>osci-slave-4</string>
1025+ <string>osci-slave-5</string>
1026+ <string>osci-slave-6</string>
1027+ <string>osci-slave-7</string>
1028+ <string>osci-slave-8</string>
1029+ <string>osci-slave-9</string>
1030+ </defaultSlaves>
1031+ <triggerIfResult>allowMultiSelectionForConcurrentBuilds</triggerIfResult>
1032+ <allowMultiNodeSelection>true</allowMultiNodeSelection>
1033+ <triggerConcurrentBuilds>true</triggerConcurrentBuilds>
1034+ <ignoreOfflineNodes>false</ignoreOfflineNodes>
1035+ <nodeEligibility class="org.jvnet.jenkins.plugins.nodelabelparameter.node.AllNodeEligibility"/>
1036+ </org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterDefinition>
1037+ </parameterDefinitions>
1038+ </hudson.model.ParametersDefinitionProperty>
1039+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1040+ <maxConcurrentPerNode>0</maxConcurrentPerNode>
1041+ <maxConcurrentTotal>32</maxConcurrentTotal>
1042+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1043+ <throttleEnabled>true</throttleEnabled>
1044+ <throttleOption>project</throttleOption>
1045+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1046+ <paramsToUseForLimit></paramsToUseForLimit>
1047+ </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
1048+ <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1049+ </properties>
1050+ <scm class="hudson.scm.NullSCM"/>
1051+ <canRoam>true</canRoam>
1052+ <disabled>false</disabled>
1053+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1054+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
1055+ <triggers>
1056+ <hudson.triggers.TimerTrigger>
1057+ <spec>00 0 * * 5</spec>
1058+ </hudson.triggers.TimerTrigger>
1059+ </triggers>
1060+ <concurrentBuild>true</concurrentBuild>
1061+ <builders>
1062+ <hudson.tasks.Shell>
1063+ <command>#!/bin/bash -uex
1064+. ~/oscirc
1065+~/osci-repo-boot-clean.sh
1066+. ${OSCI_ROOT}/run/job-parts/osci_job_common.sh
1067+${OSCI_ROOT}/run/job-parts/build_juju_destroy_controller.sh
1068+</command>
1069+ </hudson.tasks.Shell>
1070+ </builders>
1071+ <publishers/>
1072+ <buildWrappers>
1073+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
1074+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
1075+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;}</template>
1076+ <runAtStart>true</runAtStart>
1077+ <runAtEnd>true</runAtEnd>
1078+ </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
1079+ </buildWrappers>
1080+</project>
1081\ No newline at end of file
1082
1083=== added directory 'deploy/jobs-static/_destroy_model'
1084=== added file 'deploy/jobs-static/_destroy_model/config.xml'
1085--- deploy/jobs-static/_destroy_model/config.xml 1970-01-01 00:00:00 +0000
1086+++ deploy/jobs-static/_destroy_model/config.xml 2017-05-27 00:22:36 +0000
1087@@ -0,0 +1,110 @@
1088+<?xml version='1.0' encoding='UTF-8'?>
1089+<project>
1090+ <actions/>
1091+ <description></description>
1092+ <keepDependencies>false</keepDependencies>
1093+ <properties>
1094+ <jenkins.model.BuildDiscarderProperty>
1095+ <strategy class="hudson.tasks.LogRotator">
1096+ <daysToKeep>-1</daysToKeep>
1097+ <numToKeep>100</numToKeep>
1098+ <artifactDaysToKeep>90</artifactDaysToKeep>
1099+ <artifactNumToKeep>90</artifactNumToKeep>
1100+ </strategy>
1101+ </jenkins.model.BuildDiscarderProperty>
1102+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1103+ <autoRebuild>false</autoRebuild>
1104+ <rebuildDisabled>false</rebuildDisabled>
1105+ </com.sonyericsson.rebuild.RebuildSettings>
1106+ <hudson.model.ParametersDefinitionProperty>
1107+ <parameterDefinitions>
1108+ <org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterDefinition plugin="nodelabelparameter@1.7.2">
1109+ <name></name>
1110+ <description></description>
1111+ <allowedSlaves>
1112+ <string>master</string>
1113+ <string>osci-lab-0</string>
1114+ <string>osci-lab-1</string>
1115+ <string>osci-lab-2</string>
1116+ <string>osci-lab-3</string>
1117+ <string>osci-slave-0</string>
1118+ <string>osci-slave-1</string>
1119+ <string>osci-slave-10</string>
1120+ <string>osci-slave-11</string>
1121+ <string>osci-slave-2</string>
1122+ <string>osci-slave-3</string>
1123+ <string>osci-slave-4</string>
1124+ <string>osci-slave-5</string>
1125+ <string>osci-slave-6</string>
1126+ <string>osci-slave-7</string>
1127+ <string>osci-slave-8</string>
1128+ <string>osci-slave-9</string>
1129+ </allowedSlaves>
1130+ <defaultSlaves>
1131+ <string>osci-lab-0</string>
1132+ <string>osci-lab-1</string>
1133+ <string>osci-lab-2</string>
1134+ <string>osci-lab-3</string>
1135+ <string>osci-slave-0</string>
1136+ <string>osci-slave-1</string>
1137+ <string>osci-slave-10</string>
1138+ <string>osci-slave-11</string>
1139+ <string>osci-slave-2</string>
1140+ <string>osci-slave-3</string>
1141+ <string>osci-slave-4</string>
1142+ <string>osci-slave-5</string>
1143+ <string>osci-slave-6</string>
1144+ <string>osci-slave-7</string>
1145+ <string>osci-slave-8</string>
1146+ <string>osci-slave-9</string>
1147+ </defaultSlaves>
1148+ <triggerIfResult>allowMultiSelectionForConcurrentBuilds</triggerIfResult>
1149+ <allowMultiNodeSelection>true</allowMultiNodeSelection>
1150+ <triggerConcurrentBuilds>true</triggerConcurrentBuilds>
1151+ <ignoreOfflineNodes>false</ignoreOfflineNodes>
1152+ <nodeEligibility class="org.jvnet.jenkins.plugins.nodelabelparameter.node.AllNodeEligibility"/>
1153+ </org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterDefinition>
1154+ </parameterDefinitions>
1155+ </hudson.model.ParametersDefinitionProperty>
1156+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1157+ <maxConcurrentPerNode>0</maxConcurrentPerNode>
1158+ <maxConcurrentTotal>32</maxConcurrentTotal>
1159+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1160+ <throttleEnabled>true</throttleEnabled>
1161+ <throttleOption>project</throttleOption>
1162+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1163+ <paramsToUseForLimit></paramsToUseForLimit>
1164+ </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
1165+ <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1166+ </properties>
1167+ <scm class="hudson.scm.NullSCM"/>
1168+ <canRoam>true</canRoam>
1169+ <disabled>false</disabled>
1170+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1171+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
1172+ <triggers>
1173+ <hudson.triggers.TimerTrigger>
1174+ <spec>H 23 * * *</spec>
1175+ </hudson.triggers.TimerTrigger>
1176+ </triggers>
1177+ <concurrentBuild>true</concurrentBuild>
1178+ <builders>
1179+ <hudson.tasks.Shell>
1180+ <command>#!/bin/bash -uex
1181+. ~/oscirc
1182+~/osci-repo-boot-clean.sh
1183+. ${OSCI_ROOT}/run/job-parts/osci_job_common.sh
1184+${OSCI_ROOT}/run/job-parts/build_juju_destroy_model.sh
1185+</command>
1186+ </hudson.tasks.Shell>
1187+ </builders>
1188+ <publishers/>
1189+ <buildWrappers>
1190+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
1191+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
1192+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;}</template>
1193+ <runAtStart>true</runAtStart>
1194+ <runAtEnd>true</runAtEnd>
1195+ </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
1196+ </buildWrappers>
1197+</project>
1198\ No newline at end of file
1199
1200=== renamed directory 'deployment/jobs/_no_op' => 'deploy/jobs-static/_no_op'
1201=== modified file 'deploy/jobs-static/_no_op/config.xml'
1202--- deployment/jobs/_no_op/config.xml 2016-12-09 21:50:02 +0000
1203+++ deploy/jobs-static/_no_op/config.xml 2017-05-27 00:22:36 +0000
1204@@ -43,9 +43,7 @@
1205 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1206 <maxConcurrentPerNode>0</maxConcurrentPerNode>
1207 <maxConcurrentTotal>20</maxConcurrentTotal>
1208- <categories class="java.util.concurrent.CopyOnWriteArrayList">
1209- <string>false</string>
1210- </categories>
1211+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1212 <throttleEnabled>true</throttleEnabled>
1213 <throttleOption>project</throttleOption>
1214 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1215@@ -54,7 +52,7 @@
1216 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1217 </properties>
1218 <scm class="hudson.scm.NullSCM"/>
1219- <assignedNode>task</assignedNode>
1220+ <assignedNode>task||slave</assignedNode>
1221 <canRoam>false</canRoam>
1222 <disabled>false</disabled>
1223 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1224@@ -63,160 +61,14 @@
1225 <concurrentBuild>true</concurrentBuild>
1226 <builders>
1227 <hudson.tasks.Shell>
1228- <command>#!/bin/bash -e
1229-
1230-function f_tool_refresh_osci() {
1231-# ubuntu_openstack_ci fresh
1232- [[ -z &quot;$OSCI_REPO&quot; ]] &amp;&amp; export OSCI_REPO=&quot;lp:ubuntu-openstack-ci&quot;
1233- export OSCI_ROOT=&quot;${HOME}/tools/$EXECUTOR_NUMBER/ubuntu-openstack-ci&quot;
1234-
1235- if [[ -d $OSCI_ROOT ]]; then
1236- echo &quot; - Removing existing checkout @ $OSCI_ROOT&quot;
1237- rm -rf $OSCI_ROOT
1238- fi
1239- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
1240- mkdir -p $OSCI_ROOT
1241- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
1242- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
1243-}
1244-
1245-
1246-function f_tool_refresh_oct() {
1247-# keep openstack_charm_testing fresh
1248- [[ -z &quot;$OPENSTACK_CHARM_TESTING_REPO&quot; ]] &amp;&amp; export OPENSTACK_CHARM_TESTING_REPO=&quot;lp:openstack-charm-testing&quot;
1249- export OPENSTACK_CHARM_TESTING_ROOT=&quot;${HOME}/tools/$EXECUTOR_NUMBER/openstack-charm-testing&quot;
1250-
1251- if [[ -d $OPENSTACK_CHARM_TESTING_ROOT ]]; then
1252- echo &quot; - Removing existing checkout of @ $OPENSTACK_CHARM_TESTING_ROOT&quot;
1253- rm -rf $OPENSTACK_CHARM_TESTING_ROOT
1254- fi
1255- echo &quot; + Creating new lightweight checkout of $OPENSTACK_CHARM_TESTING_REPO @ $OPENSTACK_CHARM_TESTING_ROOT.&quot;
1256- mkdir -p $OPENSTACK_CHARM_TESTING_ROOT
1257- bzr co --lightweight $OPENSTACK_CHARM_TESTING_REPO $OPENSTACK_CHARM_TESTING_ROOT
1258- echo &quot;revno: $(bzr revno $OPENSTACK_CHARM_TESTING_ROOT)&quot;
1259-}
1260-
1261-
1262-function f_tool_refresh_juju_wait() {
1263-# keep juju_wait fresh
1264- [[ -z &quot;$JUJU_WAIT_REPO&quot; ]] &amp;&amp; export JUJU_WAIT_REPO=&quot;https://git.launchpad.net/juju-wait&quot;
1265- [[ -z &quot;$JUJU_WAIT_BRANCH&quot; ]] &amp;&amp; export JUJU_WAIT_BRANCH=&quot;master&quot;
1266- export JUJU_WAIT_ROOT=&quot;${HOME}/tools/$EXECUTOR_NUMBER/juju-wait&quot;
1267-
1268- if [[ -d $JUJU_WAIT_ROOT ]]; then
1269- echo &quot; - Removing existing dir @ $JUJU_WAIT_ROOT&quot;
1270- rm -rf $JUJU_WAIT_ROOT
1271- fi
1272-
1273- echo &quot; + Creating new shallow clone of $JUJU_WAIT_REPO @ $JUJU_WAIT_ROOT ($JUJU_WAIT_BRANCH).&quot;
1274- mkdir -p $JUJU_WAIT_BRANCH
1275- git clone -q --depth=1 $JUJU_WAIT_REPO $JUJU_WAIT_ROOT -b $JUJU_WAIT_BRANCH
1276- git -C $JUJU_WAIT_ROOT branch -av
1277- git -C $JUJU_WAIT_ROOT remote -v
1278-}
1279-
1280-
1281-function f_tool_refresh_migration_tools() {
1282-# Git the migration tools
1283- [[ -z &quot;$UOSCI_MIG_TOOLS_REPO&quot; ]] &amp;&amp; export UOSCI_MIG_TOOLS_REPO=&quot;https://github.com/openstack-charmers/migration-tools&quot;
1284- [[ -z &quot;$UOSCI_MIG_TOOLS_BRANCH&quot; ]] &amp;&amp; export UOSCI_MIG_TOOLS_BRANCH=&quot;master&quot;
1285- export UOSCI_MIG_TOOLS_ROOT=&quot;$HOME/tools/$EXECUTOR_NUMBER/migration-tools&quot;
1286-
1287- if [[ -d $UOSCI_MIG_TOOLS_ROOT ]]; then
1288- echo &quot; - Removing existing dir @ $UOSCI_MIG_TOOLS_ROOT&quot;
1289- rm -rf $UOSCI_MIG_TOOLS_ROOT
1290- fi
1291-
1292- echo &quot; + Creating new shallow clone of $UOSCI_MIG_TOOLS_REPO @ $UOSCI_MIG_TOOLS_ROOT ($UOSCI_MIG_TOOLS_BRANCH).&quot;
1293- mkdir -p $UOSCI_MIG_TOOLS_BRANCH
1294- git clone -q --depth=1 $UOSCI_MIG_TOOLS_REPO $UOSCI_MIG_TOOLS_ROOT -b $UOSCI_MIG_TOOLS_BRANCH
1295- git -C $UOSCI_MIG_TOOLS_ROOT branch -av
1296- git -C $UOSCI_MIG_TOOLS_ROOT remote -v
1297-}
1298-
1299-
1300-function f_tool_refresh_bot_control() {
1301-# Git the bot-control repo
1302- [[ -z &quot;$UOSCI_BOT_CONTROL_REPO&quot; ]] &amp;&amp; export UOSCI_BOT_CONTROL_REPO=&quot;https://github.com/openstack-charmers/bot-control.git&quot;
1303- [[ -z &quot;$UOSCI_BOT_CONTROL_BRANCH&quot; ]] &amp;&amp; export UOSCI_BOT_CONTROL_BRANCH=&quot;master&quot;
1304- export UOSCI_BOT_CONTROL_ROOT=&quot;${HOME}/tools/$EXECUTOR_NUMBER/bot-control&quot;
1305-
1306- if [[ -d $UOSCI_BOT_CONTROL_ROOT ]]; then
1307- echo &quot; - Removing existing dir @ $UOSCI_BOT_CONTROL_ROOT&quot;
1308- rm -rf $UOSCI_BOT_CONTROL_ROOT
1309- fi
1310-
1311- echo &quot; + Creating new shallow clone of $UOSCI_BOT_CONTROL_REPO @ $UOSCI_BOT_CONTROL_ROOT ($UOSCI_BOT_CONTROL_BRANCH)&quot;
1312- mkdir -p $UOSCI_BOT_CONTROL_BRANCH
1313- git clone -q --depth=1 $UOSCI_BOT_CONTROL_REPO $UOSCI_BOT_CONTROL_ROOT -b $UOSCI_BOT_CONTROL_BRANCH
1314- git -C $UOSCI_BOT_CONTROL_ROOT branch -av
1315- git -C $UOSCI_BOT_CONTROL_ROOT remote -v
1316-}
1317-
1318-
1319-function f_tool_refresh_release_tools() {
1320-# Git the release-tools repo
1321- [[ -z &quot;$UOSCI_RELEASE_TOOLS_REPO&quot; ]] &amp;&amp; export UOSCI_RELEASE_TOOLS_REPO=&quot;https://github.com/openstack-charmers/release-tools&quot;
1322- [[ -z &quot;$UOSCI_RELEASE_TOOLS_BRANCH&quot; ]] &amp;&amp; export UOSCI_RELEASE_TOOLS_BRANCH=&quot;master&quot;
1323- export UOSCI_RELEASE_TOOLS_ROOT=&quot;${HOME}/tools/$EXECUTOR_NUMBER/release-tools&quot;
1324-
1325- if [[ -d $UOSCI_RELEASE_TOOLS_ROOT ]]; then
1326- echo &quot; - Removing existing dir @ $UOSCI_RELEASE_TOOLS_ROOT&quot;
1327- rm -rf $UOSCI_RELEASE_TOOLS_ROOT
1328- fi
1329-
1330- echo &quot; + Creating shallow new clone of $UOSCI_RELEASE_TOOLS_REPO @ $UOSCI_RELEASE_TOOLS_ROOT ($UOSCI_RELEASE_TOOLS_BRANCH)&quot;
1331- mkdir -p $UOSCI_RELEASE_TOOLS_BRANCH
1332- git clone -q --depth=1 $UOSCI_RELEASE_TOOLS_REPO $UOSCI_RELEASE_TOOLS_ROOT -b $UOSCI_RELEASE_TOOLS_BRANCH
1333- git -C $UOSCI_RELEASE_TOOLS_ROOT branch -av
1334- git -C $UOSCI_RELEASE_TOOLS_ROOT remote -v
1335-}
1336-
1337-
1338-function f_tools_refresh() {
1339- if [[ &quot;${NO_TOOLS_REFRESH^^}&quot; != &quot;TRUE&quot; ]]; then
1340- echo &quot;Refreshing checkouts...&quot;
1341- f_tool_refresh_osci
1342- f_tool_refresh_migration_tools
1343- f_tool_refresh_bot_control
1344- f_tool_refresh_release_tools
1345-
1346- if [[ &quot;${SKIP_JUJU_LXC^^}&quot; != &quot;TRUE&quot; ]]; then
1347- f_tool_refresh_oct
1348- f_tool_refresh_juju_wait
1349- fi
1350-
1351- else
1352- echo &quot; - Not refreshing UOSCI &amp; O-C-T branches due to env var.&quot;
1353- fi
1354-}
1355-
1356-f_tools_refresh
1357-
1358-
1359-###############
1360-
1361-env | sort
1362-
1363-###############
1364-
1365-. ${OSCI_ROOT}/job-parts/osci_job_common.sh
1366-f_line &quot;${OSCI_ROOT}/job-parts/osci_job_common.sh&quot;
1367-
1368-
1369-# Not expected to work on multi-executor slaves
1370-#f_line &quot;Flip-flopping Juju major versions&quot;
1371-#juju version
1372-#f_go_juju2
1373-#juju version
1374-#f_go_juju1
1375-#juju version
1376-
1377-###############
1378+ <command>#!/bin/bash -ue
1379+. ~/oscirc
1380+~/osci-repo-boot.sh
1381
1382 uname -a
1383 uptime
1384-date &gt; $WORKSPACE/foo.txt</command>
1385+date &gt; $WORKSPACE/foo.txt
1386+sleep 4</command>
1387 </hudson.tasks.Shell>
1388 </builders>
1389 <publishers>
1390@@ -230,14 +82,14 @@
1391 </hudson.tasks.ArtifactArchiver>
1392 </publishers>
1393 <buildWrappers>
1394- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
1395+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
1396 <deleteDirs>false</deleteDirs>
1397 <cleanupParameter></cleanupParameter>
1398 <externalDelete></externalDelete>
1399 </hudson.plugins.ws__cleanup.PreBuildCleanup>
1400- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
1401+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
1402 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
1403- <template>#${BUILD_NUMBER} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;} @ ${ENV,var=&quot;NODE_NAME&quot;}:${ENV,var=&quot;EXECUTOR_NUMBER&quot;} ${ENV,var=&quot;DISPLAY_NAME&quot;}</template>
1404+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;} @ ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;} ${ENV,var=&quot;DISPLAY_NAME&quot;}</template>
1405 <runAtStart>true</runAtStart>
1406 <runAtEnd>true</runAtEnd>
1407 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
1408
1409=== renamed directory 'deployment/jobs/_no_op2' => 'deploy/jobs-static/_no_op2'
1410=== modified file 'deploy/jobs-static/_no_op2/config.xml'
1411--- deployment/jobs/_no_op2/config.xml 2016-07-08 20:38:03 +0000
1412+++ deploy/jobs-static/_no_op2/config.xml 2017-05-27 00:22:36 +0000
1413@@ -2,14 +2,20 @@
1414 <project>
1415 <actions/>
1416 <description></description>
1417- <logRotator class="hudson.tasks.LogRotator">
1418- <daysToKeep>30</daysToKeep>
1419- <numToKeep>-1</numToKeep>
1420- <artifactDaysToKeep>90</artifactDaysToKeep>
1421- <artifactNumToKeep>90</artifactNumToKeep>
1422- </logRotator>
1423 <keepDependencies>false</keepDependencies>
1424 <properties>
1425+ <jenkins.model.BuildDiscarderProperty>
1426+ <strategy class="hudson.tasks.LogRotator">
1427+ <daysToKeep>30</daysToKeep>
1428+ <numToKeep>-1</numToKeep>
1429+ <artifactDaysToKeep>90</artifactDaysToKeep>
1430+ <artifactNumToKeep>90</artifactNumToKeep>
1431+ </strategy>
1432+ </jenkins.model.BuildDiscarderProperty>
1433+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1434+ <autoRebuild>false</autoRebuild>
1435+ <rebuildDisabled>false</rebuildDisabled>
1436+ </com.sonyericsson.rebuild.RebuildSettings>
1437 <hudson.model.ParametersDefinitionProperty>
1438 <parameterDefinitions>
1439 <hudson.model.StringParameterDefinition>
1440@@ -29,20 +35,19 @@
1441 </hudson.model.StringParameterDefinition>
1442 </parameterDefinitions>
1443 </hudson.model.ParametersDefinitionProperty>
1444- <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1445- <autoRebuild>false</autoRebuild>
1446- <rebuildDisabled>false</rebuildDisabled>
1447- </com.sonyericsson.rebuild.RebuildSettings>
1448- <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.8.4">
1449+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1450 <maxConcurrentPerNode>0</maxConcurrentPerNode>
1451 <maxConcurrentTotal>4</maxConcurrentTotal>
1452+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1453 <throttleEnabled>true</throttleEnabled>
1454 <throttleOption>project</throttleOption>
1455+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1456+ <paramsToUseForLimit></paramsToUseForLimit>
1457 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
1458 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1459 </properties>
1460 <scm class="hudson.scm.NullSCM"/>
1461- <assignedNode>slave</assignedNode>
1462+ <assignedNode>task||slave</assignedNode>
1463 <canRoam>false</canRoam>
1464 <disabled>false</disabled>
1465 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1466@@ -55,7 +60,7 @@
1467 uname -a
1468 uptime
1469 date &gt; $WORKSPACE/foo.txt
1470-sleep 3
1471+sleep 8
1472 </command>
1473 </hudson.tasks.Shell>
1474 </builders>
1475@@ -66,17 +71,20 @@
1476 <onlyIfSuccessful>false</onlyIfSuccessful>
1477 <fingerprint>false</fingerprint>
1478 <defaultExcludes>true</defaultExcludes>
1479+ <caseSensitive>true</caseSensitive>
1480 </hudson.tasks.ArtifactArchiver>
1481 </publishers>
1482 <buildWrappers>
1483- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.28">
1484+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
1485 <deleteDirs>false</deleteDirs>
1486 <cleanupParameter></cleanupParameter>
1487 <externalDelete></externalDelete>
1488 </hudson.plugins.ws__cleanup.PreBuildCleanup>
1489- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.6"/>
1490- <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.3">
1491- <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}</template>
1492+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
1493+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
1494+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;} @ ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;} ${ENV,var=&quot;DISPLAY_NAME&quot;}</template>
1495+ <runAtStart>true</runAtStart>
1496+ <runAtEnd>true</runAtEnd>
1497 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
1498 </buildWrappers>
1499 </project>
1500\ No newline at end of file
1501
1502=== renamed directory 'deployment/jobs/_no_op3' => 'deploy/jobs-static/_no_op3'
1503=== modified file 'deploy/jobs-static/_no_op3/config.xml'
1504--- deployment/jobs/_no_op3/config.xml 2016-07-08 20:38:03 +0000
1505+++ deploy/jobs-static/_no_op3/config.xml 2017-05-27 00:22:36 +0000
1506@@ -2,14 +2,20 @@
1507 <project>
1508 <actions/>
1509 <description></description>
1510- <logRotator class="hudson.tasks.LogRotator">
1511- <daysToKeep>30</daysToKeep>
1512- <numToKeep>-1</numToKeep>
1513- <artifactDaysToKeep>90</artifactDaysToKeep>
1514- <artifactNumToKeep>90</artifactNumToKeep>
1515- </logRotator>
1516 <keepDependencies>false</keepDependencies>
1517 <properties>
1518+ <jenkins.model.BuildDiscarderProperty>
1519+ <strategy class="hudson.tasks.LogRotator">
1520+ <daysToKeep>30</daysToKeep>
1521+ <numToKeep>-1</numToKeep>
1522+ <artifactDaysToKeep>90</artifactDaysToKeep>
1523+ <artifactNumToKeep>90</artifactNumToKeep>
1524+ </strategy>
1525+ </jenkins.model.BuildDiscarderProperty>
1526+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1527+ <autoRebuild>false</autoRebuild>
1528+ <rebuildDisabled>false</rebuildDisabled>
1529+ </com.sonyericsson.rebuild.RebuildSettings>
1530 <hudson.model.ParametersDefinitionProperty>
1531 <parameterDefinitions>
1532 <hudson.model.StringParameterDefinition>
1533@@ -29,20 +35,19 @@
1534 </hudson.model.StringParameterDefinition>
1535 </parameterDefinitions>
1536 </hudson.model.ParametersDefinitionProperty>
1537- <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1538- <autoRebuild>false</autoRebuild>
1539- <rebuildDisabled>false</rebuildDisabled>
1540- </com.sonyericsson.rebuild.RebuildSettings>
1541- <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.8.4">
1542+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1543 <maxConcurrentPerNode>0</maxConcurrentPerNode>
1544 <maxConcurrentTotal>4</maxConcurrentTotal>
1545+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1546 <throttleEnabled>true</throttleEnabled>
1547 <throttleOption>project</throttleOption>
1548+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1549+ <paramsToUseForLimit></paramsToUseForLimit>
1550 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
1551 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1552 </properties>
1553 <scm class="hudson.scm.NullSCM"/>
1554- <assignedNode>slave</assignedNode>
1555+ <assignedNode>task||slave</assignedNode>
1556 <canRoam>false</canRoam>
1557 <disabled>false</disabled>
1558 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1559@@ -55,7 +60,7 @@
1560 uname -a
1561 uptime
1562 date &gt; $WORKSPACE/foo.txt
1563-sleep 2</command>
1564+sleep 10</command>
1565 </hudson.tasks.Shell>
1566 </builders>
1567 <publishers>
1568@@ -65,17 +70,20 @@
1569 <onlyIfSuccessful>false</onlyIfSuccessful>
1570 <fingerprint>false</fingerprint>
1571 <defaultExcludes>true</defaultExcludes>
1572+ <caseSensitive>true</caseSensitive>
1573 </hudson.tasks.ArtifactArchiver>
1574 </publishers>
1575 <buildWrappers>
1576- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.28">
1577+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
1578 <deleteDirs>false</deleteDirs>
1579 <cleanupParameter></cleanupParameter>
1580 <externalDelete></externalDelete>
1581 </hudson.plugins.ws__cleanup.PreBuildCleanup>
1582- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.6"/>
1583- <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.3">
1584- <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}</template>
1585+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
1586+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
1587+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;} @ ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;} ${ENV,var=&quot;DISPLAY_NAME&quot;}</template>
1588+ <runAtStart>true</runAtStart>
1589+ <runAtEnd>true</runAtEnd>
1590 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
1591 </buildWrappers>
1592 </project>
1593\ No newline at end of file
1594
1595=== added directory 'deploy/jobs-static/_none'
1596=== added file 'deploy/jobs-static/_none/config.xml'
1597--- deploy/jobs-static/_none/config.xml 1970-01-01 00:00:00 +0000
1598+++ deploy/jobs-static/_none/config.xml 2017-05-27 00:22:36 +0000
1599@@ -0,0 +1,63 @@
1600+<?xml version='1.0' encoding='UTF-8'?>
1601+<project>
1602+ <actions/>
1603+ <description></description>
1604+ <keepDependencies>false</keepDependencies>
1605+ <properties>
1606+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1607+ <autoRebuild>false</autoRebuild>
1608+ <rebuildDisabled>false</rebuildDisabled>
1609+ </com.sonyericsson.rebuild.RebuildSettings>
1610+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1611+ <maxConcurrentPerNode>0</maxConcurrentPerNode>
1612+ <maxConcurrentTotal>0</maxConcurrentTotal>
1613+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1614+ <throttleEnabled>false</throttleEnabled>
1615+ <throttleOption>project</throttleOption>
1616+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1617+ <paramsToUseForLimit></paramsToUseForLimit>
1618+ </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
1619+ <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1620+ </properties>
1621+ <scm class="hudson.scm.NullSCM"/>
1622+ <assignedNode>slave||lab</assignedNode>
1623+ <canRoam>false</canRoam>
1624+ <disabled>false</disabled>
1625+ <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1626+ <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
1627+ <triggers/>
1628+ <concurrentBuild>false</concurrentBuild>
1629+ <builders>
1630+ <hudson.tasks.Shell>
1631+ <command>#!/bin/bash -ex
1632+. ~/oscirc
1633+
1634+env | sort
1635+
1636+~/osci-repo-boot.sh
1637+
1638+tree -aL 4 $HOME
1639+
1640+ls -alh $OSCI_ROOT
1641+
1642+head $OSCI_ROOT/run/job-parts/build_none.sh
1643+
1644+$OSCI_ROOT/run/job-parts/build_none.sh || echo BAH!
1645+
1646+date
1647+
1648+uname -a</command>
1649+ </hudson.tasks.Shell>
1650+ </builders>
1651+ <publishers>
1652+ <hudson.tasks.ArtifactArchiver>
1653+ <artifacts>*, logs/*</artifacts>
1654+ <allowEmptyArchive>true</allowEmptyArchive>
1655+ <onlyIfSuccessful>false</onlyIfSuccessful>
1656+ <fingerprint>false</fingerprint>
1657+ <defaultExcludes>true</defaultExcludes>
1658+ <caseSensitive>true</caseSensitive>
1659+ </hudson.tasks.ArtifactArchiver>
1660+ </publishers>
1661+ <buildWrappers/>
1662+</project>
1663\ No newline at end of file
1664
1665=== renamed directory 'deployment/jobs/_system_tools_init' => 'deploy/jobs-static/_system_tools_init'
1666=== modified file 'deploy/jobs-static/_system_tools_init/config.xml'
1667--- deployment/jobs/_system_tools_init/config.xml 2017-04-05 11:51:52 +0000
1668+++ deploy/jobs-static/_system_tools_init/config.xml 2017-05-27 00:22:36 +0000
1669@@ -19,7 +19,7 @@
1670 <hudson.model.ParametersDefinitionProperty>
1671 <parameterDefinitions>
1672 <org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterDefinition plugin="nodelabelparameter@1.7.2">
1673- <name>Concurrent Multiple Nodes</name>
1674+ <name></name>
1675 <description></description>
1676 <allowedSlaves>
1677 <string>ALL (no restriction)</string>
1678@@ -29,17 +29,10 @@
1679 <string>osci-lab-1</string>
1680 <string>osci-lab-2</string>
1681 <string>osci-lab-3</string>
1682- <string>osci-mutuslab0</string>
1683- <string>osci-mutuslab1</string>
1684- <string>osci-mutuslab2</string>
1685 <string>osci-slave-0</string>
1686 <string>osci-slave-1</string>
1687 <string>osci-slave-10</string>
1688 <string>osci-slave-11</string>
1689- <string>osci-slave-12</string>
1690- <string>osci-slave-13</string>
1691- <string>osci-slave-14</string>
1692- <string>osci-slave-15</string>
1693 <string>osci-slave-2</string>
1694 <string>osci-slave-3</string>
1695 <string>osci-slave-4</string>
1696@@ -61,11 +54,9 @@
1697 </hudson.model.ParametersDefinitionProperty>
1698 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1699 <maxConcurrentPerNode>0</maxConcurrentPerNode>
1700- <maxConcurrentTotal>0</maxConcurrentTotal>
1701- <categories class="java.util.concurrent.CopyOnWriteArrayList">
1702- <string>false</string>
1703- </categories>
1704- <throttleEnabled>false</throttleEnabled>
1705+ <maxConcurrentTotal>32</maxConcurrentTotal>
1706+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1707+ <throttleEnabled>true</throttleEnabled>
1708 <throttleOption>project</throttleOption>
1709 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1710 <paramsToUseForLimit></paramsToUseForLimit>
1711@@ -79,94 +70,22 @@
1712 <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
1713 <triggers>
1714 <hudson.triggers.TimerTrigger>
1715- <spec>45 23 * * *</spec>
1716+ <spec>30 23 * * *</spec>
1717 </hudson.triggers.TimerTrigger>
1718 </triggers>
1719 <concurrentBuild>true</concurrentBuild>
1720 <builders>
1721 <hudson.tasks.Shell>
1722- <command>#!/bin/bash -e
1723-#
1724-# Common functions for UOSCI jobs, specific to refreshing tool branches.
1725-
1726-mkdir -vp /var/lib/jenkins/tools ||:
1727-
1728-
1729-function f_tool_refresh_osci() {
1730-# ubuntu_openstack_ci fresh
1731- if [[ -d $OSCI_ROOT ]]; then
1732- echo &quot; - Removing existing checkout @ $OSCI_ROOT&quot;
1733- rm -rf $OSCI_ROOT
1734- fi
1735- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
1736- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
1737- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
1738-}
1739-
1740-
1741-function f_tool_refresh_oct() {
1742-# keep openstack_charm_testing fresh
1743- if [[ -d $OPENSTACK_CHARM_TESTING_ROOT ]]; then
1744- echo &quot; - Removing existing checkout of @ $OPENSTACK_CHARM_TESTING_ROOT&quot;
1745- rm -rf $OPENSTACK_CHARM_TESTING_ROOT
1746- fi
1747- echo &quot; + Creating new lightweight checkout of $OPENSTACK_CHARM_TESTING_REPO @ $OPENSTACK_CHARM_TESTING_ROOT.&quot;
1748- bzr co --lightweight $OPENSTACK_CHARM_TESTING_REPO $OPENSTACK_CHARM_TESTING_ROOT
1749- echo &quot;revno: $(bzr revno $OPENSTACK_CHARM_TESTING_ROOT)&quot;
1750-}
1751-
1752-
1753-function f_tool_refresh_juju_wait() {
1754-# keep juju_wait fresh
1755- [[ -z &quot;$JUJU_WAIT_REPO&quot; ]] &amp;&amp; export JUJU_WAIT_REPO=&quot;https://git.launchpad.net/juju-wait&quot;
1756- [[ -z &quot;$JUJU_WAIT_ROOT&quot; ]] &amp;&amp; export JUJU_WAIT_ROOT=&quot;${HOME}/tools/juju-wait&quot;
1757- [[ -z &quot;$JUJU_WAIT_BRANCH&quot; ]] &amp;&amp; export JUJU_WAIT_BRANCH=&quot;master&quot;
1758-
1759- if [[ -d $JUJU_WAIT_ROOT ]]; then
1760- echo &quot; - Removing existing dir @ $JUJU_WAIT_ROOT&quot;
1761- rm -rf $JUJU_WAIT_ROOT
1762- fi
1763-
1764- echo &quot; + Creating new shallow clone of $JUJU_WAIT_REPO @ $JUJU_WAIT_ROOT ($JUJU_WAIT_BRANCH).&quot;
1765- git clone -q --depth=1 $JUJU_WAIT_REPO $JUJU_WAIT_ROOT -b $JUJU_WAIT_BRANCH
1766- git -C $JUJU_WAIT_ROOT branch -av
1767- git -C $JUJU_WAIT_ROOT remote -v
1768-}
1769-
1770-
1771-#function f_tool_refresh_tarmac() {
1772-# keep tarmac fresh
1773-#if [[ -d $TARMAC_ROOT ]]; then
1774-# echo &quot; - Removing existing checkout @ $TARMAC_ROOT&quot;
1775-# rm -rf $TARMAC_ROOT
1776-#fi
1777-#echo &quot; + Creating new lightweight checkout of $TARMAC_REPO @ $TARMAC_ROOT.&quot;
1778-#bzr co --lightweight $TARMAC_REPO $TARMAC_ROOT
1779-#}
1780-
1781-
1782-#function f_tool_refresh_osut() {
1783-# Dump juju package info to a file.
1784-# keep openstack_ubuntu_testing fresh
1785-#if [[ -d $OPENSTACK_UBUNTU_ROOT ]]; then
1786-# echo &quot; - Removing existing checkout of @ $OPENSTACK_UBUNTU_ROOT&quot;
1787-# rm -rf $OPENSTACK_UBUNTU_ROOT
1788-#fi
1789-#echo &quot; + Creating new lightweight checkout @ $OPENSTACK_UBUNTU_ROOT.&quot;
1790-#bzr co --lightweight $OPENSTACK_UBUNTU_REPO $OPENSTACK_UBUNTU_ROOT
1791-#}
1792-
1793-
1794-f_tool_refresh_osci
1795-f_tool_refresh_oct
1796-f_tool_refresh_juju_wait</command>
1797+ <command>#!/bin/bash -uex
1798+. ~/oscirc
1799+~/osci-repo-boot-clean.sh</command>
1800 </hudson.tasks.Shell>
1801 </builders>
1802 <publishers/>
1803 <buildWrappers>
1804- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
1805+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
1806 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
1807- <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}</template>
1808+ <template>#${BUILD_NUMBER} ${ENV,var=&quot;NODE_NAME&quot;}-${ENV,var=&quot;EXECUTOR_NUMBER&quot;}</template>
1809 <runAtStart>true</runAtStart>
1810 <runAtEnd>true</runAtEnd>
1811 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
1812
1813=== renamed directory 'deployment/jobs/charm_build' => 'deploy/jobs-static/charm_build'
1814=== modified file 'deploy/jobs-static/charm_build/config.xml'
1815--- deployment/jobs/charm_build/config.xml 2016-06-15 04:31:10 +0000
1816+++ deploy/jobs-static/charm_build/config.xml 2017-05-27 00:22:36 +0000
1817@@ -2,14 +2,20 @@
1818 <project>
1819 <actions/>
1820 <description>Build an asset and create an artifact archive file containing the built item.</description>
1821- <logRotator class="hudson.tasks.LogRotator">
1822- <daysToKeep>-1</daysToKeep>
1823- <numToKeep>-1</numToKeep>
1824- <artifactDaysToKeep>30</artifactDaysToKeep>
1825- <artifactNumToKeep>720</artifactNumToKeep>
1826- </logRotator>
1827 <keepDependencies>false</keepDependencies>
1828 <properties>
1829+ <jenkins.model.BuildDiscarderProperty>
1830+ <strategy class="hudson.tasks.LogRotator">
1831+ <daysToKeep>-1</daysToKeep>
1832+ <numToKeep>-1</numToKeep>
1833+ <artifactDaysToKeep>30</artifactDaysToKeep>
1834+ <artifactNumToKeep>720</artifactNumToKeep>
1835+ </strategy>
1836+ </jenkins.model.BuildDiscarderProperty>
1837+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1838+ <autoRebuild>false</autoRebuild>
1839+ <rebuildDisabled>false</rebuildDisabled>
1840+ </com.sonyericsson.rebuild.RebuildSettings>
1841 <hudson.model.ParametersDefinitionProperty>
1842 <parameterDefinitions>
1843 <hudson.model.StringParameterDefinition>
1844@@ -99,20 +105,19 @@
1845 </hudson.model.StringParameterDefinition>
1846 </parameterDefinitions>
1847 </hudson.model.ParametersDefinitionProperty>
1848- <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
1849- <autoRebuild>false</autoRebuild>
1850- <rebuildDisabled>false</rebuildDisabled>
1851- </com.sonyericsson.rebuild.RebuildSettings>
1852- <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.8.4">
1853- <maxConcurrentPerNode>1</maxConcurrentPerNode>
1854- <maxConcurrentTotal>8</maxConcurrentTotal>
1855+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1856+ <maxConcurrentPerNode>8</maxConcurrentPerNode>
1857+ <maxConcurrentTotal>12</maxConcurrentTotal>
1858+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1859 <throttleEnabled>true</throttleEnabled>
1860 <throttleOption>project</throttleOption>
1861+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1862+ <paramsToUseForLimit></paramsToUseForLimit>
1863 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
1864 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1865 </properties>
1866 <scm class="hudson.scm.NullSCM"/>
1867- <assignedNode>slave</assignedNode>
1868+ <assignedNode>task</assignedNode>
1869 <canRoam>false</canRoam>
1870 <disabled>false</disabled>
1871 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1872@@ -121,20 +126,14 @@
1873 <concurrentBuild>true</concurrentBuild>
1874 <builders>
1875 <hudson.tasks.Shell>
1876- <command>#!/bin/bash -e
1877-# Ensure we have a checkout of UOSCI code
1878-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
1879- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
1880- rm -rf $OSCI_ROOT ||:
1881- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
1882- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
1883- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
1884-fi
1885-</command>
1886+ <command>#!/bin/bash -ue
1887+. ~/oscirc
1888+~/osci-repo-boot-clean.sh</command>
1889 </hudson.tasks.Shell>
1890 <hudson.tasks.Shell>
1891- <command>#!/bin/bash -e
1892-${OSCI_ROOT}/job-parts/build_charm_build_and_archive.sh</command>
1893+ <command>#!/bin/bash -ue
1894+. ~/oscirc
1895+${OSCI_ROOT}/run/job-parts/build_charm_build_and_archive.sh</command>
1896 </hudson.tasks.Shell>
1897 </builders>
1898 <publishers>
1899@@ -144,13 +143,14 @@
1900 <onlyIfSuccessful>false</onlyIfSuccessful>
1901 <fingerprint>false</fingerprint>
1902 <defaultExcludes>true</defaultExcludes>
1903+ <caseSensitive>true</caseSensitive>
1904 </hudson.tasks.ArtifactArchiver>
1905- <jenkins.plugins.publish__over__ssh.BapSshPublisherPlugin plugin="publish-over-ssh@1.14">
1906+ <jenkins.plugins.publish__over__ssh.BapSshPublisherPlugin plugin="publish-over-ssh@1.17">
1907 <consolePrefix>SSH: </consolePrefix>
1908 <delegate>
1909 <publishers>
1910 <jenkins.plugins.publish__over__ssh.BapSshPublisher>
1911- <configName>osci ephemeral (jenkins master)</configName>
1912+ <configName>osci-master ephemeral</configName>
1913 <verbose>false</verbose>
1914 <transfers>
1915 <jenkins.plugins.publish__over__ssh.BapSshTransfer>
1916@@ -167,6 +167,7 @@
1917 <execCommand></execCommand>
1918 <execTimeout>120000</execTimeout>
1919 <usePty>false</usePty>
1920+ <useAgentForwarding>false</useAgentForwarding>
1921 </jenkins.plugins.publish__over__ssh.BapSshTransfer>
1922 </transfers>
1923 <useWorkspaceInPromotion>false</useWorkspaceInPromotion>
1924@@ -181,14 +182,16 @@
1925 </jenkins.plugins.publish__over__ssh.BapSshPublisherPlugin>
1926 </publishers>
1927 <buildWrappers>
1928- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.28">
1929+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
1930 <deleteDirs>false</deleteDirs>
1931 <cleanupParameter></cleanupParameter>
1932 <externalDelete></externalDelete>
1933 </hudson.plugins.ws__cleanup.PreBuildCleanup>
1934- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.6"/>
1935- <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.3">
1936+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
1937+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
1938 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_BRANCH&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
1939+ <runAtStart>true</runAtStart>
1940+ <runAtEnd>true</runAtEnd>
1941 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
1942 </buildWrappers>
1943 </project>
1944\ No newline at end of file
1945
1946=== renamed directory 'deployment/jobs/sim_sandbox_pipeline' => 'deploy/jobs-static/sim_sandbox_pipeline'
1947=== modified file 'deploy/jobs-static/sim_sandbox_pipeline/config.xml'
1948--- deployment/jobs/sim_sandbox_pipeline/config.xml 2016-12-09 21:50:02 +0000
1949+++ deploy/jobs-static/sim_sandbox_pipeline/config.xml 2017-05-27 00:22:36 +0000
1950@@ -87,19 +87,16 @@
1951 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
1952 <maxConcurrentPerNode>1</maxConcurrentPerNode>
1953 <maxConcurrentTotal>4</maxConcurrentTotal>
1954- <categories class="java.util.concurrent.CopyOnWriteArrayList">
1955- <string>false</string>
1956- </categories>
1957+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
1958 <throttleEnabled>true</throttleEnabled>
1959 <throttleOption>project</throttleOption>
1960 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
1961 <paramsToUseForLimit></paramsToUseForLimit>
1962- <configVersion>1</configVersion>
1963 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
1964 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
1965 </properties>
1966 <scm class="hudson.scm.NullSCM"/>
1967- <assignedNode>slave</assignedNode>
1968+ <assignedNode>task</assignedNode>
1969 <canRoam>false</canRoam>
1970 <disabled>false</disabled>
1971 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
1972@@ -108,7 +105,7 @@
1973 <hudson.triggers.TimerTrigger>
1974 <spec>H 0 * * *</spec>
1975 </hudson.triggers.TimerTrigger>
1976- <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.18.3">
1977+ <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.23.1">
1978 <spec></spec>
1979 <gerritProjects>
1980 <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject>
1981@@ -137,6 +134,7 @@
1982 <dependencyJobsNames></dependencyJobsNames>
1983 <commitMessageParameterMode>BASE64</commitMessageParameterMode>
1984 <changeSubjectParameterMode>PLAIN</changeSubjectParameterMode>
1985+ <commentTextParameterMode>PLAIN</commentTextParameterMode>
1986 <buildStartMessage></buildStartMessage>
1987 <buildFailureMessage></buildFailureMessage>
1988 <buildSuccessfulMessage></buildSuccessfulMessage>
1989@@ -144,7 +142,7 @@
1990 <buildNotBuiltMessage></buildNotBuiltMessage>
1991 <buildUnsuccessfulFilepath></buildUnsuccessfulFilepath>
1992 <customUrl></customUrl>
1993- <serverName>review.openstack.org</serverName>
1994+ <serverName>__ANY__</serverName>
1995 <triggerOnEvents>
1996 <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginPatchsetCreatedEvent>
1997 <excludeDrafts>false</excludeDrafts>
1998@@ -169,18 +167,12 @@
1999 <concurrentBuild>true</concurrentBuild>
2000 <builders>
2001 <hudson.tasks.Shell>
2002- <command>#!/bin/bash -e
2003-# Ensure we have a checkout of UOSCI code
2004-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2005- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2006- rm -rf $OSCI_ROOT ||:
2007- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2008- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2009- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2010-fi</command>
2011- </hudson.tasks.Shell>
2012- <hudson.tasks.Shell>
2013- <command>env | egrep &quot;BUILD|JOB_|GERRIT|UOSCI|HUDSON|JENKINS|WORKSPACE&quot; | sort</command>
2014+ <command>#!/bin/bash -ue
2015+. ~/oscirc
2016+~/osci-repo-boot-clean.sh
2017+
2018+set -x
2019+sleep 8</command>
2020 </hudson.tasks.Shell>
2021 <org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder plugin="conditional-buildstep@1.3.5">
2022 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
2023@@ -199,7 +191,7 @@
2024 </bestResult>
2025 </runCondition>
2026 <conditionalbuilders>
2027- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
2028+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
2029 <configs>
2030 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
2031 <configs>
2032@@ -208,6 +200,7 @@
2033 <projects>sim_sub_a,sim_sub_b</projects>
2034 <condition>ALWAYS</condition>
2035 <triggerWithNoParameters>false</triggerWithNoParameters>
2036+ <triggerFromChildProjects>false</triggerFromChildProjects>
2037 <block>
2038 <unstableThreshold>
2039 <name>UNSTABLE</name>
2040@@ -227,10 +220,15 @@
2041 </configs>
2042 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
2043 <hudson.tasks.Shell>
2044- <command>#!/bin/bash -e
2045-env | grep TRIGGERED_BUILD
2046-wget ${JENKINS_URL}job/sim_sub_a/$TRIGGERED_BUILD_NUMBER_sim_sub_a/consoleText -O $WORKSPACE/consoleText.sim_sub_a.txt
2047-wget ${JENKINS_URL}job/sim_sub_b/$TRIGGERED_BUILD_NUMBER_sim_sub_b/consoleText -O $WORKSPACE/consoleText.sim_sub_b.txt</command>
2048+ <command>#!/bin/bash -uex
2049+. ~/oscirc
2050+
2051+set -x
2052+sleep 8
2053+
2054+env | egrep &quot;JENKINS|TRIGGERED_BUILD&quot;
2055+wget http://${OSCI_MASTER_IP}:8080/job/sim_sub_a/$TRIGGERED_BUILD_NUMBER_sim_sub_a/consoleText -O $WORKSPACE/consoleText.sim_sub_a.txt
2056+wget http://${OSCI_MASTER_IP}:8080/job/sim_sub_b/$TRIGGERED_BUILD_NUMBER_sim_sub_b/consoleText -O $WORKSPACE/consoleText.sim_sub_b.txt</command>
2057 </hudson.tasks.Shell>
2058 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
2059 <project>sim_sub_a</project>
2060@@ -273,7 +271,7 @@
2061 </bestResult>
2062 </runCondition>
2063 <conditionalbuilders>
2064- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
2065+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
2066 <configs>
2067 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
2068 <configs>
2069@@ -282,6 +280,7 @@
2070 <projects>sim_sub_c</projects>
2071 <condition>ALWAYS</condition>
2072 <triggerWithNoParameters>false</triggerWithNoParameters>
2073+ <triggerFromChildProjects>false</triggerFromChildProjects>
2074 <block>
2075 <unstableThreshold>
2076 <name>UNSTABLE</name>
2077@@ -301,9 +300,14 @@
2078 </configs>
2079 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
2080 <hudson.tasks.Shell>
2081- <command>#!/bin/bash -e
2082-env | grep TRIGGERED_BUILD
2083-wget ${JENKINS_URL}job/sim_sub_c/$TRIGGERED_BUILD_NUMBER_sim_sub_c/consoleText -O $WORKSPACE/consoleText.sim_sub_c.txt</command>
2084+ <command>#!/bin/bash -uex
2085+. ~/oscirc
2086+
2087+set -x
2088+sleep 8
2089+
2090+env | egrep &quot;JENKINS|TRIGGERED_BUILD&quot;
2091+wget http://${OSCI_MASTER_IP}:8080/job/sim_sub_c/$TRIGGERED_BUILD_NUMBER_sim_sub_c/consoleText -O $WORKSPACE/consoleText.sim_sub_c.txt</command>
2092 </hudson.tasks.Shell>
2093 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
2094 <project>sim_sub_c</project>
2095@@ -335,7 +339,7 @@
2096 </bestResult>
2097 </runCondition>
2098 <conditionalbuilders>
2099- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
2100+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
2101 <configs>
2102 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
2103 <configs>
2104@@ -344,6 +348,7 @@
2105 <projects>sim_sub_d</projects>
2106 <condition>ALWAYS</condition>
2107 <triggerWithNoParameters>false</triggerWithNoParameters>
2108+ <triggerFromChildProjects>false</triggerFromChildProjects>
2109 <block>
2110 <unstableThreshold>
2111 <name>UNSTABLE</name>
2112@@ -363,9 +368,14 @@
2113 </configs>
2114 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
2115 <hudson.tasks.Shell>
2116- <command>#!/bin/bash -e
2117+ <command>#!/bin/bash -ue
2118+. ~/oscirc
2119+
2120+set -x
2121+sleep 8
2122+
2123 env | grep TRIGGERED_BUILD
2124-wget ${JENKINS_URL}job/sim_sub_d/$TRIGGERED_BUILD_NUMBER_sim_sub_d/consoleText -O $WORKSPACE/consoleText.sim_sub_d.txt</command>
2125+wget http://${OSCI_MASTER_IP}:8080/job/sim_sub_d/$TRIGGERED_BUILD_NUMBER_sim_sub_d/consoleText -O $WORKSPACE/consoleText.sim_sub_d.txt</command>
2126 </hudson.tasks.Shell>
2127 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
2128 <project>sim_sub_d</project>
2129@@ -396,9 +406,10 @@
2130 </bestResult>
2131 </condition>
2132 <buildStep class="hudson.tasks.Shell">
2133- <command>#!/bin/bash -e
2134+ <command>#!/bin/bash -ue
2135+. ~/oscirc
2136 export UOSCI_GERRIT_VERDICT=&quot;SUCCESS&quot;
2137-${OSCI_ROOT}/job-parts/part_gerrit_review.sh</command>
2138+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh</command>
2139 </buildStep>
2140 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
2141 </org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder>
2142@@ -418,9 +429,10 @@
2143 </bestResult>
2144 </condition>
2145 <buildStep class="hudson.tasks.Shell">
2146- <command>#!/bin/bash -e
2147+ <command>#!/bin/bash -ue
2148+. ~/oscirc
2149 export UOSCI_GERRIT_VERDICT=&quot;FAILURE&quot;
2150-${OSCI_ROOT}/job-parts/part_gerrit_review.sh
2151+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh
2152 </command>
2153 </buildStep>
2154 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
2155@@ -437,12 +449,12 @@
2156 </hudson.tasks.ArtifactArchiver>
2157 </publishers>
2158 <buildWrappers>
2159- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
2160+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
2161 <deleteDirs>false</deleteDirs>
2162 <cleanupParameter></cleanupParameter>
2163 <externalDelete></externalDelete>
2164 </hudson.plugins.ws__cleanup.PreBuildCleanup>
2165- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2166+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2167 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2168 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;},${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} for ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;}</template>
2169 <runAtStart>true</runAtStart>
2170
2171=== renamed directory 'deployment/jobs/sim_sandbox_pipeline_full' => 'deploy/jobs-static/sim_sandbox_pipeline_full'
2172=== modified file 'deploy/jobs-static/sim_sandbox_pipeline_full/config.xml'
2173--- deployment/jobs/sim_sandbox_pipeline_full/config.xml 2016-12-09 21:50:02 +0000
2174+++ deploy/jobs-static/sim_sandbox_pipeline_full/config.xml 2017-05-27 00:22:36 +0000
2175@@ -77,25 +77,22 @@
2176 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2177 <maxConcurrentPerNode>1</maxConcurrentPerNode>
2178 <maxConcurrentTotal>4</maxConcurrentTotal>
2179- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2180- <string>false</string>
2181- </categories>
2182+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2183 <throttleEnabled>true</throttleEnabled>
2184 <throttleOption>project</throttleOption>
2185 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2186 <paramsToUseForLimit></paramsToUseForLimit>
2187- <configVersion>1</configVersion>
2188 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
2189 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2190 </properties>
2191 <scm class="hudson.scm.NullSCM"/>
2192- <assignedNode>slave</assignedNode>
2193+ <assignedNode>task</assignedNode>
2194 <canRoam>false</canRoam>
2195 <disabled>false</disabled>
2196 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2197 <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
2198 <triggers>
2199- <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.18.3">
2200+ <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.23.1">
2201 <spec></spec>
2202 <gerritProjects>
2203 <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject>
2204@@ -124,6 +121,7 @@
2205 <dependencyJobsNames></dependencyJobsNames>
2206 <commitMessageParameterMode>BASE64</commitMessageParameterMode>
2207 <changeSubjectParameterMode>PLAIN</changeSubjectParameterMode>
2208+ <commentTextParameterMode>PLAIN</commentTextParameterMode>
2209 <buildStartMessage></buildStartMessage>
2210 <buildFailureMessage></buildFailureMessage>
2211 <buildSuccessfulMessage></buildSuccessfulMessage>
2212@@ -142,7 +140,7 @@
2213 <commentAddedCommentContains>^Patch Set.*charm-recheck-full$</commentAddedCommentContains>
2214 </com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedContainsEvent>
2215 <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedEvent>
2216- <verdictCategory>Code-Review</verdictCategory>
2217+ <verdictCategory>Verified</verdictCategory>
2218 <commentAddedTriggerApprovalValue>1</commentAddedTriggerApprovalValue>
2219 </com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginCommentAddedEvent>
2220 </triggerOnEvents>
2221@@ -154,18 +152,12 @@
2222 <concurrentBuild>true</concurrentBuild>
2223 <builders>
2224 <hudson.tasks.Shell>
2225- <command>#!/bin/bash -e
2226-# Ensure we have a checkout of UOSCI code
2227-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2228- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2229- rm -rf $OSCI_ROOT ||:
2230- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2231- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2232- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2233-fi</command>
2234+ <command>#!/bin/bash -ue
2235+. ~/oscirc
2236+~/osci-repo-boot.sh</command>
2237 </hudson.tasks.Shell>
2238 <hudson.tasks.Shell>
2239- <command>#!/bin/bash -e
2240+ <command>#!/bin/bash -ue
2241 env | egrep &quot;BUILD|JOB_|GERRIT|UOSCI|HUDSON|JENKINS|WORKSPACE&quot; | sort
2242
2243 echo &quot; . Always-run step 0&quot;</command>
2244@@ -188,7 +180,7 @@
2245 </runCondition>
2246 <conditionalbuilders>
2247 <hudson.tasks.Shell>
2248- <command>#!/bin/bash -e
2249+ <command>#!/bin/bash -ue
2250 echo &quot; . Conditional step 1&quot;</command>
2251 </hudson.tasks.Shell>
2252 </conditionalbuilders>
2253@@ -211,7 +203,7 @@
2254 </runCondition>
2255 <conditionalbuilders>
2256 <hudson.tasks.Shell>
2257- <command>#!/bin/bash -e
2258+ <command>#!/bin/bash -ue
2259 echo &quot; . Conditional step 2&quot;</command>
2260 </hudson.tasks.Shell>
2261 </conditionalbuilders>
2262@@ -234,7 +226,7 @@
2263 </runCondition>
2264 <conditionalbuilders>
2265 <hudson.tasks.Shell>
2266- <command>#!/bin/bash -e
2267+ <command>#!/bin/bash -ue
2268 echo &quot; . Conditional step 3&quot;</command>
2269 </hudson.tasks.Shell>
2270 </conditionalbuilders>
2271@@ -255,9 +247,10 @@
2272 </bestResult>
2273 </condition>
2274 <buildStep class="hudson.tasks.Shell">
2275- <command>#!/bin/bash -e
2276+ <command>#!/bin/bash -ue
2277+. ~/oscirc
2278 export UOSCI_GERRIT_VERDICT=&quot;SUCCESS&quot;
2279-${OSCI_ROOT}/job-parts/part_gerrit_review.sh</command>
2280+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh</command>
2281 </buildStep>
2282 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
2283 </org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder>
2284@@ -277,9 +270,10 @@
2285 </bestResult>
2286 </condition>
2287 <buildStep class="hudson.tasks.Shell">
2288- <command>#!/bin/bash -e
2289+ <command>#!/bin/bash -ue
2290+. ~/oscirc
2291 export UOSCI_GERRIT_VERDICT=&quot;FAILURE&quot;
2292-${OSCI_ROOT}/job-parts/part_gerrit_review.sh</command>
2293+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh</command>
2294 </buildStep>
2295 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
2296 </org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder>
2297@@ -295,12 +289,12 @@
2298 </hudson.tasks.ArtifactArchiver>
2299 </publishers>
2300 <buildWrappers>
2301- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
2302+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
2303 <deleteDirs>false</deleteDirs>
2304 <cleanupParameter></cleanupParameter>
2305 <externalDelete></externalDelete>
2306 </hudson.plugins.ws__cleanup.PreBuildCleanup>
2307- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2308+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2309 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2310 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;},${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} for ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;}</template>
2311 <runAtStart>true</runAtStart>
2312
2313=== renamed directory 'deployment/jobs/sim_sub_a' => 'deploy/jobs-static/sim_sub_a'
2314=== modified file 'deploy/jobs-static/sim_sub_a/config.xml'
2315--- deployment/jobs/sim_sub_a/config.xml 2016-10-04 02:28:38 +0000
2316+++ deploy/jobs-static/sim_sub_a/config.xml 2017-05-27 00:22:36 +0000
2317@@ -93,9 +93,7 @@
2318 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2319 <maxConcurrentPerNode>1</maxConcurrentPerNode>
2320 <maxConcurrentTotal>6</maxConcurrentTotal>
2321- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2322- <string>false</string>
2323- </categories>
2324+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2325 <throttleEnabled>true</throttleEnabled>
2326 <throttleOption>project</throttleOption>
2327 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2328@@ -104,7 +102,7 @@
2329 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2330 </properties>
2331 <scm class="hudson.scm.NullSCM"/>
2332- <assignedNode>slave</assignedNode>
2333+ <assignedNode>task</assignedNode>
2334 <canRoam>false</canRoam>
2335 <disabled>false</disabled>
2336 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2337@@ -113,19 +111,10 @@
2338 <concurrentBuild>true</concurrentBuild>
2339 <builders>
2340 <hudson.tasks.Shell>
2341- <command>#!/bin/bash -e
2342-# Ensure we have a checkout of UOSCI code
2343-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2344- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2345- rm -rf $OSCI_ROOT ||:
2346- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2347- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2348- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2349-fi
2350-</command>
2351- </hudson.tasks.Shell>
2352- <hudson.tasks.Shell>
2353- <command>${OSCI_ROOT}/job-parts/build_simulate.sh</command>
2354+ <command>#!/bin/bash -ue
2355+. ~/oscirc
2356+~/osci-repo-boot.sh
2357+${OSCI_ROOT}/run/job-parts/build_simulate.sh</command>
2358 </hudson.tasks.Shell>
2359 </builders>
2360 <publishers>
2361@@ -139,7 +128,7 @@
2362 </hudson.tasks.ArtifactArchiver>
2363 </publishers>
2364 <buildWrappers>
2365- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2366+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2367 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2368 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;},${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} for ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;}</template>
2369 <runAtStart>true</runAtStart>
2370
2371=== renamed directory 'deployment/jobs/sim_sub_b' => 'deploy/jobs-static/sim_sub_b'
2372=== modified file 'deploy/jobs-static/sim_sub_b/config.xml'
2373--- deployment/jobs/sim_sub_b/config.xml 2016-10-04 02:28:38 +0000
2374+++ deploy/jobs-static/sim_sub_b/config.xml 2017-05-27 00:22:36 +0000
2375@@ -83,9 +83,7 @@
2376 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2377 <maxConcurrentPerNode>1</maxConcurrentPerNode>
2378 <maxConcurrentTotal>6</maxConcurrentTotal>
2379- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2380- <string>false</string>
2381- </categories>
2382+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2383 <throttleEnabled>true</throttleEnabled>
2384 <throttleOption>project</throttleOption>
2385 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2386@@ -94,7 +92,7 @@
2387 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2388 </properties>
2389 <scm class="hudson.scm.NullSCM"/>
2390- <assignedNode>slave</assignedNode>
2391+ <assignedNode>task</assignedNode>
2392 <canRoam>false</canRoam>
2393 <disabled>false</disabled>
2394 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2395@@ -103,19 +101,11 @@
2396 <concurrentBuild>true</concurrentBuild>
2397 <builders>
2398 <hudson.tasks.Shell>
2399- <command>#!/bin/bash -e
2400-# Ensure we have a checkout of UOSCI code
2401-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2402- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2403- rm -rf $OSCI_ROOT ||:
2404- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2405- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2406- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2407-fi
2408-</command>
2409- </hudson.tasks.Shell>
2410- <hudson.tasks.Shell>
2411- <command>set -x
2412+ <command>#!/bin/bash -ue
2413+. ~/oscirc
2414+~/osci-repo-boot.sh
2415+
2416+set -x
2417 mkdir -vp $WORKSPACE/logs
2418 mkdir -vp $WORKSPACE/other
2419 date &gt; $WORKSPACE/logs/file1.txt
2420@@ -129,10 +119,9 @@
2421
2422 cat $WORKSPACE/logs/file1.txt
2423 cat $WORKSPACE/other/file1.txt
2424-ls $WORKSPACE -alr</command>
2425- </hudson.tasks.Shell>
2426- <hudson.tasks.Shell>
2427- <command>${OSCI_ROOT}/job-parts/build_simulate.sh
2428+ls $WORKSPACE -alr
2429+
2430+${OSCI_ROOT}/run/job-parts/build_simulate.sh
2431
2432 ls $WORKSPACE -alr</command>
2433 </hudson.tasks.Shell>
2434@@ -148,7 +137,7 @@
2435 </hudson.tasks.ArtifactArchiver>
2436 </publishers>
2437 <buildWrappers>
2438- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2439+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2440 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2441 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;},${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} for ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;}</template>
2442 <runAtStart>true</runAtStart>
2443
2444=== renamed directory 'deployment/jobs/sim_sub_c' => 'deploy/jobs-static/sim_sub_c'
2445=== modified file 'deploy/jobs-static/sim_sub_c/config.xml'
2446--- deployment/jobs/sim_sub_c/config.xml 2016-10-04 02:28:38 +0000
2447+++ deploy/jobs-static/sim_sub_c/config.xml 2017-05-27 00:22:36 +0000
2448@@ -81,11 +81,9 @@
2449 </parameterDefinitions>
2450 </hudson.model.ParametersDefinitionProperty>
2451 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2452- <maxConcurrentPerNode>1</maxConcurrentPerNode>
2453- <maxConcurrentTotal>6</maxConcurrentTotal>
2454- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2455- <string>false</string>
2456- </categories>
2457+ <maxConcurrentPerNode>8</maxConcurrentPerNode>
2458+ <maxConcurrentTotal>8</maxConcurrentTotal>
2459+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2460 <throttleEnabled>true</throttleEnabled>
2461 <throttleOption>project</throttleOption>
2462 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2463@@ -94,7 +92,7 @@
2464 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2465 </properties>
2466 <scm class="hudson.scm.NullSCM"/>
2467- <assignedNode>slave</assignedNode>
2468+ <assignedNode>task</assignedNode>
2469 <canRoam>false</canRoam>
2470 <disabled>false</disabled>
2471 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2472@@ -103,19 +101,10 @@
2473 <concurrentBuild>true</concurrentBuild>
2474 <builders>
2475 <hudson.tasks.Shell>
2476- <command>#!/bin/bash -e
2477-# Ensure we have a checkout of UOSCI code
2478-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2479- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2480- rm -rf $OSCI_ROOT ||:
2481- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2482- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2483- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2484-fi
2485-</command>
2486- </hudson.tasks.Shell>
2487- <hudson.tasks.Shell>
2488- <command>${OSCI_ROOT}/job-parts/build_simulate.sh</command>
2489+ <command>#!/bin/bash -ue
2490+. ~/oscirc
2491+~/osci-repo-boot-clean.sh
2492+${OSCI_ROOT}/run/job-parts/build_simulate.sh</command>
2493 </hudson.tasks.Shell>
2494 </builders>
2495 <publishers>
2496@@ -129,7 +118,7 @@
2497 </hudson.tasks.ArtifactArchiver>
2498 </publishers>
2499 <buildWrappers>
2500- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2501+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2502 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2503 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;},${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} for ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;}</template>
2504 <runAtStart>true</runAtStart>
2505
2506=== renamed directory 'deployment/jobs/sim_sub_d' => 'deploy/jobs-static/sim_sub_d'
2507=== modified file 'deploy/jobs-static/sim_sub_d/config.xml'
2508--- deployment/jobs/sim_sub_d/config.xml 2016-10-04 02:28:38 +0000
2509+++ deploy/jobs-static/sim_sub_d/config.xml 2017-05-27 00:22:36 +0000
2510@@ -81,11 +81,9 @@
2511 </parameterDefinitions>
2512 </hudson.model.ParametersDefinitionProperty>
2513 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2514- <maxConcurrentPerNode>1</maxConcurrentPerNode>
2515- <maxConcurrentTotal>6</maxConcurrentTotal>
2516- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2517- <string>false</string>
2518- </categories>
2519+ <maxConcurrentPerNode>4</maxConcurrentPerNode>
2520+ <maxConcurrentTotal>4</maxConcurrentTotal>
2521+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2522 <throttleEnabled>true</throttleEnabled>
2523 <throttleOption>project</throttleOption>
2524 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2525@@ -94,7 +92,7 @@
2526 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2527 </properties>
2528 <scm class="hudson.scm.NullSCM"/>
2529- <assignedNode>slave</assignedNode>
2530+ <assignedNode>task</assignedNode>
2531 <canRoam>false</canRoam>
2532 <disabled>false</disabled>
2533 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2534@@ -103,19 +101,10 @@
2535 <concurrentBuild>true</concurrentBuild>
2536 <builders>
2537 <hudson.tasks.Shell>
2538- <command>#!/bin/bash -e
2539-# Ensure we have a checkout of UOSCI code
2540-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2541- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2542- rm -rf $OSCI_ROOT ||:
2543- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2544- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2545- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2546-fi
2547-</command>
2548- </hudson.tasks.Shell>
2549- <hudson.tasks.Shell>
2550- <command>${OSCI_ROOT}/job-parts/build_simulate.sh</command>
2551+ <command>#!/bin/bash -ue
2552+. ~/oscirc
2553+~/osci-repo-boot.sh
2554+${OSCI_ROOT}/run/job-parts/build_simulate.sh</command>
2555 </hudson.tasks.Shell>
2556 </builders>
2557 <publishers>
2558@@ -129,7 +118,7 @@
2559 </hudson.tasks.ArtifactArchiver>
2560 </publishers>
2561 <buildWrappers>
2562- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2563+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2564 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2565 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;},${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} for ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;}</template>
2566 <runAtStart>true</runAtStart>
2567
2568=== renamed directory 'deployment/jobs/sim_sub_e' => 'deploy/jobs-static/sim_sub_e'
2569=== modified file 'deploy/jobs-static/sim_sub_e/config.xml'
2570--- deployment/jobs/sim_sub_e/config.xml 2016-10-04 02:28:38 +0000
2571+++ deploy/jobs-static/sim_sub_e/config.xml 2017-05-27 00:22:36 +0000
2572@@ -66,11 +66,9 @@
2573 </parameterDefinitions>
2574 </hudson.model.ParametersDefinitionProperty>
2575 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2576- <maxConcurrentPerNode>1</maxConcurrentPerNode>
2577- <maxConcurrentTotal>6</maxConcurrentTotal>
2578- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2579- <string>false</string>
2580- </categories>
2581+ <maxConcurrentPerNode>24</maxConcurrentPerNode>
2582+ <maxConcurrentTotal>24</maxConcurrentTotal>
2583+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2584 <throttleEnabled>true</throttleEnabled>
2585 <throttleOption>project</throttleOption>
2586 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2587@@ -79,7 +77,7 @@
2588 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2589 </properties>
2590 <scm class="hudson.scm.NullSCM"/>
2591- <assignedNode>slave</assignedNode>
2592+ <assignedNode>task</assignedNode>
2593 <canRoam>false</canRoam>
2594 <disabled>false</disabled>
2595 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2596@@ -88,19 +86,10 @@
2597 <concurrentBuild>true</concurrentBuild>
2598 <builders>
2599 <hudson.tasks.Shell>
2600- <command>#!/bin/bash -e
2601-# Ensure we have a checkout of UOSCI code
2602-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2603- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2604- rm -rf $OSCI_ROOT ||:
2605- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2606- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2607- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2608-fi
2609-</command>
2610- </hudson.tasks.Shell>
2611- <hudson.tasks.Shell>
2612- <command>${OSCI_ROOT}/job-parts/build_simulate.sh</command>
2613+ <command>#!/bin/bash -ue
2614+. ~/oscirc
2615+~/osci-repo-boot-clean.sh
2616+${OSCI_ROOT}/run/job-parts/build_simulate.sh</command>
2617 </hudson.tasks.Shell>
2618 </builders>
2619 <publishers>
2620@@ -114,7 +103,7 @@
2621 </hudson.tasks.ArtifactArchiver>
2622 </publishers>
2623 <buildWrappers>
2624- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2625+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2626 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2627 <template>#${BUILD_NUMBER}</template>
2628 <runAtStart>true</runAtStart>
2629
2630=== renamed directory 'deployment/jobs/test_charm_amulet_full' => 'deploy/jobs-static/test_charm_amulet_full'
2631=== modified file 'deploy/jobs-static/test_charm_amulet_full/config.xml'
2632--- deployment/jobs/test_charm_amulet_full/config.xml 2016-12-09 21:50:02 +0000
2633+++ deploy/jobs-static/test_charm_amulet_full/config.xml 2017-05-27 00:22:36 +0000
2634@@ -122,10 +122,8 @@
2635 </hudson.model.ParametersDefinitionProperty>
2636 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2637 <maxConcurrentPerNode>1</maxConcurrentPerNode>
2638- <maxConcurrentTotal>8</maxConcurrentTotal>
2639- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2640- <string>false</string>
2641- </categories>
2642+ <maxConcurrentTotal>5</maxConcurrentTotal>
2643+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2644 <throttleEnabled>true</throttleEnabled>
2645 <throttleOption>project</throttleOption>
2646 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2647@@ -143,21 +141,15 @@
2648 <concurrentBuild>true</concurrentBuild>
2649 <builders>
2650 <hudson.tasks.Shell>
2651- <command>#!/bin/bash -e
2652-# Ensure we have a checkout of UOSCI code
2653-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2654- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2655- rm -rf $OSCI_ROOT ||:
2656- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2657- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2658- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2659-fi
2660+ <command>#!/bin/bash -ue
2661+. ~/oscirc
2662+~/osci-repo-boot-clean.sh
2663 </command>
2664 </hudson.tasks.Shell>
2665 <hudson.tasks.Shell>
2666 <command>#!/bin/bash -e
2667-${OSCI_ROOT}/job-parts/build_amulet_test.sh
2668-</command>
2669+. ~/oscirc
2670+${OSCI_ROOT}/run/job-parts/build_amulet_test.sh</command>
2671 </hudson.tasks.Shell>
2672 </builders>
2673 <publishers>
2674@@ -171,7 +163,7 @@
2675 </hudson.tasks.ArtifactArchiver>
2676 </publishers>
2677 <buildWrappers>
2678- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2679+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2680 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2681 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_BRANCH&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
2682 <runAtStart>true</runAtStart>
2683
2684=== renamed directory 'deployment/jobs/test_charm_amulet_smoke' => 'deploy/jobs-static/test_charm_amulet_smoke'
2685=== modified file 'deploy/jobs-static/test_charm_amulet_smoke/config.xml'
2686--- deployment/jobs/test_charm_amulet_smoke/config.xml 2016-06-15 04:31:10 +0000
2687+++ deploy/jobs-static/test_charm_amulet_smoke/config.xml 2017-05-27 00:22:36 +0000
2688@@ -2,14 +2,20 @@
2689 <project>
2690 <actions/>
2691 <description></description>
2692- <logRotator class="hudson.tasks.LogRotator">
2693- <daysToKeep>-1</daysToKeep>
2694- <numToKeep>-1</numToKeep>
2695- <artifactDaysToKeep>30</artifactDaysToKeep>
2696- <artifactNumToKeep>500</artifactNumToKeep>
2697- </logRotator>
2698 <keepDependencies>false</keepDependencies>
2699 <properties>
2700+ <jenkins.model.BuildDiscarderProperty>
2701+ <strategy class="hudson.tasks.LogRotator">
2702+ <daysToKeep>-1</daysToKeep>
2703+ <numToKeep>-1</numToKeep>
2704+ <artifactDaysToKeep>30</artifactDaysToKeep>
2705+ <artifactNumToKeep>500</artifactNumToKeep>
2706+ </strategy>
2707+ </jenkins.model.BuildDiscarderProperty>
2708+ <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
2709+ <autoRebuild>false</autoRebuild>
2710+ <rebuildDisabled>false</rebuildDisabled>
2711+ </com.sonyericsson.rebuild.RebuildSettings>
2712 <hudson.model.ParametersDefinitionProperty>
2713 <parameterDefinitions>
2714 <hudson.model.StringParameterDefinition>
2715@@ -122,15 +128,14 @@
2716 </hudson.model.StringParameterDefinition>
2717 </parameterDefinitions>
2718 </hudson.model.ParametersDefinitionProperty>
2719- <com.sonyericsson.rebuild.RebuildSettings plugin="rebuild@1.25">
2720- <autoRebuild>false</autoRebuild>
2721- <rebuildDisabled>false</rebuildDisabled>
2722- </com.sonyericsson.rebuild.RebuildSettings>
2723- <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.8.4">
2724+ <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2725 <maxConcurrentPerNode>1</maxConcurrentPerNode>
2726 <maxConcurrentTotal>5</maxConcurrentTotal>
2727+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2728 <throttleEnabled>true</throttleEnabled>
2729 <throttleOption>project</throttleOption>
2730+ <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2731+ <paramsToUseForLimit></paramsToUseForLimit>
2732 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
2733 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2734 </properties>
2735@@ -144,21 +149,16 @@
2736 <concurrentBuild>true</concurrentBuild>
2737 <builders>
2738 <hudson.tasks.Shell>
2739+ <command>#!/bin/bash -ue
2740+. ~/oscirc
2741+~/osci-repo-boot-clean.sh</command>
2742+ </hudson.tasks.Shell>
2743+ <hudson.tasks.Shell>
2744 <command>#!/bin/bash -e
2745-# Ensure we have a checkout of UOSCI code
2746-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2747- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2748- rm -rf $OSCI_ROOT ||:
2749- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2750- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2751- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2752-fi
2753+. ~/oscirc
2754+${OSCI_ROOT}/run/job-parts/build_amulet_smoke.sh
2755 </command>
2756 </hudson.tasks.Shell>
2757- <hudson.tasks.Shell>
2758- <command>#!/bin/bash -e
2759-${OSCI_ROOT}/job-parts/build_amulet_smoke.sh</command>
2760- </hudson.tasks.Shell>
2761 </builders>
2762 <publishers>
2763 <hudson.tasks.ArtifactArchiver>
2764@@ -167,12 +167,15 @@
2765 <onlyIfSuccessful>false</onlyIfSuccessful>
2766 <fingerprint>false</fingerprint>
2767 <defaultExcludes>true</defaultExcludes>
2768+ <caseSensitive>true</caseSensitive>
2769 </hudson.tasks.ArtifactArchiver>
2770 </publishers>
2771 <buildWrappers>
2772- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.6"/>
2773- <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.3">
2774+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2775+ <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2776 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_BRANCH&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
2777+ <runAtStart>true</runAtStart>
2778+ <runAtEnd>true</runAtEnd>
2779 </org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
2780 </buildWrappers>
2781 </project>
2782\ No newline at end of file
2783
2784=== renamed directory 'deployment/jobs/test_charm_lint' => 'deploy/jobs-static/test_charm_lint'
2785=== modified file 'deploy/jobs-static/test_charm_lint/config.xml'
2786--- deployment/jobs/test_charm_lint/config.xml 2016-09-21 19:36:25 +0000
2787+++ deploy/jobs-static/test_charm_lint/config.xml 2017-05-27 00:22:36 +0000
2788@@ -121,8 +121,8 @@
2789 </parameterDefinitions>
2790 </hudson.model.ParametersDefinitionProperty>
2791 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2792- <maxConcurrentPerNode>1</maxConcurrentPerNode>
2793- <maxConcurrentTotal>8</maxConcurrentTotal>
2794+ <maxConcurrentPerNode>8</maxConcurrentPerNode>
2795+ <maxConcurrentTotal>24</maxConcurrentTotal>
2796 <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2797 <throttleEnabled>true</throttleEnabled>
2798 <throttleOption>project</throttleOption>
2799@@ -132,7 +132,7 @@
2800 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2801 </properties>
2802 <scm class="hudson.scm.NullSCM"/>
2803- <assignedNode>slave||lab</assignedNode>
2804+ <assignedNode>task</assignedNode>
2805 <canRoam>false</canRoam>
2806 <disabled>false</disabled>
2807 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2808@@ -141,20 +141,11 @@
2809 <concurrentBuild>true</concurrentBuild>
2810 <builders>
2811 <hudson.tasks.Shell>
2812- <command>#!/bin/bash -e
2813-# Ensure we have a checkout of UOSCI code
2814-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2815- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2816- rm -rf $OSCI_ROOT ||:
2817- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2818- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2819- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2820-fi
2821-</command>
2822- </hudson.tasks.Shell>
2823- <hudson.tasks.Shell>
2824- <command>#!/bin/bash -e
2825-${OSCI_ROOT}/job-parts/build_lint_test.sh
2826+ <command>#!/bin/bash -ue
2827+. ~/oscirc
2828+~/osci-repo-boot-clean.sh
2829+${OSCI_ROOT}/run/job-parts/build_lint_test.sh
2830+
2831 </command>
2832 </hudson.tasks.Shell>
2833 </builders>
2834@@ -169,7 +160,7 @@
2835 </hudson.tasks.ArtifactArchiver>
2836 </publishers>
2837 <buildWrappers>
2838- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
2839+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
2840 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
2841 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_BRANCH&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
2842 <runAtStart>true</runAtStart>
2843
2844=== renamed directory 'deployment/jobs/test_charm_pipeline' => 'deploy/jobs-static/test_charm_pipeline'
2845=== modified file 'deploy/jobs-static/test_charm_pipeline/config.xml'
2846--- deployment/jobs/test_charm_pipeline/config.xml 2016-12-09 21:50:02 +0000
2847+++ deploy/jobs-static/test_charm_pipeline/config.xml 2017-05-27 00:22:36 +0000
2848@@ -14,8 +14,8 @@
2849 &lt;li&gt;(test_charm_unit + test_charm_lint)&lt;/li&gt;&#xd;
2850 &lt;li&gt;test_charm_single&lt;/li&gt;&#xd;
2851 &lt;li&gt;test_charm_amulet_smoke&lt;/li&gt;&#xd;
2852- &lt;li&gt;WIP!: test_charm_amulet_full&lt;/li&gt;&#xd;
2853- &lt;li&gt;artiface collection&lt;/li&gt;&#xd;
2854+ &lt;li&gt;test_charm_amulet_full&lt;/li&gt;&#xd;
2855+ &lt;li&gt;artifact collection&lt;/li&gt;&#xd;
2856 &lt;li&gt;gerrit review posting and/or report upload to bucket&lt;/li&gt;&#xd;
2857 &lt;/ol&gt;</description>
2858 <keepDependencies>false</keepDependencies>
2859@@ -117,27 +117,24 @@
2860 </parameterDefinitions>
2861 </hudson.model.ParametersDefinitionProperty>
2862 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
2863- <maxConcurrentPerNode>1</maxConcurrentPerNode>
2864- <maxConcurrentTotal>8</maxConcurrentTotal>
2865- <categories class="java.util.concurrent.CopyOnWriteArrayList">
2866- <string>false</string>
2867- </categories>
2868+ <maxConcurrentPerNode>8</maxConcurrentPerNode>
2869+ <maxConcurrentTotal>12</maxConcurrentTotal>
2870+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
2871 <throttleEnabled>true</throttleEnabled>
2872 <throttleOption>project</throttleOption>
2873 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
2874 <paramsToUseForLimit></paramsToUseForLimit>
2875- <configVersion>1</configVersion>
2876 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
2877 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
2878 </properties>
2879 <scm class="hudson.scm.NullSCM"/>
2880- <assignedNode>slave</assignedNode>
2881+ <assignedNode>task</assignedNode>
2882 <canRoam>false</canRoam>
2883 <disabled>false</disabled>
2884 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
2885 <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
2886 <triggers>
2887- <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.18.3">
2888+ <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.23.1">
2889 <spec></spec>
2890 <gerritProjects>
2891 <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject>
2892@@ -166,6 +163,7 @@
2893 <dependencyJobsNames></dependencyJobsNames>
2894 <commitMessageParameterMode>BASE64</commitMessageParameterMode>
2895 <changeSubjectParameterMode>PLAIN</changeSubjectParameterMode>
2896+ <commentTextParameterMode>PLAIN</commentTextParameterMode>
2897 <buildStartMessage></buildStartMessage>
2898 <buildFailureMessage></buildFailureMessage>
2899 <buildSuccessfulMessage></buildSuccessfulMessage>
2900@@ -198,29 +196,22 @@
2901 <concurrentBuild>true</concurrentBuild>
2902 <builders>
2903 <hudson.tasks.Shell>
2904- <command>#!/bin/bash -e
2905-# Ensure we have a checkout of UOSCI code
2906-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
2907- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
2908- rm -rf $OSCI_ROOT ||:
2909- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
2910- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
2911- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
2912-fi</command>
2913+ <command>#!/bin/bash -ue
2914+. ~/oscirc
2915+~/osci-repo-boot-clean.sh</command>
2916 </hudson.tasks.Shell>
2917 <hudson.tasks.Shell>
2918- <command>env | egrep &quot;BUILD|JOB_|GERRIT|UOSCI|HUDSON|JENKINS|WORKSPACE&quot; | sort</command>
2919+ <command># env | egrep &quot;BUILD|JOB_|GERRIT|UOSCI|HUDSON|JENKINS|WORKSPACE&quot; | sort</command>
2920 </hudson.tasks.Shell>
2921 <org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder plugin="conditional-buildstep@1.3.5">
2922 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
2923 <runCondition class="org.jenkins_ci.plugins.run_condition.core.AlwaysRun" plugin="run-condition@1.0"/>
2924 <conditionalbuilders>
2925 <hudson.tasks.Shell>
2926- <command>#!/bin/bash -e
2927-#
2928+ <command>#!/bin/bash -ue
2929 # Inspect repo and prescribe things to do
2930-
2931-${OSCI_ROOT}/job-parts/build_prescribe.sh</command>
2932+. ~/oscirc
2933+${OSCI_ROOT}/run/job-parts/build_prescribe.sh</command>
2934 </hudson.tasks.Shell>
2935 </conditionalbuilders>
2936 </org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder>
2937@@ -241,7 +232,7 @@
2938 </bestResult>
2939 </runCondition>
2940 <conditionalbuilders>
2941- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
2942+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
2943 <configs>
2944 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
2945 <configs>
2946@@ -250,6 +241,7 @@
2947 <projects>test_charm_lint,test_charm_unit</projects>
2948 <condition>ALWAYS</condition>
2949 <triggerWithNoParameters>false</triggerWithNoParameters>
2950+ <triggerFromChildProjects>false</triggerFromChildProjects>
2951 <block>
2952 <unstableThreshold>
2953 <name>UNSTABLE</name>
2954@@ -269,10 +261,11 @@
2955 </configs>
2956 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
2957 <hudson.tasks.Shell>
2958- <command>#!/bin/bash -e
2959-env | grep TRIGGERED_BUILD
2960-wget ${JENKINS_URL}job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt
2961-wget ${JENKINS_URL}job/test_charm_unit/$TRIGGERED_BUILD_NUMBER_test_charm_unit/consoleText -O $WORKSPACE/consoleText.test_charm_unit_${TRIGGERED_BUILD_NUMBER_test_charm_unit}.txt</command>
2962+ <command>#!/bin/bash -ue
2963+. ~/oscirc
2964+# env | grep TRIGGERED_BUILD
2965+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt
2966+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_unit/$TRIGGERED_BUILD_NUMBER_test_charm_unit/consoleText -O $WORKSPACE/consoleText.test_charm_unit_${TRIGGERED_BUILD_NUMBER_test_charm_unit}.txt</command>
2967 </hudson.tasks.Shell>
2968 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
2969 <project>test_charm_lint</project>
2970@@ -305,7 +298,7 @@
2971 <baseDir class="org.jenkins_ci.plugins.run_condition.common.BaseDirectory$Workspace"/>
2972 </runCondition>
2973 <conditionalbuilders>
2974- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
2975+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
2976 <configs>
2977 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
2978 <configs>
2979@@ -314,6 +307,7 @@
2980 <projects>charm_build</projects>
2981 <condition>ALWAYS</condition>
2982 <triggerWithNoParameters>false</triggerWithNoParameters>
2983+ <triggerFromChildProjects>false</triggerFromChildProjects>
2984 <block>
2985 <unstableThreshold>
2986 <name>UNSTABLE</name>
2987@@ -333,9 +327,10 @@
2988 </configs>
2989 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
2990 <hudson.tasks.Shell>
2991- <command>#!/bin/bash -e
2992-env | grep TRIGGERED_BUILD
2993-wget ${JENKINS_URL}job/charm_build/$TRIGGERED_BUILD_NUMBER_charm_build/consoleText -O $WORKSPACE/consoleText.charm_build_${TRIGGERED_BUILD_NUMBER_charm_build}.txt</command>
2994+ <command>#!/bin/bash -ue
2995+. ~/oscirc
2996+# env | grep TRIGGERED_BUILD
2997+wget http://${OSCI_MASTER_IP}:8080/job/charm_build/$TRIGGERED_BUILD_NUMBER_charm_build/consoleText -O $WORKSPACE/consoleText.charm_build_${TRIGGERED_BUILD_NUMBER_charm_build}.txt</command>
2998 </hudson.tasks.Shell>
2999 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3000 <project>charm_build</project>
3001@@ -358,7 +353,7 @@
3002 <baseDir class="org.jenkins_ci.plugins.run_condition.common.BaseDirectory$Workspace"/>
3003 </runCondition>
3004 <conditionalbuilders>
3005- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3006+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3007 <configs>
3008 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3009 <configs>
3010@@ -373,6 +368,7 @@
3011 <projects>test_charm_lint</projects>
3012 <condition>ALWAYS</condition>
3013 <triggerWithNoParameters>false</triggerWithNoParameters>
3014+ <triggerFromChildProjects>false</triggerFromChildProjects>
3015 <block>
3016 <unstableThreshold>
3017 <name>UNSTABLE</name>
3018@@ -392,9 +388,10 @@
3019 </configs>
3020 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3021 <hudson.tasks.Shell>
3022- <command>#!/bin/bash -e
3023-env | grep TRIGGERED_BUILD
3024-wget ${JENKINS_URL}job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt</command>
3025+ <command>#!/bin/bash -ue
3026+. ~/oscirc
3027+# env | grep TRIGGERED_BUILD
3028+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt</command>
3029 </hudson.tasks.Shell>
3030 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3031 <project>test_charm_lint</project>
3032@@ -438,7 +435,7 @@
3033 </conditions>
3034 </runCondition>
3035 <conditionalbuilders>
3036- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3037+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3038 <configs>
3039 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3040 <configs>
3041@@ -453,6 +450,7 @@
3042 <projects>test_charm_single</projects>
3043 <condition>ALWAYS</condition>
3044 <triggerWithNoParameters>false</triggerWithNoParameters>
3045+ <triggerFromChildProjects>false</triggerFromChildProjects>
3046 <block>
3047 <unstableThreshold>
3048 <name>UNSTABLE</name>
3049@@ -472,9 +470,10 @@
3050 </configs>
3051 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3052 <hudson.tasks.Shell>
3053- <command>#!/bin/bash -e
3054-env | grep TRIGGERED_BUILD
3055-wget ${JENKINS_URL}job/test_charm_single/$TRIGGERED_BUILD_NUMBER_test_charm_single/consoleText -O $WORKSPACE/consoleText.test_charm_single_${TRIGGERED_BUILD_NUMBER_test_charm_single}.txt</command>
3056+ <command>#!/bin/bash -ue
3057+. ~/oscirc
3058+# env | grep TRIGGERED_BUILD
3059+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_single/$TRIGGERED_BUILD_NUMBER_test_charm_single/consoleText -O $WORKSPACE/consoleText.test_charm_single_${TRIGGERED_BUILD_NUMBER_test_charm_single}.txt</command>
3060 </hudson.tasks.Shell>
3061 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3062 <project>test_charm_single</project>
3063@@ -518,7 +517,7 @@
3064 </conditions>
3065 </runCondition>
3066 <conditionalbuilders>
3067- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3068+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3069 <configs>
3070 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3071 <configs>
3072@@ -533,6 +532,7 @@
3073 <projects>test_charm_amulet_smoke</projects>
3074 <condition>ALWAYS</condition>
3075 <triggerWithNoParameters>false</triggerWithNoParameters>
3076+ <triggerFromChildProjects>false</triggerFromChildProjects>
3077 <block>
3078 <unstableThreshold>
3079 <name>UNSTABLE</name>
3080@@ -552,9 +552,10 @@
3081 </configs>
3082 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3083 <hudson.tasks.Shell>
3084- <command>#!/bin/bash -e
3085-env | grep TRIGGERED_BUILD
3086-wget ${JENKINS_URL}job/test_charm_amulet_smoke/$TRIGGERED_BUILD_NUMBER_test_charm_amulet_smoke/consoleText -O $WORKSPACE/consoleText.test_charm_amulet_smoke_${TRIGGERED_BUILD_NUMBER_test_charm_amulet_smoke}.txt</command>
3087+ <command>#!/bin/bash -ue
3088+. ~/oscirc
3089+# env | grep TRIGGERED_BUILD
3090+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_amulet_smoke/$TRIGGERED_BUILD_NUMBER_test_charm_amulet_smoke/consoleText -O $WORKSPACE/consoleText.test_charm_amulet_smoke_${TRIGGERED_BUILD_NUMBER_test_charm_amulet_smoke}.txt</command>
3091 </hudson.tasks.Shell>
3092 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3093 <project>test_charm_amulet_smoke</project>
3094@@ -585,9 +586,10 @@
3095 </bestResult>
3096 </condition>
3097 <buildStep class="hudson.tasks.Shell">
3098- <command>#!/bin/bash -e
3099+ <command>#!/bin/bash -ue
3100+. ~/oscirc
3101 export UOSCI_GERRIT_VERDICT=&quot;SUCCESS&quot;
3102-${OSCI_ROOT}/job-parts/part_gerrit_review.sh
3103+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh
3104 </command>
3105 </buildStep>
3106 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
3107@@ -608,9 +610,10 @@
3108 </bestResult>
3109 </condition>
3110 <buildStep class="hudson.tasks.Shell">
3111- <command>#!/bin/bash -e
3112+ <command>#!/bin/bash -ue
3113+. ~/oscirc
3114 export UOSCI_GERRIT_VERDICT=&quot;FAILURE&quot;
3115-${OSCI_ROOT}/job-parts/part_gerrit_review.sh
3116+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh
3117 </command>
3118 </buildStep>
3119 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
3120@@ -627,12 +630,12 @@
3121 </hudson.tasks.ArtifactArchiver>
3122 </publishers>
3123 <buildWrappers>
3124- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
3125+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
3126 <deleteDirs>false</deleteDirs>
3127 <cleanupParameter></cleanupParameter>
3128 <externalDelete></externalDelete>
3129 </hudson.plugins.ws__cleanup.PreBuildCleanup>
3130- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
3131+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
3132 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
3133 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_BRANCH&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
3134 <runAtStart>true</runAtStart>
3135
3136=== renamed directory 'deployment/jobs/test_charm_pipeline_amulet_full' => 'deploy/jobs-static/test_charm_pipeline_amulet_full'
3137=== modified file 'deploy/jobs-static/test_charm_pipeline_amulet_full/config.xml'
3138--- deployment/jobs/test_charm_pipeline_amulet_full/config.xml 2016-12-09 21:50:02 +0000
3139+++ deploy/jobs-static/test_charm_pipeline_amulet_full/config.xml 2017-05-27 00:22:36 +0000
3140@@ -116,27 +116,24 @@
3141 </parameterDefinitions>
3142 </hudson.model.ParametersDefinitionProperty>
3143 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
3144- <maxConcurrentPerNode>1</maxConcurrentPerNode>
3145- <maxConcurrentTotal>6</maxConcurrentTotal>
3146- <categories class="java.util.concurrent.CopyOnWriteArrayList">
3147- <string>false</string>
3148- </categories>
3149+ <maxConcurrentPerNode>8</maxConcurrentPerNode>
3150+ <maxConcurrentTotal>12</maxConcurrentTotal>
3151+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
3152 <throttleEnabled>true</throttleEnabled>
3153 <throttleOption>project</throttleOption>
3154 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
3155 <paramsToUseForLimit></paramsToUseForLimit>
3156- <configVersion>1</configVersion>
3157 </hudson.plugins.throttleconcurrents.ThrottleJobProperty>
3158 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
3159 </properties>
3160 <scm class="hudson.scm.NullSCM"/>
3161- <assignedNode>slave</assignedNode>
3162+ <assignedNode>task</assignedNode>
3163 <canRoam>false</canRoam>
3164 <disabled>false</disabled>
3165 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
3166 <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
3167 <triggers>
3168- <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.18.3">
3169+ <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger plugin="gerrit-trigger@2.23.1">
3170 <spec></spec>
3171 <gerritProjects>
3172 <com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.GerritProject>
3173@@ -165,6 +162,7 @@
3174 <dependencyJobsNames></dependencyJobsNames>
3175 <commitMessageParameterMode>BASE64</commitMessageParameterMode>
3176 <changeSubjectParameterMode>PLAIN</changeSubjectParameterMode>
3177+ <commentTextParameterMode>PLAIN</commentTextParameterMode>
3178 <buildStartMessage></buildStartMessage>
3179 <buildFailureMessage></buildFailureMessage>
3180 <buildSuccessfulMessage></buildSuccessfulMessage>
3181@@ -186,18 +184,12 @@
3182 <concurrentBuild>true</concurrentBuild>
3183 <builders>
3184 <hudson.tasks.Shell>
3185- <command>#!/bin/bash -e
3186-# Ensure we have a checkout of UOSCI code
3187-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
3188- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
3189- rm -rf $OSCI_ROOT ||:
3190- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
3191- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
3192- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
3193-fi</command>
3194+ <command>#!/bin/bash -ue
3195+. ~/oscirc
3196+~/osci-repo-boot-clean.sh</command>
3197 </hudson.tasks.Shell>
3198 <hudson.tasks.Shell>
3199- <command>env | egrep &quot;BUILD|JOB_|GERRIT|UOSCI|HUDSON|JENKINS|WORKSPACE&quot; | sort</command>
3200+ <command># env | egrep &quot;BUILD|JOB_|GERRIT|UOSCI|HUDSON|JENKINS|WORKSPACE&quot; | sort</command>
3201 </hudson.tasks.Shell>
3202 <org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder plugin="conditional-buildstep@1.3.5">
3203 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
3204@@ -205,10 +197,11 @@
3205 <conditionalbuilders>
3206 <hudson.tasks.Shell>
3207 <command>#!/bin/bash -e
3208+. ~/oscirc
3209 #
3210 # Inspect repo and prescribe things to do
3211-
3212-${OSCI_ROOT}/job-parts/build_prescribe.sh</command>
3213+. ~/oscirc
3214+${OSCI_ROOT}/run/job-parts/build_prescribe.sh</command>
3215 </hudson.tasks.Shell>
3216 </conditionalbuilders>
3217 </org.jenkinsci.plugins.conditionalbuildstep.ConditionalBuilder>
3218@@ -229,7 +222,7 @@
3219 </bestResult>
3220 </runCondition>
3221 <conditionalbuilders>
3222- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3223+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3224 <configs>
3225 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3226 <configs>
3227@@ -238,6 +231,7 @@
3228 <projects>test_charm_lint,test_charm_unit</projects>
3229 <condition>ALWAYS</condition>
3230 <triggerWithNoParameters>false</triggerWithNoParameters>
3231+ <triggerFromChildProjects>false</triggerFromChildProjects>
3232 <block>
3233 <unstableThreshold>
3234 <name>UNSTABLE</name>
3235@@ -258,9 +252,10 @@
3236 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3237 <hudson.tasks.Shell>
3238 <command>#!/bin/bash -e
3239-env | grep TRIGGERED_BUILD
3240-wget ${JENKINS_URL}job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt
3241-wget ${JENKINS_URL}job/test_charm_unit/$TRIGGERED_BUILD_NUMBER_test_charm_unit/consoleText -O $WORKSPACE/consoleText.test_charm_unit_${TRIGGERED_BUILD_NUMBER_test_charm_unit}.txt</command>
3242+. ~/oscirc
3243+# env | grep TRIGGERED_BUILD
3244+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt
3245+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_unit/$TRIGGERED_BUILD_NUMBER_test_charm_unit/consoleText -O $WORKSPACE/consoleText.test_charm_unit_${TRIGGERED_BUILD_NUMBER_test_charm_unit}.txt</command>
3246 </hudson.tasks.Shell>
3247 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3248 <project>test_charm_lint</project>
3249@@ -293,7 +288,7 @@
3250 <baseDir class="org.jenkins_ci.plugins.run_condition.common.BaseDirectory$Workspace"/>
3251 </runCondition>
3252 <conditionalbuilders>
3253- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3254+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3255 <configs>
3256 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3257 <configs>
3258@@ -302,6 +297,7 @@
3259 <projects>charm_build</projects>
3260 <condition>ALWAYS</condition>
3261 <triggerWithNoParameters>false</triggerWithNoParameters>
3262+ <triggerFromChildProjects>false</triggerFromChildProjects>
3263 <block>
3264 <unstableThreshold>
3265 <name>UNSTABLE</name>
3266@@ -322,8 +318,9 @@
3267 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3268 <hudson.tasks.Shell>
3269 <command>#!/bin/bash -e
3270-env | grep TRIGGERED_BUILD
3271-wget ${JENKINS_URL}job/charm_build/$TRIGGERED_BUILD_NUMBER_charm_build/consoleText -O $WORKSPACE/consoleText.charm_build_${TRIGGERED_BUILD_NUMBER_charm_build}.txt</command>
3272+. ~/oscirc
3273+# env | grep TRIGGERED_BUILD
3274+wget http://${OSCI_MASTER_IP}:8080/job/charm_build/$TRIGGERED_BUILD_NUMBER_charm_build/consoleText -O $WORKSPACE/consoleText.charm_build_${TRIGGERED_BUILD_NUMBER_charm_build}.txt</command>
3275 </hudson.tasks.Shell>
3276 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3277 <project>charm_build</project>
3278@@ -346,7 +343,7 @@
3279 <baseDir class="org.jenkins_ci.plugins.run_condition.common.BaseDirectory$Workspace"/>
3280 </runCondition>
3281 <conditionalbuilders>
3282- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3283+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3284 <configs>
3285 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3286 <configs>
3287@@ -361,6 +358,7 @@
3288 <projects>test_charm_lint</projects>
3289 <condition>ALWAYS</condition>
3290 <triggerWithNoParameters>false</triggerWithNoParameters>
3291+ <triggerFromChildProjects>false</triggerFromChildProjects>
3292 <block>
3293 <unstableThreshold>
3294 <name>UNSTABLE</name>
3295@@ -381,8 +379,9 @@
3296 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3297 <hudson.tasks.Shell>
3298 <command>#!/bin/bash -e
3299-env | grep TRIGGERED_BUILD
3300-wget ${JENKINS_URL}job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt</command>
3301+. ~/oscirc
3302+# env | grep TRIGGERED_BUILD
3303+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_lint/$TRIGGERED_BUILD_NUMBER_test_charm_lint/consoleText -O $WORKSPACE/consoleText.test_charm_lint_${TRIGGERED_BUILD_NUMBER_test_charm_lint}.txt</command>
3304 </hudson.tasks.Shell>
3305 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3306 <project>test_charm_lint</project>
3307@@ -426,7 +425,7 @@
3308 </conditions>
3309 </runCondition>
3310 <conditionalbuilders>
3311- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3312+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3313 <configs>
3314 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3315 <configs>
3316@@ -441,6 +440,7 @@
3317 <projects>test_charm_single</projects>
3318 <condition>ALWAYS</condition>
3319 <triggerWithNoParameters>false</triggerWithNoParameters>
3320+ <triggerFromChildProjects>false</triggerFromChildProjects>
3321 <block>
3322 <unstableThreshold>
3323 <name>UNSTABLE</name>
3324@@ -461,8 +461,9 @@
3325 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3326 <hudson.tasks.Shell>
3327 <command>#!/bin/bash -e
3328-env | grep TRIGGERED_BUILD
3329-wget ${JENKINS_URL}job/test_charm_single/$TRIGGERED_BUILD_NUMBER_test_charm_single/consoleText -O $WORKSPACE/consoleText.test_charm_single_${TRIGGERED_BUILD_NUMBER_test_charm_single}.txt</command>
3330+. ~/oscirc
3331+# env | grep TRIGGERED_BUILD
3332+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_single/$TRIGGERED_BUILD_NUMBER_test_charm_single/consoleText -O $WORKSPACE/consoleText.test_charm_single_${TRIGGERED_BUILD_NUMBER_test_charm_single}.txt</command>
3333 </hudson.tasks.Shell>
3334 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3335 <project>test_charm_single</project>
3336@@ -506,7 +507,7 @@
3337 </conditions>
3338 </runCondition>
3339 <conditionalbuilders>
3340- <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.32">
3341+ <hudson.plugins.parameterizedtrigger.TriggerBuilder plugin="parameterized-trigger@2.33">
3342 <configs>
3343 <hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig>
3344 <configs>
3345@@ -521,6 +522,7 @@
3346 <projects>test_charm_amulet_full</projects>
3347 <condition>ALWAYS</condition>
3348 <triggerWithNoParameters>false</triggerWithNoParameters>
3349+ <triggerFromChildProjects>false</triggerFromChildProjects>
3350 <block>
3351 <unstableThreshold>
3352 <name>UNSTABLE</name>
3353@@ -541,8 +543,9 @@
3354 </hudson.plugins.parameterizedtrigger.TriggerBuilder>
3355 <hudson.tasks.Shell>
3356 <command>#!/bin/bash -e
3357-env | grep TRIGGERED_BUILD
3358-wget ${JENKINS_URL}job/test_charm_amulet_full/$TRIGGERED_BUILD_NUMBER_test_charm_amulet_full/consoleText -O $WORKSPACE/consoleText.test_charm_amulet_full_${TRIGGERED_BUILD_NUMBER_test_charm_amulet_full}.txt</command>
3359+. ~/oscirc
3360+# env | grep TRIGGERED_BUILD
3361+wget http://${OSCI_MASTER_IP}:8080/job/test_charm_amulet_full/$TRIGGERED_BUILD_NUMBER_test_charm_amulet_full/consoleText -O $WORKSPACE/consoleText.test_charm_amulet_full_${TRIGGERED_BUILD_NUMBER_test_charm_amulet_full}.txt</command>
3362 </hudson.tasks.Shell>
3363 <hudson.plugins.copyartifact.CopyArtifact plugin="copyartifact@1.38.1">
3364 <project>test_charm_amulet_full</project>
3365@@ -574,8 +577,9 @@
3366 </condition>
3367 <buildStep class="hudson.tasks.Shell">
3368 <command>#!/bin/bash -e
3369+. ~/oscirc
3370 export UOSCI_GERRIT_VERDICT=&quot;SUCCESS&quot;
3371-${OSCI_ROOT}/job-parts/part_gerrit_review.sh
3372+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh
3373 </command>
3374 </buildStep>
3375 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
3376@@ -597,8 +601,9 @@
3377 </condition>
3378 <buildStep class="hudson.tasks.Shell">
3379 <command>#!/bin/bash -e
3380+. ~/oscirc
3381 export UOSCI_GERRIT_VERDICT=&quot;FAILURE&quot;
3382-${OSCI_ROOT}/job-parts/part_gerrit_review.sh
3383+${OSCI_ROOT}/run/job-parts/part_gerrit_review.sh
3384 </command>
3385 </buildStep>
3386 <runner class="org.jenkins_ci.plugins.run_condition.BuildStepRunner$Fail" plugin="run-condition@1.0"/>
3387@@ -615,12 +620,12 @@
3388 </hudson.tasks.ArtifactArchiver>
3389 </publishers>
3390 <buildWrappers>
3391- <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.30">
3392+ <hudson.plugins.ws__cleanup.PreBuildCleanup plugin="ws-cleanup@0.32">
3393 <deleteDirs>false</deleteDirs>
3394 <cleanupParameter></cleanupParameter>
3395 <externalDelete></externalDelete>
3396 </hudson.plugins.ws__cleanup.PreBuildCleanup>
3397- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
3398+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
3399 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
3400 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
3401 <runAtStart>true</runAtStart>
3402
3403=== renamed directory 'deployment/jobs/test_charm_single' => 'deploy/jobs-static/test_charm_single'
3404=== modified file 'deploy/jobs-static/test_charm_single/config.xml'
3405--- deployment/jobs/test_charm_single/config.xml 2016-12-09 21:50:02 +0000
3406+++ deploy/jobs-static/test_charm_single/config.xml 2017-05-27 00:22:36 +0000
3407@@ -127,10 +127,8 @@
3408 </hudson.model.ParametersDefinitionProperty>
3409 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
3410 <maxConcurrentPerNode>1</maxConcurrentPerNode>
3411- <maxConcurrentTotal>8</maxConcurrentTotal>
3412- <categories class="java.util.concurrent.CopyOnWriteArrayList">
3413- <string>false</string>
3414- </categories>
3415+ <maxConcurrentTotal>16</maxConcurrentTotal>
3416+ <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
3417 <throttleEnabled>true</throttleEnabled>
3418 <throttleOption>project</throttleOption>
3419 <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams>
3420@@ -139,7 +137,7 @@
3421 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
3422 </properties>
3423 <scm class="hudson.scm.NullSCM"/>
3424- <assignedNode>slave</assignedNode>
3425+ <assignedNode>slave||lab</assignedNode>
3426 <canRoam>false</canRoam>
3427 <disabled>false</disabled>
3428 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
3429@@ -148,21 +146,16 @@
3430 <concurrentBuild>true</concurrentBuild>
3431 <builders>
3432 <hudson.tasks.Shell>
3433- <command>#!/bin/bash -e
3434-# Ensure we have a checkout of UOSCI code
3435-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
3436- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
3437- rm -rf $OSCI_ROOT ||:
3438- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
3439- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
3440- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
3441-fi
3442+ <command>#!/bin/bash -ue
3443+. ~/oscirc
3444+~/osci-repo-boot-clean.sh</command>
3445+ </hudson.tasks.Shell>
3446+ <hudson.tasks.Shell>
3447+ <command>#!/bin/bash -ue
3448+. ~/oscirc
3449+${OSCI_ROOT}/run/job-parts/build_charm_single.sh
3450 </command>
3451 </hudson.tasks.Shell>
3452- <hudson.tasks.Shell>
3453- <command>#!/bin/bash -e
3454-${OSCI_ROOT}/job-parts/build_charm_single.sh</command>
3455- </hudson.tasks.Shell>
3456 </builders>
3457 <publishers>
3458 <hudson.tasks.ArtifactArchiver>
3459@@ -175,7 +168,7 @@
3460 </hudson.tasks.ArtifactArchiver>
3461 </publishers>
3462 <buildWrappers>
3463- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
3464+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
3465 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
3466 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_BRANCH&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
3467 <runAtStart>true</runAtStart>
3468
3469=== renamed directory 'deployment/jobs/test_charm_unit' => 'deploy/jobs-static/test_charm_unit'
3470=== modified file 'deploy/jobs-static/test_charm_unit/config.xml'
3471--- deployment/jobs/test_charm_unit/config.xml 2016-09-21 19:36:25 +0000
3472+++ deploy/jobs-static/test_charm_unit/config.xml 2017-05-27 00:22:36 +0000
3473@@ -121,8 +121,8 @@
3474 </parameterDefinitions>
3475 </hudson.model.ParametersDefinitionProperty>
3476 <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.9.0">
3477- <maxConcurrentPerNode>1</maxConcurrentPerNode>
3478- <maxConcurrentTotal>8</maxConcurrentTotal>
3479+ <maxConcurrentPerNode>8</maxConcurrentPerNode>
3480+ <maxConcurrentTotal>24</maxConcurrentTotal>
3481 <categories class="java.util.concurrent.CopyOnWriteArrayList"/>
3482 <throttleEnabled>true</throttleEnabled>
3483 <throttleOption>project</throttleOption>
3484@@ -132,7 +132,7 @@
3485 <org.jvnet.hudson.plugins.shelveproject.ShelveProjectProperty plugin="shelve-project-plugin@1.5"/>
3486 </properties>
3487 <scm class="hudson.scm.NullSCM"/>
3488- <assignedNode>slave||lab</assignedNode>
3489+ <assignedNode>task</assignedNode>
3490 <canRoam>false</canRoam>
3491 <disabled>false</disabled>
3492 <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
3493@@ -141,20 +141,10 @@
3494 <concurrentBuild>true</concurrentBuild>
3495 <builders>
3496 <hudson.tasks.Shell>
3497- <command>#!/bin/bash -e
3498-# Ensure we have a checkout of UOSCI code
3499-if [[ ! -f $OSCI_ROOT/job-parts/osci_job_common.sh ]]; then
3500- echo &quot; - Removing checkout @ $OSCI_ROOT if it exists&quot;
3501- rm -rf $OSCI_ROOT ||:
3502- echo &quot; + Creating new lightweight checkout of $OSCI_REPO @ $OSCI_ROOT.&quot;
3503- bzr co --lightweight $OSCI_REPO $OSCI_ROOT
3504- echo &quot;revno: $(bzr revno $OSCI_ROOT)&quot;
3505-fi
3506-</command>
3507- </hudson.tasks.Shell>
3508- <hudson.tasks.Shell>
3509- <command>#!/bin/bash -e
3510-${OSCI_ROOT}/job-parts/build_unit_test.sh
3511+ <command>#!/bin/bash -ue
3512+. ~/oscirc
3513+~/osci-repo-boot-clean.sh
3514+${OSCI_ROOT}/run/job-parts/build_unit_test.sh
3515 </command>
3516 </hudson.tasks.Shell>
3517 </builders>
3518@@ -169,7 +159,7 @@
3519 </hudson.tasks.ArtifactArchiver>
3520 </publishers>
3521 <buildWrappers>
3522- <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.4"/>
3523+ <hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.8.8"/>
3524 <org.jenkinsci.plugins.buildnamesetter.BuildNameSetter plugin="build-name-setter@1.6.5">
3525 <template>#${BUILD_NUMBER} ${ENV,var=&quot;GERRIT_PROJECT&quot;} ${ENV,var=&quot;GERRIT_BRANCH&quot;} ${ENV,var=&quot;GERRIT_CHANGE_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_NUMBER&quot;} ${ENV,var=&quot;GERRIT_PATCHSET_UPLOADER_NAME&quot;} ${ENV,var=&quot;BASE_NAME&quot;} ${ENV,var=&quot;GIT_BRANCH&quot;}</template>
3526 <runAtStart>true</runAtStart>
3527
3528=== added directory 'deploy/lib'
3529=== added file 'deploy/lib/__init__.py'
3530--- deploy/lib/__init__.py 1970-01-01 00:00:00 +0000
3531+++ deploy/lib/__init__.py 2017-05-27 00:22:36 +0000
3532@@ -0,0 +1,3 @@
3533+'''
3534+osci-deploy common
3535+'''
3536
3537=== added file 'deploy/lib/osci_deploy_helpers.py'
3538--- deploy/lib/osci_deploy_helpers.py 1970-01-01 00:00:00 +0000
3539+++ deploy/lib/osci_deploy_helpers.py 2017-05-27 00:22:36 +0000
3540@@ -0,0 +1,355 @@
3541+#!/usr/bin/env python3
3542+'''
3543+osci deploy helpers
3544+'''
3545+
3546+import logging
3547+import os
3548+import random
3549+import subprocess
3550+import string
3551+import yaml
3552+
3553+import keystoneauth1.identity.v3 as keystoneauth1
3554+import keystoneauth1.session as keystoneauth1_session
3555+from neutronclient.v2_0 import client as ne_client
3556+from jinja2 import Environment, FileSystemLoader
3557+
3558+
3559+JM_NAME_TEMPL = 'osci-master/{}'
3560+
3561+SLAVE_NAME_TEMPLATES = {
3562+ 'slave': 'osci-slave/{}', # jsv
3563+ 'lab': 'osci-lab/{}', # jlb
3564+ 'task': 'osci-task/{}' # jtk
3565+}
3566+
3567+
3568+def rnd_str(length=32):
3569+ '''Return lower-case alpha-numeric random string, a la pwgen.
3570+
3571+ :param length: number of characters to generate
3572+ :returns: lower-case alpha-numeric random string
3573+ '''
3574+ _str = ''
3575+ for _ in range(length):
3576+ _str += random.choice(string.lowercase + string.digits)
3577+ return _str
3578+
3579+
3580+def read_yaml(the_file):
3581+ '''Returns yaml data from provided file name
3582+
3583+ :param the_file: yaml file name to read
3584+ :returns: dictionary of yaml data from file
3585+ '''
3586+ if not os.path.exists(the_file):
3587+ raise ValueError('File not found: {}'.format(the_file))
3588+ with open(the_file) as yaml_file:
3589+ data = yaml.safe_load(yaml_file.read())
3590+ return data
3591+
3592+
3593+def write_yaml(data, the_file):
3594+ '''Save yaml data dictionary to a yaml file
3595+
3596+ :param the_file: yaml file name to write
3597+ :returns: dictionary of yaml data to write to file
3598+ '''
3599+ with open(the_file, 'w') as yaml_file:
3600+ yaml_file.write(yaml.dump(data, default_flow_style=False))
3601+
3602+
3603+def safe_mkdir(directory):
3604+ '''Make directory if it doesn't exist. a la mkdir -p
3605+ '''
3606+ if not os.path.exists(directory):
3607+ os.makedirs(directory)
3608+
3609+
3610+def render(source, target, context, templates_dir=None):
3611+ '''Render a template.
3612+
3613+ The `source` path, if not absolute, is relative to the `templates_dir`.
3614+
3615+ The `target` path should be absolute.
3616+
3617+ The context should be a dict containing the values to be replaced in
3618+ the template.
3619+
3620+ If omitted, `templates_dir` defaults to the current working dir.
3621+ '''
3622+
3623+ if templates_dir is None:
3624+ templates_dir = os.getcwd()
3625+ loader = Environment(loader=FileSystemLoader(templates_dir))
3626+ try:
3627+ source = source
3628+ template = loader.get_template(source)
3629+ except Exception:
3630+ logging.error('Could not load template {} from {}.'.format(
3631+ source, templates_dir))
3632+
3633+ safe_mkdir(templates_dir)
3634+ safe_mkdir(os.path.dirname(target))
3635+ with open(target, 'w') as _file:
3636+ _file.write(template.render(context))
3637+
3638+
3639+def get_juju_application_status(application):
3640+ '''Return juju application yaml status as dict.'''
3641+ return yaml.load(subprocess.check_output(
3642+ ['juju', 'status', application,
3643+ '--format', 'yaml']))
3644+
3645+
3646+def copy_file_to_juju_unit(local_file, remote_file, juju_unit, owner="jenkins",
3647+ group="jenkins", perms="640"):
3648+ '''Copy a local file to a juju unit and set its ownership and permissions.
3649+ '''
3650+
3651+ logging.info('Copying {} to {}:{}'.format(
3652+ local_file, juju_unit, remote_file))
3653+
3654+ subprocess.check_output(
3655+ ['juju', 'scp', local_file, '{}:{}'.format(juju_unit, remote_file)])
3656+
3657+ subprocess.check_output(
3658+ ['juju', 'ssh', juju_unit,
3659+ 'chown', '{}:{}'.format(owner, group), remote_file])
3660+
3661+ subprocess.check_output(
3662+ ['juju', 'ssh', juju_unit,
3663+ 'chmod', perms, remote_file])
3664+
3665+
3666+def copy_file_on_juju_unit(src_file, dest_file, juju_unit, owner="jenkins",
3667+ group="jenkins", perms="640"):
3668+ '''Copy a remote file from one location to another location on a juju unit
3669+ and set its ownership and permissions.
3670+ '''
3671+
3672+ logging.info('Copying {} to {} on {}'.format(
3673+ src_file, dest_file, juju_unit))
3674+
3675+ subprocess.check_output(
3676+ ['juju', 'ssh', juju_unit, 'sudo',
3677+ 'cp', '-fvp', src_file, dest_file])
3678+
3679+ subprocess.check_output(
3680+ ['juju', 'ssh', juju_unit, 'sudo',
3681+ 'chown', '{}:{}'.format(owner, group), dest_file])
3682+
3683+ subprocess.check_output(
3684+ ['juju', 'ssh', juju_unit, 'sudo',
3685+ 'chmod', perms, dest_file])
3686+
3687+
3688+# Old dup, deprecate?
3689+def XXX_get_num_units(yaml_data, outer, service):
3690+ '''Return num_units from service in yaml data from juju bundle file
3691+
3692+ :param yaml_data: yaml data from juju bundle file, as dict
3693+ :param outer: first, outer key in juju bundle yaml dict data
3694+ :param service: juju service to query for num units
3695+ :returns: value of num_units from juju bundle yaml dict data
3696+ '''
3697+ logging.debug('yaml data: {}'.format(yaml_data))
3698+ logging.debug('outer: {}'.format(outer))
3699+ logging.debug('service: {}'.format(service))
3700+ return yaml_data[outer]['services'][service]['num_units']
3701+
3702+
3703+def recursive_dict_key_search(data, key):
3704+ '''Recursively look for key match in dictionaries, return value.
3705+
3706+ :param data: dictionary data
3707+ :param key: key to find
3708+ :returns: value of found key
3709+ '''
3710+ if key in data:
3711+ return data[key]
3712+ for _, val in data.items():
3713+ if isinstance(val, dict):
3714+ ret = recursive_dict_key_search(val, key)
3715+ if ret is not None:
3716+ return ret
3717+
3718+
3719+def validate_config(data, expected):
3720+ '''Very light check for existence of non-empty data
3721+
3722+ :param data: dictionary of k:v pairs
3723+ :param expected: list of items to be validated as key in data
3724+ :returns: None if found as expected, key if not found or key
3725+ value is None
3726+ '''
3727+ for k in expected:
3728+ val = recursive_dict_key_search(data, k)
3729+ if val != '' and val != 'null' and val is not None:
3730+ logging.debug('found {}: {}'.format(k, val))
3731+ else:
3732+ return k
3733+
3734+
3735+def generate_list_of_cidrs(network, octet, quantity, bits):
3736+ '''Create a list of IPV4 networks in CIDR notation, generated by
3737+ incrementing a specified octet, the specified number of times.
3738+
3739+ :param network: network string (eg, 192.168.7.0 or 10.200.0.0, non-CIDR)
3740+ :param octet: octet to increment (eg, 1.2.3.4)
3741+ :param quantity: qty of networks to generate
3742+ :param bits: bits to fill, ie. the slash from CIDR notation
3743+ :returns: list of network string items in CIDR format
3744+ '''
3745+ nets = []
3746+ logging.debug('operating on: {}'.format(network.split('.')))
3747+ this_addr = ''
3748+ for i in range(0, quantity):
3749+ octs = network.split('.')
3750+ oct_new = int(octs[octet - 1]) + i
3751+ if oct_new > 254:
3752+ raise ValueError('IPv4 octec decimal cannot exceed 254! {} was '
3753+ 'attempted.'.format(oct_new))
3754+ octs[octet - 1] = str(oct_new)
3755+ this_addr = '.'.join(octs)
3756+ nets.append('{}/{}'.format(this_addr, bits))
3757+ logging.debug('networks to build ({}): {}'.format(len(nets), nets))
3758+ return nets
3759+
3760+
3761+def predict_juju_unit_names(conf_mod, jsv_qty, jtk_qty, jlb_qty):
3762+ '''Create a list of juju jenkins master and slave service
3763+ units, predictively.
3764+ '''
3765+ units = []
3766+ units.append(JM_NAME_TEMPL.format('0'))
3767+
3768+ for _templ_qty_map in [(SLAVE_NAME_TEMPLATES['slave'], jsv_qty),
3769+ (SLAVE_NAME_TEMPLATES['task'], jtk_qty),
3770+ (SLAVE_NAME_TEMPLATES['lab'], jlb_qty)]:
3771+ _templ = _templ_qty_map[0]
3772+ _qty = _templ_qty_map[1]
3773+ for unit in range(0, _qty):
3774+ units.append(_templ.format(unit))
3775+
3776+ return units
3777+
3778+
3779+def predict_model_names(conf_mod, jsv_qty, jtk_qty, jlb_qty):
3780+ '''Return a list of juju model names to create'''
3781+ models = []
3782+ models.append("{}-{}{}".format(conf_mod['model-name-base'],
3783+ conf_mod['master-abbrv'],
3784+ 0))
3785+
3786+ for _abbrv_qty_map in [(conf_mod['slave-abbrv'], jsv_qty),
3787+ (conf_mod['task-abbrv'], jtk_qty),
3788+ (conf_mod['lab-abbrv'], jlb_qty)]:
3789+ _abbrv = _abbrv_qty_map[0]
3790+ _qty = _abbrv_qty_map[1]
3791+ for unit in range(0, _qty):
3792+ models.append("{}-{}{}".format(conf_mod['model-name-base'],
3793+ _abbrv,
3794+ str(unit).zfill(2)))
3795+ return models
3796+
3797+
3798+# Unused, deprecate?:
3799+def XXX_floating_ip_is_available(neutron):
3800+ '''Check if a floating ip is available to the tenant, using the
3801+ provided neutron client object.
3802+
3803+ :param neutron: neutron client object
3804+ :returns: True if a floating IP is available to the tenant
3805+ '''
3806+ ips = neutron.list_floatingips(status='DOWN')['floatingips']
3807+
3808+ if len(ips) > 0:
3809+ logging.debug('floating ips available to tenant: {}'.format(ips))
3810+ return True
3811+ else:
3812+ return False
3813+
3814+
3815+# Unused, deprecate?:
3816+def XXX_has_floating_ip(addresses, fip_str):
3817+ '''Inspect list of addresses for an item which starts with the specified
3818+ string. Returns the (first) matching item found, returns None if not.
3819+
3820+ :param addresses: list of dicts containing nova addresses data
3821+ :param fip_str: floating IP string to match, generally first 2 or 3 octets
3822+ '''
3823+ for addr in addresses:
3824+ if addr['addr'].startswith(fip_str):
3825+ return addr['addr']
3826+ return None
3827+
3828+
3829+# Unused, deprecate?:
3830+def XXX_f_contains_str(the_file, str_find):
3831+ '''Search a file for a string
3832+
3833+ :param the_file: file name to read
3834+ :param str_find: string to find in the file
3835+ :returns: True if string is found in file
3836+ '''
3837+ _pos = open(the_file, 'r').read().find(str_find)
3838+ if _pos >= 0:
3839+ return True
3840+ else:
3841+ return False
3842+
3843+
3844+# Unused, deprecate?:
3845+def XXX_replace_line_with_lines(file_name, str_find, with_lines):
3846+ '''Inject lines into file, where string is found in exactly and
3847+ only one line. Return None if successful, return a message otherwise.
3848+
3849+ :param file_name: file name as string, to read and write
3850+ :param str_find: string to find in a line
3851+ :param str_lines: list of lines to inject
3852+ '''
3853+ with open(file_name, 'r') as r_file:
3854+ lines = r_file.readlines()
3855+
3856+ indices = []
3857+ for idx, line in enumerate(lines):
3858+ if str_find in line:
3859+ indices.append(idx)
3860+ if len(indices) > 1:
3861+ return 'Could not replace line, found more than one match.'
3862+ elif len(indices) == 0:
3863+ return 'Could not replace line, no match in {}'.format(file_name)
3864+ elif len(indices) == 1:
3865+ logging.info('string find for {}: {}'.format(str_find, indices))
3866+ with open(file_name, 'w') as w_file:
3867+ out_lines = (lines[0:indices[0]] +
3868+ with_lines +
3869+ lines[indices[0] + 1:])
3870+ w_file.writelines(out_lines)
3871+
3872+
3873+def dict_to_yaml(dict_data):
3874+ return yaml.dump(dict_data, default_flow_style=False)
3875+
3876+
3877+def get_keystone_v3_session():
3878+ '''Get a keystone v3 session based on env vars.'''
3879+
3880+ auth = keystoneauth1.Password(
3881+ username=os.environ['OS_USERNAME'],
3882+ user_domain_name=os.environ['OS_USER_DOMAIN_NAME'],
3883+ password=os.environ['OS_PASSWORD'],
3884+ project_name=os.environ['OS_PROJECT_NAME'],
3885+ project_domain_name=os.environ['OS_PROJECT_DOMAIN_NAME'],
3886+ auth_url=os.environ['OS_AUTH_URL']
3887+ )
3888+
3889+ return keystoneauth1_session.Session(auth=auth)
3890+
3891+
3892+def get_neutron_client(session):
3893+ '''Get a neutron client connection based on ksv3 session and env vars.'''
3894+ return ne_client.Client(session=session,
3895+ region_name=os.environ['OS_REGION_NAME'])
3896
3897=== added file 'deploy/osci-controller-setup.sh'
3898--- deploy/osci-controller-setup.sh 1970-01-01 00:00:00 +0000
3899+++ deploy/osci-controller-setup.sh 2017-05-27 00:22:36 +0000
3900@@ -0,0 +1,19 @@
3901+#!/bin/bash -uex
3902+: ${CTI_REPO:="https://github.com/openstack-charmers/charm-test-infra"} # WIP
3903+: ${CTI_REPO_BRANCH:="master"}
3904+: ${CTI_CODIR:="${HOME}/tools/charm-test-infra"}
3905+
3906+## Gather tools
3907+rm -rf $CTI_CODIR
3908+git clone --depth 1 $CTI_REPO $CTI_CODIR -b $CTI_REPO_BRANCH
3909+
3910+## Bootstrap controller and add model for OSCI on ServerStack
3911+cd $CTI_CODIR
3912+. examples/env-larger-controller
3913+time ./juju-openstack-controller-example.sh
3914+
3915+juju switch osci-serverstack:osci
3916+juju status --color
3917+juju controllers
3918+juju models
3919+
3920
3921=== added file 'deploy/osci-float-all-instances.sh'
3922--- deploy/osci-float-all-instances.sh 1970-01-01 00:00:00 +0000
3923+++ deploy/osci-float-all-instances.sh 2017-05-27 00:22:36 +0000
3924@@ -0,0 +1,18 @@
3925+#!/bin/bash -uex
3926+# Give all instances a floating IP address. Requires >= Newton openstack client
3927+
3928+fip_count=$(openstack floating ip list | awk '/None/ { print $4 }' | wc -l)
3929+instances=$(openstack server list | grep ACTIVE | grep -v '\,' | awk '{ print $2 }')
3930+inst_count=$(echo $instances | wc -w)
3931+
3932+fip_diff=$(( $inst_count - $fip_count ))
3933+if [[ "$fip_diff" != "0" ]]; then
3934+ for m in $(seq 1 $fip_diff); do
3935+ openstack floating ip create ext_net
3936+ done
3937+fi
3938+
3939+for instance in $instances; do
3940+ ip_f="$(openstack floating ip list | awk '/None/ { print $4 }' | head -n 1)"
3941+ openstack server add floating ip $instance $ip_f
3942+done
3943
3944=== added file 'deploy/osci-model-deploy.sh'
3945--- deploy/osci-model-deploy.sh 1970-01-01 00:00:00 +0000
3946+++ deploy/osci-model-deploy.sh 2017-05-27 00:22:36 +0000
3947@@ -0,0 +1,68 @@
3948+#!/bin/bash -uex
3949+# Deploy Jenkins Master and Slave Charm Applications for OpenStack Charm CI
3950+
3951+DEPLOY_SCRATCH_DIR="$HOME/deploy2"
3952+#JM_CHARM="cs:xenial/jenkins-4"
3953+#JM_CHARM="cs:xenial/jenkins-2" # Upstream before storage support
3954+#JM_CHARM="cs:~1chb1n/jenkins" # WIP based on upstream
3955+#JS_CHARM="cs:~free.ekanayaka/xenial/jenkins-slave-2" # Already has jenkins-slave deb packed in files dir
3956+JM_CHARM="lp:~1chb1n/+junk/jenkins-reactive-temp-build"
3957+JS_CHARM="lp:~1chb1n/+junk/jenkins-slave-legacy-mash"
3958+JM_PKG_URL="https://pkg.jenkins.io/debian-stable/binary/jenkins_2.7.4_all.deb"
3959+JM_PKG_FILENAME="$(echo "${JM_PKG_URL##*/}")"
3960+SERIES="xenial"
3961+
3962+# Fetch and "Fat-pack" the charms
3963+mkdir -vp $DEPLOY_SCRATCH_DIR
3964+stat $DEPLOY_SCRATCH_DIR/charm-jenkins ||\
3965+ bzr branch $JM_CHARM $DEPLOY_SCRATCH_DIR/charm-jenkins
3966+ #charm pull $JM_CHARM $DEPLOY_SCRATCH_DIR/charm-jenkins
3967+
3968+stat $DEPLOY_SCRATCH_DIR/charm-jenkins-slave ||\
3969+ bzr branch $JS_CHARM $DEPLOY_SCRATCH_DIR/charm-jenkins-slave
3970+ #charm pull $JS_CHARM $DEPLOY_SCRATCH_DIR/charm-jenkins-slave
3971+
3972+if ! stat $DEPLOY_SCRATCH_DIR/$JM_PKG_FILENAME; then
3973+ . ~/proxy_set.sh
3974+ env | egrep "prox|PROX"
3975+ wget -v $JM_PKG_URL -P $DEPLOY_SCRATCH_DIR --show-progress
3976+ . ~/proxy_unset.sh
3977+fi
3978+
3979+rm -fv $DEPLOY_SCRATCH_DIR/charm-jenkins/files/*jenkins*deb ||:
3980+mkdir -vp $DEPLOY_SCRATCH_DIR/charm-jenkins/files/
3981+cp -fv $DEPLOY_SCRATCH_DIR/$JM_PKG_FILENAME $DEPLOY_SCRATCH_DIR/charm-jenkins/files/
3982+(cd $DEPLOY_SCRATCH_DIR/charm-jenkins/files/
3983+ ln -s $JM_PKG_FILENAME jenkins.deb)
3984+
3985+juju switch osci-serverstack:osci
3986+
3987+juju status osci-master | grep "^osci-master " ||
3988+ juju deploy $DEPLOY_SCRATCH_DIR/charm-jenkins osci-master -n 1 --constraints="mem=7G cores=4 root-disk=100G" --config config/juju-apps/osci-master.yaml --series $SERIES
3989+
3990+juju status osci-task | grep "^osci-task" ||
3991+ juju deploy $DEPLOY_SCRATCH_DIR/charm-jenkins-slave osci-task -n 2 --constraints="mem=12G cores=8 root-disk=80G" --config config/juju-apps/osci-task.yaml --series $SERIES
3992+
3993+juju status osci-slave | grep "^osci-slave " ||
3994+ juju deploy $DEPLOY_SCRATCH_DIR/charm-jenkins-slave osci-slave -n 12 --constraints="mem=3G cores=4 root-disk=40G" --config config/juju-apps/osci-slave.yaml --series $SERIES
3995+
3996+juju status osci-lab | grep "^osci-lab " ||
3997+ juju deploy $DEPLOY_SCRATCH_DIR/charm-jenkins-slave osci-lab -n 4 --constraints="mem=3G cores=4 root-disk=40G" --config config/juju-apps/osci-lab.yaml --series $SERIES
3998+
3999+# Temp hack. Should juju-wait instead. And the charms shouldn't not-work if relating too soon!
4000+#sleep 600
4001+
4002+juju add-relation osci-master:master osci-task:slave ||:
4003+juju add-relation osci-master:master osci-slave:slave ||:
4004+juju add-relation osci-master:master osci-lab:slave ||:
4005+
4006+UNIT_IMPORT_IDS="1chb1n james-page thedac admcleod"
4007+juju switch controller
4008+juju run --all "sudo su - ubuntu -c \"ssh-import-id $UNIT_IMPORT_IDS\""
4009+juju switch osci
4010+juju run --all "sudo su - ubuntu -c \"ssh-import-id $UNIT_IMPORT_IDS\""
4011+juju run --all "sudo su - jenkins -c \"ssh-import-id $UNIT_IMPORT_IDS\""
4012+
4013+# /!\ The upstream charm relies on failed hook re-execution. It will
4014+# be necessary to retry the master after it fails once, like so:
4015+#juju resolved osci-master/0
4016
4017=== renamed file 'deploy-uosci.py' => 'deploy/osci-nets-and-models.py'
4018--- deploy-uosci.py 2016-08-29 16:01:52 +0000
4019+++ deploy/osci-nets-and-models.py 2017-05-27 00:22:36 +0000
4020@@ -1,29 +1,23 @@
4021-#!/usr/bin/python
4022-'''
4023- Deploys/creates (or updates) jenkins environment, neutron networks, etc.
4024- See README(s)! This is not incorporated into jenkins jobs/tests.
4025-'''
4026+#!/usr/bin/env python
4027+'''
4028+Creates networks, subnets and prepares info for later consumption by
4029+osci jenkins slaves regarding juju models.
4030+'''
4031+
4032 import logging
4033-import os
4034-import subprocess
4035-import uuid
4036 import yaml
4037-from copy import deepcopy
4038 from netaddr import IPNetwork
4039-from neutronclient.neutron import client as ne_client
4040-from novaclient import client as nv_client
4041-from time import time
4042-from common.osci_utils import (
4043- f_contains_str,
4044- floating_ip_is_available,
4045- get_networks,
4046- get_num_units,
4047- get_os_creds,
4048- has_floating_ip,
4049+from lib.osci_deploy_helpers import (
4050+ copy_file_to_juju_unit,
4051+ copy_file_on_juju_unit,
4052+ generate_list_of_cidrs,
4053+ get_juju_application_status,
4054+ get_neutron_client,
4055+ get_keystone_v3_session,
4056+ predict_juju_unit_names,
4057+ predict_model_names,
4058 read_yaml,
4059- recursive_dict_key_search,
4060- replace_line_with_lines,
4061- rnd_str,
4062+ render,
4063 safe_mkdir,
4064 validate_config,
4065 write_yaml
4066@@ -33,13 +27,7 @@
4067 logging.basicConfig(level=logging.DEBUG)
4068
4069 EV = 'environments'
4070-DEPLOY_CONFIG_FILE = 'deployment/deploy-config.yaml'
4071-JM_NAME_TEMPL = 'osci/{}'
4072-SLAVE_NAME_TEMPLATES = {
4073- 'slave': 'osci-slave/{}', # jsv
4074- 'lab': 'osci-lab/{}', # jlb
4075- 'task': 'osci-task/{}' # jtk
4076-}
4077+DEPLOY_CONFIG_FILE = 'config/nets-and-models.yaml'
4078
4079
4080 def validate_network_config(conf):
4081@@ -76,59 +64,19 @@
4082 return ret
4083
4084
4085-def get_junits(conf_env, jsv_qty, jtk_qty, jlb_qty):
4086- '''Create a list of juju jenkins master and slave service
4087- units, predictively.
4088- '''
4089- units = []
4090- units.append(JM_NAME_TEMPL.format('0'))
4091-
4092- for _templ_qty_map in [(SLAVE_NAME_TEMPLATES['slave'], jsv_qty),
4093- (SLAVE_NAME_TEMPLATES['task'], jtk_qty),
4094- (SLAVE_NAME_TEMPLATES['lab'], jlb_qty)]:
4095- _templ = _templ_qty_map[0]
4096- _qty = _templ_qty_map[1]
4097- for unit in range(0, _qty):
4098- units.append(_templ.format(unit))
4099-
4100- return units
4101-
4102-
4103-def get_enviros(conf_env, jsv_qty, jtk_qty, jlb_qty):
4104- '''Return a list of juju model names to create'''
4105- envs = []
4106- envs.append("{}-{}{}".format(conf_env['env-name-base'],
4107- conf_env['master-abbrv'],
4108- 0))
4109-
4110- for _abbrv_qty_map in [(conf_env['slave-abbrv'], jsv_qty),
4111- (conf_env['task-abbrv'], jtk_qty),
4112- (conf_env['lab-abbrv'], jlb_qty)]:
4113- _abbrv = _abbrv_qty_map[0]
4114- _qty = _abbrv_qty_map[1]
4115- for unit in range(0, _qty):
4116- envs.append("{}-{}{}".format(conf_env['env-name-base'],
4117- _abbrv,
4118- str(unit).zfill(2)))
4119- return envs
4120-
4121-
4122-def build_nets_and_subs(d_env_data, creds, conf):
4123+def build_nets_and_subs(neutron_c, d_models_data, conf):
4124 '''Build new neutron subnets and networks from dict data, and connect
4125 to neutron router.'''
4126- # Build new neutron networks, subnets, and connect them to the router
4127- neutron = ne_client.Client('2.0', **creds[0])
4128-
4129 conf_net = conf['osci']['network']
4130- conf_env = conf['osci']['enviro']
4131+ conf_mod = conf['osci']['model']
4132
4133- base_name = conf_env['env-name-base']
4134+ base_name = conf_mod['model-name-base']
4135 var_oct = conf_net['var-octet']
4136 router_name = conf_net['neutron-router']
4137 dns = conf_net['neutron-dns']
4138
4139- for k, conf in d_env_data['enviros'].iteritems():
4140- net_str = conf['network']
4141+ for k, v in d_models_data['models'].items():
4142+ net_str = v['network']
4143 sub_name = "{}_{}_{}".format(base_name,
4144 net_str.split('.')[int(var_oct) - 1],
4145 'sub')
4146@@ -137,7 +85,7 @@
4147 'net')
4148
4149 # Create neutron network
4150- networks = neutron.list_networks(name=net_name)
4151+ networks = neutron_c.list_networks(name=net_name)
4152 if len(networks['networks']) == 0:
4153 logging.info('Creating network: %s',
4154 net_name)
4155@@ -147,13 +95,13 @@
4156 'shared': False
4157 }
4158 }
4159- neu_network = neutron.create_network(network_msg)['network']
4160+ neutron_net = neutron_c.create_network(network_msg)['network']
4161 else:
4162 logging.info('Network %s already exists.', net_name)
4163- neu_network = networks['networks'][0]
4164+ neutron_net = networks['networks'][0]
4165
4166- # Check if subnet name and IP space is free here
4167- subnets = neutron.list_subnets(name=sub_name)
4168+ # Check if subnet name and IP space is free
4169+ subnets = neutron_c.list_subnets(name=sub_name)
4170 if len(subnets['subnets']) == 0:
4171 logging.info('Creating subnet: %s', sub_name)
4172 this_cidr = IPNetwork(net_str)
4173@@ -163,7 +111,7 @@
4174 subnet_msg = {
4175 'subnet': {
4176 'name': sub_name,
4177- 'network_id': neu_network['id'],
4178+ 'network_id': neutron_net['id'],
4179 'enable_dhcp': True,
4180 'cidr': str(this_cidr),
4181 'ip_version': 4,
4182@@ -175,456 +123,92 @@
4183 'end': str(alloc_end)
4184 }]
4185 logging.info(subnet_msg)
4186- neu_subnet = neutron.create_subnet(subnet_msg)['subnet']
4187+ neutron_sub = neutron_c.create_subnet(subnet_msg)['subnet']
4188 else:
4189 logging.info('Subnet %s already exists.', net_name)
4190- neu_subnet = subnets['subnets'][0]
4191+ neutron_sub = subnets['subnets'][0]
4192
4193 # Wire the network to the router
4194- routers = neutron.list_routers(name=router_name)
4195+ routers = neutron_c.list_routers(name=router_name)
4196 if len(routers['routers']) == 0:
4197 raise ValueError('Unable to locate router')
4198 else:
4199- ports = neutron.list_ports(device_owner='network:router_interface',
4200- network_id=neu_network['id'])
4201+ ports = neutron_c.list_ports(
4202+ device_owner='network:router_interface',
4203+ network_id=neutron_net['id']
4204+ )
4205 if len(ports['ports']) == 0:
4206 logging.info('Adding interface from %s to %s',
4207 router_name, sub_name)
4208- neu_router = routers['routers'][0]
4209- neutron.add_interface_router(neu_router['id'],
4210- {'subnet_id': neu_subnet['id']})
4211+ neutron_rtr = routers['routers'][0]
4212+ neutron_c.add_interface_router(
4213+ neutron_rtr['id'],
4214+ {'subnet_id': neutron_sub['id']}
4215+ )
4216 else:
4217 logging.info('Router already connected to subnet %s', sub_name)
4218
4219- d_env_data['enviros'][k]['network-id'] = str(neu_network['id'])
4220-
4221-
4222-def is_deployed(jma_num_units, jsv_num_units, jtk_num_units, jlb_num_units):
4223- '''Check juju status against expected number of jenkins
4224- master and slave units
4225- '''
4226- ret = True
4227- try:
4228- # Deployed, check unit quantities
4229- jm_stat = yaml.load(subprocess.check_output(
4230- ['juju', 'status', 'osci']))
4231- jsv_stat = yaml.load(subprocess.check_output(
4232- ['juju', 'status', 'osci-slave']))
4233- jtk_stat = yaml.load(subprocess.check_output(
4234- ['juju', 'status', 'osci-task']))
4235- jlb_stat = yaml.load(subprocess.check_output(
4236- ['juju', 'status', 'osci-lab']))
4237-
4238- jma_count = len(jm_stat['services']['osci']['units'])
4239- jsv_count = len(jsv_stat['services']['osci-slave']['units'])
4240- jtk_count = len(jtk_stat['services']['osci-task']['units'])
4241- jlb_count = len(jlb_stat['services']['osci-lab']['units'])
4242-
4243- if int(jma_count) != jma_num_units:
4244- ret = ('Juju model is up, but jenkins master'
4245- 'count is unexpected: {}/{}'.format(jma_count,
4246- jma_num_units))
4247- if int(jsv_count) != jsv_num_units:
4248- ret = ('Juju model is up, but jenkins slave count is '
4249- 'unexpected: {}/{}'.format(jsv_count, jsv_num_units))
4250- if int(jtk_count) != jtk_num_units:
4251- ret = ('Juju model is up, but task slave count is '
4252- 'unexpected: {}/{}'.format(jtk_count, jtk_num_units))
4253- if int(jlb_count) != jlb_num_units:
4254- ret = ('Juju model is up, but lab slave count is '
4255- 'unexpected: {}/{}'.format(jlb_count, jlb_num_units))
4256- except (subprocess.CalledProcessError, KeyError):
4257- # Not deployed
4258- ret = False
4259- return ret
4260-
4261-
4262-def make_post_file_xfer_script(data, script_file_abs):
4263- '''Create post-deployment file transfer script, which utilizes
4264- juju scp and juju ssh to copy files into the jenkins units,
4265- such as novarc and environments.yaml, and to set the permissions.
4266- '''
4267- cmds = []
4268- for d_file in data:
4269- # Separator
4270- cmds.append('echo -e "\\n----{}: {}----"'.format(d_file['unit'],
4271- d_file['src-name']))
4272-
4273- # Copy some files to the unit
4274- juju_scp_cmd = 'juju scp {}/{} {}:{}/{}'.format(d_file['src-dir'],
4275- d_file['src-name'],
4276- d_file['unit'],
4277- d_file['tmp-dir'],
4278- d_file['dst-name'])
4279- cmds.append(juju_scp_cmd)
4280-
4281- # Modify files inside the unit
4282- cmd_bash = ''
4283- cmd_bash += "sudo su - jenkins -c 'mkdir -p {}' && ".format(
4284- d_file['dst-dir'])
4285- cmd_bash += "sudo mv {}/{} {}/{} && ".format(d_file['tmp-dir'],
4286- d_file['dst-name'],
4287- d_file['dst-dir'],
4288- d_file['dst-name'])
4289- cmd_bash += "sudo chown -R {} {} && ".format(
4290- d_file['chown'],
4291- d_file['dst-dir'])
4292- cmd_bash += "sudo chmod {} {}/{}".format(d_file['chmod'],
4293- d_file['dst-dir'],
4294- d_file['dst-name'])
4295- juju_ssh_cmd = 'juju ssh {} "{}"'.format(d_file['unit'], cmd_bash)
4296- cmds.append(juju_ssh_cmd)
4297-
4298- # Write file
4299- with open(script_file_abs, 'w') as out_file:
4300- out_file.write('{}\n'.format('#!/bin/bash -e'))
4301- for cmd in cmds:
4302- out_file.write('{}\n'.format(cmd))
4303-
4304- subprocess.check_call(['chmod',
4305- '770', script_file_abs])
4306-
4307- return script_file_abs
4308-
4309-
4310-def create_env_yamls_and_post_xfer_dict(data, conf, creds):
4311- '''Create juju environment yaml files for each master and slave,
4312- create and return absolute path of bash script which pushes
4313- files into the juju service units.
4314- '''
4315- f_template = read_yaml(conf['env-template'])
4316- f_reference = read_yaml(conf['env-reference'])
4317-# series = read_yaml('deployment/deploy-files/environment-series.yaml')
4318- apt_proxy = recursive_dict_key_search(f_reference, 'apt-http-proxy')
4319- jenk_home = '/var/lib/jenkins'
4320- u_home = '/home/ubuntu'
4321- _files = []
4322-
4323- for env_name, env_attr in data['enviros'].iteritems():
4324- d_tmp = deepcopy(f_template)
4325- env_name_dev = '{}-jdev'.format(env_name)
4326- env_name_prop = '{}-jprop'.format(env_name)
4327-
4328- # Set this slave's juju model name
4329- d_tmp[EV][env_name] = deepcopy(d_tmp[EV]['__ENVIRO__'])
4330- d_tmp['default'] = env_name
4331- del d_tmp[EV]['__ENVIRO__']
4332-
4333- # Set juju model openstack parameters
4334- d_tmp[EV][env_name]['admin-secret'] = rnd_str(length=32)
4335- d_tmp[EV][env_name]['auth-url'] = creds[0]['auth_url']
4336- d_tmp[EV][env_name]['control-bucket'] = str(uuid.uuid1())
4337- d_tmp[EV][env_name]['password'] = creds[0]['password']
4338- d_tmp[EV][env_name]['tenant-name'] = creds[0]['tenant_name']
4339- d_tmp[EV][env_name]['username'] = creds[0]['username']
4340-
4341- if 'network-id' in env_attr:
4342- d_tmp[EV][env_name]['network'] = env_attr['network-id']
4343-
4344- if apt_proxy is not None:
4345- d_tmp[EV][env_name]['apt-http-proxy'] = apt_proxy
4346- else:
4347- del d_tmp[EV][env_name]['apt-http-proxy']
4348-
4349- # Create juju-devel model yaml for environments.yaml
4350- d_tmp[EV][env_name_dev] = deepcopy(d_tmp[EV][env_name])
4351- d_tmp[EV][env_name_dev]['agent-stream'] = 'devel'
4352-
4353- # Create juju-proposed model yaml for environments.yaml
4354- d_tmp[EV][env_name_prop] = deepcopy(d_tmp[EV][env_name])
4355- d_tmp[EV][env_name_prop]['agent-stream'] = 'proposed'
4356-
4357- # Create juju model yaml for environments.yaml
4358- safe_mkdir(conf['out-dir'])
4359- env_filename = 'environments-{}.yaml'.format(env_name)
4360- env_file_abs = '{}/{}'.format(conf['out-dir'], env_filename)
4361- write_yaml(d_tmp, env_file_abs)
4362- logging.debug('created environment file: {}'.format(env_file_abs))
4363-
4364- # Add to post-deployment file xfer dict
4365- _files.append(
4366- {'src-name': env_filename,
4367- 'dst-name': 'environments.yaml',
4368- 'src-dir': conf['out-dir'],
4369- 'tmp-dir': u_home,
4370- 'dst-dir': '{}/.juju'.format(jenk_home),
4371- 'chown': 'jenkins:jenkins',
4372- 'chmod': '600',
4373- 'unit': env_attr['unit']
4374- })
4375- _files.append(
4376- {'src-name': 'novarc',
4377- 'dst-name': 'novarc',
4378- 'src-dir': os.getenv("HOME"),
4379- 'tmp-dir': u_home,
4380- 'dst-dir': jenk_home,
4381- 'chown': 'jenkins:jenkins',
4382- 'chmod': '600',
4383- 'unit': env_attr['unit']
4384- })
4385-
4386- # also set master's cli.conf
4387- _files.append(
4388- {'src-name': 'cli.conf',
4389- 'dst-name': 'cli.conf',
4390- 'src-dir': 'deployment/deploy-files',
4391- 'tmp-dir': u_home,
4392- 'dst-dir': '{}/.jenkins'.format(jenk_home),
4393- 'chown': 'jenkins:jenkins',
4394- 'chmod': '600',
4395- 'unit': 'osci/0'
4396- })
4397-
4398- return _files
4399-
4400-
4401-def parse_jenkins_config_xml(conf):
4402- '''Pull config.xml from from the jenkins master, replace or
4403- inject lines of config, return list of dict of files/attributes
4404- for handling by the post-xfer routine.
4405- '''
4406-
4407- # Get config.xml from jenkins master
4408- time_stamp = str(time()).replace('.', '-')
4409- file_name = 'config.xml.{}'.format(time_stamp)
4410-
4411- subprocess.check_call(['juju', 'ssh', 'osci/0',
4412- 'sudo cp /var/lib/jenkins/config.xml '
4413- '/home/ubuntu/{}'.format(file_name)])
4414- subprocess.check_call(['juju', 'ssh', 'osci/0',
4415- 'sudo chown ubuntu:ubuntu '
4416- '/home/ubuntu/{}'.format(file_name)])
4417- juju_scp_cmd = ('juju scp {}:{} {}'.format('osci/0',
4418- '/home/ubuntu/{}'.format(file_name),
4419- conf['out-dir']))
4420- subprocess.check_call(juju_scp_cmd.split())
4421-
4422- loc_xml = '{}/{}'.format(conf['out-dir'], file_name)
4423- do_copy = False
4424- _files = []
4425-
4426- operations = []
4427- operations.extend(
4428- [{'replace': 'FullControlOnceLoggedInAuthorizationStrategy',
4429- 'with': 'deployment/deploy-files/config.xml.authstrat'
4430- },
4431- {'replace': '<globalNodeProperties/>',
4432- 'with': 'deployment/deploy-files/config.xml.global'
4433- }])
4434-
4435- if not f_contains_str(the_file=loc_xml, str_find='<listView>'):
4436- operations.append(
4437- {'replace': '</views>',
4438- 'with': 'deployment/deploy-files/config.xml.views'
4439- })
4440-
4441- for _op in operations:
4442- logging.info('op: {}:{}:{}'.format(loc_xml,
4443- _op['replace'],
4444- _op['with']))
4445-
4446- with open(_op['with']) as inject_file:
4447- inject_lines = inject_file.readlines()
4448- ret = replace_line_with_lines(file_name=loc_xml,
4449- str_find=_op['replace'],
4450- with_lines=inject_lines)
4451- if ret:
4452- # No need, not modified.
4453- logging.info(ret)
4454- else:
4455- do_copy = True
4456-
4457- if do_copy:
4458- # Add config.xml to the list to copy back to jenkins master
4459- logging.info('do_copy True')
4460- _files.append(
4461- {'src-name': file_name,
4462- 'dst-name': 'config.xml',
4463- 'src-dir': conf['out-dir'],
4464- 'tmp-dir': '/home/ubuntu',
4465- 'dst-dir': '/var/lib/jenkins',
4466- 'chown': 'jenkins:jenkins',
4467- 'chmod': '644',
4468- 'unit': 'osci/0'
4469- })
4470- return _files
4471-
4472-
4473-def jenkins_other_xml():
4474- '''Build files list for additional jenkins xml files
4475- to push into the master
4476- '''
4477- _files = []
4478- _files.append(
4479- {'src-name': 'hudson.tasks.Mailer.xml',
4480- 'dst-name': 'hudson.tasks.Mailer.xml',
4481- 'src-dir': 'deployment/deploy-files',
4482- 'tmp-dir': '/home/ubuntu',
4483- 'dst-dir': '/var/lib/jenkins',
4484- 'chown': 'jenkins:jenkins',
4485- 'chmod': '644',
4486- 'unit': 'osci/0'
4487- })
4488- _files.append(
4489- {'src-name': 'hudson.plugins.build_publisher.BuildPublisher.xml',
4490- 'dst-name': 'hudson.plugins.build_publisher.BuildPublisher.xml',
4491- 'src-dir': 'deployment/deploy-files',
4492- 'tmp-dir': '/home/ubuntu',
4493- 'dst-dir': '/var/lib/jenkins',
4494- 'chown': 'jenkins:jenkins',
4495- 'chmod': '644',
4496- 'unit': 'osci/0'
4497- })
4498- return _files
4499-
4500-
4501-def float_jenkins_master(creds, conf):
4502- '''Associate a floating IP with the jenkins master instance (create
4503- floating IP if necessary).
4504- '''
4505- conf_net = conf['osci']['network']
4506-
4507- neutron = ne_client.Client('2.0', **creds[0])
4508- nova = nv_client.Client('2', **creds[1])
4509- jm_stat = yaml.load(subprocess.check_output(['juju', 'status', 'osci']))
4510- jm_id = jm_stat['machines'].keys()[0]
4511- jm_instance_id = jm_stat['machines'][jm_id]['instance-id']
4512- jm_instance = nova.servers.get(server=jm_instance_id)
4513- jm_addresses = jm_instance.addresses[conf_net['default-network']]
4514- ext_net_id = (neutron.list_networks(name=conf_net['ext-net'])
4515- ['networks'][0]['id'])
4516-
4517- ret = has_floating_ip(jm_addresses, conf_net['fip-str'])
4518- if ret:
4519- logging.info('Instance already has a floating ip: {}'.format(ret))
4520- else:
4521- if floating_ip_is_available(neutron):
4522- logging.info('Floating ip exists in tenant, associating it.')
4523- jm_float_ip = (neutron.list_floatingips(status='DOWN')
4524- ['floatingips'][0]['floating_ip_address'])
4525- else:
4526- logging.info('No free floating ip(s) in tenant, creating one.')
4527- fip_msg = {
4528- 'floatingip': {
4529- 'floating_network_id': ext_net_id
4530- }
4531- }
4532- try:
4533- jm_float_ip = (neutron.create_floatingip(fip_msg)['floatingip']
4534- ['floating_ip_address'])
4535-
4536- except Exception:
4537- raise ValueError('Tenant could not create a floating IP')
4538-
4539- # Associate floating ip with instance
4540- try:
4541- jm_instance.add_floating_ip(address=jm_float_ip)
4542- except Exception:
4543- raise ValueError('Failed to associate floating ip '
4544- '({}) to instance {}.'.format(jm_float_ip,
4545- jm_instance_id))
4546-
4547- # Confirm
4548- jm_instance = nova.servers.get(server=jm_instance_id)
4549- jm_addresses = jm_instance.addresses[conf_net['default-network']]
4550- ret = has_floating_ip(jm_addresses, conf_net['fip-str'])
4551- if ret:
4552- logging.info('Instance has floating ip: {}'.format(ret))
4553-
4554-
4555-def main():
4556- '''Read and validate configs, build networks, deploy bundle,
4557- perform some post-deploy config and file transfers.
4558- '''
4559- # Read config from yaml
4560+ d_models_data['models'][k]['network-id'] = str(neutron_net['id'])
4561+
4562+
4563+def get_num_units():
4564+ '''Return specific juju application unit quantities from juju model status.
4565+ '''
4566+ jm_stat = get_juju_application_status('osci-master')
4567+ jsv_stat = get_juju_application_status('osci-slave')
4568+ jtk_stat = get_juju_application_status('osci-task')
4569+ jlb_stat = get_juju_application_status('osci-lab')
4570+
4571+ return (len(jm_stat['applications']['osci-master']['units']),
4572+ len(jsv_stat['applications']['osci-slave']['units']),
4573+ len(jtk_stat['applications']['osci-task']['units']),
4574+ len(jlb_stat['applications']['osci-lab']['units']))
4575+
4576+
4577+def generate_models_data(conf):
4578+ '''Read and validate configs, build networks, dump models:networks yaml.
4579+ '''
4580 conf = read_yaml(DEPLOY_CONFIG_FILE)
4581- creds = get_os_creds()
4582
4583 # Basic non-null general parameter validation
4584- expected = ['env-name-base', 'master-abbrv', 'slave-abbrv', 'split',
4585- 'env-template', 'out-dir', 'deployer-bundle']
4586+ expected = ['model-name-base', 'master-abbrv', 'slave-abbrv', 'split',
4587+ 'out-dir']
4588 ret = validate_config(conf['osci'], expected)
4589 if ret:
4590 logging.debug('conf: {}'.format(conf['osci']))
4591 raise ValueError('Config data missing. {}'.format(ret))
4592
4593 # Break out config parameters
4594+ conf_net = conf['osci']['network']
4595+ conf_mod = conf['osci']['model']
4596 net_split = conf['osci']['network']['split']
4597- conf_net = conf['osci']['network']
4598- conf_env = conf['osci']['enviro']
4599-
4600- # Inspect deployer bundle yaml for needed info & validate
4601- deployer_bundle = conf['osci']['deployer-bundle']
4602- d_dep_bundle = read_yaml(deployer_bundle)
4603- jma_num_units = get_num_units(d_dep_bundle,
4604- d_dep_bundle.keys()[0],
4605- 'osci')
4606- jsv_num_units = get_num_units(d_dep_bundle,
4607- d_dep_bundle.keys()[0],
4608- 'osci-slave')
4609- jtk_num_units = get_num_units(d_dep_bundle,
4610- d_dep_bundle.keys()[0],
4611- 'osci-task')
4612- jlb_num_units = get_num_units(d_dep_bundle,
4613- d_dep_bundle.keys()[0],
4614- 'osci-lab')
4615- logging.debug('jma: {}\njsv: {}\njtk: {}\njlb: {}'.format(
4616- jma_num_units, jsv_num_units, jtk_num_units, jlb_num_units))
4617-
4618- # Validate bundle unit counts before deploying
4619- if jma_num_units != 1:
4620- raise ValueError('Expected exactly 1 jenkins master, '
4621- 'found: {}'.format(jma_num_units))
4622- if jsv_num_units < 1:
4623- raise ValueError('Expected at least 1 jenkins slave, '
4624- 'found: {}'.format(jsv_num_units))
4625- if jtk_num_units < 1:
4626- raise ValueError('Expected at least 1 task slave, '
4627- 'found: {}'.format(jtk_num_units))
4628- if jlb_num_units < 1:
4629- raise ValueError('Expected at least 1 lab slave, '
4630- 'found: {}'.format(jlb_num_units))
4631-
4632- # Deploy if not already deployed
4633- ret = is_deployed(jma_num_units, jsv_num_units,
4634- jtk_num_units, jlb_num_units)
4635- if ret is not True and ret is not False:
4636- raise ValueError(ret)
4637- elif ret is True:
4638- logging.info('Model is already deployed, moving on.')
4639- elif ret is False:
4640- logging.info('Model is not deployed, deploying...')
4641- subprocess.check_call(['juju-deployer',
4642- '-v', '-d', '-B',
4643- '-c', deployer_bundle])
4644- # Confirm new deployment
4645- ret = is_deployed(jma_num_units, jsv_num_units,
4646- jtk_num_units, jlb_num_units)
4647- if ret is not True:
4648- raise ValueError(ret)
4649-
4650- # Predictively construct new juju environment and unit names lists
4651- junits = get_junits(conf_env=conf_env,
4652- jsv_qty=jsv_num_units,
4653- jtk_qty=jtk_num_units,
4654- jlb_qty=jlb_num_units)
4655-
4656- enviros = get_enviros(conf_env=conf_env,
4657- jsv_qty=jsv_num_units,
4658- jtk_qty=jtk_num_units,
4659- jlb_qty=jlb_num_units)
4660+
4661+ # Predictively construct new juju model names from unit names
4662+ jma_num_units, jsv_num_units, jtk_num_units, jlb_num_units = \
4663+ get_num_units()
4664+
4665+ junits = predict_juju_unit_names(conf_mod=conf_mod,
4666+ jsv_qty=jsv_num_units,
4667+ jtk_qty=jtk_num_units,
4668+ jlb_qty=jlb_num_units)
4669+
4670+ models = predict_model_names(conf_mod=conf_mod,
4671+ jsv_qty=jsv_num_units,
4672+ jtk_qty=jtk_num_units,
4673+ jlb_qty=jlb_num_units)
4674+
4675+ logging.info('Models: {}'.format(models))
4676
4677 # Network separation
4678- if net_split is False:
4679+ if not net_split:
4680 logging.info('No network separation.')
4681 nets = [None] * len(junits)
4682- elif net_split is True:
4683+ else:
4684 logging.info('Using layer 2 network separation.')
4685
4686 # Basic non-null network parameter validation
4687 expected = ['cidr', 'var-octet', 'neutron-router',
4688- 'neutron-net', 'neutron-sub', 'neutron-dns',
4689- 'ext-net', 'fip-str']
4690+ 'neutron-net', 'neutron-sub', 'neutron-dns']
4691 ret = validate_config(conf_net, expected)
4692 if ret:
4693 raise ValueError('Network config data missing. {}'.format(ret))
4694@@ -638,65 +222,125 @@
4695 ip_cidr = IPNetwork(conf_net['cidr'])
4696 total_units = (jma_num_units + jsv_num_units +
4697 jtk_num_units + jlb_num_units)
4698- nets = get_networks(network=str(ip_cidr.network),
4699- bits=int(ip_cidr.prefixlen),
4700- octet=int(conf_net['var-octet']),
4701- quantity=total_units)
4702+ nets = generate_list_of_cidrs(network=str(ip_cidr.network),
4703+ bits=int(ip_cidr.prefixlen),
4704+ octet=int(conf_net['var-octet']),
4705+ quantity=total_units)
4706
4707 # Ensure lists are the same length & smash into a dictionary
4708- check_len = [len(enviros), len(nets), len(junits)]
4709+ check_len = [len(models), len(nets), len(junits)]
4710 if check_len != [check_len[0]] * 3:
4711- logging.debug('enviros ({}): {}'.format(len(enviros), enviros))
4712+ logging.debug('models ({}): {}'.format(len(models), models))
4713 logging.debug('nets ({}): {}'.format(len(nets), nets))
4714 logging.debug('junits ({}): {}'.format(len(junits), junits))
4715 raise ValueError('Model, network and juju unit counts should be equal')
4716- d_env_data = {'enviros': {}}
4717- for idx, enviro in enumerate(enviros):
4718- d_env_data['enviros'][enviro] = {
4719+ d_models_data = {
4720+ 'models': {},
4721+ 'units': {},
4722+ }
4723+ for idx, model in enumerate(models):
4724+ d_models_data['models'][model] = {
4725 'network': nets[idx],
4726 'unit': junits[idx]
4727 }
4728
4729- # Add neutron networks, subnets and router connections, if called for
4730- if net_split is True:
4731- build_nets_and_subs(d_env_data=d_env_data,
4732- creds=creds,
4733- conf=conf)
4734-
4735- # Give jenkins master a floating IP if it doesn't already have one
4736- float_jenkins_master(creds=creds, conf=conf)
4737-
4738- # Create environment yaml file for each jenkins master & slave unit,
4739- # return a dict of files to copy into those units.
4740- xfer_files = create_env_yamls_and_post_xfer_dict(data=d_env_data,
4741- conf=conf_env,
4742- creds=creds)
4743-
4744- # Grab config.xml from jenkins master, replace certain sections
4745- ret = parse_jenkins_config_xml(conf_env)
4746- if ret:
4747- xfer_files.extend(ret)
4748-
4749- # Push in build publisher, mailer, other jenkins config xmls
4750- ret = jenkins_other_xml()
4751- if ret:
4752- xfer_files.extend(ret)
4753-
4754- # Write d_env_data out to yaml for reference
4755+ d_models_data['units'][junits[idx]] = {
4756+ 'network': nets[idx],
4757+ 'model': model
4758+ }
4759+
4760+ return d_models_data
4761+
4762+
4763+def write_models_data_files(conf, d_models_data):
4764+ '''Write out yaml files containing models, units, networks data
4765+ for consumption by osci jenkins slaves.
4766+ '''
4767+ conf_other = conf['osci']['other']
4768+
4769 logging.debug('New model and network predictions: {}'.format(
4770- yaml.dump(d_env_data, default_flow_style=False)))
4771- safe_mkdir(conf_env['out-dir'])
4772- write_yaml(d_env_data, '{}/env_data.yaml'.format(conf_env['out-dir']))
4773-
4774- # Build and execute post-deployment file xfer script
4775- post_file = make_post_file_xfer_script(
4776- data=xfer_files, script_file_abs='{}/{}'.format(
4777- conf_env['out-dir'], 'post-xfer.sh'))
4778-
4779- if os.path.isfile(post_file):
4780- subprocess.check_call([post_file])
4781- else:
4782- raise ValueError('Failed to create post-deployment file xfer script.')
4783+ yaml.dump(d_models_data, default_flow_style=False)))
4784+ safe_mkdir(conf_other['out-dir'])
4785+ write_yaml(d_models_data,
4786+ '{}/models_data.yaml'.format(conf_other['out-dir']))
4787+
4788+ # Generate oscirc files and copy into units
4789+ for model, v in d_models_data['models'].items():
4790+ unit_str = v['unit']
4791+ unit_str_friendly = unit_str.replace('/', '-')
4792+
4793+ oscirc_template_data = {
4794+ 'osci_controller_name': model, # Just use model name
4795+ 'osci_friendly_name': unit_str_friendly,
4796+ 'osci_juju_name': unit_str,
4797+ 'osci_model_name': model,
4798+ 'osci_net_cidr': v['network'],
4799+ 'osci_net_id': v['network-id'],
4800+ }
4801+
4802+ logging.info('{}'.format(oscirc_template_data))
4803+
4804+ target = '{}/{}/oscirc'.format(conf_other['out-dir'],
4805+ unit_str_friendly)
4806+
4807+ render('oscirc', target, oscirc_template_data, 'templates')
4808+
4809+ copy_file_to_juju_unit(target,
4810+ '/home/ubuntu/oscirc',
4811+ unit_str, owner="ubuntu", group="ubuntu",
4812+ perms="640")
4813+
4814+ copy_file_to_juju_unit('/home/ubuntu/novarc',
4815+ '/home/ubuntu/novarc',
4816+ unit_str, owner="ubuntu", group="ubuntu",
4817+ perms="640")
4818+
4819+ copy_file_on_juju_unit('/home/ubuntu/novarc',
4820+ '/var/lib/jenkins/novarc',
4821+ unit_str, owner="root", group="root",
4822+ perms="644")
4823+
4824+ copy_file_on_juju_unit('/home/ubuntu/oscirc',
4825+ '/var/lib/jenkins/oscirc',
4826+ unit_str, owner="root", group="root",
4827+ perms="644")
4828+
4829+
4830+def misc_file_ops(conf, d_models_data):
4831+ '''Perform misc file operations on units.'''
4832+
4833+ for model, v in d_models_data['models'].items():
4834+ unit_str = v['unit']
4835+
4836+ copy_file_on_juju_unit('/home/ubuntu/.bashrc',
4837+ '/var/lib/jenkins/.bashrc',
4838+ unit_str, owner="jenkins", group="jenkins",
4839+ perms="640")
4840+
4841+ copy_file_on_juju_unit('/home/ubuntu/.profile',
4842+ '/var/lib/jenkins/.profile',
4843+ unit_str, owner="jenkins", group="jenkins",
4844+ perms="640")
4845+
4846+
4847+def main():
4848+ '''Main procedure. And, Go!'''
4849+
4850+ conf = read_yaml(DEPLOY_CONFIG_FILE)
4851+ d_models_data = generate_models_data(conf)
4852+
4853+ # Build networks and subnets if called for by config
4854+ if conf['osci']['network']['split']:
4855+ ksv3_session = get_keystone_v3_session()
4856+ neutron_c = get_neutron_client(ksv3_session)
4857+
4858+ build_nets_and_subs(neutron_c,
4859+ d_models_data,
4860+ conf)
4861+
4862+ write_models_data_files(conf, d_models_data)
4863+
4864+ misc_file_ops(conf, d_models_data)
4865
4866
4867 if __name__ == '__main__':
4868
4869=== added file 'deploy/osci-set-subnets-dns.sh'
4870--- deploy/osci-set-subnets-dns.sh 1970-01-01 00:00:00 +0000
4871+++ deploy/osci-set-subnets-dns.sh 2017-05-27 00:22:36 +0000
4872@@ -0,0 +1,14 @@
4873+#!/bin/bash -uex
4874+# Set nameserver value to the ip address of the current host (bastion) for all
4875+# neutron subnets.
4876+
4877+nameserver_ip="$(ip a | grep glob | head -n 1 | awk '{ print $2 }' | cut -d '/' -f 1)"
4878+subnets=$(mktemp)
4879+openstack subnet list | grep "\/" > $subnets
4880+
4881+while read i; do
4882+ subnet_id=$(echo $i | awk '{ print $2 }')
4883+ openstack subnet set --no-dns-nameservers --dns-nameserver ${nameserver_ip} ${subnet_id}
4884+done < $subnets
4885+
4886+rm -fv $subnets
4887
4888=== renamed directory 'deployment/bin' => 'deploy/post-deploy'
4889=== added file 'deploy/post-deploy/100-repo-boot.sh'
4890--- deploy/post-deploy/100-repo-boot.sh 1970-01-01 00:00:00 +0000
4891+++ deploy/post-deploy/100-repo-boot.sh 2017-05-27 00:22:36 +0000
4892@@ -0,0 +1,20 @@
4893+#!/bin/bash -uex
4894+echo $0
4895+
4896+. config/env-common
4897+
4898+f_dst="${JENKINS_HOME}"
4899+f_tmp="${U_HOME}"
4900+base_src="assets"
4901+
4902+for f_src in osci-repo-boot.sh osci-repo-boot-clean.sh; do
4903+ stat -t ${base_src}/${f_src}
4904+ for unit in $UNITS; do
4905+ juju scp ${base_src}/${f_src} ${unit}:${f_tmp}
4906+ juju ssh ${unit} "sudo cp -fv ${f_tmp}/${f_src} ${f_dst} &&\
4907+ sudo chown jenkins:jenkins ${f_dst} &&\
4908+ sudo chmod 750 ${f_dst} &&\
4909+ sudo chown root:root ${f_dst}/${f_src} &&\
4910+ sudo chmod 775 ${f_dst}/${f_src}"
4911+ done
4912+done
4913
4914=== added file 'deploy/post-deploy/101-ssh-imports.sh'
4915--- deploy/post-deploy/101-ssh-imports.sh 1970-01-01 00:00:00 +0000
4916+++ deploy/post-deploy/101-ssh-imports.sh 2017-05-27 00:22:36 +0000
4917@@ -0,0 +1,9 @@
4918+#!/bin/bash -ex
4919+echo $0
4920+. config/env-common
4921+
4922+ssh_import="1chb1n james-page admcleod thedac vds"
4923+
4924+juju run --all "sudo -H -u jenkins bash -c 'ssh-import-id ${ssh_import}'"
4925+juju run --all "sudo -H -u ubuntu bash -c 'ssh-import-id ${ssh_import}'"
4926+
4927
4928=== modified file 'deploy/post-deploy/102-ssh-creds.sh'
4929--- deployment/bin/102-ssh-creds.sh 2015-02-18 05:22:57 +0000
4930+++ deploy/post-deploy/102-ssh-creds.sh 2017-05-27 00:22:36 +0000
4931@@ -1,46 +1,45 @@
4932-#!/bin/bash -e
4933+#!/bin/bash -ex
4934 echo $0
4935
4936 # Copy ssh key files and init bzr lp-login on master and all slaves,
4937 # verify bzr checkout capability as the jenkins user.
4938 # FYI nfs checkout is unrelated and arbitrary, chosen for small size ~100k.
4939
4940-. $(dirname $0)/../../env-common
4941+. config/env-common
4942
4943 f_dst="${JENKINS_HOME}/.ssh"
4944 f_tmp="${U_HOME}/.ssh"
4945 f_src="${PUB_KEY} ${PRIV_KEY} ${SSH_CONF}"
4946-base_src="deploy-files"
4947+base_src="assets"
4948 lp_hk=$(cat ${base_src}/launchpad_host_keys)
4949 d_str=$(date +'%H%M%S')
4950
4951 for srcs in $f_src; do
4952- if [ ! -f "${base_src}/${srcs}" ]; then
4953- echo "Local source file ${srcs} not found."
4954- pwd
4955- exit 1
4956- fi
4957+ if [ ! -f "${base_src}/${srcs}" ]; then
4958+ echo "Local source file ${srcs} not found."
4959+ pwd
4960+ exit 1
4961+ fi
4962 done
4963
4964 for unit in $UNITS; do
4965- echo "Copying SSH key files to ${unit}..."
4966- juju ssh ${unit} "sudo mkdir -vp ${f_dst} && sudo mkdir -p ${f_tmp} &&\
4967- sudo echo '${lp_hk}' > /tmp/hk${d_str} &&\
4968- sudo cp -fv /tmp/hk${d_str} /root/.ssh/known_hosts &&\
4969- sudo mv -fv /tmp/hk${d_str} ${f_dst}/known_hosts"
4970-
4971- for srcs in $f_src; do
4972- echo " $srcs --> ${unit}:${f_tmp}"
4973- juju scp ${base_src}/${srcs} ${unit}:${f_tmp}
4974- juju ssh ${unit} "sudo cp -fv ${f_tmp}/${srcs} ${f_dst}"
4975- done
4976-
4977- juju ssh ${unit} "sudo chown -R jenkins:nogroup ${f_dst} &&\
4978- sudo chown -R ubuntu:nogroup ${f_tmp} &&\
4979- sudo chown -R jenkins:jenkins ${f_dst} &&\
4980- sudo chmod 0600 ${f_dst}/known_hosts &&\
4981- sudo su - jenkins -c 'bzr whoami \"${BZR_WHOAMI}\"' &&\
4982- sudo su - jenkins -c 'bzr launchpad-login $LP_ID' &&\
4983- sudo su - jenkins -c 'bzr co --lightweight lp:charms/nfs /tmp/nfs${d_str}'"
4984+ echo "Copying SSH key files to ${unit}..."
4985+ juju ssh ${unit} "sudo mkdir -vp ${f_dst} && sudo mkdir -p ${f_tmp} &&\
4986+ sudo echo '${lp_hk}' > /tmp/hk${d_str} &&\
4987+ sudo cp -fv /tmp/hk${d_str} /root/.ssh/known_hosts &&\
4988+ sudo mv -fv /tmp/hk${d_str} ${f_dst}/known_hosts"
4989+
4990+ for srcs in $f_src; do
4991+ echo " $srcs --> ${unit}:${f_tmp}"
4992+ juju scp ${base_src}/${srcs} ${unit}:${f_tmp}
4993+ juju ssh ${unit} "sudo cp -fv ${f_tmp}/${srcs} ${f_dst}"
4994+ done
4995+
4996+ juju ssh ${unit} "sudo chown -R jenkins:nogroup ${f_dst} &&\
4997+ sudo chown -R ubuntu:nogroup ${f_tmp} &&\
4998+ sudo chown -R jenkins:jenkins ${f_dst} &&\
4999+ sudo chmod 0600 ${f_dst}/known_hosts &&\
5000+ sudo su - jenkins -c 'bzr whoami \"${BZR_WHOAMI}\"' &&\
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches