)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"cfaa7b9d_2d6ead36","updated":"2022-03-09 10:47:06.000000000","message":"Very minor comments inline, in general this looks great.\n\nMy only concern is the exact use case and possible corner cases. You mention metering and billing in the blueprint, but how do you prevent users from manipulating the annotations?\n\nWhat happens if Namespace has the network and subnet created in tenant A, but the pod requests tenant B? If that\u0027s an error we need a clear way of signaling that and making sure such error is non-fatal for kuryr-controller as user can deliberately cause it and we don\u0027t want to allow DOS attacks like that.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"00c73014437b82883f65dbec860adf01f1173090","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"544fe6fb_0d2b3234","in_reply_to":"1505693f_05cf5a82","updated":"2022-03-11 02:34:50.000000000","message":"Well, The router used to connect to each namespace subnets should belong to a special project, the kuryr user belong to the service project and have admin role, so the kuryr has ability to make the namespace subnet connect to the communal router. For other tenants the the router\u0027s access permisson isn\u0027t necessary.\n\nDitto, the LB created by kuryur, so the we just enusre the kuryr user can access the service subnet.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"9b558d851599060aafd0a9c716d7d605b781d8de","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a5936b77_639a531c","in_reply_to":"9cf6d056_05e309ab","updated":"2022-03-10 05:55:08.000000000","message":"For more strict isolation, we should just get project from namespace annotation","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b916397cdd77ca21a7081d8f2f663f1072582a85","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1505693f_05cf5a82","in_reply_to":"a5936b77_639a531c","updated":"2022-03-10 11:19:38.000000000","message":"Yeah, restricting that to namespaces works in my perspective as you can just set client\u0027s RBAC to not allow editing namespace. Now an interesting implication of this is that Kuryr tries to add each of the namespaces subnets to a router. Do you plan to make that router accessible for all the tenants?\n\nThinking more - this might be required. One of the K8s API contracts is availability of the default `kubernetes` Services to all pods. In order to achieve that you\u0027d probably need to make sure there\u0027s connectivity to the services subnet.\n\nOh, services subnet would need to be public too, as Kuryr always creates the LBs in it, regardless of the tenant used. We can\u0027t work around this as it\u0027s K8s who\u0027s doing IPAM for Services.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9cf6d056_05e309ab","in_reply_to":"cfaa7b9d_2d6ead36","updated":"2022-03-10 05:02:32.000000000","message":"Thanks for you comments. Maybe I didn\u0027t consider it comprehensively before. I will refactor it at subsequent patch sets. I think the correct process flows is that the namespace project has highest priority, the resource\u0027s project inherit namespace. If the namespace has no project, the resource can specify itself\u0027s project. If the namespace has project, the resources\u0027s project can not violate it.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"ab54a0eb6cf9cf35711eb28f892d8e3ed199bdda","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"70394cdb_92f5fe95","updated":"2022-03-14 11:28:57.000000000","message":"Interesting use case, thanks for proposing it!","commit_id":"5bd87acbacec91e0056275e694fb00bf4fca596c"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"4c3fd3f7631f4a93b53139328a1502e0eba127aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"63dd2ff2_14eb2910","updated":"2022-03-14 11:28:04.000000000","message":"Would the Projects added to the Namespace belong to the same tenant or are you looking to allow multiple tenants?\nCan you create a devref for this blueprint? This way we discuss about the scope and the goals of your proposal. Example https://docs.openstack.org/kuryr-kubernetes/latest/devref/health_manager.html","commit_id":"5bd87acbacec91e0056275e694fb00bf4fca596c"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"6e5391ab2dea75414c8513e5a7dbb59c3c37ca88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"ac3da744_562933c5","updated":"2022-03-14 08:41:23.000000000","message":"recheck","commit_id":"5bd87acbacec91e0056275e694fb00bf4fca596c"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"ba059342f6f8a30a43631b6abbee8fedb96b9cb1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"eed3751e_4abd9dac","in_reply_to":"63dd2ff2_14eb2910","updated":"2022-03-16 01:51:20.000000000","message":"Multiple k8s namespace could associate with a same openstack project, but one k8s namespace should only assocate with one openstack project.\n\nSure, I will commit a devref asap.","commit_id":"5bd87acbacec91e0056275e694fb00bf4fca596c"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"365c1f3af5f5aa17fc42d8ee1e53ed6fd9e22bd1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a8b7a1c9_60485062","in_reply_to":"eed3751e_4abd9dac","updated":"2022-03-18 06:34:51.000000000","message":"I already commit a devref [1] for this, please review it in your free time, thanks.\n\n[1] https://review.opendev.org/c/openstack/kuryr-kubernetes/+/833987","commit_id":"5bd87acbacec91e0056275e694fb00bf4fca596c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"61b94dfadc34b20f95f4fdb97261d0993cd3d3b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"dc15d542_d5937b63","updated":"2022-04-05 11:01:24.000000000","message":"Just a bunch of typos, code-wise this looks good to me.","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7fda5883f633e94c5641dcda406d028b95e1fd5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"137c6ec2_695f35ae","in_reply_to":"dc15d542_d5937b63","updated":"2022-04-06 10:58:14.000000000","message":"Thanks very much, I will fix them as sone as possible.","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"8b7ca4b731dccb93f0a097d5399e5262d88d7f55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ed388962_d8c6c705","updated":"2022-04-25 12:10:40.000000000","message":"Looks good to me. Just one question, how is it different from Neutron RBAC? \n\nhttps://docs.openstack.org/neutron/pike/admin/config-rbac.html","commit_id":"311055da15e81e9d32b38f81e4bc6256378849a7"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"85055b706ff7b873781a2b1b4a4fe59f8e2e2218","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"184dd72b_cd0dd07c","in_reply_to":"a031097d_1338a045","updated":"2022-04-29 05:52:55.000000000","message":"As for as I know, neutron RBAC used to share neutron resources between different projects. But, this patch\u0027s aim is that classify neutron resources to different projects.","commit_id":"311055da15e81e9d32b38f81e4bc6256378849a7"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"9a0f1ccb189e25e59d29a2caf893d74c603f98ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"a031097d_1338a045","in_reply_to":"ed388962_d8c6c705","updated":"2022-04-25 12:27:35.000000000","message":"ups, this link is more updated https://docs.openstack.org/neutron/latest/admin/config-rbac.html","commit_id":"311055da15e81e9d32b38f81e4bc6256378849a7"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"98e6654a2f5e3c0c615e1315cd413a606dabb248","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ae66e3de_acf6ed2e","updated":"2022-04-30 01:36:43.000000000","message":"recheck","commit_id":"90088f3b0d4a629ec1b73bbf47bcd476701befee"}],"doc/source/installation/multiple_tenants.rst":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"61b94dfadc34b20f95f4fdb97261d0993cd3d3b9","unresolved":true,"context_lines":[{"line_number":6,"context_line":"Annotation project driver"},{"line_number":7,"context_line":"-------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We introducted an annotation project driver, by the driver you can spcify a"},{"line_number":10,"context_line":"openstack project for a k8s namespace, kuryr will take along the project id"},{"line_number":11,"context_line":"when it create openstack resources (port, subnet, LB, etc.) for the namespace"},{"line_number":12,"context_line":"and the resources (pod, service, etc.) of the namespace."}],"source_content_type":"text/x-rst","patch_set":8,"id":"d22c70fd_a0ad6422","line":9,"range":{"start_line":9,"start_character":3,"end_line":9,"end_character":14},"updated":"2022-04-05 11:01:24.000000000","message":"introduced","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"61b94dfadc34b20f95f4fdb97261d0993cd3d3b9","unresolved":true,"context_lines":[{"line_number":6,"context_line":"Annotation project driver"},{"line_number":7,"context_line":"-------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We introducted an annotation project driver, by the driver you can spcify a"},{"line_number":10,"context_line":"openstack project for a k8s namespace, kuryr will take along the project id"},{"line_number":11,"context_line":"when it create openstack resources (port, subnet, LB, etc.) for the namespace"},{"line_number":12,"context_line":"and the resources (pod, service, etc.) of the namespace."}],"source_content_type":"text/x-rst","patch_set":8,"id":"eb561eb3_a96bb74d","line":9,"range":{"start_line":9,"start_character":67,"end_line":9,"end_character":73},"updated":"2022-04-05 11:01:24.000000000","message":"specify","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3ef1bd370d6d1c9db0621b93b127fe6d72628387","unresolved":false,"context_lines":[{"line_number":6,"context_line":"Annotation project driver"},{"line_number":7,"context_line":"-------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We introducted an annotation project driver, by the driver you can spcify a"},{"line_number":10,"context_line":"openstack project for a k8s namespace, kuryr will take along the project id"},{"line_number":11,"context_line":"when it create openstack resources (port, subnet, LB, etc.) for the namespace"},{"line_number":12,"context_line":"and the resources (pod, service, etc.) of the namespace."}],"source_content_type":"text/x-rst","patch_set":8,"id":"92b319d3_bf3505f7","line":9,"range":{"start_line":9,"start_character":3,"end_line":9,"end_character":14},"in_reply_to":"d22c70fd_a0ad6422","updated":"2022-04-14 02:38:42.000000000","message":"Done","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3ef1bd370d6d1c9db0621b93b127fe6d72628387","unresolved":false,"context_lines":[{"line_number":6,"context_line":"Annotation project driver"},{"line_number":7,"context_line":"-------------------------"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We introducted an annotation project driver, by the driver you can spcify a"},{"line_number":10,"context_line":"openstack project for a k8s namespace, kuryr will take along the project id"},{"line_number":11,"context_line":"when it create openstack resources (port, subnet, LB, etc.) for the namespace"},{"line_number":12,"context_line":"and the resources (pod, service, etc.) of the namespace."}],"source_content_type":"text/x-rst","patch_set":8,"id":"f1a1beee_f2ff0617","line":9,"range":{"start_line":9,"start_character":67,"end_line":9,"end_character":73},"in_reply_to":"eb561eb3_a96bb74d","updated":"2022-04-14 02:38:42.000000000","message":"Done","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"61b94dfadc34b20f95f4fdb97261d0993cd3d3b9","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We introducted an annotation project driver, by the driver you can spcify a"},{"line_number":10,"context_line":"openstack project for a k8s namespace, kuryr will take along the project id"},{"line_number":11,"context_line":"when it create openstack resources (port, subnet, LB, etc.) for the namespace"},{"line_number":12,"context_line":"and the resources (pod, service, etc.) of the namespace."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Configure to enable the driver in kuryr.conf:"}],"source_content_type":"text/x-rst","patch_set":8,"id":"64dabf1c_91fcf904","line":11,"range":{"start_line":11,"start_character":8,"end_line":11,"end_character":14},"updated":"2022-04-05 11:01:24.000000000","message":"creates","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3ef1bd370d6d1c9db0621b93b127fe6d72628387","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We introducted an annotation project driver, by the driver you can spcify a"},{"line_number":10,"context_line":"openstack project for a k8s namespace, kuryr will take along the project id"},{"line_number":11,"context_line":"when it create openstack resources (port, subnet, LB, etc.) for the namespace"},{"line_number":12,"context_line":"and the resources (pod, service, etc.) of the namespace."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Configure to enable the driver in kuryr.conf:"}],"source_content_type":"text/x-rst","patch_set":8,"id":"804fabae_024ad61e","line":11,"range":{"start_line":11,"start_character":8,"end_line":11,"end_character":14},"in_reply_to":"64dabf1c_91fcf904","updated":"2022-04-14 02:38:42.000000000","message":"Done","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"61b94dfadc34b20f95f4fdb97261d0993cd3d3b9","unresolved":true,"context_lines":[{"line_number":25,"context_line":"User workflow"},{"line_number":26,"context_line":"~~~~~~~~~~~~~"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"#. Retrieve your owne openstack project\u0027s id:"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    .. code-block:: console"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"380801eb_a828ece2","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":21},"updated":"2022-04-05 11:01:24.000000000","message":"own","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3ef1bd370d6d1c9db0621b93b127fe6d72628387","unresolved":false,"context_lines":[{"line_number":25,"context_line":"User workflow"},{"line_number":26,"context_line":"~~~~~~~~~~~~~"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"#. Retrieve your owne openstack project\u0027s id:"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    .. code-block:: console"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"bcbe84e4_561d7c24","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":21},"in_reply_to":"380801eb_a828ece2","updated":"2022-04-14 02:38:42.000000000","message":"Done","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"61b94dfadc34b20f95f4fdb97261d0993cd3d3b9","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        annotations:"},{"line_number":58,"context_line":"          openstack.org/kuryr-project: b5e0a1ae99a34aa0b6a6dad59c95dea7"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    Modify the annotation ``openstack.org/kuryr-project``\u0027s value to your owne"},{"line_number":61,"context_line":"    project id."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"#. Create a pod in the created namespaces:"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3e5eb6d1_827e74ac","line":60,"range":{"start_line":60,"start_character":74,"end_line":60,"end_character":78},"updated":"2022-04-05 11:01:24.000000000","message":"own","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3ef1bd370d6d1c9db0621b93b127fe6d72628387","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        annotations:"},{"line_number":58,"context_line":"          openstack.org/kuryr-project: b5e0a1ae99a34aa0b6a6dad59c95dea7"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    Modify the annotation ``openstack.org/kuryr-project``\u0027s value to your owne"},{"line_number":61,"context_line":"    project id."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"#. Create a pod in the created namespaces:"}],"source_content_type":"text/x-rst","patch_set":8,"id":"65a5f74e_a3d3404c","line":60,"range":{"start_line":60,"start_character":74,"end_line":60,"end_character":78},"in_reply_to":"3e5eb6d1_827e74ac","updated":"2022-04-14 02:38:42.000000000","message":"Done","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"}],"kuryr_kubernetes/controller/drivers/annotation_project.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":25,"context_line":"CONF \u003d cfg.CONF"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"annotation_project_driver_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt("},{"line_number":30,"context_line":"        \"annotation_key\","},{"line_number":31,"context_line":"        default\u003d\"openstack.org/kuryr-project-id\","},{"line_number":32,"context_line":"        help\u003d_(\"The key of annotation which used to specify the \""},{"line_number":33,"context_line":"               \"project id of openstack.\"))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF.register_opts(annotation_project_driver_opts, \"annotation_project\")"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"b7183975_175c1e42","line":34,"range":{"start_line":28,"start_character":0,"end_line":34,"end_character":1},"updated":"2022-03-09 10:47:06.000000000","message":"I don\u0027t think this should be configurable, I\u0027d rather use a constant hardcoded into kuryr_kubernetes.constants. This is because it\u0027s a bit of an API for us, so we don\u0027t want that to fundamentally differ between clouds.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":25,"context_line":"CONF \u003d cfg.CONF"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"annotation_project_driver_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt("},{"line_number":30,"context_line":"        \"annotation_key\","},{"line_number":31,"context_line":"        default\u003d\"openstack.org/kuryr-project-id\","},{"line_number":32,"context_line":"        help\u003d_(\"The key of annotation which used to specify the \""},{"line_number":33,"context_line":"               \"project id of openstack.\"))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF.register_opts(annotation_project_driver_opts, \"annotation_project\")"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d120c627_e4bc487a","line":34,"range":{"start_line":28,"start_character":0,"end_line":34,"end_character":1},"in_reply_to":"2548227b_133dd6cf","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":25,"context_line":"CONF \u003d cfg.CONF"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"annotation_project_driver_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt("},{"line_number":30,"context_line":"        \"annotation_key\","},{"line_number":31,"context_line":"        default\u003d\"openstack.org/kuryr-project-id\","},{"line_number":32,"context_line":"        help\u003d_(\"The key of annotation which used to specify the \""},{"line_number":33,"context_line":"               \"project id of openstack.\"))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF.register_opts(annotation_project_driver_opts, \"annotation_project\")"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"2548227b_133dd6cf","line":34,"range":{"start_line":28,"start_character":0,"end_line":34,"end_character":1},"in_reply_to":"b7183975_175c1e42","updated":"2022-03-10 05:02:32.000000000","message":"okay","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        # configuration option."},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        res_md \u003d resource[\u0027metadata\u0027]"},{"line_number":51,"context_line":"        if (res_md.get(\u0027annotations\u0027) and"},{"line_number":52,"context_line":"                res_md[\u0027annotations\u0027].get(self.annotation_key)):"},{"line_number":53,"context_line":"            project_id \u003d res_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            pod_ns \u003d res_md[\u0027namespace\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"2c07b82f_c5d995de","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":64},"updated":"2022-03-09 10:47:06.000000000","message":"You can do:\n\n if res_md.get(\u0027annotations\u0027, {}).get(self.annotation_key):","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        # configuration option."},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        res_md \u003d resource[\u0027metadata\u0027]"},{"line_number":51,"context_line":"        if (res_md.get(\u0027annotations\u0027) and"},{"line_number":52,"context_line":"                res_md[\u0027annotations\u0027].get(self.annotation_key)):"},{"line_number":53,"context_line":"            project_id \u003d res_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            pod_ns \u003d res_md[\u0027namespace\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"4f1b9c9d_40cc9ab6","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":64},"in_reply_to":"2c07b82f_c5d995de","updated":"2022-03-10 05:02:32.000000000","message":"thx","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        # configuration option."},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        res_md \u003d resource[\u0027metadata\u0027]"},{"line_number":51,"context_line":"        if (res_md.get(\u0027annotations\u0027) and"},{"line_number":52,"context_line":"                res_md[\u0027annotations\u0027].get(self.annotation_key)):"},{"line_number":53,"context_line":"            project_id \u003d res_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            pod_ns \u003d res_md[\u0027namespace\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"457d0f50_23d20932","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":64},"in_reply_to":"4f1b9c9d_40cc9ab6","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":53,"context_line":"            project_id \u003d res_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            pod_ns \u003d res_md[\u0027namespace\u0027]"},{"line_number":56,"context_line":"            namespace_path \u003d \u0027{}/{}\u0027.format("},{"line_number":57,"context_line":"                constants.K8S_API_NAMESPACES, pod_ns)"},{"line_number":58,"context_line":"            namespace \u003d driver_utils.get_k8s_resource(namespace_path)"},{"line_number":59,"context_line":"            ns_md \u003d namespace[\u0027metadata\u0027]"},{"line_number":60,"context_line":"            if (ns_md.get(\u0027annotations\u0027) and"}],"source_content_type":"text/x-python","patch_set":1,"id":"d05236f2_4c39459e","line":57,"range":{"start_line":56,"start_character":29,"end_line":57,"end_character":53},"updated":"2022-03-09 10:47:06.000000000","message":"I think we prefer f-strings [1] now.\n\n[1] https://www.python.org/dev/peps/pep-0498/","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            project_id \u003d res_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            pod_ns \u003d res_md[\u0027namespace\u0027]"},{"line_number":56,"context_line":"            namespace_path \u003d \u0027{}/{}\u0027.format("},{"line_number":57,"context_line":"                constants.K8S_API_NAMESPACES, pod_ns)"},{"line_number":58,"context_line":"            namespace \u003d driver_utils.get_k8s_resource(namespace_path)"},{"line_number":59,"context_line":"            ns_md \u003d namespace[\u0027metadata\u0027]"},{"line_number":60,"context_line":"            if (ns_md.get(\u0027annotations\u0027) and"}],"source_content_type":"text/x-python","patch_set":1,"id":"a74b0b72_f0939a63","line":57,"range":{"start_line":56,"start_character":29,"end_line":57,"end_character":53},"in_reply_to":"56cf7cd3_c98d217b","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":53,"context_line":"            project_id \u003d res_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":54,"context_line":"        else:"},{"line_number":55,"context_line":"            pod_ns \u003d res_md[\u0027namespace\u0027]"},{"line_number":56,"context_line":"            namespace_path \u003d \u0027{}/{}\u0027.format("},{"line_number":57,"context_line":"                constants.K8S_API_NAMESPACES, pod_ns)"},{"line_number":58,"context_line":"            namespace \u003d driver_utils.get_k8s_resource(namespace_path)"},{"line_number":59,"context_line":"            ns_md \u003d namespace[\u0027metadata\u0027]"},{"line_number":60,"context_line":"            if (ns_md.get(\u0027annotations\u0027) and"}],"source_content_type":"text/x-python","patch_set":1,"id":"56cf7cd3_c98d217b","line":57,"range":{"start_line":56,"start_character":29,"end_line":57,"end_character":53},"in_reply_to":"d05236f2_4c39459e","updated":"2022-03-10 05:02:32.000000000","message":"ok","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":57,"context_line":"                constants.K8S_API_NAMESPACES, pod_ns)"},{"line_number":58,"context_line":"            namespace \u003d driver_utils.get_k8s_resource(namespace_path)"},{"line_number":59,"context_line":"            ns_md \u003d namespace[\u0027metadata\u0027]"},{"line_number":60,"context_line":"            if (ns_md.get(\u0027annotations\u0027) and"},{"line_number":61,"context_line":"                    ns_md[\u0027annotations\u0027].get(self.annotation_key)):"},{"line_number":62,"context_line":"                project_id \u003d ns_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                project_id \u003d CONF.neutron_defaults.project"},{"line_number":65,"context_line":"        if not project_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"482bec02_32cdebbb","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":70},"updated":"2022-03-09 10:47:06.000000000","message":"This looks like the same code as in 51, why not extract it into a private method?","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":57,"context_line":"                constants.K8S_API_NAMESPACES, pod_ns)"},{"line_number":58,"context_line":"            namespace \u003d driver_utils.get_k8s_resource(namespace_path)"},{"line_number":59,"context_line":"            ns_md \u003d namespace[\u0027metadata\u0027]"},{"line_number":60,"context_line":"            if (ns_md.get(\u0027annotations\u0027) and"},{"line_number":61,"context_line":"                    ns_md[\u0027annotations\u0027].get(self.annotation_key)):"},{"line_number":62,"context_line":"                project_id \u003d ns_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                project_id \u003d CONF.neutron_defaults.project"},{"line_number":65,"context_line":"        if not project_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"709f62e5_29aa3725","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":70},"in_reply_to":"482bec02_32cdebbb","updated":"2022-03-10 05:02:32.000000000","message":"Yep, good suggestion","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                constants.K8S_API_NAMESPACES, pod_ns)"},{"line_number":58,"context_line":"            namespace \u003d driver_utils.get_k8s_resource(namespace_path)"},{"line_number":59,"context_line":"            ns_md \u003d namespace[\u0027metadata\u0027]"},{"line_number":60,"context_line":"            if (ns_md.get(\u0027annotations\u0027) and"},{"line_number":61,"context_line":"                    ns_md[\u0027annotations\u0027].get(self.annotation_key)):"},{"line_number":62,"context_line":"                project_id \u003d ns_md[\u0027annotations\u0027][self.annotation_key]"},{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                project_id \u003d CONF.neutron_defaults.project"},{"line_number":65,"context_line":"        if not project_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dec261b9_19841c0f","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":70},"in_reply_to":"709f62e5_29aa3725","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                project_id \u003d CONF.neutron_defaults.project"},{"line_number":65,"context_line":"        if not project_id:"},{"line_number":66,"context_line":"            raise k_exc.LackProjectId(resource)"},{"line_number":67,"context_line":"        return project_id"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d083d8d0_14aba4ca","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":47},"updated":"2022-03-09 10:47:06.000000000","message":"I\u0027d rather raise cfg.RequiredOptError like other drivers do.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                project_id \u003d CONF.neutron_defaults.project"},{"line_number":65,"context_line":"        if not project_id:"},{"line_number":66,"context_line":"            raise k_exc.LackProjectId(resource)"},{"line_number":67,"context_line":"        return project_id"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9d81eb92_ec57fbde","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":47},"in_reply_to":"074535b5_cbbe2483","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":63,"context_line":"            else:"},{"line_number":64,"context_line":"                project_id \u003d CONF.neutron_defaults.project"},{"line_number":65,"context_line":"        if not project_id:"},{"line_number":66,"context_line":"            raise k_exc.LackProjectId(resource)"},{"line_number":67,"context_line":"        return project_id"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"074535b5_cbbe2483","line":66,"range":{"start_line":66,"start_character":0,"end_line":66,"end_character":47},"in_reply_to":"d083d8d0_14aba4ca","updated":"2022-03-10 05:02:32.000000000","message":"ok","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class AnnotationPodProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_project(self, pod):"},{"line_number":73,"context_line":"        return super().get_project(pod)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class AnnotationServiceProjectDriver(AnnotationProjectBaseDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"596bd2a5_e7541a75","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":39},"updated":"2022-03-09 10:47:06.000000000","message":"I don\u0027t think you need this, just `pass` after class definition should be enough.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class AnnotationPodProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_project(self, pod):"},{"line_number":73,"context_line":"        return super().get_project(pod)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class AnnotationServiceProjectDriver(AnnotationProjectBaseDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"f7988616_0af13c0b","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":39},"in_reply_to":"596bd2a5_e7541a75","updated":"2022-03-10 05:02:32.000000000","message":"Yep, good suggestion.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class AnnotationPodProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def get_project(self, pod):"},{"line_number":73,"context_line":"        return super().get_project(pod)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class AnnotationServiceProjectDriver(AnnotationProjectBaseDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f7ea410_b3d218bb","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":39},"in_reply_to":"f7988616_0af13c0b","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class AnnotationServiceProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_project(self, service):"},{"line_number":79,"context_line":"        return super().get_project(service)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class AnnotationNamespaceProjectDriver(base.PodProjectDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1cddefb5_dac010f1","line":79,"range":{"start_line":77,"start_character":0,"end_line":79,"end_character":43},"updated":"2022-03-09 10:47:06.000000000","message":"Same here.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class AnnotationServiceProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_project(self, service):"},{"line_number":79,"context_line":"        return super().get_project(service)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class AnnotationNamespaceProjectDriver(base.PodProjectDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"76325ca2_d3046caa","line":79,"range":{"start_line":77,"start_character":0,"end_line":79,"end_character":43},"in_reply_to":"16689140_4a6cb3b0","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class AnnotationServiceProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_project(self, service):"},{"line_number":79,"context_line":"        return super().get_project(service)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class AnnotationNamespaceProjectDriver(base.PodProjectDriver):"}],"source_content_type":"text/x-python","patch_set":1,"id":"16689140_4a6cb3b0","line":79,"range":{"start_line":77,"start_character":0,"end_line":79,"end_character":43},"in_reply_to":"1cddefb5_dac010f1","updated":"2022-03-10 05:02:32.000000000","message":"Yep","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"dbca013a2f53d27b03665b3433e068c54d12248d","unresolved":true,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class AnnotationNetworkPolicyProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_project(self, network_policy):"},{"line_number":101,"context_line":"        return super().get_project(network_policy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"db9d4a0b_66446749","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":50},"updated":"2022-03-09 10:47:06.000000000","message":"And here.","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"01f4a6f5e927937346543bcffa6484dc415feaef","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class AnnotationNetworkPolicyProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_project(self, network_policy):"},{"line_number":101,"context_line":"        return super().get_project(network_policy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3e0a3c63_3d8d4c4a","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":50},"in_reply_to":"7e11c2f4_5ff74e3e","updated":"2022-03-10 06:25:07.000000000","message":"Done","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"7d52d477ab82e320f9e8f52121d414b4afccea2b","unresolved":true,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class AnnotationNetworkPolicyProjectDriver(AnnotationProjectBaseDriver):"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_project(self, network_policy):"},{"line_number":101,"context_line":"        return super().get_project(network_policy)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e11c2f4_5ff74e3e","line":101,"range":{"start_line":99,"start_character":0,"end_line":101,"end_character":50},"in_reply_to":"db9d4a0b_66446749","updated":"2022-03-10 05:02:32.000000000","message":"yep","commit_id":"30a159e11bab7597535caa6d106d25749d57056d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"61b94dfadc34b20f95f4fdb97261d0993cd3d3b9","unresolved":true,"context_lines":[{"line_number":36,"context_line":"        project \u003d ns_md.get(\u0027annotations\u0027, {}).get(self.project_annotation)"},{"line_number":37,"context_line":"        if not project:"},{"line_number":38,"context_line":"            LOG.debug(\"Namespace %s has no project annotation, try to get \""},{"line_number":39,"context_line":"                      \"project id from configure option.\","},{"line_number":40,"context_line":"                      namespace[\u0027metadata\u0027][\u0027name\u0027])"},{"line_number":41,"context_line":"            project \u003d config.CONF.neutron_defaults.project"},{"line_number":42,"context_line":"        if not project:"}],"source_content_type":"text/x-python","patch_set":8,"id":"97cbbcc9_b0d8653a","line":39,"range":{"start_line":39,"start_character":34,"end_line":39,"end_character":55},"updated":"2022-04-05 11:01:24.000000000","message":"from the configuration option","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"3ef1bd370d6d1c9db0621b93b127fe6d72628387","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        project \u003d ns_md.get(\u0027annotations\u0027, {}).get(self.project_annotation)"},{"line_number":37,"context_line":"        if not project:"},{"line_number":38,"context_line":"            LOG.debug(\"Namespace %s has no project annotation, try to get \""},{"line_number":39,"context_line":"                      \"project id from configure option.\","},{"line_number":40,"context_line":"                      namespace[\u0027metadata\u0027][\u0027name\u0027])"},{"line_number":41,"context_line":"            project \u003d config.CONF.neutron_defaults.project"},{"line_number":42,"context_line":"        if not project:"}],"source_content_type":"text/x-python","patch_set":8,"id":"667c4f49_db45c6e2","line":39,"range":{"start_line":39,"start_character":34,"end_line":39,"end_character":55},"in_reply_to":"97cbbcc9_b0d8653a","updated":"2022-04-14 02:38:42.000000000","message":"Done","commit_id":"3fa433e23c528d8b8a1425bba7b3432323f071f5"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"8b7ca4b731dccb93f0a097d5399e5262d88d7f55","unresolved":true,"context_lines":[{"line_number":27,"context_line":"class AnnotationProjectBaseDriver("},{"line_number":28,"context_line":"        base.PodProjectDriver, base.ServiceProjectDriver,"},{"line_number":29,"context_line":"        base.NamespaceProjectDriver, base.NetworkPolicyProjectDriver):"},{"line_number":30,"context_line":"    \"\"\"Provides project ID for Pod based on resource\u0027s annotation.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    project_annotation \u003d constants.K8s_ANNOTATION_PROJECT"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"781a552f_9f8b8c3e","line":30,"range":{"start_line":30,"start_character":27,"end_line":30,"end_character":34},"updated":"2022-04-25 12:10:40.000000000","message":"Looks like this can be removed as is the base class","commit_id":"311055da15e81e9d32b38f81e4bc6256378849a7"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"85055b706ff7b873781a2b1b4a4fe59f8e2e2218","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class AnnotationProjectBaseDriver("},{"line_number":28,"context_line":"        base.PodProjectDriver, base.ServiceProjectDriver,"},{"line_number":29,"context_line":"        base.NamespaceProjectDriver, base.NetworkPolicyProjectDriver):"},{"line_number":30,"context_line":"    \"\"\"Provides project ID for Pod based on resource\u0027s annotation.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    project_annotation \u003d constants.K8s_ANNOTATION_PROJECT"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ae93c57e_48d918dc","line":30,"range":{"start_line":30,"start_character":27,"end_line":30,"end_character":34},"in_reply_to":"781a552f_9f8b8c3e","updated":"2022-04-29 05:52:55.000000000","message":"Done","commit_id":"311055da15e81e9d32b38f81e4bc6256378849a7"}]}
