)]}'
{"zuul/model.py":[{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"c7e45bc734bfdf2613cd59ebd358d555da94e272","unresolved":true,"context_lines":[{"line_number":4331,"context_line":"            pb.validateReferences(layout)"},{"line_number":4332,"context_line":""},{"line_number":4333,"context_line":"        if not layout.tenant.use_nodepool:"},{"line_number":4334,"context_line":"            if isinstance(self.nodeset, NodeSet):"},{"line_number":4335,"context_line":"                requested_labels \u003d self.nodeset.flattenAlternativeLabels()"},{"line_number":4336,"context_line":"                for name in requested_labels:"},{"line_number":4337,"context_line":"                    if name not in layout.labels:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e8e62a4_9fad4114","line":4334,"updated":"2025-07-11 22:20:39.000000000","message":"When is the nodeset not a NodeSet? Is that for the empty NodeSet?","commit_id":"810c8e86ad8c060a359a02ddb1476971a7842429"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0077f421396cf6a28c639172a715cd256a208fae","unresolved":false,"context_lines":[{"line_number":4331,"context_line":"            pb.validateReferences(layout)"},{"line_number":4332,"context_line":""},{"line_number":4333,"context_line":"        if not layout.tenant.use_nodepool:"},{"line_number":4334,"context_line":"            if isinstance(self.nodeset, NodeSet):"},{"line_number":4335,"context_line":"                requested_labels \u003d self.nodeset.flattenAlternativeLabels()"},{"line_number":4336,"context_line":"                for name in requested_labels:"},{"line_number":4337,"context_line":"                    if name not in layout.labels:"}],"source_content_type":"text/x-python","patch_set":1,"id":"34c3a86d_a8ad006e","line":4334,"in_reply_to":"7e8e62a4_9fad4114","updated":"2025-07-11 22:29:05.000000000","message":"If it\u0027s a string reference to a NodeSet object.\n\nContext: this is a Job, and job.nodeset can be a string reference to a NodeSet object, or it can be an inline nodeset definition.\n\nIf it\u0027s an inline nodeset definition, it gets converted to a NodeSet object and that\u0027s what\u0027s stored on job.nodeset.  If that\u0027s the case, we need to validate it because nothing else has.\n\nIf it\u0027s a string, then it\u0027s a reference to a standalone nodeset defined as its own config object.  That will have already had its labels validated, so we don\u0027t need to add an error to the job for this.","commit_id":"810c8e86ad8c060a359a02ddb1476971a7842429"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"c7e45bc734bfdf2613cd59ebd358d555da94e272","unresolved":true,"context_lines":[{"line_number":4335,"context_line":"                requested_labels \u003d self.nodeset.flattenAlternativeLabels()"},{"line_number":4336,"context_line":"                for name in requested_labels:"},{"line_number":4337,"context_line":"                    if name not in layout.labels:"},{"line_number":4338,"context_line":"                        raise LabelNotFoundError(name)"},{"line_number":4339,"context_line":""},{"line_number":4340,"context_line":"    def assertImagePermissions(self, image_build_name, config_object, layout):"},{"line_number":4341,"context_line":"        # config_object may be a project or an anonymous job variant"}],"source_content_type":"text/x-python","patch_set":1,"id":"431ddb7e_cad7233f","line":4338,"updated":"2025-07-11 22:20:39.000000000","message":"Why not call `self.nodeset.validateReferences(layout)` here? Then we can use the same validation code for anonymous and named Nodesets.","commit_id":"810c8e86ad8c060a359a02ddb1476971a7842429"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0077f421396cf6a28c639172a715cd256a208fae","unresolved":false,"context_lines":[{"line_number":4335,"context_line":"                requested_labels \u003d self.nodeset.flattenAlternativeLabels()"},{"line_number":4336,"context_line":"                for name in requested_labels:"},{"line_number":4337,"context_line":"                    if name not in layout.labels:"},{"line_number":4338,"context_line":"                        raise LabelNotFoundError(name)"},{"line_number":4339,"context_line":""},{"line_number":4340,"context_line":"    def assertImagePermissions(self, image_build_name, config_object, layout):"},{"line_number":4341,"context_line":"        # config_object may be a project or an anonymous job variant"}],"source_content_type":"text/x-python","patch_set":1,"id":"f868b0a7_72ac1773","line":4338,"in_reply_to":"431ddb7e_cad7233f","updated":"2025-07-11 22:29:05.000000000","message":"Wait, you did know the two cases already!  And I typed all that...\n\nAnyway, that\u0027s a great idea, we should totally do that.","commit_id":"810c8e86ad8c060a359a02ddb1476971a7842429"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"c7e45bc734bfdf2613cd59ebd358d555da94e272","unresolved":true,"context_lines":[{"line_number":9724,"context_line":""},{"line_number":9725,"context_line":"    def _checkAddNodeset(self, nodeset):"},{"line_number":9726,"context_line":"        # Verify that we can add a nodeset; used by top-level nodeset"},{"line_number":9727,"context_line":"        # objects as well as nested nodesets."},{"line_number":9728,"context_line":"        if self.tenant.use_nodepool:"},{"line_number":9729,"context_line":"            allowed_labels \u003d self.tenant.allowed_labels"},{"line_number":9730,"context_line":"            disallowed_labels \u003d self.tenant.disallowed_labels"}],"source_content_type":"text/x-python","patch_set":1,"id":"c38fcc98_01274f9d","line":9727,"updated":"2025-07-11 22:20:39.000000000","message":"I feel like this comment should probably be updated to indicate that this isn\u0027t necessary with niz due to built in nodeset validation?","commit_id":"810c8e86ad8c060a359a02ddb1476971a7842429"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0077f421396cf6a28c639172a715cd256a208fae","unresolved":false,"context_lines":[{"line_number":9724,"context_line":""},{"line_number":9725,"context_line":"    def _checkAddNodeset(self, nodeset):"},{"line_number":9726,"context_line":"        # Verify that we can add a nodeset; used by top-level nodeset"},{"line_number":9727,"context_line":"        # objects as well as nested nodesets."},{"line_number":9728,"context_line":"        if self.tenant.use_nodepool:"},{"line_number":9729,"context_line":"            allowed_labels \u003d self.tenant.allowed_labels"},{"line_number":9730,"context_line":"            disallowed_labels \u003d self.tenant.disallowed_labels"}],"source_content_type":"text/x-python","patch_set":1,"id":"a00fad4b_f57576ae","line":9727,"in_reply_to":"c38fcc98_01274f9d","updated":"2025-07-11 22:29:05.000000000","message":"Good point.  It\u0027s actually not necessary because niz makes allowed/disallowed labels obsolete (it\u0027s allowed if it\u0027s in the tenant).","commit_id":"810c8e86ad8c060a359a02ddb1476971a7842429"}]}
