diff options
-rw-r--r-- | .zuul.yaml | 4 | ||||
-rwxr-xr-x | tests/base.py | 6 | ||||
-rw-r--r-- | tests/fixtures/config/inventory/git/common-config/zuul.yaml | 2 | ||||
-rw-r--r-- | tests/unit/test_inventory.py | 10 | ||||
-rw-r--r-- | zuul/driver/github/githubconnection.py | 20 | ||||
-rw-r--r-- | zuul/executor/server.py | 4 | ||||
-rw-r--r-- | zuul/model.py | 1 |
7 files changed, 42 insertions, 5 deletions
diff --git a/.zuul.yaml b/.zuul.yaml index a87c1965a..7473ad3db 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -65,7 +65,5 @@ - zuul-stream-functional post: jobs: - - publish-openstack-sphinx-docs-infra: - vars: - sphinx_python: python3 + - publish-openstack-sphinx-docs-infra-python3 - publish-openstack-python-branch-tarball diff --git a/tests/base.py b/tests/base.py index a51eeddcd..7e63129ea 100755 --- a/tests/base.py +++ b/tests/base.py @@ -1432,7 +1432,8 @@ class RecordingAnsibleJob(zuul.executor.server.AnsibleJob): self.log.debug("hostlist") hosts = super(RecordingAnsibleJob, self).getHostList(args) for host in hosts: - host['host_vars']['ansible_connection'] = 'local' + if not host['host_vars'].get('ansible_connection'): + host['host_vars']['ansible_connection'] = 'local' hosts.append(dict( name=['localhost'], @@ -1738,6 +1739,9 @@ class FakeNodepool(object): executor='fake-nodepool') if 'fakeuser' in node_type: data['username'] = 'fakeuser' + if 'windows' in node_type: + data['connection_type'] = 'winrm' + data = json.dumps(data).encode('utf8') path = self.client.create(path, data, makepath=True, diff --git a/tests/fixtures/config/inventory/git/common-config/zuul.yaml b/tests/fixtures/config/inventory/git/common-config/zuul.yaml index ad530a783..36789a321 100644 --- a/tests/fixtures/config/inventory/git/common-config/zuul.yaml +++ b/tests/fixtures/config/inventory/git/common-config/zuul.yaml @@ -38,6 +38,8 @@ label: default-label - name: fakeuser label: fakeuser-label + - name: windows + label: windows-label - job: name: base diff --git a/tests/unit/test_inventory.py b/tests/unit/test_inventory.py index 1c41f5fa5..be504475a 100644 --- a/tests/unit/test_inventory.py +++ b/tests/unit/test_inventory.py @@ -119,5 +119,15 @@ class TestInventory(ZuulTestCase): self.assertEqual( inventory['all']['hosts'][node_name]['ansible_user'], username) + # check if the nodes use the correct or no ansible_connection + if node_name == 'windows': + self.assertEqual( + inventory['all']['hosts'][node_name]['ansible_connection'], + 'winrm') + else: + self.assertEqual( + 'local', + inventory['all']['hosts'][node_name]['ansible_connection']) + self.executor_server.release() self.waitUntilSettled() diff --git a/zuul/driver/github/githubconnection.py b/zuul/driver/github/githubconnection.py index f987f4712..82cac6b95 100644 --- a/zuul/driver/github/githubconnection.py +++ b/zuul/driver/github/githubconnection.py @@ -24,6 +24,7 @@ import re import cachecontrol from cachecontrol.cache import DictCache +from cachecontrol.heuristics import BaseHeuristic import iso8601 import jwt import requests @@ -431,9 +432,26 @@ class GithubConnection(BaseConnection): # NOTE(jamielennox): Better here would be to cache to memcache or file # or something external - but zuul already sucks at restarting so in # memory probably doesn't make this much worse. + + # NOTE(tobiash): Unlike documented cachecontrol doesn't priorize + # the etag caching but doesn't even re-request until max-age was + # elapsed. + # + # Thus we need to add a custom caching heuristic which simply drops + # the cache-control header containing max-age. This way we force + # cachecontrol to only rely on the etag headers. + # + # http://cachecontrol.readthedocs.io/en/latest/etags.html + # http://cachecontrol.readthedocs.io/en/latest/custom_heuristics.html + class NoAgeHeuristic(BaseHeuristic): + def update_headers(self, response): + if 'cache-control' in response.headers: + del response.headers['cache-control'] + self.cache_adapter = cachecontrol.CacheControlAdapter( DictCache(), - cache_etags=True) + cache_etags=True, + heuristic=NoAgeHeuristic()) # The regex is based on the connection host. We do not yet support # cross-connection dependency gathering diff --git a/zuul/executor/server.py b/zuul/executor/server.py index 22dee9aca..5a710a62d 100644 --- a/zuul/executor/server.py +++ b/zuul/executor/server.py @@ -931,6 +931,10 @@ class AnsibleJob(object): if username: host_vars['ansible_user'] = username + connection_type = node.get('connection_type') + if connection_type: + host_vars['ansible_connection'] = connection_type + host_keys = [] for key in node.get('host_keys'): if port != 22: diff --git a/zuul/model.py b/zuul/model.py index 77770b793..dbae1f296 100644 --- a/zuul/model.py +++ b/zuul/model.py @@ -384,6 +384,7 @@ class Node(object): self.private_ipv4 = None self.public_ipv6 = None self.connection_port = 22 + self.connection_type = None self._keys = [] self.az = None self.provider = None |