)]}'
{"doc/source/user/jobs.rst":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"fc75d56b1c296c860f23839b66dc22c4755e21b0","unresolved":false,"context_lines":[{"line_number":216,"context_line":"A job using a container build resources has access to a zuul_resources variable"},{"line_number":217,"context_line":"that describes the resource:"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":".. var:: zuul_resources"},{"line_number":220,"context_line":"   :type: dict"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"   A dictionary of label keys, each value consists of:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_3066fc57","line":219,"updated":"2018-12-10 16:19:14.000000000","message":"Since we already have a \u0027zuul\u0027 key at the top level, how about we turn that \u0027_\u0027 into a \u0027.\u0027?\n\nThis is currently keyed by label, however labels aren\u0027t unique in a nodeset, so we should probably key it by node name.\n\nSo how about: zuul.resources[\u0027node-name\u0027].context ?","commit_id":"4c9bc7a5086b67d9e98f72d6287aa7123605161d"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"c7d9c6f3f86391394e8ce1fffbd348ff625c257f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"A job using a container build resources has access to a zuul_resources variable"},{"line_number":217,"context_line":"that describes the resource:"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":".. var:: zuul_resources"},{"line_number":220,"context_line":"   :type: dict"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"   A dictionary of label keys, each value consists of:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_ad02ae6f","line":219,"in_reply_to":"3f79a3b5_3066fc57","updated":"2018-12-11 06:48:36.000000000","message":"Done","commit_id":"4c9bc7a5086b67d9e98f72d6287aa7123605161d"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"ed5c96ea91ddd295332e0507a2d65a385b2a9c92","unresolved":false,"context_lines":[{"line_number":463,"context_line":"            - hosts: localhost"},{"line_number":464,"context_line":"                tasks:"},{"line_number":465,"context_line":"                - name: Create a k8s resource"},{"line_number":466,"context_line":"                    k8s_raw:"},{"line_number":467,"context_line":"                    state: present"},{"line_number":468,"context_line":"                    context: \"{{ zuul.resources[\u0027node-name\u0027].context }}\""},{"line_number":469,"context_line":"                    namespace: \"{{ zuul.resources[\u0027node-name\u0027].namespace }}\""},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        Kubectl resources might be used in a template as:"},{"line_number":472,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_1ab572cf","line":469,"range":{"start_line":466,"start_character":18,"end_line":469,"end_character":76},"updated":"2018-12-18 22:40:34.000000000","message":"I think this needs to be dedented one level","commit_id":"37952803825c5a4ae295c8098f8cba87723e0a6e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"ed5c96ea91ddd295332e0507a2d65a385b2a9c92","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            - hosts: localhost"},{"line_number":476,"context_line":"                tasks:"},{"line_number":477,"context_line":"                - name: Copy src repos to the pod"},{"line_number":478,"context_line":"                    command: \u003e"},{"line_number":479,"context_line":"                    oc rsync -q --progress\u003dfalse"},{"line_number":480,"context_line":"                        {{ zuul.executor.src_root }}/"},{"line_number":481,"context_line":"                        {{ zuul.resources[\u0027node-name\u0027].pod }}:src/"}],"source_content_type":"text/x-rst","patch_set":14,"id":"3f79a3b5_3ab94ec5","line":478,"range":{"start_line":478,"start_character":20,"end_line":478,"end_character":30},"updated":"2018-12-18 22:40:34.000000000","message":"I think this needs to be dedented one level.","commit_id":"37952803825c5a4ae295c8098f8cba87723e0a6e"}],"tests/fixtures/config/container-build-resources/git/common-config/playbooks/container-machine.yaml":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"73fb8d19a2c447cbcfbfe9278582b0a6cffb3b03","unresolved":false,"context_lines":[{"line_number":1,"context_line":"- hosts: localhost"},{"line_number":2,"context_line":"  tasks:"},{"line_number":3,"context_line":"    # We except a namespace, a context and a pod name"},{"line_number":4,"context_line":"    - assert:"},{"line_number":5,"context_line":"        that:"},{"line_number":6,"context_line":"          - zuul.resources.container.namespace \u003d\u003d \u0027zuul-ci-abcdefg\u0027"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3f79a3b5_9f19748c","line":3,"range":{"start_line":3,"start_character":9,"end_line":3,"end_character":15},"updated":"2018-12-18 22:13:07.000000000","message":"nit: expect?","commit_id":"37952803825c5a4ae295c8098f8cba87723e0a6e"}],"tests/fixtures/config/container-build-resources/git/common-config/playbooks/container-native.yaml":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"73fb8d19a2c447cbcfbfe9278582b0a6cffb3b03","unresolved":false,"context_lines":[{"line_number":1,"context_line":"- hosts: localhost"},{"line_number":2,"context_line":"  tasks:"},{"line_number":3,"context_line":"    # We except a namespace and a context"},{"line_number":4,"context_line":"    - assert:"},{"line_number":5,"context_line":"        that:"},{"line_number":6,"context_line":"          - zuul.resources.cluster1.namespace \u003d\u003d \u0027zuul-ci-abcdefg\u0027"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"3f79a3b5_5f1f5c6d","line":3,"range":{"start_line":3,"start_character":9,"end_line":3,"end_character":15},"updated":"2018-12-18 22:13:07.000000000","message":"nit: expect?","commit_id":"37952803825c5a4ae295c8098f8cba87723e0a6e"}],"zuul/executor/server.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"8a5b6e85b5acf7a9a23c1cc2ed2b3a3907e20df4","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"        self.log.debug(\"Adding role path %s\", role_path)"},{"line_number":1551,"context_line":"        jobdir_playbook.roles_path.append(role_path)"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"    def prepareNodeSecret(self, secret_type, secret_data):"},{"line_number":1554,"context_line":"        if secret_type \u003d\u003d \"openshift-service-account\":"},{"line_number":1555,"context_line":"            kube_cfg \u003d os.path.join(self.jobdir.work_root, \".kube\", \"config\")"},{"line_number":1556,"context_line":"            os.makedirs(os.path.dirname(kube_cfg), exist_ok\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_cd5b065f","line":1553,"range":{"start_line":1553,"start_character":8,"end_line":1553,"end_character":25},"updated":"2018-11-18 19:43:00.000000000","message":"Nit, this seems to actually be about writing the correct kubectl config? Within the context of zuul prepareNodeSecret could mean something else (like decrypting zuul secrets). Maybe rename this function to be more specific.","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"d1e8bc6512644f54061e24046b0cc33dc7f41970","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"        self.log.debug(\"Adding role path %s\", role_path)"},{"line_number":1551,"context_line":"        jobdir_playbook.roles_path.append(role_path)"},{"line_number":1552,"context_line":""},{"line_number":1553,"context_line":"    def prepareNodeSecret(self, secret_type, secret_data):"},{"line_number":1554,"context_line":"        if secret_type \u003d\u003d \"openshift-service-account\":"},{"line_number":1555,"context_line":"            kube_cfg \u003d os.path.join(self.jobdir.work_root, \".kube\", \"config\")"},{"line_number":1556,"context_line":"            os.makedirs(os.path.dirname(kube_cfg), exist_ok\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_8eb3c5eb","line":1553,"range":{"start_line":1553,"start_character":8,"end_line":1553,"end_character":25},"in_reply_to":"3f79a3b5_cd5b065f","updated":"2018-11-19 07:19:33.000000000","message":"Good point, next PS renames it prepareKubeConfig","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"8a5b6e85b5acf7a9a23c1cc2ed2b3a3907e20df4","unresolved":false,"context_lines":[{"line_number":1559,"context_line":"                \u0027login\u0027, secret_data[\u0027host\u0027],"},{"line_number":1560,"context_line":"                \u0027--config\u0027, kube_cfg,"},{"line_number":1561,"context_line":"                \u0027--token\u0027, secret_data[\u0027token\u0027],"},{"line_number":1562,"context_line":"            ]"},{"line_number":1563,"context_line":"            if secret_data[\u0027skiptls\u0027]:"},{"line_number":1564,"context_line":"                argv.append(\u0027--insecure-skip-tls-verify\u003dtrue\u0027)"},{"line_number":1565,"context_line":"            proc \u003d subprocess.Popen("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_8d650e1f","line":1562,"updated":"2018-11-18 19:43:00.000000000","message":"If oc uses a kube_cfg too do we need to use a different tool and a different code path to configure it? Can we rely on the fact that openshift is k8s under the covers here to simplify configuration setup?","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"d1e8bc6512644f54061e24046b0cc33dc7f41970","unresolved":false,"context_lines":[{"line_number":1559,"context_line":"                \u0027login\u0027, secret_data[\u0027host\u0027],"},{"line_number":1560,"context_line":"                \u0027--config\u0027, kube_cfg,"},{"line_number":1561,"context_line":"                \u0027--token\u0027, secret_data[\u0027token\u0027],"},{"line_number":1562,"context_line":"            ]"},{"line_number":1563,"context_line":"            if secret_data[\u0027skiptls\u0027]:"},{"line_number":1564,"context_line":"                argv.append(\u0027--insecure-skip-tls-verify\u003dtrue\u0027)"},{"line_number":1565,"context_line":"            proc \u003d subprocess.Popen("}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_6e5ae985","line":1562,"in_reply_to":"3f79a3b5_8d650e1f","updated":"2018-11-19 07:19:33.000000000","message":"Good point, though the \u0027project\u0027 vs \u0027namespace\u0027 naming may be an issue. Next PS refactor this part to manually generate the kube_cfg file without using any tool.","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"8a5b6e85b5acf7a9a23c1cc2ed2b3a3907e20df4","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"        all_vars \u003d args[\u0027vars\u0027].copy()"},{"line_number":1614,"context_line":"        check_varnames(all_vars)"},{"line_number":1615,"context_line":"        # TODO(mordred) Hack to work around running things with python3"},{"line_number":1616,"context_line":"        all_vars[\u0027ansible_python_interpreter\u0027] \u003d \u0027/usr/bin/python2\u0027"},{"line_number":1617,"context_line":"        all_vars[\u0027zuul\u0027] \u003d args[\u0027zuul\u0027].copy()"},{"line_number":1618,"context_line":"        all_vars[\u0027zuul\u0027][\u0027executor\u0027] \u003d dict("},{"line_number":1619,"context_line":"            hostname\u003dself.executor_server.hostname,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_8d3e6ee1","line":1616,"updated":"2018-11-18 19:43:00.000000000","message":"Note that we are overriding this value which was hardcoded because python3 did not work in the past. As a followup maybe we should drop this setting entirely?","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"d1e8bc6512644f54061e24046b0cc33dc7f41970","unresolved":false,"context_lines":[{"line_number":1613,"context_line":"        all_vars \u003d args[\u0027vars\u0027].copy()"},{"line_number":1614,"context_line":"        check_varnames(all_vars)"},{"line_number":1615,"context_line":"        # TODO(mordred) Hack to work around running things with python3"},{"line_number":1616,"context_line":"        all_vars[\u0027ansible_python_interpreter\u0027] \u003d \u0027/usr/bin/python2\u0027"},{"line_number":1617,"context_line":"        all_vars[\u0027zuul\u0027] \u003d args[\u0027zuul\u0027].copy()"},{"line_number":1618,"context_line":"        all_vars[\u0027zuul\u0027][\u0027executor\u0027] \u003d dict("},{"line_number":1619,"context_line":"            hostname\u003dself.executor_server.hostname,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_6e442977","line":1616,"in_reply_to":"3f79a3b5_8d3e6ee1","updated":"2018-11-19 07:19:33.000000000","message":"Probably, iirc next version of ansible will be able to auto-discover the interpreter.","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"8a5b6e85b5acf7a9a23c1cc2ed2b3a3907e20df4","unresolved":false,"context_lines":[{"line_number":1629,"context_line":"            if node.get(\u0027connection_type\u0027) in ("},{"line_number":1630,"context_line":"                    \u0027namespace\u0027, \u0027project\u0027, \u0027kubectl\u0027):"},{"line_number":1631,"context_line":"                # TODO: decrypt resource data using scheduler key"},{"line_number":1632,"context_line":"                resources_var[node[\u0027name\u0027][0]] \u003d node.get(\u0027connection_port\u0027)"},{"line_number":1633,"context_line":"                if node.get(\u0027connection_port\u0027, {}).get(\u0027ca_crt\u0027):"},{"line_number":1634,"context_line":"                    secret_type \u003d \"kubernetes-service-account\""},{"line_number":1635,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_0d79fec4","line":1632,"updated":"2018-11-18 19:43:00.000000000","message":"Do we want to write the kubectl resources into the resource_var dict? It appears we expect kubectl to go into the inventory directly but not the other types?","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"d1e8bc6512644f54061e24046b0cc33dc7f41970","unresolved":false,"context_lines":[{"line_number":1629,"context_line":"            if node.get(\u0027connection_type\u0027) in ("},{"line_number":1630,"context_line":"                    \u0027namespace\u0027, \u0027project\u0027, \u0027kubectl\u0027):"},{"line_number":1631,"context_line":"                # TODO: decrypt resource data using scheduler key"},{"line_number":1632,"context_line":"                resources_var[node[\u0027name\u0027][0]] \u003d node.get(\u0027connection_port\u0027)"},{"line_number":1633,"context_line":"                if node.get(\u0027connection_port\u0027, {}).get(\u0027ca_crt\u0027):"},{"line_number":1634,"context_line":"                    secret_type \u003d \"kubernetes-service-account\""},{"line_number":1635,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_8e47457a","line":1632,"in_reply_to":"3f79a3b5_0d79fec4","updated":"2018-11-19 07:19:33.000000000","message":"Good point, we actually don\u0027t need the whole resources information. Next PS sets context and namespace name for project, and pod name for kubectl.","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"8a5b6e85b5acf7a9a23c1cc2ed2b3a3907e20df4","unresolved":false,"context_lines":[{"line_number":2054,"context_line":"            cmd.extend([\u0027-e@%s\u0027 % self.executor_variables_file])"},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"        if self.resources_variable_file is not None:"},{"line_number":2057,"context_line":"            cmd.extend([\u0027-e@%s\u0027 % self.resources_variable_file])"},{"line_number":2058,"context_line":""},{"line_number":2059,"context_line":"        self.emitPlaybookBanner(playbook, \u0027START\u0027, phase)"},{"line_number":2060,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_2d74facc","line":2057,"updated":"2018-11-18 19:43:00.000000000","message":"We should document this new variables file and why/how it is used.","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"d1e8bc6512644f54061e24046b0cc33dc7f41970","unresolved":false,"context_lines":[{"line_number":2054,"context_line":"            cmd.extend([\u0027-e@%s\u0027 % self.executor_variables_file])"},{"line_number":2055,"context_line":""},{"line_number":2056,"context_line":"        if self.resources_variable_file is not None:"},{"line_number":2057,"context_line":"            cmd.extend([\u0027-e@%s\u0027 % self.resources_variable_file])"},{"line_number":2058,"context_line":""},{"line_number":2059,"context_line":"        self.emitPlaybookBanner(playbook, \u0027START\u0027, phase)"},{"line_number":2060,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f79a3b5_ee57d927","line":2057,"in_reply_to":"3f79a3b5_2d74facc","updated":"2018-11-19 07:19:33.000000000","message":"Done","commit_id":"336c0dbbc4a5524504847ad7770cb2a42d349abe"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"fc75d56b1c296c860f23839b66dc22c4755e21b0","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"        for node in args[\u0027nodes\u0027]:"},{"line_number":1620,"context_line":"            if node.get(\u0027connection_type\u0027) in ("},{"line_number":1621,"context_line":"                    \u0027namespace\u0027, \u0027project\u0027, \u0027kubectl\u0027):"},{"line_number":1622,"context_line":"                # TODO: decrypt resource data using scheduler key"},{"line_number":1623,"context_line":"                data \u003d node[\u0027connection_port\u0027]"},{"line_number":1624,"context_line":"                # Setup kube/config file"},{"line_number":1625,"context_line":"                self.prepareKubeConfig(data)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_5061383b","line":1622,"updated":"2018-12-10 16:19:14.000000000","message":"Can you elaborate on this comment?","commit_id":"4c9bc7a5086b67d9e98f72d6287aa7123605161d"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"c7d9c6f3f86391394e8ce1fffbd348ff625c257f","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"        for node in args[\u0027nodes\u0027]:"},{"line_number":1620,"context_line":"            if node.get(\u0027connection_type\u0027) in ("},{"line_number":1621,"context_line":"                    \u0027namespace\u0027, \u0027project\u0027, \u0027kubectl\u0027):"},{"line_number":1622,"context_line":"                # TODO: decrypt resource data using scheduler key"},{"line_number":1623,"context_line":"                data \u003d node[\u0027connection_port\u0027]"},{"line_number":1624,"context_line":"                # Setup kube/config file"},{"line_number":1625,"context_line":"                self.prepareKubeConfig(data)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_0df3a2a1","line":1622,"in_reply_to":"3f79a3b5_5061383b","updated":"2018-12-11 06:48:36.000000000","message":"Since we are storing cluster access credentials in zookeeper, we may want to encrypt them. But it seems like we\u0027ll need a global scheduler public key to do that...","commit_id":"4c9bc7a5086b67d9e98f72d6287aa7123605161d"}]}
