)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"ee487da49580e8422020862d56e24a96b77e31dd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement zookeeper-auth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change adds the zookeeper-auth to configure authentication and"},{"line_number":10,"context_line":"adds a nodepool-update-zk-auth script to manage ACL update."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ifc3ceda85d0103a0b06b0871ae95135c179ff02a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":36,"id":"1fa4df85_7f5533f9","line":10,"range":{"start_line":9,"start_character":64,"end_line":10,"end_character":59},"updated":"2020-03-09 14:04:12.000000000","message":"Looks like this is moved to the zuul/zuul change.","commit_id":"eeaa2262b4b98f4466bd3fafb6bad129a4ce3c99"}],"doc/source/configuration.rst":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"0379ba3d93cd470ffedf0653a7bca22ef3d5c5f9","unresolved":false,"context_lines":[{"line_number":131,"context_line":"      :type: string"},{"line_number":132,"context_line":"      :required:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"      The authentication scheme, can be \"digest\" or \"sasl\"."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"   .. attr:: credential"},{"line_number":137,"context_line":"      :type: string"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5fc1f717_10dea66c","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":59},"updated":"2019-03-13 16:51:16.000000000","message":"Kazoo doesn\u0027t seem to throw any sort of error if you supply an invalid string for the scheme, and you just get authorization errors on znode operations. I think we should catch this up front and error if an invalid value is supplied.","commit_id":"ec6c5980ed1f7e275d4f53a84f2626a89aa03708"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"9769d023696239a1a5dc8f27f9dfdffd9a7999ac","unresolved":false,"context_lines":[{"line_number":131,"context_line":"      :type: string"},{"line_number":132,"context_line":"      :required:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"      The authentication scheme, can be \"digest\" or \"sasl\"."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"   .. attr:: credential"},{"line_number":137,"context_line":"      :type: string"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5fc1f717_e1952988","line":134,"range":{"start_line":134,"start_character":0,"end_line":134,"end_character":59},"in_reply_to":"5fc1f717_10dea66c","updated":"2019-03-15 04:35:17.000000000","message":"Done","commit_id":"ec6c5980ed1f7e275d4f53a84f2626a89aa03708"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"0379ba3d93cd470ffedf0653a7bca22ef3d5c5f9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"      :required:"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"      The authentication credential."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":".. attr:: labels"},{"line_number":143,"context_line":"   :type: list"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5fc1f717_1042263f","line":141,"updated":"2019-03-13 16:51:16.000000000","message":"We need to describe the format of this string as \"username:password\". It might actually make more sense to have separate config fields for those values and format the credential string ourselves to force the correct format.","commit_id":"ec6c5980ed1f7e275d4f53a84f2626a89aa03708"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"9769d023696239a1a5dc8f27f9dfdffd9a7999ac","unresolved":false,"context_lines":[{"line_number":138,"context_line":"      :required:"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"      The authentication credential."},{"line_number":141,"context_line":""},{"line_number":142,"context_line":".. attr:: labels"},{"line_number":143,"context_line":"   :type: list"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5fc1f717_8190e596","line":141,"in_reply_to":"5fc1f717_1042263f","updated":"2019-03-15 04:35:17.000000000","message":"Done","commit_id":"ec6c5980ed1f7e275d4f53a84f2626a89aa03708"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"baf5a3a571a656e16cd3e8caccd080d7ad733eff","unresolved":false,"context_lines":[{"line_number":143,"context_line":"      :type: string"},{"line_number":144,"context_line":"      :required:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"      The authentication password."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":".. attr:: labels"}],"source_content_type":"text/x-rst","patch_set":32,"id":"1fa4df85_f256632a","line":146,"updated":"2020-03-05 18:02:42.000000000","message":"I raised a question in the Zuul change about whether we should have user + password here or just an opaque credential.","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"0f8f0af0c02b7032fda5738aa7c44b694134d60a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"      :type: string"},{"line_number":144,"context_line":"      :required:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"      The authentication password."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":".. attr:: labels"}],"source_content_type":"text/x-rst","patch_set":32,"id":"1fa4df85_0ad3bbd6","line":146,"in_reply_to":"1fa4df85_f256632a","updated":"2020-03-06 19:19:05.000000000","message":"For auth_data that seems possible, but for the kazoo make_acl function, it seems like the value can\u0027t be opaque (e.g. we need to either hash the password (which is not done yet) for digest, or just use the login for sasl (as you suggested previously)).\n\nAlso this (not release yet) change: https://github.com/python-zk/kazoo/commit/cd49b3fa01136848c5e6bfafb4c241b9704f249d , seems to imply that GSSAPI mechanism can\u0027t be opaque either (e.g. we need to differentiate `service` and `principale`).\n\nI think it is very unlikely that zuul user are connecting to a shared zookeeper service, and perhaps we shouldn\u0027t bother with all the auth possibility and we could pick the one we are able to setup and test: the digest sasl. In that situation, the configuration would only need a `username` and `password`.\n\nPS33 moves all the logic to a common module so that we can easily change the data formats.","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"5c55828ff494d2cdfed13e0eb97d9ed728f7dafa","unresolved":false,"context_lines":[{"line_number":131,"context_line":"      :type: string"},{"line_number":132,"context_line":"      :required:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"      The authentication scheme, can be \"digest\" or \"sasl\"."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"   .. attr:: username"},{"line_number":137,"context_line":"      :type: string"}],"source_content_type":"text/x-rst","patch_set":34,"id":"1fa4df85_0d52eb3b","line":134,"updated":"2020-03-06 21:36:30.000000000","message":"Let\u0027s omit the scheme and only support sasl.  Digest is too weird -- the password is encoded in the ACL.  I don\u0027t think I can endorse anyone using that -- password rotation is too hard.","commit_id":"d166f9459c7148a5cf877f20428c7bb7be8cea79"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"557561abc2b369618c32d90fab0845126b6dd767","unresolved":false,"context_lines":[{"line_number":131,"context_line":"      :type: string"},{"line_number":132,"context_line":"      :required:"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"      The authentication scheme, can be \"digest\" or \"sasl\"."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"   .. attr:: username"},{"line_number":137,"context_line":"      :type: string"}],"source_content_type":"text/x-rst","patch_set":34,"id":"1fa4df85_30905c95","line":134,"in_reply_to":"1fa4df85_0d52eb3b","updated":"2020-03-06 21:46:54.000000000","message":"alright, i\u0027ll drop the scheme setting","commit_id":"d166f9459c7148a5cf877f20428c7bb7be8cea79"}],"nodepool/cmd/config_validator.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a132f4339782765cb27ed4ba4913dd53ffbac413","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        zk_auth \u003d dict("},{"line_number":63,"context_line":"            username\u003dv.Required(str),"},{"line_number":64,"context_line":"            password\u003dv.Required(str),"},{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"1fa4df85_53716243","line":63,"updated":"2020-03-06 23:29:30.000000000","message":"At least in the current configuration, supporting sasl-digest only, we need both of these arguments, but the zookeeper-auth entry itself is not required.","commit_id":"273fbc0f39d961cabfc65bfb048bb8afcce91db2"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"991bc18ed19b8ee9822ab7b3f264385dccbd53cd","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        }"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        zk_auth \u003d dict("},{"line_number":63,"context_line":"            username\u003dv.Required(str),"},{"line_number":64,"context_line":"            password\u003dv.Required(str),"},{"line_number":65,"context_line":"        )"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"1fa4df85_70b49480","line":63,"range":{"start_line":63,"start_character":21,"end_line":63,"end_character":32},"updated":"2020-03-06 22:33:29.000000000","message":"shouldn\u0027t this be optional at first?","commit_id":"273fbc0f39d961cabfc65bfb048bb8afcce91db2"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a132f4339782765cb27ed4ba4913dd53ffbac413","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                \u0027port\u0027: int,"},{"line_number":76,"context_line":"                \u0027chroot\u0027: str,"},{"line_number":77,"context_line":"            }],"},{"line_number":78,"context_line":"            \u0027zookeeper-auth\u0027: zk_auth,"},{"line_number":79,"context_line":"            \u0027providers\u0027: list,"},{"line_number":80,"context_line":"            \u0027labels\u0027: [label],"},{"line_number":81,"context_line":"            \u0027diskimages\u0027: [diskimage],"}],"source_content_type":"text/x-python","patch_set":35,"id":"1fa4df85_f3916e48","line":78,"updated":"2020-03-06 23:29:30.000000000","message":"No v.Required here means zookeeper-auth is optional.","commit_id":"273fbc0f39d961cabfc65bfb048bb8afcce91db2"}],"nodepool/cmd/update_zk_auth.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f220d5c74ebff2cecf1bdbfa53eae8d488a59874","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        exit(1)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    acl \u003d nodepool.zk.kazoo.security.make_acl("},{"line_number":46,"context_line":"        config.zookeeper_auth[0], config.zookeeper_auth[1], all\u003dTrue)"},{"line_number":47,"context_line":"    zk \u003d nodepool.zk.ZooKeeper(enable_cache\u003dFalse)"},{"line_number":48,"context_line":"    zk.connect("},{"line_number":49,"context_line":"        list(config.zookeeper_servers.values()),"}],"source_content_type":"text/x-python","patch_set":29,"id":"1fa4df85_00541b52","line":46,"updated":"2020-03-04 21:43:11.000000000","message":"zokeeper_auth[1] includes the password, but we only want the user.","commit_id":"cef7f7482ae6aba6ed60bbc55e6e48cc9ecce3f8"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"6a4125c317131cd1dfbcf25f5a043db0e1f05602","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        exit(1)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    acl \u003d nodepool.zk.kazoo.security.make_acl("},{"line_number":46,"context_line":"        config.zookeeper_auth[0], config.zookeeper_auth[1], all\u003dTrue)"},{"line_number":47,"context_line":"    zk \u003d nodepool.zk.ZooKeeper(enable_cache\u003dFalse)"},{"line_number":48,"context_line":"    zk.connect("},{"line_number":49,"context_line":"        list(config.zookeeper_servers.values()),"}],"source_content_type":"text/x-python","patch_set":29,"id":"1fa4df85_60bf0f61","line":46,"in_reply_to":"1fa4df85_00541b52","updated":"2020-03-04 21:46:32.000000000","message":"Done","commit_id":"cef7f7482ae6aba6ed60bbc55e6e48cc9ecce3f8"}],"nodepool/config.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"0379ba3d93cd470ffedf0653a7bca22ef3d5c5f9","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    newconfig.setMaxHoldAge(config.get(\u0027max-hold-age\u0027))"},{"line_number":258,"context_line":"    newconfig.setWebApp(config.get(\u0027webapp\u0027))"},{"line_number":259,"context_line":"    newconfig.setZooKeeperServers(config.get(\u0027zookeeper-servers\u0027))"},{"line_number":260,"context_line":"    newconfig.setZooKeeperAuth(config.get(\u0027zookeeper-auth\u0027))"},{"line_number":261,"context_line":"    newconfig.setDiskImages(config.get(\u0027diskimages\u0027))"},{"line_number":262,"context_line":"    newconfig.setLabels(config.get(\u0027labels\u0027))"},{"line_number":263,"context_line":"    newconfig.setProviders(config.get(\u0027providers\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_30c40291","line":260,"range":{"start_line":260,"start_character":0,"end_line":260,"end_character":60},"updated":"2019-03-13 16:51:16.000000000","message":"I don\u0027t think we should allow these values in the nodepool.yaml file, only the secure config.","commit_id":"ec6c5980ed1f7e275d4f53a84f2626a89aa03708"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"9769d023696239a1a5dc8f27f9dfdffd9a7999ac","unresolved":false,"context_lines":[{"line_number":257,"context_line":"    newconfig.setMaxHoldAge(config.get(\u0027max-hold-age\u0027))"},{"line_number":258,"context_line":"    newconfig.setWebApp(config.get(\u0027webapp\u0027))"},{"line_number":259,"context_line":"    newconfig.setZooKeeperServers(config.get(\u0027zookeeper-servers\u0027))"},{"line_number":260,"context_line":"    newconfig.setZooKeeperAuth(config.get(\u0027zookeeper-auth\u0027))"},{"line_number":261,"context_line":"    newconfig.setDiskImages(config.get(\u0027diskimages\u0027))"},{"line_number":262,"context_line":"    newconfig.setLabels(config.get(\u0027labels\u0027))"},{"line_number":263,"context_line":"    newconfig.setProviders(config.get(\u0027providers\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"5fc1f717_21801146","line":260,"range":{"start_line":260,"start_character":0,"end_line":260,"end_character":60},"in_reply_to":"5fc1f717_30c40291","updated":"2019-03-15 04:35:17.000000000","message":"Done","commit_id":"ec6c5980ed1f7e275d4f53a84f2626a89aa03708"}],"nodepool/tests/__init__.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"11241cf8a3970fa9c0bf042523934b4dc8f3b3ee","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        rand_test_path \u003d \u0027%s_%s\u0027 % (random_bits, os.getpid())"},{"line_number":83,"context_line":"        self.zookeeper_chroot \u003d \"/nodepool_test/%s\" % rand_test_path"},{"line_number":84,"context_line":"        self.acl \u003d (kazoo.security.make_acl("},{"line_number":85,"context_line":"            \"sasl\", \"super:adminsecret\", all\u003dTrue),)"},{"line_number":86,"context_line":"        self.auth_data \u003d ((\"sasl\", \"super:adminsecret\"),)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # Ensure the chroot path exists and clean up any pre-existing znodes."}],"source_content_type":"text/x-python","patch_set":25,"id":"1fa4df85_3175eccb","line":85,"updated":"2020-03-04 20:03:02.000000000","message":"This seems suspcious to me.  I don\u0027t think a SASL acl should have a password in it.  That is a requirement for the md5 scheme, but I don\u0027t think it is for the SASL scheme.","commit_id":"ab842ff79ed1a4794c96e939181fe0e96182306e"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f220d5c74ebff2cecf1bdbfa53eae8d488a59874","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.zookeeper_host \u003d zookeeper_host"},{"line_number":74,"context_line":"        self.zookeeper_port \u003d zookeeper_port"},{"line_number":75,"context_line":"        self.acl \u003d (kazoo.security.make_acl("},{"line_number":76,"context_line":"            auth_data[0], auth_data[1], all\u003dTrue),)"},{"line_number":77,"context_line":"        self.auth_data \u003d (auth_data,)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _setUp(self):"}],"source_content_type":"text/x-python","patch_set":29,"id":"1fa4df85_a04c27c8","line":76,"updated":"2020-03-04 21:43:11.000000000","message":"auth_data[1] includes the password but we only want the user.","commit_id":"cef7f7482ae6aba6ed60bbc55e6e48cc9ecce3f8"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"6a4125c317131cd1dfbcf25f5a043db0e1f05602","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.zookeeper_host \u003d zookeeper_host"},{"line_number":74,"context_line":"        self.zookeeper_port \u003d zookeeper_port"},{"line_number":75,"context_line":"        self.acl \u003d (kazoo.security.make_acl("},{"line_number":76,"context_line":"            auth_data[0], auth_data[1], all\u003dTrue),)"},{"line_number":77,"context_line":"        self.auth_data \u003d (auth_data,)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _setUp(self):"}],"source_content_type":"text/x-python","patch_set":29,"id":"1fa4df85_40ec538e","line":76,"in_reply_to":"1fa4df85_a04c27c8","updated":"2020-03-04 21:46:32.000000000","message":"Done","commit_id":"cef7f7482ae6aba6ed60bbc55e6e48cc9ecce3f8"}],"nodepool/tests/fixtures/zookeeper/zoo.cfg":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6b9cf5f820cc2633ecdbae6a6672fc214ba48e88","unresolved":false,"context_lines":[{"line_number":1,"context_line":"requireClientAuthScheme\u003dsasl"},{"line_number":2,"context_line":"authProvider.1\u003dorg.apache.zookeeper.server.auth.SASLAuthenticationProvider"},{"line_number":3,"context_line":"tickTime\u003d2000"},{"line_number":4,"context_line":"initLimit\u003d10"},{"line_number":5,"context_line":"syncLimit\u003d5"}],"source_content_type":"text/x-ttcn-cfg","patch_set":32,"id":"1fa4df85_32295be5","line":2,"updated":"2020-03-05 18:01:40.000000000","message":"Is this file still used? I wonder if it is a hold over from when zuul/nodepool ran a zk for each test?\n\nMaybe we can simplify things a bit by removing this if it isn\u0027t needed.","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"0f8f0af0c02b7032fda5738aa7c44b694134d60a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"requireClientAuthScheme\u003dsasl"},{"line_number":2,"context_line":"authProvider.1\u003dorg.apache.zookeeper.server.auth.SASLAuthenticationProvider"},{"line_number":3,"context_line":"tickTime\u003d2000"},{"line_number":4,"context_line":"initLimit\u003d10"},{"line_number":5,"context_line":"syncLimit\u003d5"}],"source_content_type":"text/x-ttcn-cfg","patch_set":32,"id":"1fa4df85_2ecec2b3","line":2,"in_reply_to":"1fa4df85_32295be5","updated":"2020-03-06 19:19:05.000000000","message":"Done","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"}],"nodepool/zk.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"7381c60bff51737df29f6ceac8e6cd7642b66fd7","unresolved":false,"context_lines":[{"line_number":924,"context_line":"            self.client \u003d KazooClient("},{"line_number":925,"context_line":"                hosts\u003dhosts,"},{"line_number":926,"context_line":"                read_only\u003dread_only,"},{"line_number":927,"context_line":"                auth_data\u003dauth_data,"},{"line_number":928,"context_line":"                default_acl\u003dacl)"},{"line_number":929,"context_line":"            self.client.add_listener(self._connection_listener)"},{"line_number":930,"context_line":"            # Manually retry initial connection attempt"},{"line_number":931,"context_line":"            while True:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_d5f02700","line":928,"range":{"start_line":927,"start_character":0,"end_line":928,"end_character":31},"updated":"2019-03-12 17:41:32.000000000","message":"Based on local testing, I think both of these values have to be contained in lists. Which means we should have testing of this code path to make sure it works since we aren\u0027t catching that here.","commit_id":"5da2a4ca9c4bb066191494c0f1ac827ea12b90fc"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"8f0a1ad640be549162c430e8f64a23f08ec11383","unresolved":false,"context_lines":[{"line_number":924,"context_line":"            self.client \u003d KazooClient("},{"line_number":925,"context_line":"                hosts\u003dhosts,"},{"line_number":926,"context_line":"                read_only\u003dread_only,"},{"line_number":927,"context_line":"                auth_data\u003dauth_data,"},{"line_number":928,"context_line":"                default_acl\u003dacl)"},{"line_number":929,"context_line":"            self.client.add_listener(self._connection_listener)"},{"line_number":930,"context_line":"            # Manually retry initial connection attempt"},{"line_number":931,"context_line":"            while True:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5fc1f717_b4c0f32b","line":928,"range":{"start_line":927,"start_character":0,"end_line":928,"end_character":31},"in_reply_to":"5fc1f717_d5f02700","updated":"2019-03-13 05:03:48.000000000","message":"Indeed, not sure what happens here, perhaps a rebase issue on my side.","commit_id":"5da2a4ca9c4bb066191494c0f1ac827ea12b90fc"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"f220d5c74ebff2cecf1bdbfa53eae8d488a59874","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        if self.client is None:"},{"line_number":964,"context_line":"            if auth_data:"},{"line_number":965,"context_line":"                acl \u003d (kazoo.security.make_acl("},{"line_number":966,"context_line":"                    auth_data[0], auth_data[1], all\u003dTrue),)"},{"line_number":967,"context_line":"                auth_data \u003d (auth_data,)"},{"line_number":968,"context_line":"            else:"},{"line_number":969,"context_line":"                acl \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"1fa4df85_c04923b7","line":966,"updated":"2020-03-04 21:43:11.000000000","message":"auth_data[1] includes the password but we only want the user","commit_id":"cef7f7482ae6aba6ed60bbc55e6e48cc9ecce3f8"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"6a4125c317131cd1dfbcf25f5a043db0e1f05602","unresolved":false,"context_lines":[{"line_number":963,"context_line":"        if self.client is None:"},{"line_number":964,"context_line":"            if auth_data:"},{"line_number":965,"context_line":"                acl \u003d (kazoo.security.make_acl("},{"line_number":966,"context_line":"                    auth_data[0], auth_data[1], all\u003dTrue),)"},{"line_number":967,"context_line":"                auth_data \u003d (auth_data,)"},{"line_number":968,"context_line":"            else:"},{"line_number":969,"context_line":"                acl \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"1fa4df85_0002db3d","line":966,"in_reply_to":"1fa4df85_c04923b7","updated":"2020-03-04 21:46:32.000000000","message":"Done","commit_id":"cef7f7482ae6aba6ed60bbc55e6e48cc9ecce3f8"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6b9cf5f820cc2633ecdbae6a6672fc214ba48e88","unresolved":false,"context_lines":[{"line_number":962,"context_line":"        \u0027\u0027\u0027"},{"line_number":963,"context_line":"        if self.client is None:"},{"line_number":964,"context_line":"            if auth_data:"},{"line_number":965,"context_line":"                username, _ \u003d auth_data[1].split(\u0027:\u0027)"},{"line_number":966,"context_line":"                acl \u003d (kazoo.security.make_acl("},{"line_number":967,"context_line":"                    auth_data[0], username, all\u003dTrue),)"},{"line_number":968,"context_line":"                auth_data \u003d (auth_data,)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1fa4df85_f2742338","line":965,"updated":"2020-03-05 18:01:40.000000000","message":"Rather than parsing the previously parsed and serialized auth_data again here, should we carry the { scheme, user, passwd } dict to this point then serialize it into the KazooClient auth data below?","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"0f8f0af0c02b7032fda5738aa7c44b694134d60a","unresolved":false,"context_lines":[{"line_number":962,"context_line":"        \u0027\u0027\u0027"},{"line_number":963,"context_line":"        if self.client is None:"},{"line_number":964,"context_line":"            if auth_data:"},{"line_number":965,"context_line":"                username, _ \u003d auth_data[1].split(\u0027:\u0027)"},{"line_number":966,"context_line":"                acl \u003d (kazoo.security.make_acl("},{"line_number":967,"context_line":"                    auth_data[0], username, all\u003dTrue),)"},{"line_number":968,"context_line":"                auth_data \u003d (auth_data,)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1fa4df85_6e0b5ad5","line":965,"in_reply_to":"1fa4df85_f2742338","updated":"2020-03-06 19:19:05.000000000","message":"yes, it\u0027s just that this was introduced in a recent ps. next ps will make this easier to refactor since it introduces a common zk_auth module.","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"a132f4339782765cb27ed4ba4913dd53ffbac413","unresolved":false,"context_lines":[{"line_number":966,"context_line":"                        read_only\u003dread_only)"},{"line_number":967,"context_line":"            if auth_data:"},{"line_number":968,"context_line":"                args[\u0027auth_data\u0027] \u003d auth_data.getAuthData()"},{"line_number":969,"context_line":"                args[\u0027default_acl\u0027] \u003d auth_data.getACL()"},{"line_number":970,"context_line":"            self.client \u003d KazooClient(**args)"},{"line_number":971,"context_line":"            self.client.add_listener(self._connection_listener)"},{"line_number":972,"context_line":"            # Manually retry initial connection attempt"}],"source_content_type":"text/x-python","patch_set":35,"id":"1fa4df85_13952a33","line":969,"updated":"2020-03-06 23:29:30.000000000","message":"Ah yep.","commit_id":"273fbc0f39d961cabfc65bfb048bb8afcce91db2"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"991bc18ed19b8ee9822ab7b3f264385dccbd53cd","unresolved":false,"context_lines":[{"line_number":965,"context_line":"            args \u003d dict(hosts\u003dhosts,"},{"line_number":966,"context_line":"                        read_only\u003dread_only)"},{"line_number":967,"context_line":"            if auth_data:"},{"line_number":968,"context_line":"                args[\u0027auth_data\u0027] \u003d auth_data.getAuthData()"},{"line_number":969,"context_line":"                args[\u0027default_acl\u0027] \u003d auth_data.getACL()"},{"line_number":970,"context_line":"            self.client \u003d KazooClient(**args)"},{"line_number":971,"context_line":"            self.client.add_listener(self._connection_listener)"},{"line_number":972,"context_line":"            # Manually retry initial connection attempt"}],"source_content_type":"text/x-python","patch_set":35,"id":"1fa4df85_50a5d845","line":969,"range":{"start_line":968,"start_character":0,"end_line":969,"end_character":56},"updated":"2020-03-06 22:33:29.000000000","message":"i think those arguments need to be wrapped in list type.","commit_id":"273fbc0f39d961cabfc65bfb048bb8afcce91db2"}],"nodepool/zk_auth.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"5c55828ff494d2cdfed13e0eb97d9ed728f7dafa","unresolved":false,"context_lines":[{"line_number":21,"context_line":"# The user provided configuration"},{"line_number":22,"context_line":"Config \u003d Dict[str, str]"},{"line_number":23,"context_line":"# The internal config object"},{"line_number":24,"context_line":"ZkAuth \u003d NewType(\u0027ZkAuth\u0027, Tuple[str, str])"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"schema \u003d dict("}],"source_content_type":"text/x-python","patch_set":34,"id":"1fa4df85_ad44f774","line":24,"updated":"2020-03-06 21:36:30.000000000","message":"Er, can we just use a class for this?","commit_id":"d166f9459c7148a5cf877f20428c7bb7be8cea79"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"557561abc2b369618c32d90fab0845126b6dd767","unresolved":false,"context_lines":[{"line_number":21,"context_line":"# The user provided configuration"},{"line_number":22,"context_line":"Config \u003d Dict[str, str]"},{"line_number":23,"context_line":"# The internal config object"},{"line_number":24,"context_line":"ZkAuth \u003d NewType(\u0027ZkAuth\u0027, Tuple[str, str])"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"schema \u003d dict("}],"source_content_type":"text/x-python","patch_set":34,"id":"1fa4df85_f0864466","line":24,"in_reply_to":"1fa4df85_ad44f774","updated":"2020-03-06 21:46:54.000000000","message":"We could use a class, but a type makes it opaque.","commit_id":"d166f9459c7148a5cf877f20428c7bb7be8cea79"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"5c55828ff494d2cdfed13e0eb97d9ed728f7dafa","unresolved":false,"context_lines":[{"line_number":61,"context_line":"def acl(zk_auth: ZkAuth) -\u003e kazoo.security.ACL:"},{"line_number":62,"context_line":"    \"\"\"Create a kazoo ACL for the connect or set_acls functions\"\"\""},{"line_number":63,"context_line":"    username, _ \u003d zk_auth[1].split(\u0027:\u0027)"},{"line_number":64,"context_line":"    return kazoo.security.make_acl(zk_auth[0], username, all\u003dTrue)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def kazoo_args(zk_auth: Optional[ZkAuth]) -\u003e Dict[str, Any]:"}],"source_content_type":"text/x-python","patch_set":34,"id":"1fa4df85_cd47f376","line":64,"updated":"2020-03-06 21:36:30.000000000","message":"If we use a class, we can just use attributes here and we can stop parsing the auth cred field.","commit_id":"d166f9459c7148a5cf877f20428c7bb7be8cea79"}],"releasenotes/notes/zookeeper-auth-23ed584cf7ca3a69.yaml":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"793ed4a412fff3903a93fc2976be1d379b759a1a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    option."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    Before changing zookeeper-auth, use the zookeeper-update-auth script"},{"line_number":9,"context_line":"    to update node acls."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"1fa4df85_b24d4b9b","line":8,"range":{"start_line":8,"start_character":44,"end_line":8,"end_character":65},"updated":"2020-03-05 18:03:35.000000000","message":"Shouldn\u0027t this be \"nodepool-update-zk-auth\"?","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"0f8f0af0c02b7032fda5738aa7c44b694134d60a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    option."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    Before changing zookeeper-auth, use the zookeeper-update-auth script"},{"line_number":9,"context_line":"    to update node acls."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"1fa4df85_0e0e66e4","line":8,"range":{"start_line":8,"start_character":44,"end_line":8,"end_character":65},"in_reply_to":"1fa4df85_b24d4b9b","updated":"2020-03-06 19:19:05.000000000","message":"Done","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"}],"tools/print-zk.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"6cb48ca6f22bd0fa827d4f7e9a3c3b4d58d628b7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"parser.add_argument(\u0027-c\u0027, dest\u003d\u0027config\u0027,"},{"line_number":27,"context_line":"                    default\u003d\u0027/etc/nodepool/nodepool.yaml\u0027,"},{"line_number":28,"context_line":"                    help\u003d\u0027path to config file\u0027)"},{"line_number":29,"context_line":"parser.add_argument(\u0027-s\u0027, dest\u003d\u0027secure\u0027,"},{"line_number":30,"context_line":"                    help\u003d\u0027path to secure file\u0027)"},{"line_number":31,"context_line":"args \u003d parser.parse_args()"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_cc3d55bc","line":29,"updated":"2019-01-22 18:16:18.000000000","message":"I think we shoud add a default value here too and later check for the file existence like in the zookeeper-update-auth script so the behavior is consistent.","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"dc7a92accb8bd420b3d9eedc3757d4a5b154ebac","unresolved":false,"context_lines":[{"line_number":26,"context_line":"parser.add_argument(\u0027-c\u0027, dest\u003d\u0027config\u0027,"},{"line_number":27,"context_line":"                    default\u003d\u0027/etc/nodepool/nodepool.yaml\u0027,"},{"line_number":28,"context_line":"                    help\u003d\u0027path to config file\u0027)"},{"line_number":29,"context_line":"parser.add_argument(\u0027-s\u0027, dest\u003d\u0027secure\u0027,"},{"line_number":30,"context_line":"                    help\u003d\u0027path to secure file\u0027)"},{"line_number":31,"context_line":"args \u003d parser.parse_args()"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_35c21deb","line":29,"in_reply_to":"9fdfeff1_cc3d55bc","updated":"2019-02-07 03:23:28.000000000","message":"Done","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"}],"tools/test-setup.sh":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6b9cf5f820cc2633ecdbae6a6672fc214ba48e88","unresolved":false,"context_lines":[{"line_number":19,"context_line":"sudo cp nodepool/tests/fixtures/zookeeper/auth.conf /etc/zookeeper"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Enable authentication"},{"line_number":22,"context_line":"echo \u0027JVMFLAGS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":23,"context_line":"    sudo tee -a /etc/default/zookeeper"},{"line_number":24,"context_line":"echo \u0027JAVA_OPTS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":25,"context_line":"    sudo tee -a /etc/default/zookeeper"}],"source_content_type":"text/x-sh","patch_set":32,"id":"1fa4df85_92e92fb8","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":15},"updated":"2020-03-05 18:01:40.000000000","message":"Should this be a +\u003d to append to any existing flags? Note you\u0027ll want a space after the \" too.","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"0f8f0af0c02b7032fda5738aa7c44b694134d60a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"sudo cp nodepool/tests/fixtures/zookeeper/auth.conf /etc/zookeeper"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# Enable authentication"},{"line_number":22,"context_line":"echo \u0027JVMFLAGS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":23,"context_line":"    sudo tee -a /etc/default/zookeeper"},{"line_number":24,"context_line":"echo \u0027JAVA_OPTS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":25,"context_line":"    sudo tee -a /etc/default/zookeeper"}],"source_content_type":"text/x-sh","patch_set":32,"id":"1fa4df85_2e11e204","line":22,"range":{"start_line":22,"start_character":14,"end_line":22,"end_character":15},"in_reply_to":"1fa4df85_92e92fb8","updated":"2020-03-06 19:19:05.000000000","message":"Done","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6b9cf5f820cc2633ecdbae6a6672fc214ba48e88","unresolved":false,"context_lines":[{"line_number":21,"context_line":"# Enable authentication"},{"line_number":22,"context_line":"echo \u0027JVMFLAGS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":23,"context_line":"    sudo tee -a /etc/default/zookeeper"},{"line_number":24,"context_line":"echo \u0027JAVA_OPTS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":25,"context_line":"    sudo tee -a /etc/default/zookeeper"},{"line_number":26,"context_line":"sudo service zookeeper start"}],"source_content_type":"text/x-sh","patch_set":32,"id":"1fa4df85_32d2bb01","line":24,"range":{"start_line":24,"start_character":15,"end_line":24,"end_character":16},"updated":"2020-03-05 18:01:40.000000000","message":"See above.","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"0f8f0af0c02b7032fda5738aa7c44b694134d60a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"# Enable authentication"},{"line_number":22,"context_line":"echo \u0027JVMFLAGS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":23,"context_line":"    sudo tee -a /etc/default/zookeeper"},{"line_number":24,"context_line":"echo \u0027JAVA_OPTS\u003d\"-Djava.security.auth.login.config\u003d/etc/zookeeper/auth.conf\"\u0027 | \\"},{"line_number":25,"context_line":"    sudo tee -a /etc/default/zookeeper"},{"line_number":26,"context_line":"sudo service zookeeper start"}],"source_content_type":"text/x-sh","patch_set":32,"id":"1fa4df85_cefb6ebe","line":24,"range":{"start_line":24,"start_character":15,"end_line":24,"end_character":16},"in_reply_to":"1fa4df85_32d2bb01","updated":"2020-03-06 19:19:05.000000000","message":"Done","commit_id":"59c9632c2d4812d7d2bbbb147d6030ac3bec271b"}],"tools/zookeeper-update-auth.py":[{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"6cb48ca6f22bd0fa827d4f7e9a3c3b4d58d628b7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import argparse"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import nodepool.config"},{"line_number":21,"context_line":"import nodepool.zk"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"parser \u003d argparse.ArgumentParser(description\u003d\"Print the zookeeper tree\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_ec561907","line":20,"updated":"2019-01-22 18:16:18.000000000","message":"I don\u0027t see an entry for this script in setup.cfg. As this imports nodepool stuff it can be hard or inconvenient to run it depending on the deployment. So I think we should install this script along with nodepool.","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"dc7a92accb8bd420b3d9eedc3757d4a5b154ebac","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import argparse"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import nodepool.config"},{"line_number":21,"context_line":"import nodepool.zk"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"parser \u003d argparse.ArgumentParser(description\u003d\"Print the zookeeper tree\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_3550dd32","line":20,"in_reply_to":"9fdfeff1_ec561907","updated":"2019-02-07 03:23:28.000000000","message":"Done","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"6cb48ca6f22bd0fa827d4f7e9a3c3b4d58d628b7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import nodepool.config"},{"line_number":21,"context_line":"import nodepool.zk"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"parser \u003d argparse.ArgumentParser(description\u003d\"Print the zookeeper tree\")"},{"line_number":24,"context_line":"parser.add_argument(\"-c\", dest\u003d\"config\", default\u003d\"/etc/nodepool/nodepool.yaml\","},{"line_number":25,"context_line":"                    help\u003d\"path to config file\")"},{"line_number":26,"context_line":"parser.add_argument(\"-s\", dest\u003d\"secure\", default\u003d\"/etc/nodepool/secure.conf\","}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_0c5cbd23","line":23,"updated":"2019-01-22 18:16:18.000000000","message":"Copy paste issue","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"dc7a92accb8bd420b3d9eedc3757d4a5b154ebac","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import nodepool.config"},{"line_number":21,"context_line":"import nodepool.zk"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"parser \u003d argparse.ArgumentParser(description\u003d\"Print the zookeeper tree\")"},{"line_number":24,"context_line":"parser.add_argument(\"-c\", dest\u003d\"config\", default\u003d\"/etc/nodepool/nodepool.yaml\","},{"line_number":25,"context_line":"                    help\u003d\"path to config file\")"},{"line_number":26,"context_line":"parser.add_argument(\"-s\", dest\u003d\"secure\", default\u003d\"/etc/nodepool/secure.conf\","}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_95b0a98d","line":23,"in_reply_to":"9fdfeff1_0c5cbd23","updated":"2019-02-07 03:23:28.000000000","message":"Done","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"},{"author":{"_account_id":16068,"name":"Tobias Henkel","email":"tobias.henkel@bmw.de","username":"tobias.henkel"},"change_message_id":"6cb48ca6f22bd0fa827d4f7e9a3c3b4d58d628b7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    exit(1)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"# Ask for confirmation"},{"line_number":51,"context_line":"input(\"Press enter to confirm updating zookeeper ACL: \")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def walk(node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_ac401137","line":51,"updated":"2019-01-22 18:16:18.000000000","message":"nit: If we ask for confirmation I\u0027d expect a choice between yes and no.","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"dc7a92accb8bd420b3d9eedc3757d4a5b154ebac","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    exit(1)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"# Ask for confirmation"},{"line_number":51,"context_line":"input(\"Press enter to confirm updating zookeeper ACL: \")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def walk(node):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_154b5987","line":51,"in_reply_to":"9fdfeff1_ac401137","updated":"2019-02-07 03:23:28.000000000","message":"Done","commit_id":"9f7b5c8eb0cf46e84add24412720a0d71cdfdcf2"}]}
