)]}'
{"kuryr_kubernetes/cni/binding/sriov.py":[{"author":{"_account_id":28396,"name":"Alexey Perevalov","email":"alexey.perevalov@huawei.com","username":"a.perevalov"},"change_message_id":"ede789a411935c0fdcf557fbced2f4a9f98464b6","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            pci_info \u003d jsonutils.loads(json_pci_info)"},{"line_number":178,"context_line":"        except KeyError:"},{"line_number":179,"context_line":"            pci_info \u003d {}"},{"line_number":180,"context_line":"        except Exception:"},{"line_number":181,"context_line":"            import traceback"},{"line_number":182,"context_line":"            traceback.print_exc()"},{"line_number":183,"context_line":"        return pci_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_6357465a","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":24},"updated":"2019-03-12 10:17:46.000000000","message":"lets keep handling Exception, but I think it\u0027s better to change body of this block, just to logging exception object.","commit_id":"86139da0b499491d9412888db18eb82fdeec48b4"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"69956b3c248d405844175cd8c2a2c2c652b0786a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            pci_info \u003d jsonutils.loads(json_pci_info)"},{"line_number":178,"context_line":"        except KeyError:"},{"line_number":179,"context_line":"            pci_info \u003d {}"},{"line_number":180,"context_line":"        except Exception:"},{"line_number":181,"context_line":"            import traceback"},{"line_number":182,"context_line":"            traceback.print_exc()"},{"line_number":183,"context_line":"        return pci_info"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_4616d8f3","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":24},"in_reply_to":"5fc1f717_6357465a","updated":"2019-03-12 10:40:57.000000000","message":"thanks \nfixed","commit_id":"86139da0b499491d9412888db18eb82fdeec48b4"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4e2b1a4860ea272c149e333b9e821840e6672268","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                          \u0027%s and converting from json\u0027, annot_name)"},{"line_number":183,"context_line":"        return pci_info"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _pass_pci_info(self, neutron_port, port_pci_info):"},{"line_number":186,"context_line":"        k8s \u003d clients.get_kubernetes_client()"},{"line_number":187,"context_line":"        annot_name \u003d constants.K8S_ANNOTATION_NODE_PCI_DEVICE_INFO"},{"line_number":188,"context_line":"        nodename \u003d utils.get_node_name()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_7bc5220a","line":185,"range":{"start_line":185,"start_character":9,"end_line":185,"end_character":13},"updated":"2019-03-19 14:59:05.000000000","message":"save?","commit_id":"d2a9b6da5543a797edd80b85639ac614f0ae228e"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"52f1e16d15b4cdc2dfa26e563bbfd61189ea2573","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                          \u0027%s and converting from json\u0027, annot_name)"},{"line_number":183,"context_line":"        return pci_info"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def _pass_pci_info(self, neutron_port, port_pci_info):"},{"line_number":186,"context_line":"        k8s \u003d clients.get_kubernetes_client()"},{"line_number":187,"context_line":"        annot_name \u003d constants.K8S_ANNOTATION_NODE_PCI_DEVICE_INFO"},{"line_number":188,"context_line":"        nodename \u003d utils.get_node_name()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_ad231e05","line":185,"range":{"start_line":185,"start_character":9,"end_line":185,"end_character":13},"in_reply_to":"5fc1f717_7bc5220a","updated":"2019-03-21 12:09:23.000000000","message":"I thank yes\nIt\u0027s better to have \"save\"\nThanks","commit_id":"d2a9b6da5543a797edd80b85639ac614f0ae228e"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"c47d058cb580abf5610d1b7564a4ac07b55133b8","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # returned automatically to host netns. We may reset"},{"line_number":86,"context_line":"        # it to all-zero state"},{"line_number":87,"context_line":"        self._remove_pci_info(vif.id)"},{"line_number":88,"context_line":"        pass"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _get_host_pf_names(self, physnet):"},{"line_number":91,"context_line":"        \"\"\"Return a list of PFs, that belong to a physnet\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_b6803f8d","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":12},"updated":"2019-04-25 08:41:59.000000000","message":"you don\u0027t need this anymore, right?","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c9b5f684797a0f93464e0f72c39c6994d8f81557","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        # returned automatically to host netns. We may reset"},{"line_number":86,"context_line":"        # it to all-zero state"},{"line_number":87,"context_line":"        self._remove_pci_info(vif.id)"},{"line_number":88,"context_line":"        pass"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _get_host_pf_names(self, physnet):"},{"line_number":91,"context_line":"        \"\"\"Return a list of PFs, that belong to a physnet\"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_f13ec127","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":12},"in_reply_to":"ffb9cba7_b6803f8d","updated":"2019-04-25 09:41:06.000000000","message":"you are right, thanks\ndone","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"c47d058cb580abf5610d1b7564a4ac07b55133b8","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                return vf_name, vf_index, pf, pci_info"},{"line_number":132,"context_line":"        return None, None, None, None"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_pci_info(self, pf, vf_index):"},{"line_number":135,"context_line":"        pci_slot \u003d \u0027\u0027"},{"line_number":136,"context_line":"        physnet \u003d \u0027\u0027"},{"line_number":137,"context_line":"        pci_vendor_info \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_7631670b","line":134,"range":{"start_line":134,"start_character":8,"end_line":134,"end_character":21},"updated":"2019-04-25 08:41:59.000000000","message":"in case of containerized cni, do we need special rights on the kuryr-cni pod for this?","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"2c0d8978f19e86945b25c374d9c10d41e4c88731","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                return vf_name, vf_index, pf, pci_info"},{"line_number":132,"context_line":"        return None, None, None, None"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_pci_info(self, pf, vf_index):"},{"line_number":135,"context_line":"        pci_slot \u003d \u0027\u0027"},{"line_number":136,"context_line":"        physnet \u003d \u0027\u0027"},{"line_number":137,"context_line":"        pci_vendor_info \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_319c56bf","line":134,"range":{"start_line":134,"start_character":8,"end_line":134,"end_character":21},"in_reply_to":"ffb9cba7_4ccff2af","updated":"2019-04-25 12:53:03.000000000","message":"yes, I agree\nno needs to be extended","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c9b5f684797a0f93464e0f72c39c6994d8f81557","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                return vf_name, vf_index, pf, pci_info"},{"line_number":132,"context_line":"        return None, None, None, None"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_pci_info(self, pf, vf_index):"},{"line_number":135,"context_line":"        pci_slot \u003d \u0027\u0027"},{"line_number":136,"context_line":"        physnet \u003d \u0027\u0027"},{"line_number":137,"context_line":"        pci_vendor_info \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_911745a4","line":134,"range":{"start_line":134,"start_character":8,"end_line":134,"end_character":21},"in_reply_to":"ffb9cba7_7631670b","updated":"2019-04-25 09:41:06.000000000","message":"as I can see, there are already some requests to k8s api from CNI side. So no need special rights","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6e9b174856d63964e1c60f456807ec1fa5884028","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                return vf_name, vf_index, pf, pci_info"},{"line_number":132,"context_line":"        return None, None, None, None"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_pci_info(self, pf, vf_index):"},{"line_number":135,"context_line":"        pci_slot \u003d \u0027\u0027"},{"line_number":136,"context_line":"        physnet \u003d \u0027\u0027"},{"line_number":137,"context_line":"        pci_vendor_info \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_4ccff2af","line":134,"range":{"start_line":134,"start_character":8,"end_line":134,"end_character":21},"in_reply_to":"ffb9cba7_911745a4","updated":"2019-04-25 10:16:26.000000000","message":"Danil: Luis meant if [1] needs to be extended. Seems like we have nodes there already, so most likely no, but please double check.\n\n[1] https://github.com/openstack/kuryr-kubernetes/blob/3e3ed9dbb31133b5175ff792a9636603b2df95e1/devstack/lib/kuryr_kubernetes#L439-L471","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"c47d058cb580abf5610d1b7564a4ac07b55133b8","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def _save_pci_info(self, neutron_port, port_pci_info):"},{"line_number":187,"context_line":"        k8s \u003d clients.get_kubernetes_client()"},{"line_number":188,"context_line":"        annot_name \u003d constants.K8S_ANNOTATION_NODE_PCI_DEVICE_INFO"},{"line_number":189,"context_line":"        annot_name \u003d annot_name.replace(\u0027/\u0027, \u0027~1\u0027)"},{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_b6591f5b","line":189,"range":{"start_line":189,"start_character":8,"end_line":189,"end_character":50},"updated":"2019-04-25 08:41:59.000000000","message":"why you need this?","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c9b5f684797a0f93464e0f72c39c6994d8f81557","unresolved":false,"context_lines":[{"line_number":186,"context_line":"    def _save_pci_info(self, neutron_port, port_pci_info):"},{"line_number":187,"context_line":"        k8s \u003d clients.get_kubernetes_client()"},{"line_number":188,"context_line":"        annot_name \u003d constants.K8S_ANNOTATION_NODE_PCI_DEVICE_INFO"},{"line_number":189,"context_line":"        annot_name \u003d annot_name.replace(\u0027/\u0027, \u0027~1\u0027)"},{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_717971fa","line":189,"range":{"start_line":189,"start_character":8,"end_line":189,"end_character":50},"in_reply_to":"ffb9cba7_b6591f5b","updated":"2019-04-25 09:41:06.000000000","message":"because it is impossible to use \"/\" in annotation names with standard way. It should be replaces with \"~1\".\nHere is an answer from Michal Dulko some comments above:\n\n    \"Oh, I see, you want to use JSON patch. According to documentation [1] \"~1\" is a slash, so just use this.\n\n    [1] http://jsonpatch.com/#json-pointer\"","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6e9b174856d63964e1c60f456807ec1fa5884028","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_cc68c288","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"updated":"2019-04-25 10:16:26.000000000","message":"Wait, this is totally wrong and race condition prone. If you\u0027re using JSON patch add operation, why do you insert full dictionary? What happens if annotation changed between lines 192-197? You need to just add one element here.","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b92aaadac30319a2ff1653bd6b62ca05962054a6","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_775abe4f","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_11b6f2da","updated":"2019-04-25 14:35:06.000000000","message":"Do we need full annotation here? The only thing we want in this method is to add PCI info for the neutron port. According to JSON Patch docs this should get you wat you want:\n\n {\n   \u0027op\u0027: \u0027add\u0027,\n   \u0027path\u0027: \u0027/metadata/annotations/openstack.org~1kuryr-pci-info\u0027,\n   \u0027value\u0027: {neutron_port: port_pci_info}\n  }\n\nThere\u0027s no need to even fetch the annotation at all, IMO.\n\nThere are two things you should keep in mind:\n\n1. I don\u0027t know how \"add\" will behave if annotation already exists.\n2. You\u0027ll probably need to have logic to create /metadata/annotations/openstack.org~1kuryr-pci-info JSON object if needed. You can do that using \"test\" operation, or if add is ignored if it exists, just do add anyway.","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3c8f3fca525597fc6aca22bb02ea6a26d8c791ea","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_c5b642fb","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_45b9f22b","updated":"2019-04-26 08:52:30.000000000","message":"\u003e it looks, first of all\n \u003e \n \u003e /metadata/annotations/openstack.org~1kuryr-pci-info\n \u003e \n \u003e should have an empty dictionary\n\nSure, so just add another call that will add that path first with a \"test\" operation to make sure it won\u0027t overwrite anything. I explained that in my second comment.\n\nI see that you\u0027re doing json.dump() on the annotation content. Let\u0027s just skip that and use a dictionary/object there. According to K8s API reference it should be possible and I think I did that a while ago when trying to implement KuryrPort CRD.","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"d6b5d06b680afec4502ab5389cf7709067fb1966","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_e52586ac","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_62e0ac97","updated":"2019-04-26 08:15:42.000000000","message":"it would be good if it works, but it doesn\u0027t\nto use this patch \n\n   /metadata/annotations/openstack.org~1kuryr-pci-info\n\nshould contain a dictionary. Than we could change values for any key in dictionary.\nBut in our case\n\n    /metadata/annotations/openstack.org~1kuryr-pci-info\n\nis not a dictionaty. It doesn\u0027t exist at all at the start","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7473c72725b64d68c411448b14cbfdfbab4dad9b","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_b6cca6bc","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_6b6ac7b3","updated":"2019-04-26 12:25:28.000000000","message":"Yup, that\u0027s true, just found some docs about keys and values of annotations needing to be strings. You have a few choices here now:\n\n1. Use one annotation per Neutron port, e.g. in form of \"openstack.org/kuryr-pci-info/\u003cport_id\u003e\".\n2. Put that info in a CRD and only use node\u0027s annotation to link to a CRD.\n3. Fetch the annotation and when doing JSON Patch request make sure to add test operation that will check if the value haven\u0027t changed. If it did, retry fetching and sending.\n\nI\u0027d say #1 is easiest to implement, but may be problematic if we expect hundreds of those annotations (not sure how will kubernetes-api handle such load).","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"8680544b5946ac520ea4a2094bc32acdb823d33f","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_dd65cbe2","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_775abe4f","updated":"2019-04-25 15:05:23.000000000","message":"If we use:\n\n   content_type \u003d \u0027application/json-patch+json\u0027\n\nthen each time we do:\n\n    {\n   \u0027op\u0027: \u0027add\u0027,\n   \u0027path\u0027: \u0027/metadata/annotations/openstack.org~1kuryr-pci-info\u0027,\n   \u0027value\u0027: {neutron_port: port_pci_info}\n  }\n\n\nannotation will be created once again.\n\nI think we should use another content_type. Maybe \u0027application/merge-patch+json\u0027 ?\n\nAnyway, thanks. I should read a docs for JSON patch more properly.","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"bbf1dde0cb4f03a5e35474e90af1c154751a253e","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_d73ed889","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_b6cca6bc","updated":"2019-04-29 07:35:53.000000000","message":"Yes, I agree, first one is easiest to implement.\nAlso, these annotations will be created only for sr-iov ports but not for all neutron ports. So this amount may be not so huge.","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"a0aed5d47bff06e909d05bea0fe003302344ce0d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_6b6ac7b3","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_c5b642fb","updated":"2019-04-26 10:59:05.000000000","message":"yes, it is true. I\u0027ve checked everything and that\u0027s results.\nit is impossible to make:\n\n    curl -v --header \"Content-Type: application/json-patch+json\" --request PATCH --data \u0027[{\"op\": \"add\", \"path\": \"/metadata/annotations/openstack.org~1kuryr-pci-info\", \"value\": {}}]\u0027 http://machine_1:8080/api/v1/nodes/none_1/\n\nvalue could not be anything buy string.\n\nIt is interesting, because the following expression is valid:\n\n    curl -v --header \"Content-Type: application/json-patch+json\" --request PATCH --data \u0027[{\"op\": \"add\", \"path\": \"/metadata/annotations/openstack.org~1kuryr-pci-info\", \"value\": \"{}\", \"random_field\": {}}]\u0027 http://machine_1:8080/api/v1/nodes/node_1/\n\nAnd looks like there is some kind of checker in k8s that does not allow to pass any value buy string","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"2c0d8978f19e86945b25c374d9c10d41e4c88731","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_11b6f2da","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_cc68c288","updated":"2019-04-25 12:53:03.000000000","message":"Michal, sure, I agree\nBut let me explain the problem:\n\n   node_info \u003d k8s.get(\u0027/api/v1/nodes/{}\u0027.format(nodename))\n\nreturns a dict with all the fields inside (keys - values).\nThen we can get exact annotation:\n\n    annotations \u003d node_info[\u0027metadata\u0027][\u0027annotations\u0027]\n    json_pci_info \u003d annotations[annot_name]\n\nAnd as I can see there is no another way to get exact annotation.\nIsn\u0027t it?\n\nThen when I try to modify annotation I use JSON patch add operation. Is it possible to change exact key-value in annotation with this operation?","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"c24c5c5e1463d1e4b703838281d749f6e344c796","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_77ee0cb5","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_d73ed889","updated":"2019-04-29 08:09:45.000000000","message":"hm, also it looks like there is no possibility to write:\n\n    openstack.org/kuryr-pci-info/\u003cport_id\u003e\n\njust because it is not allowed to use two \"~1\", i.e two \"/\" in annotations name.\nSo we can write something like:\n    \n    openstack.org/\u003cport_id\u003e\n\nor\n\n    kuryr-pci-info/\u003cport_id\u003e","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"cdcb987fd7320b3a15f629fa06c6396fb5442896","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_62e0ac97","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_dd65cbe2","updated":"2019-04-26 07:51:03.000000000","message":"You\u0027re right, seems like I misunderstood the spec. Anyway by playing with [1] I found the correct form:\n\n  {\n   \"op\": \"add\",\n   \"path\": \"/metadata/annotations/openstack.org~1kuryr-pci-info/%s\" % neutron_port,\n   \"value\": port_pci_info,\n  }\n\nDoes this help? :)\n\n[1] https://json8.github.io/patch/demos/apply/","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"7146ba9e7c943f6f0933cd3e6162829470d951dd","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":193,"context_line":"        pci_info[neutron_port] \u003d port_pci_info"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        LOG.info(\"Trying to annotate node %s with pci info %s\","},{"line_number":196,"context_line":"                 nodename, pci_info)"},{"line_number":197,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _remove_pci_info(self, neutron_port):"},{"line_number":200,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_45b9f22b","line":197,"range":{"start_line":193,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"ffb9cba7_e52586ac","updated":"2019-04-26 08:26:22.000000000","message":"it looks, first of all\n\n    /metadata/annotations/openstack.org~1kuryr-pci-info\n\nshould have an empty dictionary","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6e9b174856d63964e1c60f456807ec1fa5884028","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        annot_name \u003d annot_name.replace(\u0027/\u0027, \u0027~1\u0027)"},{"line_number":203,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":206,"context_line":"        try:"},{"line_number":207,"context_line":"            del pci_info[neutron_port]"},{"line_number":208,"context_line":"        except KeyError:"},{"line_number":209,"context_line":"            LOG.info(\"pci info for port %s doesn\u0027t exist on node %s\","},{"line_number":210,"context_line":"                     neutron_port,"},{"line_number":211,"context_line":"                     nodename)"},{"line_number":212,"context_line":"        LOG.info(\"Trying to delete pci info for port %s on node %s\","},{"line_number":213,"context_line":"                 neutron_port, nodename)"},{"line_number":214,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def _acquire(self, path):"},{"line_number":217,"context_line":"        if self._lock and self._lock.acquired:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_6c2e7644","line":214,"range":{"start_line":205,"start_character":7,"end_line":214,"end_character":66},"updated":"2019-04-25 10:16:26.000000000","message":"This is prone to lost update - what happens if some annotation got removed between lines 205 and 214? You need to use specific JSON patch operation to just remove the element you need, not modifying whole annotation.","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"8680544b5946ac520ea4a2094bc32acdb823d33f","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        annot_name \u003d annot_name.replace(\u0027/\u0027, \u0027~1\u0027)"},{"line_number":203,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":206,"context_line":"        try:"},{"line_number":207,"context_line":"            del pci_info[neutron_port]"},{"line_number":208,"context_line":"        except KeyError:"},{"line_number":209,"context_line":"            LOG.info(\"pci info for port %s doesn\u0027t exist on node %s\","},{"line_number":210,"context_line":"                     neutron_port,"},{"line_number":211,"context_line":"                     nodename)"},{"line_number":212,"context_line":"        LOG.info(\"Trying to delete pci info for port %s on node %s\","},{"line_number":213,"context_line":"                 neutron_port, nodename)"},{"line_number":214,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def _acquire(self, path):"},{"line_number":217,"context_line":"        if self._lock and self._lock.acquired:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_bdafb7e1","line":214,"range":{"start_line":205,"start_character":7,"end_line":214,"end_character":66},"in_reply_to":"ffb9cba7_37320612","updated":"2019-04-25 15:05:23.000000000","message":"hm, thanks. Looks good. We should think about content_type here as well","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"2c0d8978f19e86945b25c374d9c10d41e4c88731","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        annot_name \u003d annot_name.replace(\u0027/\u0027, \u0027~1\u0027)"},{"line_number":203,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":206,"context_line":"        try:"},{"line_number":207,"context_line":"            del pci_info[neutron_port]"},{"line_number":208,"context_line":"        except KeyError:"},{"line_number":209,"context_line":"            LOG.info(\"pci info for port %s doesn\u0027t exist on node %s\","},{"line_number":210,"context_line":"                     neutron_port,"},{"line_number":211,"context_line":"                     nodename)"},{"line_number":212,"context_line":"        LOG.info(\"Trying to delete pci info for port %s on node %s\","},{"line_number":213,"context_line":"                 neutron_port, nodename)"},{"line_number":214,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def _acquire(self, path):"},{"line_number":217,"context_line":"        if self._lock and self._lock.acquired:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_f1355e47","line":214,"range":{"start_line":205,"start_character":7,"end_line":214,"end_character":66},"in_reply_to":"ffb9cba7_6c2e7644","updated":"2019-04-25 12:53:03.000000000","message":"thanks, I agree\nthe same comment as above","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b92aaadac30319a2ff1653bd6b62ca05962054a6","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        annot_name \u003d annot_name.replace(\u0027/\u0027, \u0027~1\u0027)"},{"line_number":203,"context_line":"        nodename \u003d utils.get_node_name()"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        pci_info \u003d self._get_annot_pci_info(nodename)"},{"line_number":206,"context_line":"        try:"},{"line_number":207,"context_line":"            del pci_info[neutron_port]"},{"line_number":208,"context_line":"        except KeyError:"},{"line_number":209,"context_line":"            LOG.info(\"pci info for port %s doesn\u0027t exist on node %s\","},{"line_number":210,"context_line":"                     neutron_port,"},{"line_number":211,"context_line":"                     nodename)"},{"line_number":212,"context_line":"        LOG.info(\"Trying to delete pci info for port %s on node %s\","},{"line_number":213,"context_line":"                 neutron_port, nodename)"},{"line_number":214,"context_line":"        k8s.patch_node_annotations(nodename, annot_name, pci_info)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def _acquire(self, path):"},{"line_number":217,"context_line":"        if self._lock and self._lock.acquired:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ffb9cba7_37320612","line":214,"range":{"start_line":205,"start_character":7,"end_line":214,"end_character":66},"in_reply_to":"ffb9cba7_f1355e47","updated":"2019-04-25 14:35:06.000000000","message":"If I read JSON Patch spec correctly this will get you what you need in this case:\n\n {\n   \u0027op\u0027: \u0027remove\u0027,\n   \u0027path\u0027: \u0027/metadata/annotations/openstack.org~1kuryr-pci-info/%s\u0027 % neutron_port,\n  }","commit_id":"aa1ce6722fe92ae10beef041e3888baa686f901f"},{"author":{"_account_id":28082,"name":"Yash Gupta","email":"y.gupta@samsung.com","username":"y.gupta"},"change_message_id":"74109e1be1bc556b2f2baee4f9d095d9183bd0b5","unresolved":false,"context_lines":[{"line_number":162,"context_line":"            for pf in pf_list:"},{"line_number":163,"context_line":"                if pf \u003d\u003d desired_pf:"},{"line_number":164,"context_line":"                    return physnet"},{"line_number":165,"context_line":"        LOG.exception(\"Unable to find physnet for pf %s\", desired_pf)"},{"line_number":166,"context_line":"        raise"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _save_pci_info(self, neutron_port, port_pci_info):"},{"line_number":169,"context_line":"        k8s \u003d clients.get_kubernetes_client()"}],"source_content_type":"text/x-python","patch_set":19,"id":"bfb3d3c7_61cbd81d","line":166,"range":{"start_line":165,"start_character":8,"end_line":166,"end_character":13},"updated":"2019-05-23 04:38:44.000000000","message":"what are we raising here?","commit_id":"b0ce30142ececa9ad8d5508e9ed54930c63d3817"}],"kuryr_kubernetes/constants.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4e2b1a4860ea272c149e333b9e821840e6672268","unresolved":false,"context_lines":[{"line_number":52,"context_line":"K8S_ANNOTATION_NPWG_CRD_SUBNET_ID \u003d \u0027subnetId\u0027"},{"line_number":53,"context_line":"K8S_ANNOTATION_NPWG_CRD_DRIVER_TYPE \u003d \u0027driverType\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"K8S_ANNOTATION_NODE_PCI_DEVICE_INFO \u003d \u0027pciDeviceInfo\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"K8S_OS_VIF_NOOP_PLUGIN \u003d \"noop\""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_3be8fa7a","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":53},"updated":"2019-03-19 14:59:05.000000000","message":"Can we add an URL here? I don\u0027t think we should put bare \"pciDeviceInfo\" as annotation name, we might have a conflict with some other software.","commit_id":"d2a9b6da5543a797edd80b85639ac614f0ae228e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"09005ae0578c414638cfc191a2ccd09fac0788d5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"K8S_ANNOTATION_NPWG_CRD_SUBNET_ID \u003d \u0027subnetId\u0027"},{"line_number":53,"context_line":"K8S_ANNOTATION_NPWG_CRD_DRIVER_TYPE \u003d \u0027driverType\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"K8S_ANNOTATION_NODE_PCI_DEVICE_INFO \u003d \u0027pciDeviceInfo\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"K8S_OS_VIF_NOOP_PLUGIN \u003d \"noop\""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fce034c_bd1be4c7","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":53},"in_reply_to":"3fce034c_1995cf40","updated":"2019-04-19 10:13:35.000000000","message":"So why not just patch .../nodes/\u003cname\u003e with:\n\n {\n   \"metadata\": {\n     \"annotations\": {\n       \"something/with_slash\": \"foo\"\n     }\n   }\n }\n\n? It\u0027s how we do it in any other places.","commit_id":"d2a9b6da5543a797edd80b85639ac614f0ae228e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e7bf57d90c968d43d2aa8da5cfde88ecdbbd013a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"K8S_ANNOTATION_NPWG_CRD_SUBNET_ID \u003d \u0027subnetId\u0027"},{"line_number":53,"context_line":"K8S_ANNOTATION_NPWG_CRD_DRIVER_TYPE \u003d \u0027driverType\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"K8S_ANNOTATION_NODE_PCI_DEVICE_INFO \u003d \u0027pciDeviceInfo\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"K8S_OS_VIF_NOOP_PLUGIN \u003d \"noop\""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_8caca89f","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":53},"in_reply_to":"5fc1f717_083b3fd1","updated":"2019-03-26 18:18:22.000000000","message":"Sure, e.g. we save port information as an annotation named \"openstack.org/kuryr-vif\". Please follow that or similar pattern.","commit_id":"d2a9b6da5543a797edd80b85639ac614f0ae228e"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"52f1e16d15b4cdc2dfa26e563bbfd61189ea2573","unresolved":false,"context_lines":[{"line_number":52,"context_line":"K8S_ANNOTATION_NPWG_CRD_SUBNET_ID \u003d \u0027subnetId\u0027"},{"line_number":53,"context_line":"K8S_ANNOTATION_NPWG_CRD_DRIVER_TYPE \u003d \u0027driverType\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"K8S_ANNOTATION_NODE_PCI_DEVICE_INFO \u003d \u0027pciDeviceInfo\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"K8S_OS_VIF_NOOP_PLUGIN \u003d \"noop\""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5fc1f717_083b3fd1","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":53},"in_reply_to":"5fc1f717_3be8fa7a","updated":"2019-03-21 12:09:23.000000000","message":"what URL do you mean? could you please give an example?","commit_id":"d2a9b6da5543a797edd80b85639ac614f0ae228e"},{"author":{"_account_id":24604,"name":"Danil Golov","email":"d.golov@samsung.com","username":"d.golov"},"change_message_id":"942f0539380f9abf7769fd2fdd1f6e3af54de259","unresolved":false,"context_lines":[{"line_number":52,"context_line":"K8S_ANNOTATION_NPWG_CRD_SUBNET_ID \u003d \u0027subnetId\u0027"},{"line_number":53,"context_line":"K8S_ANNOTATION_NPWG_CRD_DRIVER_TYPE \u003d \u0027driverType\u0027"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"K8S_ANNOTATION_NODE_PCI_DEVICE_INFO \u003d \u0027pciDeviceInfo\u0027"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"K8S_OS_VIF_NOOP_PLUGIN \u003d \"noop\""},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3fce034c_1995cf40","line":55,"range":{"start_line":55,"start_character":0,"end_line":55,"end_character":53},"in_reply_to":"5fc1f717_8caca89f","updated":"2019-04-15 14:33:01.000000000","message":"Thanks Michal. I\u0027ve tried, but it seems that k8s client doesn\u0027t allow to make patch in \".../nodes/\u003cname_of_node\u003e/metadata/annotations/\u003cname with slash inside\u003e\".","commit_id":"d2a9b6da5543a797edd80b85639ac614f0ae228e"}]}
