Merge ~jdkandersson/jenkins-agent-charm:switch-to-agent-managed-jnlp-download into jenkins-agent-charm:master
- Git
- lp:~jdkandersson/jenkins-agent-charm
- switch-to-agent-managed-jnlp-download
- Merge into master
Status: | Merged |
---|---|
Approved by: | Haw Loeung |
Approved revision: | 013b75593fc69bfb5d7d5789b3b0a0d698650968 |
Merged at revision: | 0f5d1b9c7dbaee2ecc2fec4093ca5c53b5b44b79 |
Proposed branch: | ~jdkandersson/jenkins-agent-charm:switch-to-agent-managed-jnlp-download |
Merge into: | jenkins-agent-charm:master |
Diff against target: |
233 lines (+71/-25) 8 files modified
.gitignore (+2/-0) charmcraft.yaml (+17/-0) config.yaml (+9/-0) files/download-slave.sh (+21/-9) files/jenkins-slave-systemd-config (+1/-1) reactive/jenkins_slave.py (+5/-5) templates/jenkins-slave-default (+10/-4) tests/unit/test_jenkins_slave.py (+6/-6) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Haw Loeung | +1 | Approve | |
Arturo Enrique Seijas Fernández | Approve | ||
Canonical IS Reviewers | Pending | ||
Review via email:
|
Commit message
Use agent.jar to download jnlp file rather than download it separately
Description of the change
Newer versions of Jenkins no longer allow the downloading of the JNLP without authentication which is why the Jenkins agent machine charm fails to start up. This fix gets the agent.jar file to perform the download by passing an additional parameter to it.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
🤖 Canonical IS Merge Bot (canonical-is-mergebot) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Arturo Enrique Seijas Fernández (arturo-seijas) wrote : | # |
LGTM
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Haw Loeung (hloeung) wrote : | # |
Per Mattermost, is the restriction on the ability to download JNLP's documented somewhere on the Jenkins site?
Would this continue to work or break if we were to roll out the latest charm changes to an existing environment running an older Jenkins version?
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Johann David Krister Andersson (jdkandersson) wrote : | # |
> Per Mattermost, is the restriction on the ability to download JNLP's
> documented somewhere on the Jenkins site?
>
> Would this continue to work or break if we were to roll out the latest charm
> changes to an existing environment running an older Jenkins version?
I found some notes in a Jira issue: https:/
I have tested this against all versions of Jenkins running in production (back to 2.150)
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Haw Loeung (hloeung) wrote : | # |
Comments inline. It's a lengthy diff. Can we split out the various whitespace and formatting changes to a different merge proposal (and make it either a pre-req. of for this or this a pre-req. for that)?
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Johann David Krister Andersson (jdkandersson) : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
🤖 Canonical IS Merge Bot (canonical-is-mergebot) wrote : | # |
Change successfully merged at revision 0f5d1b9c7dbaee2
Preview Diff
1 | diff --git a/.gitignore b/.gitignore | |||
2 | index ceaa0a2..7682ff5 100644 | |||
3 | --- a/.gitignore | |||
4 | +++ b/.gitignore | |||
5 | @@ -9,3 +9,5 @@ __pycache__/ | |||
6 | 9 | builds/ | 9 | builds/ |
7 | 10 | deps/ | 10 | deps/ |
8 | 11 | revision | 11 | revision |
9 | 12 | .vscode | ||
10 | 13 | *.charm | ||
11 | diff --git a/charmcraft.yaml b/charmcraft.yaml | |||
12 | 12 | new file mode 100644 | 14 | new file mode 100644 |
13 | index 0000000..b5b7ae1 | |||
14 | --- /dev/null | |||
15 | +++ b/charmcraft.yaml | |||
16 | @@ -0,0 +1,17 @@ | |||
17 | 1 | type: "charm" | ||
18 | 2 | bases: | ||
19 | 3 | - build-on: | ||
20 | 4 | - name: "ubuntu" | ||
21 | 5 | channel: "20.04" | ||
22 | 6 | run-on: | ||
23 | 7 | - name: "ubuntu" | ||
24 | 8 | channel: "16.04" | ||
25 | 9 | - name: "ubuntu" | ||
26 | 10 | channel: "18.04" | ||
27 | 11 | - name: "ubuntu" | ||
28 | 12 | channel: "20.04" | ||
29 | 13 | parts: | ||
30 | 14 | charm: | ||
31 | 15 | source: . | ||
32 | 16 | plugin: reactive | ||
33 | 17 | build-snaps: [charm] | ||
34 | diff --git a/config.yaml b/config.yaml | |||
35 | index 50380ce..de60423 100644 | |||
36 | --- a/config.yaml | |||
37 | +++ b/config.yaml | |||
38 | @@ -26,3 +26,12 @@ options: | |||
39 | 26 | description: | | 26 | description: | |
40 | 27 | A comma-separated list of nagios servicegroups. | 27 | A comma-separated list of nagios servicegroups. |
41 | 28 | If left empty, the nagios_context will be used as the servicegroup | 28 | If left empty, the nagios_context will be used as the servicegroup |
42 | 29 | download_jnlp_file: | ||
43 | 30 | default: false | ||
44 | 31 | type: boolean | ||
45 | 32 | description: | | ||
46 | 33 | When `true`, use the DEPRECATED agent startup method that downloads the | ||
47 | 34 | JNLP file before starting the agent. The JNLP endpoint requires | ||
48 | 35 | authentication in newer versions of Jenkins meaning that the JNLP | ||
49 | 36 | download will fail. This parameter is deprecated and will be removed in | ||
50 | 37 | future versions of this charm. | ||
51 | diff --git a/files/download-slave.sh b/files/download-slave.sh | |||
52 | index dfe1462..60097e2 100755 | |||
53 | --- a/files/download-slave.sh | |||
54 | +++ b/files/download-slave.sh | |||
55 | @@ -7,7 +7,8 @@ | |||
56 | 7 | SLAVE_JAR=/var/run/jenkins/slave.jar | 7 | SLAVE_JAR=/var/run/jenkins/slave.jar |
57 | 8 | JENKINS_URL=$1 | 8 | JENKINS_URL=$1 |
58 | 9 | JENKINS_HOSTNAME=$2 | 9 | JENKINS_HOSTNAME=$2 |
60 | 10 | JENKINS_JNLP=$3 | 10 | JENKINS_JNLP_FILE=$3 |
61 | 11 | DOWNLOAD_JNLP_FILE=$4 | ||
62 | 11 | 12 | ||
63 | 12 | if [ -z "$JENKINS_URL" ] | 13 | if [ -z "$JENKINS_URL" ] |
64 | 13 | then | 14 | then |
65 | @@ -15,20 +16,31 @@ then | |||
66 | 15 | exit 1 | 16 | exit 1 |
67 | 16 | fi | 17 | fi |
68 | 17 | 18 | ||
69 | 19 | # Retrieve the JNLP file from Jenkins | ||
70 | 20 | if [ "$DOWNLOAD_JNLP_FILE" = "True" ] | ||
71 | 21 | then | ||
72 | 22 | echo "Downloading agent.jnlp from ${JENKINS_URL}..." | ||
73 | 23 | wget -q ${JENKINS_URL}/computer/${JENKINS_HOSTNAME}/jenkins-agent.jnlp -O ${JENKINS_JNLP_FILE}.new || wget -q ${JENKINS_URL}/computer/${JENKINS_HOSTNAME}/slave-agent.jnlp -O ${JENKINS_JNLP_FILE}.new | ||
74 | 24 | sed -i -r "s|(<argument>-url</argument>.*</argument>)|\1<argument>-url</argument><argument>${JENKINS_URL}</argument>|g" ${JENKINS_JNLP_FILE}.new | ||
75 | 25 | |||
76 | 26 | # Check to make sure that JNLP file was downloaded | ||
77 | 27 | if [ -s ${JENKINS_JNLP_FILE}.new ] | ||
78 | 28 | then | ||
79 | 29 | mv ${JENKINS_JNLP_FILE}.new ${JENKINS_JNLP_FILE} | ||
80 | 30 | else | ||
81 | 31 | echo "Unable to download the JNLP file" | ||
82 | 32 | exit 1 | ||
83 | 33 | fi | ||
84 | 34 | fi | ||
85 | 35 | |||
86 | 18 | # Retrieve Slave JAR from Jenkins | 36 | # Retrieve Slave JAR from Jenkins |
87 | 19 | echo "Downloading slave.jar from ${JENKINS_URL}..." | 37 | echo "Downloading slave.jar from ${JENKINS_URL}..." |
88 | 20 | wget -q -O ${SLAVE_JAR}.new ${JENKINS_URL}/jnlpJars/slave.jar | 38 | wget -q -O ${SLAVE_JAR}.new ${JENKINS_URL}/jnlpJars/slave.jar |
89 | 21 | 39 | ||
97 | 22 | # Retrive JNLP file from Jenkins | 40 | # Check to make sure slave.jar was downloaded. |
98 | 23 | echo "Downloading agent.jnlp from ${JENKINS_URL}..." | 41 | if [ -s ${SLAVE_JAR}.new ] |
92 | 24 | wget -q ${JENKINS_URL}/computer/${JENKINS_HOSTNAME}/jenkins-agent.jnlp -O ${JENKINS_JNLP}.new || wget -q ${JENKINS_URL}/computer/${JENKINS_HOSTNAME}/slave-agent.jnlp -O ${JENKINS_JNLP}.new | ||
93 | 25 | sed -i -r "s|(<argument>-url</argument>.*</argument>)|\1<argument>-url</argument><argument>${JENKINS_URL}</argument>|g" ${JENKINS_JNLP}.new | ||
94 | 26 | |||
95 | 27 | # Check to make sure slave.jar and agent.jnlp were downloaded. | ||
96 | 28 | if [ -s ${SLAVE_JAR}.new ] && [ -s ${JENKINS_JNLP}.new ] | ||
99 | 29 | then | 42 | then |
100 | 30 | mv ${SLAVE_JAR}.new ${SLAVE_JAR} | 43 | mv ${SLAVE_JAR}.new ${SLAVE_JAR} |
101 | 31 | mv ${JENKINS_JNLP}.new ${JENKINS_JNLP} | ||
102 | 32 | exit 0 | 44 | exit 0 |
103 | 33 | else | 45 | else |
104 | 34 | exit 1 | 46 | exit 1 |
105 | diff --git a/files/jenkins-slave-systemd-config b/files/jenkins-slave-systemd-config | |||
106 | index 8148aaa..11eac18 100644 | |||
107 | --- a/files/jenkins-slave-systemd-config | |||
108 | +++ b/files/jenkins-slave-systemd-config | |||
109 | @@ -11,7 +11,7 @@ Type=simple | |||
110 | 11 | # Always be Jenkinsing! | 11 | # Always be Jenkinsing! |
111 | 12 | Restart=always | 12 | Restart=always |
112 | 13 | RestartSec=3 | 13 | RestartSec=3 |
114 | 14 | ExecStartPre=/bin/bash -c '[ -r /etc/default/jenkins-slave ] && . /etc/default/jenkins-slave ; [ -n "$JENKINS_URL" ] || { exit 1; }; mkdir $JENKINS_RUN > /dev/null 2>&1 || true ; chown -R $JENKINS_USER $JENKINS_RUN || true ; /usr/local/sbin/download-slave.sh $JENKINS_URL $JENKINS_HOSTNAME $JENKINS_JNLP; chown -R $JENKINS_USER $JENKINS_HOME || true' | 14 | ExecStartPre=/bin/bash -c '[ -r /etc/default/jenkins-slave ] && . /etc/default/jenkins-slave ; [ -n "$JENKINS_URL" ] || { exit 1; }; mkdir $JENKINS_RUN > /dev/null 2>&1 || true ; chown -R $JENKINS_USER $JENKINS_RUN || true ; /usr/local/sbin/download-slave.sh $JENKINS_URL $JENKINS_HOSTNAME $JENKINS_JNLP_FILE $DOWNLOAD_JNLP_FILE; chown -R $JENKINS_USER $JENKINS_HOME || true' |
115 | 15 | ExecStart=/bin/bash -c '[ -r /etc/default/jenkins-slave ] && . /etc/default/jenkins-slave ; exec start-stop-daemon --start -c $JENKINS_USER --exec $JAVA --name jenkins-slave -- $JAVA_ARGS -jar $JENKINS_RUN/slave.jar $JENKINS_ARGS' | 15 | ExecStart=/bin/bash -c '[ -r /etc/default/jenkins-slave ] && . /etc/default/jenkins-slave ; exec start-stop-daemon --start -c $JENKINS_USER --exec $JAVA --name jenkins-slave -- $JAVA_ARGS -jar $JENKINS_RUN/slave.jar $JENKINS_ARGS' |
116 | 16 | 16 | ||
117 | 17 | [Install] | 17 | [Install] |
118 | diff --git a/reactive/jenkins_slave.py b/reactive/jenkins_slave.py | |||
119 | index dcb947d..91f281c 100644 | |||
120 | --- a/reactive/jenkins_slave.py | |||
121 | +++ b/reactive/jenkins_slave.py | |||
122 | @@ -93,10 +93,10 @@ def configure_jenkins_slave(): | |||
123 | 93 | 93 | ||
124 | 94 | if config.get('master_url'): | 94 | if config.get('master_url'): |
125 | 95 | status.maintenance("Using 'master_url' to configure the slave.") | 95 | status.maintenance("Using 'master_url' to configure the slave.") |
127 | 96 | write_default_conf(config.get('master_url')) | 96 | write_default_conf(config.get('master_url'), download_jnlp_file=config.get('download_jnlp_file')) |
128 | 97 | elif kv.get('url'): | 97 | elif kv.get('url'): |
129 | 98 | status.maintenance("Using url from relation as 'master_url'") | 98 | status.maintenance("Using url from relation as 'master_url'") |
131 | 99 | write_default_conf(kv.get('url'), secret=kv.get('secret')) | 99 | write_default_conf(kv.get('url'), secret=kv.get('secret'), download_jnlp_file=config.get('download_jnlp_file')) |
132 | 100 | else: | 100 | else: |
133 | 101 | status.maintenance("No 'master_url' set; not configuring slave at this time.") | 101 | status.maintenance("No 'master_url' set; not configuring slave at this time.") |
134 | 102 | status.blocked("requires either slave relation or 'master_url'") | 102 | status.blocked("requires either slave relation or 'master_url'") |
135 | @@ -191,7 +191,7 @@ def slave_relation(): | |||
136 | 191 | secret = hookenv.relation_get('secret') | 191 | secret = hookenv.relation_get('secret') |
137 | 192 | kv.set('url', url) | 192 | kv.set('url', url) |
138 | 193 | kv.set('secret', secret) | 193 | kv.set('secret', secret) |
140 | 194 | write_default_conf(url, secret=secret) | 194 | write_default_conf(url, secret=secret, download_jnlp_file=config.get('download_jnlp_file')) |
141 | 195 | else: | 195 | else: |
142 | 196 | hookenv.log("Master hasn't exported its url yet, exiting...") | 196 | hookenv.log("Master hasn't exported its url yet, exiting...") |
143 | 197 | return | 197 | return |
144 | @@ -233,14 +233,14 @@ def file_to_units(local_path, unit_path, perms=None, owner='root', group='root') | |||
145 | 233 | 233 | ||
146 | 234 | 234 | ||
147 | 235 | def write_default_conf( | 235 | def write_default_conf( |
149 | 236 | master_url=None, owner='root', group='root', conf_path='/etc/default/jenkins-slave', secret=None | 236 | master_url=None, owner='root', group='root', conf_path='/etc/default/jenkins-slave', secret=None, download_jnlp_file=False |
150 | 237 | ): | 237 | ): |
151 | 238 | templates_dir = os.path.join(hookenv.charm_dir(), 'templates') | 238 | templates_dir = os.path.join(hookenv.charm_dir(), 'templates') |
152 | 239 | slave_host = hookenv.local_unit().replace('/', '-') | 239 | slave_host = hookenv.local_unit().replace('/', '-') |
153 | 240 | templating.render( | 240 | templating.render( |
154 | 241 | 'jenkins-slave-default', | 241 | 'jenkins-slave-default', |
155 | 242 | conf_path, | 242 | conf_path, |
157 | 243 | {'master_url': master_url, 'slave_host': slave_host, 'secret': secret}, | 243 | {'master_url': master_url, 'slave_host': slave_host, 'secret': secret, 'download_jnlp_file': download_jnlp_file}, |
158 | 244 | owner=owner, | 244 | owner=owner, |
159 | 245 | group=group, | 245 | group=group, |
160 | 246 | perms=0o444, | 246 | perms=0o444, |
161 | diff --git a/templates/jenkins-slave-default b/templates/jenkins-slave-default | |||
162 | index b3b2148..0fa9937 100644 | |||
163 | --- a/templates/jenkins-slave-default | |||
164 | +++ b/templates/jenkins-slave-default | |||
165 | @@ -60,14 +60,20 @@ JENKINS_SLAVE_LOG=/var/log/jenkins/$NAME.log | |||
166 | 60 | # to change the OS limits setup. | 60 | # to change the OS limits setup. |
167 | 61 | MAXOPENFILES=8192 | 61 | MAXOPENFILES=8192 |
168 | 62 | 62 | ||
171 | 63 | # Jenkins jnlp file | 63 | # Jenkins jnlp URL |
172 | 64 | JENKINS_JNLP="${JENKINS_HOME}/agent.jnlp" | 64 | DOWNLOAD_JNLP_FILE="{{ download_jnlp_file }}" |
173 | 65 | JENKINS_JNLP_FILE="${JENKINS_HOME}/agent.jnlp" | ||
174 | 66 | {% if download_jnlp_file %} | ||
175 | 67 | JENKINS_JNLP_URL="file:${JENKINS_JNLP_FILE}" | ||
176 | 68 | {% else %} | ||
177 | 69 | JENKINS_JNLP_URL="${JENKINS_URL}/computer/${JENKINS_HOSTNAME}/slave-agent.jnlp" | ||
178 | 70 | {% endif %} | ||
179 | 65 | 71 | ||
180 | 66 | # Arguments to pass to jenkins slave on startup | 72 | # Arguments to pass to jenkins slave on startup |
181 | 67 | {% if secret %} | 73 | {% if secret %} |
182 | 68 | JENKINS_SLAVE_SECRET="{{ secret }}" | 74 | JENKINS_SLAVE_SECRET="{{ secret }}" |
183 | 69 | 75 | ||
185 | 70 | JENKINS_ARGS="-jnlpUrl file:${JENKINS_JNLP} -secret ${JENKINS_SLAVE_SECRET}" | 76 | JENKINS_ARGS="-jnlpUrl ${JENKINS_JNLP_URL} -secret ${JENKINS_SLAVE_SECRET} -workDir ${JENKINS_HOME}" |
186 | 71 | {% else %} | 77 | {% else %} |
188 | 72 | JENKINS_ARGS="-jnlpUrl file:${JENKINS_JNLP}" | 78 | JENKINS_ARGS="-jnlpUrl ${JENKINS_JNLP_URL} -workDir ${JENKINS_HOME}" |
189 | 73 | {% endif %} | 79 | {% endif %} |
190 | diff --git a/tests/unit/test_jenkins_slave.py b/tests/unit/test_jenkins_slave.py | |||
191 | index 1300c73..6d32481 100644 | |||
192 | --- a/tests/unit/test_jenkins_slave.py | |||
193 | +++ b/tests/unit/test_jenkins_slave.py | |||
194 | @@ -201,10 +201,10 @@ class TestSetDefaultConf(unittest.TestCase): | |||
195 | 201 | def test_configure_jenkins_slave_master_url( | 201 | def test_configure_jenkins_slave_master_url( |
196 | 202 | self, file_to_units, write_default_conf, unitdata_kv, config, set_flag, clear_flag | 202 | self, file_to_units, write_default_conf, unitdata_kv, config, set_flag, clear_flag |
197 | 203 | ): | 203 | ): |
199 | 204 | config.return_value = {'master_url': 'http://10.1.1.1:8080'} | 204 | config.return_value = {'master_url': 'http://10.1.1.1:8080', 'download_jnlp_file': False} |
200 | 205 | unitdata_kv.return_value = {} | 205 | unitdata_kv.return_value = {} |
201 | 206 | jenkins_slave.configure_jenkins_slave() | 206 | jenkins_slave.configure_jenkins_slave() |
203 | 207 | self.assertFalse(write_default_conf.assert_called_once_with('http://10.1.1.1:8080')) | 207 | self.assertFalse(write_default_conf.assert_called_once_with('http://10.1.1.1:8080', download_jnlp_file=False)) |
204 | 208 | self.assertFalse(set_flag.assert_has_calls([mock.call('jenkins-slave.configured')], any_order=True)) | 208 | self.assertFalse(set_flag.assert_has_calls([mock.call('jenkins-slave.configured')], any_order=True)) |
205 | 209 | expected = [mock.call('jenkins-slave.active'), mock.call('nagios-nrpe.configured')] | 209 | expected = [mock.call('jenkins-slave.active'), mock.call('nagios-nrpe.configured')] |
206 | 210 | self.assertFalse(clear_flag.assert_has_calls(expected, any_order=True)) | 210 | self.assertFalse(clear_flag.assert_has_calls(expected, any_order=True)) |
207 | @@ -218,11 +218,11 @@ class TestSetDefaultConf(unittest.TestCase): | |||
208 | 218 | def test_configure_jenkins_slave_relation_url( | 218 | def test_configure_jenkins_slave_relation_url( |
209 | 219 | self, file_to_units, write_default_conf, unitdata_kv, config, set_flag, clear_flag | 219 | self, file_to_units, write_default_conf, unitdata_kv, config, set_flag, clear_flag |
210 | 220 | ): | 220 | ): |
212 | 221 | config.return_value = {} | 221 | config.return_value = {'download_jnlp_file': False} |
213 | 222 | unitdata_kv.return_value = {'url': 'http://10.22.22.22:8080'} | 222 | unitdata_kv.return_value = {'url': 'http://10.22.22.22:8080'} |
214 | 223 | jenkins_slave.configure_jenkins_slave() | 223 | jenkins_slave.configure_jenkins_slave() |
215 | 224 | self.assertTrue(write_default_conf.called_once_with('http://10.22.22.22:8080')) | 224 | self.assertTrue(write_default_conf.called_once_with('http://10.22.22.22:8080')) |
217 | 225 | self.assertEqual(write_default_conf.call_args_list, [mock.call('http://10.22.22.22:8080', secret=None)]) | 225 | self.assertEqual(write_default_conf.call_args_list, [mock.call('http://10.22.22.22:8080', secret=None, download_jnlp_file=False)]) |
218 | 226 | self.assertFalse(set_flag.assert_has_calls([mock.call('jenkins-slave.configured')], any_order=True)) | 226 | self.assertFalse(set_flag.assert_has_calls([mock.call('jenkins-slave.configured')], any_order=True)) |
219 | 227 | expected = [mock.call('jenkins-slave.active'), mock.call('nagios-nrpe.configured')] | 227 | expected = [mock.call('jenkins-slave.active'), mock.call('nagios-nrpe.configured')] |
220 | 228 | self.assertFalse(clear_flag.assert_has_calls(expected, any_order=True)) | 228 | self.assertFalse(clear_flag.assert_has_calls(expected, any_order=True)) |
221 | @@ -236,10 +236,10 @@ class TestSetDefaultConf(unittest.TestCase): | |||
222 | 236 | def test_configure_jenkins_slave_relation_url_with_secret( | 236 | def test_configure_jenkins_slave_relation_url_with_secret( |
223 | 237 | self, file_to_units, write_default_conf, unitdata_kv, config, set_flag, clear_flag | 237 | self, file_to_units, write_default_conf, unitdata_kv, config, set_flag, clear_flag |
224 | 238 | ): | 238 | ): |
226 | 239 | config.return_value = {} | 239 | config.return_value = {'download_jnlp_file': False} |
227 | 240 | unitdata_kv.return_value = {'url': 'http://10.22.22.22:8080', 'secret': 'sekrit'} | 240 | unitdata_kv.return_value = {'url': 'http://10.22.22.22:8080', 'secret': 'sekrit'} |
228 | 241 | jenkins_slave.configure_jenkins_slave() | 241 | jenkins_slave.configure_jenkins_slave() |
230 | 242 | self.assertEqual(write_default_conf.call_args_list, [mock.call('http://10.22.22.22:8080', secret='sekrit')]) | 242 | self.assertEqual(write_default_conf.call_args_list, [mock.call('http://10.22.22.22:8080', secret='sekrit', download_jnlp_file=False)]) |
231 | 243 | self.assertFalse(set_flag.assert_has_calls([mock.call('jenkins-slave.configured')], any_order=True)) | 243 | self.assertFalse(set_flag.assert_has_calls([mock.call('jenkins-slave.configured')], any_order=True)) |
232 | 244 | expected = [mock.call('jenkins-slave.active'), mock.call('nagios-nrpe.configured')] | 244 | expected = [mock.call('jenkins-slave.active'), mock.call('nagios-nrpe.configured')] |
233 | 245 | self.assertFalse(clear_flag.assert_has_calls(expected, any_order=True)) | 245 | self.assertFalse(clear_flag.assert_has_calls(expected, any_order=True)) |
This merge proposal is being monitored by mergebot. Change the status to Approved to merge.