Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • tfs/controller
1 result
Show changes
Commits on Source (12)
Showing
with 1708 additions and 3 deletions
l": "eyJzcmxfbm9raWEtbmV0d29yay1pbnN0YW5jZTpuZXR3b3JrLWluc3RhbmNlIjogW3sibmFtZSI6ICJtZ210IiwgInR5cGUiOiAic3JsX25va2lhLW5ldHdvcmstaW5zdGFuY2U6aXAtdnJmIiwgImFkbWluLXN0YXRlIjogImVuYWJsZSIsICJvcGVyLXN0YXRlIjogInVwIiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZW1lbnQgbmV0d29yayBpbnN0YW5jZSIsICJpcC1mb3J3YXJkaW5nIjogeyJyZWNlaXZlLWlwdjQtY2hlY2siOiB0cnVlLCAicmVjZWl2ZS1pcHY2LWNoZWNrIjogdHJ1ZX0sICJpbnRlcmZhY2UiOiBbeyJuYW1lIjogIm1nbXQwLjAiLCAib3Blci1zdGF0ZSI6ICJ1cCIsICJpbmRleCI6ICIxIn1dLCAiaWNtcCI6IHsic3RhdGlzdGljcyI6IHsibGFzdC1jbGVhciI6ICIyMDI0LTA0LTA1VDA5OjE3OjI3LjgwNFoiLCAidG90YWwiOiB7ImluLXBhY2tldHMiOiAiMCIsICJpbi1lcnJvci1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sICJ0eXBlIjogW3sibmFtZSI6ICJlY2hvLXJlcGx5IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogImRlc3QtdW5yZWFjaGFibGUiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicmVkaXJlY3QiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAiZWNobyIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJydHItYWR2ZXJ0aXNlbWVudCIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJydHItc2VsZWN0aW9uIiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogInRpbWUtZXhjZWVkZWQiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicGFyYW0tcHJvYmxlbSIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAidGltZXN0YW1wLXJlcGx5IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifV19fSwgImljbXA2IjogeyJzdGF0aXN0aWNzIjogeyJsYXN0LWNsZWFyIjogIjIwMjQtMDQtMDVUMDk6MTc6MjcuODA0WiIsICJ0b3RhbCI6IHsiaW4tcGFja2V0cyI6ICI1MiIsICJpbi1lcnJvci1wYWNrZXRzIjogIjMxIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCAidHlwZSI6IFt7Im5hbWUiOiAiZGVzdC11bnJlYWNoYWJsZSIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJwYWNrZXQtdG9vLWJpZyIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJ0aW1lLWV4Y2VlZGVkIiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogInBhcmFtLXByb2JsZW0iLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAiZWNoby1yZXF1ZXN0IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogImVjaG8tcmVwbHkiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicnRyLXNvbGljaXRhdGlvbiIsICJpbi1wYWNrZXRzIjogIjMxIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicnRyLWFkdmVydGlzZW1lbnQiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAibmJyLXNvbGljaXRhdGlvbiIsICJpbi1wYWNrZXRzIjogIjMiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJuYnItYWR2ZXJ0aXNlbWVudCIsICJpbi1wYWNrZXRzIjogIjkiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJyZWRpcmVjdCIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn1dfX0sICJwcm90b2NvbHMiOiB7InNybF9ub2tpYS1saW51eDpsaW51eCI6IHsiaW1wb3J0LXJvdXRlcyI6IHRydWUsICJleHBvcnQtcm91dGVzIjogdHJ1ZSwgImV4cG9ydC1uZWlnaGJvcnMiOiB0cnVlfX0sICJyb3V0ZS10YWJsZSI6IHsic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczppcHY0LXVuaWNhc3QiOiB7InJvdXRlIjogW3siaXB2NC1wcmVmaXgiOiAiMC4wLjAuMC8wIiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgInJvdXRlLW93bmVyIjogImRoY3BfY2xpZW50X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MjcuOTIzWiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4NjE2MzgiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyNy45MjRaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjQtcHJlZml4IjogIjE3Mi4yMC4yMC4wLzI0IiwgImlkIjogMCwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpsaW51eCIsICJyb3V0ZS1vd25lciI6ICJsaW51eF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiA1LCAiYWN0aXZlIjogZmFsc2UsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45NDVaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjg2MTY0NSIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjk1NVoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX0sIHsiaXB2NC1wcmVmaXgiOiAiMTcyLjIwLjIwLjAvMjQiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmxvY2FsIiwgInJvdXRlLW93bmVyIjogIm5ldF9pbnN0X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDAsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuOTQ1WiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4NjE2NDMiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45NTVaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjQtcHJlZml4IjogIjE3Mi4yMC4yMC4xMDIvMzIiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAicm91dGUtb3duZXIiOiAibmV0X2luc3RfbWdyIiwgIm9yaWdpbi1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAibGVha2FibGUiOiBmYWxzZSwgIm1ldHJpYyI6IDAsICJwcmVmZXJlbmNlIjogMCwgImFjdGl2ZSI6IHRydWUsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45NDVaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjg2MTY0MiIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjk1NVoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX0sIHsiaXB2NC1wcmVmaXgiOiAiMTcyLjIwLjIwLjI1NS8zMiIsICJpZCI6IDEsICJyb3V0ZS10eXBlIjogInNybF9ub2tpYS1jb21tb246aG9zdCIsICJyb3V0ZS1vd25lciI6ICJuZXRfaW5zdF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiAwLCAiYWN0aXZlIjogdHJ1ZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjk0NVoiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODYxNjQ0IiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuOTU1WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fV0sICJzdGF0aXN0aWNzIjogeyJhY3RpdmUtcm91dGVzIjogNCwgImFjdGl2ZS1yb3V0ZXMtd2l0aC1lY21wIjogMCwgInJlc2lsaWVudC1oYXNoLXJvdXRlcyI6IDAsICJmaWItZmFpbGVkLXJvdXRlcyI6IDAsICJ0b3RhbC1yb3V0ZXMiOiAiNSJ9LCAicm91dGUtc3VtbWFyeSI6IHsicm91dGUtdHlwZSI6IFt7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmRoY3AiLCAiYWN0aXZlLXJvdXRlcyI6IDF9LCB7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAiYWN0aXZlLXJvdXRlcyI6IDJ9LCB7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmxpbnV4IiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpsb2NhbCIsICJhY3RpdmUtcm91dGVzIjogMX1dfX0sICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmlwdjYtdW5pY2FzdCI6IHsicm91dGUiOiBbeyJpcHY2LXByZWZpeCI6ICI6Oi8wIiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgInJvdXRlLW93bmVyIjogImRoY3BfY2xpZW50X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MjguODUwWiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4NjE2MzkiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyOC44NTNaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjYtcHJlZml4IjogIjIwMDE6MTcyOjIwOjIwOjovNjQiLCAiaWQiOiAwLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmxpbnV4IiwgInJvdXRlLW93bmVyIjogImxpbnV4X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiBmYWxzZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjEwM1oiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODYxNjQwIiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzAuMTA0WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fSwgeyJpcHY2LXByZWZpeCI6ICIyMDAxOjE3MjoyMDoyMDo6LzY0IiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpsb2NhbCIsICJyb3V0ZS1vd25lciI6ICJuZXRfaW5zdF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiAwLCAiYWN0aXZlIjogdHJ1ZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjEwNFoiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODYxNjQxIiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzAuMTA0WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fSwgeyJpcHY2LXByZWZpeCI6ICIyMDAxOjE3MjoyMDoyMDo6Mi8xMjgiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAicm91dGUtb3duZXIiOiAibmV0X2luc3RfbWdyIiwgIm9yaWdpbi1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAibGVha2FibGUiOiBmYWxzZSwgIm1ldHJpYyI6IDAsICJwcmVmZXJlbmNlIjogMCwgImFjdGl2ZSI6IHRydWUsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMC4xMDRaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjg2MTY0MiIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjEwNFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX1dLCAic3RhdGlzdGljcyI6IHsiYWN0aXZlLXJvdXRlcyI6IDMsICJhY3RpdmUtcm91dGVzLXdpdGgtZWNtcCI6IDAsICJyZXNpbGllbnQtaGFzaC1yb3V0ZXMiOiAwLCAiZmliLWZhaWxlZC1yb3V0ZXMiOiAwLCAidG90YWwtcm91dGVzIjogIjQifSwgInJvdXRlLXN1bW1hcnkiOiB7InJvdXRlLXR5cGUiOiBbeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpob3N0IiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpsaW51eCIsICJhY3RpdmUtcm91dGVzIjogMX0sIHsiaXAtcm91dGUtdHlwZS1uYW1lIjogInNybF9ub2tpYS1jb21tb246bG9jYWwiLCAiYWN0aXZlLXJvdXRlcyI6IDF9XX19LCAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpuZXh0LWhvcC1ncm91cCI6IFt7ImluZGV4IjogIjI0NzEyMjg2MTYzOCIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyNy45MjRaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjg2MTYzOCIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODYxNjM5IiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjI4Ljg1M1oiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMjQ3MTIyODYxNjM5IiwgInJlc29sdmVkIjogIm5vdC1hcHBsaWNhYmxlIn1dfSwgeyJpbmRleCI6ICIyNDcxMjI4NjE2NDAiLCAiYmFja3VwLW5leHQtaG9wLWdyb3VwIjogIjAiLCAiZmliLXByb2dyYW1taW5nIjogeyJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzAuMTA0WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9LCAibmV4dC1ob3AiOiBbeyJpZCI6IDAsICJuZXh0LWhvcCI6ICIyNDcxMjI4NjE2NDAiLCAicmVzb2x2ZWQiOiAibm90LWFwcGxpY2FibGUifV19LCB7ImluZGV4IjogIjI0NzEyMjg2MTY0MSIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMC4xMDRaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjg2MTY0MSIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODYxNjQyIiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjEwNFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMjQ3MTIyODYxNjQyIiwgInJlc29sdmVkIjogIm5vdC1hcHBsaWNhYmxlIn1dfSwgeyJpbmRleCI6ICIyNDcxMjI4NjE2NDMiLCAiYmFja3VwLW5leHQtaG9wLWdyb3VwIjogIjAiLCAiZmliLXByb2dyYW1taW5nIjogeyJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuOTU1WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9LCAibmV4dC1ob3AiOiBbeyJpZCI6IDAsICJuZXh0LWhvcCI6ICIyNDcxMjI4NjE2NDMiLCAicmVzb2x2ZWQiOiAibm90LWFwcGxpY2FibGUifV19LCB7ImluZGV4IjogIjI0NzEyMjg2MTY0NCIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45NTVaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjMiLCAicmVzb2x2ZWQiOiAibm90LWFwcGxpY2FibGUifV19LCB7ImluZGV4IjogIjI0NzEyMjg2MTY0NSIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45NTVaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjg2MTY0NCIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX1dLCAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpuZXh0LWhvcCI6IFt7ImluZGV4IjogIjMiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmJyb2FkY2FzdCJ9LCB7ImluZGV4IjogIjI0NzEyMjg2MTYzOCIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZGlyZWN0IiwgImlwLWFkZHJlc3MiOiAiMTcyLjIwLjIwLjEiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifSwgeyJpbmRleCI6ICIyNDcxMjI4NjE2MzkiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmRpcmVjdCIsICJpcC1hZGRyZXNzIjogIjIwMDE6MTcyOjIwOjIwOjoxIiwgInN1YmludGVyZmFjZSI6ICJtZ210MC4wIn0sIHsiaW5kZXgiOiAiMjQ3MTIyODYxNjQwIiwgInR5cGUiOiAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpkaXJlY3QiLCAiaXAtYWRkcmVzcyI6ICIyMDAxOjE3MjoyMDoyMDo6IiwgInN1YmludGVyZmFjZSI6ICJtZ210MC4wIn0sIHsiaW5kZXgiOiAiMjQ3MTIyODYxNjQxIiwgInR5cGUiOiAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpkaXJlY3QiLCAiaXAtYWRkcmVzcyI6ICIyMDAxOjE3MjoyMDoyMDo6MiIsICJzdWJpbnRlcmZhY2UiOiAibWdtdDAuMCJ9LCB7ImluZGV4IjogIjI0NzEyMjg2MTY0MiIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZXh0cmFjdCJ9LCB7ImluZGV4IjogIjI0NzEyMjg2MTY0MyIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZGlyZWN0IiwgImlwLWFkZHJlc3MiOiAiMTcyLjIwLjIwLjEwMiIsICJzdWJpbnRlcmZhY2UiOiAibWdtdDAuMCJ9LCB7ImluZGV4IjogIjI0NzEyMjg2MTY0NCIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZGlyZWN0IiwgImlwLWFkZHJlc3MiOiAiMTcyLjIwLjIwLjAiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifV19LCAidHVubmVsLXRhYmxlIjogeyJzcmxfbm9raWEtdHVubmVsLXRhYmxlczppcHY0Ijoge30sICJzcmxfbm9raWEtdHVubmVsLXRhYmxlczppcHY2Ijoge319LCAic3JsX25va2lhLXRjcC11ZHA6dGNwIjogeyJzdGF0aXN0aWNzIjogeyJhY3RpdmUtb3BlbnMiOiAiMCIsICJwYXNzaXZlLW9wZW5zIjogIjIiLCAiYXR0ZW1wdC1mYWlscyI6ICIwIiwgImVzdGFibGlzaGVkLXJlc2V0cyI6ICIwIiwgImluLXNlZ21lbnRzIjogIjQwIiwgIm91dC1zZWdtZW50cyI6ICI0NyIsICJyZXRyYW5zbWl0dGVkLXNlZ21lbnRzIjogIjAiLCAiaW4tZXJyb3Itc2VnbWVudHMiOiAiMCIsICJvdXQtcnN0LXNlZ21lbnRzIjogIjEiLCAiaW4tY2hlY2tzdW0tZXJyb3JzIjogIjAifSwgImxpc3RlbmluZy1hcHBsaWNhdGlvbiI6IFt7ImxvY2FsLWFkZHJlc3MiOiAiMC4wLjAuMCIsICJsb2NhbC1wb3J0IjogMjJ9LCB7ImxvY2FsLWFkZHJlc3MiOiAiMTI3LjAuMC4xIiwgImxvY2FsLXBvcnQiOiA1M30sIHsibG9jYWwtYWRkcmVzcyI6ICIxMjcuMC4wLjEiLCAibG9jYWwtcG9ydCI6IDE5OX0sIHsibG9jYWwtYWRkcmVzcyI6ICI6OiIsICJsb2NhbC1wb3J0IjogMjJ9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDgwfSwgeyJsb2NhbC1hZGRyZXNzIjogIjo6IiwgImxvY2FsLXBvcnQiOiA0NDN9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDU3NDAwfSwgeyJsb2NhbC1hZGRyZXNzIjogIjo6MSIsICJsb2NhbC1wb3J0IjogNTN9XX0sICJzcmxfbm9raWEtdGNwLXVkcDp1ZHAiOiB7InN0YXRpc3RpY3MiOiB7ImluLXBhY2tldHMiOiAiMCIsICJpbi1uby1vcGVuLXBvcnRzLXBhY2tldHMiOiAiMCIsICJpbi1lcnJvci1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJyZWNlaXZlLWJ1ZmZlci1lcnJvcnMiOiAiMCIsICJzZW5kLWJ1ZmZlci1lcnJvcnMiOiAiMCIsICJpbi1jaGVja3N1bS1lcnJvcnMiOiAiMCIsICJpZ25vcmVkLW11bHRpY2FzdC1wYWNrZXRzIjogIjAifSwgImxpc3RlbmluZy1hcHBsaWNhdGlvbiI6IFt7ImxvY2FsLWFkZHJlc3MiOiAiMC4wLjAuMCIsICJsb2NhbC1wb3J0IjogMTYxfSwgeyJsb2NhbC1hZGRyZXNzIjogIjEyNy4wLjAuMSIsICJsb2NhbC1wb3J0IjogNTN9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDE2MX0sIHsibG9jYWwtYWRkcmVzcyI6ICI6OjEiLCAibG9jYWwtcG9ydCI6IDUzfV19fV19"}}]}
Traceback (most recent call last):
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/GnmiSessionHandler.py", line 140, in get
results.extend(parse(str_path, value))
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py", line 134, in parse
return handler.parse(value)
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/NetworkInstance.py", line 438, in parse
if afi_safi_entry:
UnboundLocalError: local variable 'afi_safi_entry' referenced before assignment
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-network-instance:network-instance, Schema path: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /network-instance
ERROR:device.service.drivers.gnmi_nokia_srlinux.GnmiNokiaSrLinuxDriver:[172.20.20.102:57400]:Exception processing notification {"atomic": false, "delete": [], "timestamp": "1712310240151604420", "update": [{"duplicates": 0, "path": {"elem": [], "element": [], "origin": "", "target": ""}, "val": {"json_ietf_val": "eyJzcmxfbm9raWEtbmV0d29yay1pbnN0YW5jZTpuZXR3b3JrLWluc3RhbmNlIjogW3sibmFtZSI6ICJtZ210IiwgImludGVyZmFjZSI6IFt7Im5hbWUiOiAibWdtdDAuMCIsICJvcGVyLXN0YXRlIjogInVwIiwgImluZGV4IjogIjEifV19XX0="}}]}
Traceback (most recent call last):
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/GnmiSessionHandler.py", line 140, in get
results.extend(parse(str_path, value))
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py", line 134, in parse
return handler.parse(value)
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/NetworkInstance.py", line 438, in parse
if afi_safi_entry:
UnboundLocalError: local variable 'afi_safi_entry' referenced before assignment
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-routing-policy:routing-policy, Schema path: /routing-policy
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /routing-policy
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /routing-policy
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/1]', {'name': 'ethernet-1/1', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/2]', {'name': 'ethernet-1/2', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/3]', {'name': 'ethernet-1/3', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/4]', {'name': 'ethernet-1/4', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/5]', {'name': 'ethernet-1/5', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/6]', {'name': 'ethernet-1/6', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/7]', {'name': 'ethernet-1/7', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/8]', {'name': 'ethernet-1/8', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/9]', {'name': 'ethernet-1/9', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/10]', {'name': 'ethernet-1/10', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/11]', {'name': 'ethernet-1/11', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/12]', {'name': 'ethernet-1/12', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/13]', {'name': 'ethernet-1/13', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/14]', {'name': 'ethernet-1/14', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/15]', {'name': 'ethernet-1/15', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/16]', {'name': 'ethernet-1/16', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/17]', {'name': 'ethernet-1/17', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/18]', {'name': 'ethernet-1/18', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/19]', {'name': 'ethernet-1/19', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/20]', {'name': 'ethernet-1/20', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/21]', {'name': 'ethernet-1/21', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/22]', {'name': 'ethernet-1/22', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-interfaces:interface, Schema path: /srl_nokia-interfaces:interface
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/23]', {'name': 'ethernet-1/23', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /srl_nokia-interfaces:interface
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/24]', {'name': 'ethernet-1/24', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers.Interface:Getting path for InterfaceHandler
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/25]', {'name': 'ethernet-1/25', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /srl_nokia-interfaces:interface
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/26]', {'name': 'ethernet-1/26', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-interfaces:interface, Schema path: /srl_nokia-interfaces:interface
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/27]', {'name': 'ethernet-1/27', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /srl_nokia-interfaces:interface
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/28]', {'name': 'ethernet-1/28', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers.Interface:Getting path for InterfaceHandler
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/29]', {'name': 'ethernet-1/29', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /srl_nokia-interfaces:interface
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/30]', {'name': 'ethernet-1/30', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/31]', {'name': 'ethernet-1/31', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/32]', {'name': 'ethernet-1/32', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-network-instance:network-instance, Schema path: /network-instance
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/33]', {'name': 'ethernet-1/33', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /network-instance
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/34]', {'name': 'ethernet-1/34', 'admin_state': 'disable'}))
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /network-instance
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/35]', {'name': 'ethernet-1/35', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/36]', {'name': 'ethernet-1/36', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/37]', {'name': 'ethernet-1/37', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/38]', {'name': 'ethernet-1/38', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/39]', {'name': 'ethernet-1/39', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/40]', {'name': 'ethernet-1/40', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/41]', {'name': 'ethernet-1/41', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/42]', {'name': 'ethernet-1/42', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/43]', {'name': 'ethernet-1/43', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/44]', {'name': 'ethernet-1/44', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/45]', {'name': 'ethernet-1/45', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/46]', {'name': 'ethernet-1/46', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/47]', {'name': 'ethernet-1/47', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/48]', {'name': 'ethernet-1/48', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/49]', {'name': 'ethernet-1/49', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/50]', {'name': 'ethernet-1/50', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/51]', {'name': 'ethernet-1/51', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/52]', {'name': 'ethernet-1/52', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/53]', {'name': 'ethernet-1/53', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/54]', {'name': 'ethernet-1/54', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/55]', {'name': 'ethernet-1/55', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/56]', {'name': 'ethernet-1/56', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[mgmt0]/subinterface[0]', {'index': 0, 'admin-state': 'enable', 'type': None, 'ipv4': {'address': [{'ip-prefix': '172.20.20.102/24'}]}, 'vlan': {'encap': {'untagged': {}}}}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[mgmt0]', {'name': 'mgmt0', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
ERROR:device.service.drivers.gnmi_nokia_srlinux.GnmiNokiaSrLinuxDriver:[172.20.20.101:57400]:Exception processing notification {"atomic": false, "delete": [], "timestamp": "1712310240179530218", "update": [{"duplicates": 0, "path": {"elem": [], "element": [], "origin": "", "target": ""}, "val": {"json_ietf_val": "eyJzcmxfbm9raWEtbmV0d29yay1pbnN0YW5jZTpuZXR3b3JrLWluc3RhbmNlIjogW3sibmFtZSI6ICJtZ210IiwgInR5cGUiOiAic3JsX25va2lhLW5ldHdvcmstaW5zdGFuY2U6aXAtdnJmIiwgImFkbWluLXN0YXRlIjogImVuYWJsZSIsICJvcGVyLXN0YXRlIjogInVwIiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZW1lbnQgbmV0d29yayBpbnN0YW5jZSIsICJpcC1mb3J3YXJkaW5nIjogeyJyZWNlaXZlLWlwdjQtY2hlY2siOiB0cnVlLCAicmVjZWl2ZS1pcHY2LWNoZWNrIjogdHJ1ZX0sICJpbnRlcmZhY2UiOiBbeyJuYW1lIjogIm1nbXQwLjAiLCAib3Blci1zdGF0ZSI6ICJ1cCIsICJpbmRleCI6ICIxIn1dLCAiaWNtcCI6IHsic3RhdGlzdGljcyI6IHsibGFzdC1jbGVhciI6ICIyMDI0LTA0LTA1VDA5OjE3OjI3LjU4MloiLCAidG90YWwiOiB7ImluLXBhY2tldHMiOiAiMCIsICJpbi1lcnJvci1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sICJ0eXBlIjogW3sibmFtZSI6ICJlY2hvLXJlcGx5IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogImRlc3QtdW5yZWFjaGFibGUiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicmVkaXJlY3QiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAiZWNobyIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJydHItYWR2ZXJ0aXNlbWVudCIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJydHItc2VsZWN0aW9uIiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogInRpbWUtZXhjZWVkZWQiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicGFyYW0tcHJvYmxlbSIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAidGltZXN0YW1wLXJlcGx5IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifV19fSwgImljbXA2IjogeyJzdGF0aXN0aWNzIjogeyJsYXN0LWNsZWFyIjogIjIwMjQtMDQtMDVUMDk6MTc6MjcuNTgyWiIsICJ0b3RhbCI6IHsiaW4tcGFja2V0cyI6ICI2MiIsICJpbi1lcnJvci1wYWNrZXRzIjogIjMyIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCAidHlwZSI6IFt7Im5hbWUiOiAiZGVzdC11bnJlYWNoYWJsZSIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJwYWNrZXQtdG9vLWJpZyIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJ0aW1lLWV4Y2VlZGVkIiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogInBhcmFtLXByb2JsZW0iLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAiZWNoby1yZXF1ZXN0IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogImVjaG8tcmVwbHkiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicnRyLXNvbGljaXRhdGlvbiIsICJpbi1wYWNrZXRzIjogIjMyIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicnRyLWFkdmVydGlzZW1lbnQiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAibmJyLXNvbGljaXRhdGlvbiIsICJpbi1wYWNrZXRzIjogIjciLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJuYnItYWR2ZXJ0aXNlbWVudCIsICJpbi1wYWNrZXRzIjogIjkiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJyZWRpcmVjdCIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn1dfX0sICJwcm90b2NvbHMiOiB7InNybF9ub2tpYS1saW51eDpsaW51eCI6IHsiaW1wb3J0LXJvdXRlcyI6IHRydWUsICJleHBvcnQtcm91dGVzIjogdHJ1ZSwgImV4cG9ydC1uZWlnaGJvcnMiOiB0cnVlfX0sICJyb3V0ZS10YWJsZSI6IHsic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczppcHY0LXVuaWNhc3QiOiB7InJvdXRlIjogW3siaXB2NC1wcmVmaXgiOiAiMC4wLjAuMC8wIiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgInJvdXRlLW93bmVyIjogImRoY3BfY2xpZW50X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MjcuNjg2WiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4Mzg0MzkiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyNy42ODlaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjQtcHJlZml4IjogIjE3Mi4yMC4yMC4wLzI0IiwgImlkIjogMCwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpsaW51eCIsICJyb3V0ZS1vd25lciI6ICJsaW51eF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiA1LCAiYWN0aXZlIjogZmFsc2UsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMy43MTNaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjgzODQ0NCIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjcxNloiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX0sIHsiaXB2NC1wcmVmaXgiOiAiMTcyLjIwLjIwLjAvMjQiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmxvY2FsIiwgInJvdXRlLW93bmVyIjogIm5ldF9pbnN0X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDAsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuNzE0WiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4Mzg0NDUiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMy43MTZaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjQtcHJlZml4IjogIjE3Mi4yMC4yMC4xMDEvMzIiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAicm91dGUtb3duZXIiOiAibmV0X2luc3RfbWdyIiwgIm9yaWdpbi1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAibGVha2FibGUiOiBmYWxzZSwgIm1ldHJpYyI6IDAsICJwcmVmZXJlbmNlIjogMCwgImFjdGl2ZSI6IHRydWUsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMy43MTRaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjgzODQ0MyIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjcxNloiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX0sIHsiaXB2NC1wcmVmaXgiOiAiMTcyLjIwLjIwLjI1NS8zMiIsICJpZCI6IDEsICJyb3V0ZS10eXBlIjogInNybF9ub2tpYS1jb21tb246aG9zdCIsICJyb3V0ZS1vd25lciI6ICJuZXRfaW5zdF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiAwLCAiYWN0aXZlIjogdHJ1ZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjcxNFoiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODM4NDQ2IiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuNzE2WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fV0sICJzdGF0aXN0aWNzIjogeyJhY3RpdmUtcm91dGVzIjogNCwgImFjdGl2ZS1yb3V0ZXMtd2l0aC1lY21wIjogMCwgInJlc2lsaWVudC1oYXNoLXJvdXRlcyI6IDAsICJmaWItZmFpbGVkLXJvdXRlcyI6IDAsICJ0b3RhbC1yb3V0ZXMiOiAiNSJ9LCAicm91dGUtc3VtbWFyeSI6IHsicm91dGUtdHlwZSI6IFt7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmRoY3AiLCAiYWN0aXZlLXJvdXRlcyI6IDF9LCB7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAiYWN0aXZlLXJvdXRlcyI6IDJ9LCB7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmxpbnV4IiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpsb2NhbCIsICJhY3RpdmUtcm91dGVzIjogMX1dfX0sICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmlwdjYtdW5pY2FzdCI6IHsicm91dGUiOiBbeyJpcHY2LXByZWZpeCI6ICI6Oi8wIiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgInJvdXRlLW93bmVyIjogImRoY3BfY2xpZW50X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MjguMzAyWiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4Mzg0NDAiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyOC4zMDNaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjYtcHJlZml4IjogIjIwMDE6MTcyOjIwOjIwOjovNjQiLCAiaWQiOiAwLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmxpbnV4IiwgInJvdXRlLW93bmVyIjogImxpbnV4X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiBmYWxzZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjI5LjE1NloiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODM4NDQxIiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MjkuMTU4WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fSwgeyJpcHY2LXByZWZpeCI6ICIyMDAxOjE3MjoyMDoyMDo6LzY0IiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpsb2NhbCIsICJyb3V0ZS1vd25lciI6ICJuZXRfaW5zdF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiAwLCAiYWN0aXZlIjogdHJ1ZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjI5LjE1NloiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODM4NDQyIiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MjkuMTU4WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fSwgeyJpcHY2LXByZWZpeCI6ICIyMDAxOjE3MjoyMDoyMDo6NC8xMjgiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAicm91dGUtb3duZXIiOiAibmV0X2luc3RfbWdyIiwgIm9yaWdpbi1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAibGVha2FibGUiOiBmYWxzZSwgIm1ldHJpYyI6IDAsICJwcmVmZXJlbmNlIjogMCwgImFjdGl2ZSI6IHRydWUsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzoyOS4xNTZaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjgzODQ0MyIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjI5LjE1OFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX1dLCAic3RhdGlzdGljcyI6IHsiYWN0aXZlLXJvdXRlcyI6IDMsICJhY3RpdmUtcm91dGVzLXdpdGgtZWNtcCI6IDAsICJyZXNpbGllbnQtaGFzaC1yb3V0ZXMiOiAwLCAiZmliLWZhaWxlZC1yb3V0ZXMiOiAwLCAidG90YWwtcm91dGVzIjogIjQifSwgInJvdXRlLXN1bW1hcnkiOiB7InJvdXRlLXR5cGUiOiBbeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpob3N0IiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpsaW51eCIsICJhY3RpdmUtcm91dGVzIjogMX0sIHsiaXAtcm91dGUtdHlwZS1uYW1lIjogInNybF9ub2tpYS1jb21tb246bG9jYWwiLCAiYWN0aXZlLXJvdXRlcyI6IDF9XX19LCAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpuZXh0LWhvcC1ncm91cCI6IFt7ImluZGV4IjogIjI0NzEyMjgzODQzOSIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyNy42ODlaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjgzODQzOSIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODM4NDQwIiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjI4LjMwM1oiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMjQ3MTIyODM4NDQwIiwgInJlc29sdmVkIjogIm5vdC1hcHBsaWNhYmxlIn1dfSwgeyJpbmRleCI6ICIyNDcxMjI4Mzg0NDEiLCAiYmFja3VwLW5leHQtaG9wLWdyb3VwIjogIjAiLCAiZmliLXByb2dyYW1taW5nIjogeyJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MjkuMTU3WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9LCAibmV4dC1ob3AiOiBbeyJpZCI6IDAsICJuZXh0LWhvcCI6ICIyNDcxMjI4Mzg0NDEiLCAicmVzb2x2ZWQiOiAibm90LWFwcGxpY2FibGUifV19LCB7ImluZGV4IjogIjI0NzEyMjgzODQ0MiIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyOS4xNThaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjgzODQ0MiIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODM4NDQzIiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjI5LjE1OFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMjQ3MTIyODM4NDQzIiwgInJlc29sdmVkIjogIm5vdC1hcHBsaWNhYmxlIn1dfSwgeyJpbmRleCI6ICIyNDcxMjI4Mzg0NDQiLCAiYmFja3VwLW5leHQtaG9wLWdyb3VwIjogIjAiLCAiZmliLXByb2dyYW1taW5nIjogeyJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuNzE1WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9LCAibmV4dC1ob3AiOiBbeyJpZCI6IDAsICJuZXh0LWhvcCI6ICIyNDcxMjI4Mzg0NDQiLCAicmVzb2x2ZWQiOiAibm90LWFwcGxpY2FibGUifV19LCB7ImluZGV4IjogIjI0NzEyMjgzODQ0NSIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMy43MTZaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjgzODQ0NSIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODM4NDQ2IiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjcxNloiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMyIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX1dLCAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpuZXh0LWhvcCI6IFt7ImluZGV4IjogIjMiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmJyb2FkY2FzdCJ9LCB7ImluZGV4IjogIjI0NzEyMjgzODQzOSIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZGlyZWN0IiwgImlwLWFkZHJlc3MiOiAiMTcyLjIwLjIwLjEiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifSwgeyJpbmRleCI6ICIyNDcxMjI4Mzg0NDAiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmRpcmVjdCIsICJpcC1hZGRyZXNzIjogIjIwMDE6MTcyOjIwOjIwOjoxIiwgInN1YmludGVyZmFjZSI6ICJtZ210MC4wIn0sIHsiaW5kZXgiOiAiMjQ3MTIyODM4NDQxIiwgInR5cGUiOiAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpkaXJlY3QiLCAiaXAtYWRkcmVzcyI6ICIyMDAxOjE3MjoyMDoyMDo6IiwgInN1YmludGVyZmFjZSI6ICJtZ210MC4wIn0sIHsiaW5kZXgiOiAiMjQ3MTIyODM4NDQyIiwgInR5cGUiOiAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpkaXJlY3QiLCAiaXAtYWRkcmVzcyI6ICIyMDAxOjE3MjoyMDoyMDo6NCIsICJzdWJpbnRlcmZhY2UiOiAibWdtdDAuMCJ9LCB7ImluZGV4IjogIjI0NzEyMjgzODQ0MyIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZXh0cmFjdCJ9LCB7ImluZGV4IjogIjI0NzEyMjgzODQ0NCIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZGlyZWN0IiwgImlwLWFkZHJlc3MiOiAiMTcyLjIwLjIwLjAiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifSwgeyJpbmRleCI6ICIyNDcxMjI4Mzg0NDUiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmRpcmVjdCIsICJpcC1hZGRyZXNzIjogIjE3Mi4yMC4yMC4xMDEiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifV19LCAidHVubmVsLXRhYmxlIjogeyJzcmxfbm9raWEtdHVubmVsLXRhYmxlczppcHY0Ijoge30sICJzcmxfbm9raWEtdHVubmVsLXRhYmxlczppcHY2Ijoge319LCAic3JsX25va2lhLXRjcC11ZHA6dGNwIjogeyJzdGF0aXN0aWNzIjogeyJhY3RpdmUtb3BlbnMiOiAiMCIsICJwYXNzaXZlLW9wZW5zIjogIjIiLCAiYXR0ZW1wdC1mYWlscyI6ICIwIiwgImVzdGFibGlzaGVkLXJlc2V0cyI6ICIwIiwgImluLXNlZ21lbnRzIjogIjQxIiwgIm91dC1zZWdtZW50cyI6ICI0NiIsICJyZXRyYW5zbWl0dGVkLXNlZ21lbnRzIjogIjAiLCAiaW4tZXJyb3Itc2VnbWVudHMiOiAiMCIsICJvdXQtcnN0LXNlZ21lbnRzIjogIjEiLCAiaW4tY2hlY2tzdW0tZXJyb3JzIjogIjAifSwgImxpc3RlbmluZy1hcHBsaWNhdGlvbiI6IFt7ImxvY2FsLWFkZHJlc3MiOiAiMC4wLjAuMCIsICJsb2NhbC1wb3J0IjogMjJ9LCB7ImxvY2FsLWFkZHJlc3MiOiAiMTI3LjAuMC4xIiwgImxvY2FsLXBvcnQiOiA1M30sIHsibG9jYWwtYWRkcmVzcyI6ICIxMjcuMC4wLjEiLCAibG9jYWwtcG9ydCI6IDE5OX0sIHsibG9jYWwtYWRkcmVzcyI6ICI6OiIsICJsb2NhbC1wb3J0IjogMjJ9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDgwfSwgeyJsb2NhbC1hZGRyZXNzIjogIjo6IiwgImxvY2FsLXBvcnQiOiA0NDN9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDU3NDAwfSwgeyJsb2NhbC1hZGRyZXNzIjogIjo6MSIsICJsb2NhbC1wb3J0IjogNTN9XX0sICJzcmxfbm9raWEtdGNwLXVkcDp1ZHAiOiB7InN0YXRpc3RpY3MiOiB7ImluLXBhY2tldHMiOiAiMCIsICJpbi1uby1vcGVuLXBvcnRzLXBhY2tldHMiOiAiMCIsICJpbi1lcnJvci1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJyZWNlaXZlLWJ1ZmZlci1lcnJvcnMiOiAiMCIsICJzZW5kLWJ1ZmZlci1lcnJvcnMiOiAiMCIsICJpbi1jaGVja3N1bS1lcnJvcnMiOiAiMCIsICJpZ25vcmVkLW11bHRpY2FzdC1wYWNrZXRzIjogIjAifSwgImxpc3RlbmluZy1hcHBsaWNhdGlvbiI6IFt7ImxvY2FsLWFkZHJlc3MiOiAiMC4wLjAuMCIsICJsb2NhbC1wb3J0IjogMTYxfSwgeyJsb2NhbC1hZGRyZXNzIjogIjEyNy4wLjAuMSIsICJsb2NhbC1wb3J0IjogNTN9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDE2MX0sIHsibG9jYWwtYWRkcmVzcyI6ICI6OjEiLCAibG9jYWwtcG9ydCI6IDUzfV19fV19"}}]}
Traceback (most recent call last):
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/GnmiSessionHandler.py", line 140, in get
results.extend(parse(str_path, value))
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py", line 134, in parse
return handler.parse(value)
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/NetworkInstance.py", line 438, in parse
if afi_safi_entry:
UnboundLocalError: local variable 'afi_safi_entry' referenced before assignment
ERROR:device.service.DeviceServiceServicerImpl:AddDevice exception
Traceback (most recent call last):
File "/var/teraflow/common/method_wrappers/Decorator.py", line 220, in inner_wrapper
reply = func(self, request, grpc_context)
File "/var/teraflow/device/service/DeviceServiceServicerImpl.py", line 122, in AddDevice
raise OperationFailedException('AddDevice', extra_details=errors)
common.method_wrappers.ServiceExceptions.OperationFailedException: Operation(AddDevice) failed; DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/1]', {'name': 'ethernet-1/1', 'admin_state': 'enable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/2]', {'name': 'ethernet-1/2', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/3]', {'name': 'ethernet-1/3', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/4]', {'name': 'ethernet-1/4', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/5]', {'name': 'ethernet-1/5', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/6]', {'name': 'ethernet-1/6', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/7]', {'name': 'ethernet-1/7', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/8]', {'name': 'ethernet-1/8', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/9]', {'name': 'ethernet-1/9', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/10]', {'name': 'ethernet-1/10', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/11]', {'name': 'ethernet-1/11', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/12]', {'name': 'ethernet-1/12', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/13]', {'name': 'ethernet-1/13', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/14]', {'name': 'ethernet-1/14', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/15]', {'name': 'ethernet-1/15', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/16]', {'name': 'ethernet-1/16', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/17]', {'name': 'ethernet-1/17', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/18]', {'name': 'ethernet-1/18', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/19]', {'name': 'ethernet-1/19', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/20]', {'name': 'ethernet-1/20', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/21]', {'name': 'ethernet-1/21', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/22]', {'name': 'ethernet-1/22', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/23]', {'name': 'ethernet-1/23', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/24]', {'name': 'ethernet-1/24', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/25]', {'name': 'ethernet-1/25', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/26]', {'name': 'ethernet-1/26', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/27]', {'name': 'ethernet-1/27', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/28]', {'name': 'ethernet-1/28', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/29]', {'name': 'ethernet-1/29', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/30]', {'name': 'ethernet-1/30', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/31]', {'name': 'ethernet-1/31', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/32]', {'name': 'ethernet-1/32', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/33]', {'name': 'ethernet-1/33', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/34]', {'name': 'ethernet-1/34', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/35]', {'name': 'ethernet-1/35', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/36]', {'name': 'ethernet-1/36', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/37]', {'name': 'ethernet-1/37', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/38]', {'name': 'ethernet-1/38', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/39]', {'name': 'ethernet-1/39', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/40]', {'name': 'ethernet-1/40', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/41]', {'name': 'ethernet-1/41', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/42]', {'name': 'ethernet-1/42', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/43]', {'name': 'ethernet-1/43', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/44]', {'name': 'ethernet-1/44', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/45]', {'name': 'ethernet-1/45', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/46]', {'name': 'ethernet-1/46', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/47]', {'name': 'ethernet-1/47', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/48]', {'name': 'ethernet-1/48', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/49]', {'name': 'ethernet-1/49', 'admin_state': 'enable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/50]', {'name': 'ethernet-1/50', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/51]', {'name': 'ethernet-1/51', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/52]', {'name': 'ethernet-1/52', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/53]', {'name': 'ethernet-1/53', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/54]', {'name': 'ethernet-1/54', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/55]', {'name': 'ethernet-1/55', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/56]', {'name': 'ethernet-1/56', 'admin_state': 'disable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[mgmt0]/subinterface[0]', {'index': 0, 'admin-state': 'enable', 'type': None, 'ipv4': {'address': [{'ip-prefix': '172.20.20.102/24'}]}, 'vlan': {'encap': {'untagged': {}}}})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): GetConfig retrieved unsupported Resource(('/interface[mgmt0]', {'name': 'mgmt0', 'admin_state': 'enable'})); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment); DeviceId(50c36ec0-09ba-546a-b18f-27f9776ce876): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-network-instance:network-instance, Schema path: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /network-instance
ERROR:device.service.drivers.gnmi_nokia_srlinux.GnmiNokiaSrLinuxDriver:[172.20.20.101:57400]:Exception processing notification {"atomic": false, "delete": [], "timestamp": "1712310240181392223", "update": [{"duplicates": 0, "path": {"elem": [], "element": [], "origin": "", "target": ""}, "val": {"json_ietf_val": "eyJzcmxfbm9raWEtbmV0d29yay1pbnN0YW5jZTpuZXR3b3JrLWluc3RhbmNlIjogW3sibmFtZSI6ICJtZ210IiwgImludGVyZmFjZSI6IFt7Im5hbWUiOiAibWdtdDAuMCIsICJvcGVyLXN0YXRlIjogInVwIiwgImluZGV4IjogIjEifV19XX0="}}]}
Traceback (most recent call last):
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/GnmiSessionHandler.py", line 140, in get
results.extend(parse(str_path, value))
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py", line 134, in parse
return handler.parse(value)
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/NetworkInstance.py", line 438, in parse
if afi_safi_entry:
UnboundLocalError: local variable 'afi_safi_entry' referenced before assignment
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-routing-policy:routing-policy, Schema path: /routing-policy
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /routing-policy
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /routing-policy
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/1]', {'name': 'ethernet-1/1', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/2]', {'name': 'ethernet-1/2', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/3]', {'name': 'ethernet-1/3', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/4]', {'name': 'ethernet-1/4', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/5]', {'name': 'ethernet-1/5', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/6]', {'name': 'ethernet-1/6', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/7]', {'name': 'ethernet-1/7', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/8]', {'name': 'ethernet-1/8', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/9]', {'name': 'ethernet-1/9', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/10]', {'name': 'ethernet-1/10', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/11]', {'name': 'ethernet-1/11', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/12]', {'name': 'ethernet-1/12', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/13]', {'name': 'ethernet-1/13', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/14]', {'name': 'ethernet-1/14', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/15]', {'name': 'ethernet-1/15', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/16]', {'name': 'ethernet-1/16', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/17]', {'name': 'ethernet-1/17', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/18]', {'name': 'ethernet-1/18', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/19]', {'name': 'ethernet-1/19', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/20]', {'name': 'ethernet-1/20', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/21]', {'name': 'ethernet-1/21', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/22]', {'name': 'ethernet-1/22', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/23]', {'name': 'ethernet-1/23', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/24]', {'name': 'ethernet-1/24', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/25]', {'name': 'ethernet-1/25', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/26]', {'name': 'ethernet-1/26', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/27]', {'name': 'ethernet-1/27', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/28]', {'name': 'ethernet-1/28', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/29]', {'name': 'ethernet-1/29', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/30]', {'name': 'ethernet-1/30', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/31]', {'name': 'ethernet-1/31', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/32]', {'name': 'ethernet-1/32', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/33]', {'name': 'ethernet-1/33', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/34]', {'name': 'ethernet-1/34', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[mgmt0]/subinterface[0]', {'index': 0, 'admin-state': 'enable', 'type': None, 'ipv4': {'address': [{'ip-prefix': '172.20.20.101/24'}]}, 'vlan': {'encap': {'untagged': {}}}}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[mgmt0]', {'name': 'mgmt0', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
ERROR:device.service.DeviceServiceServicerImpl:AddDevice exception
Traceback (most recent call last):
File "/var/teraflow/common/method_wrappers/Decorator.py", line 220, in inner_wrapper
reply = func(self, request, grpc_context)
File "/var/teraflow/device/service/DeviceServiceServicerImpl.py", line 122, in AddDevice
raise OperationFailedException('AddDevice', extra_details=errors)
common.method_wrappers.ServiceExceptions.OperationFailedException: Operation(AddDevice) failed; DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/1]', {'name': 'ethernet-1/1', 'admin_state': 'enable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/2]', {'name': 'ethernet-1/2', 'admin_state': 'enable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/3]', {'name': 'ethernet-1/3', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/4]', {'name': 'ethernet-1/4', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/5]', {'name': 'ethernet-1/5', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/6]', {'name': 'ethernet-1/6', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/7]', {'name': 'ethernet-1/7', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/8]', {'name': 'ethernet-1/8', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/9]', {'name': 'ethernet-1/9', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/10]', {'name': 'ethernet-1/10', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/11]', {'name': 'ethernet-1/11', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/12]', {'name': 'ethernet-1/12', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/13]', {'name': 'ethernet-1/13', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/14]', {'name': 'ethernet-1/14', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/15]', {'name': 'ethernet-1/15', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/16]', {'name': 'ethernet-1/16', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/17]', {'name': 'ethernet-1/17', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/18]', {'name': 'ethernet-1/18', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/19]', {'name': 'ethernet-1/19', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/20]', {'name': 'ethernet-1/20', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/21]', {'name': 'ethernet-1/21', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/22]', {'name': 'ethernet-1/22', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/23]', {'name': 'ethernet-1/23', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/24]', {'name': 'ethernet-1/24', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/25]', {'name': 'ethernet-1/25', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/26]', {'name': 'ethernet-1/26', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/27]', {'name': 'ethernet-1/27', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/28]', {'name': 'ethernet-1/28', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/29]', {'name': 'ethernet-1/29', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/30]', {'name': 'ethernet-1/30', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/31]', {'name': 'ethernet-1/31', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/32]', {'name': 'ethernet-1/32', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/33]', {'name': 'ethernet-1/33', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/34]', {'name': 'ethernet-1/34', 'admin_state': 'disable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[mgmt0]/subinterface[0]', {'index': 0, 'admin-state': 'enable', 'type': None, 'ipv4': {'address': [{'ip-prefix': '172.20.20.101/24'}]}, 'vlan': {'encap': {'untagged': {}}}})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): GetConfig retrieved unsupported Resource(('/interface[mgmt0]', {'name': 'mgmt0', 'admin_state': 'enable'})); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment); DeviceId(fcbf1c99-3a0a-5487-af2b-034ab906f2a4): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-interfaces:interface, Schema path: /srl_nokia-interfaces:interface
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /srl_nokia-interfaces:interface
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers.Interface:Getting path for InterfaceHandler
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /srl_nokia-interfaces:interface
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-interfaces:interface, Schema path: /srl_nokia-interfaces:interface
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /srl_nokia-interfaces:interface
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers.Interface:Getting path for InterfaceHandler
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /srl_nokia-interfaces:interface
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-network-instance:network-instance, Schema path: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /network-instance
ERROR:device.service.drivers.gnmi_nokia_srlinux.GnmiNokiaSrLinuxDriver:[172.20.20.103:57400]:Exception processing notification {"atomic": false, "delete": [], "timestamp": "1712310240224040603", "update": [{"duplicates": 0, "path": {"elem": [], "element": [], "origin": "", "target": ""}, "val": {"json_ietf_val": "eyJzcmxfbm9raWEtbmV0d29yay1pbnN0YW5jZTpuZXR3b3JrLWluc3RhbmNlIjogW3sibmFtZSI6ICJtZ210IiwgInR5cGUiOiAic3JsX25va2lhLW5ldHdvcmstaW5zdGFuY2U6aXAtdnJmIiwgImFkbWluLXN0YXRlIjogImVuYWJsZSIsICJvcGVyLXN0YXRlIjogInVwIiwgImRlc2NyaXB0aW9uIjogIk1hbmFnZW1lbnQgbmV0d29yayBpbnN0YW5jZSIsICJpcC1mb3J3YXJkaW5nIjogeyJyZWNlaXZlLWlwdjQtY2hlY2siOiB0cnVlLCAicmVjZWl2ZS1pcHY2LWNoZWNrIjogdHJ1ZX0sICJpbnRlcmZhY2UiOiBbeyJuYW1lIjogIm1nbXQwLjAiLCAib3Blci1zdGF0ZSI6ICJ1cCIsICJpbmRleCI6ICIxIn1dLCAiaWNtcCI6IHsic3RhdGlzdGljcyI6IHsibGFzdC1jbGVhciI6ICIyMDI0LTA0LTA1VDA5OjE3OjI3LjcwMloiLCAidG90YWwiOiB7ImluLXBhY2tldHMiOiAiMCIsICJpbi1lcnJvci1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sICJ0eXBlIjogW3sibmFtZSI6ICJlY2hvLXJlcGx5IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogImRlc3QtdW5yZWFjaGFibGUiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicmVkaXJlY3QiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAiZWNobyIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJydHItYWR2ZXJ0aXNlbWVudCIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJydHItc2VsZWN0aW9uIiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogInRpbWUtZXhjZWVkZWQiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicGFyYW0tcHJvYmxlbSIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAidGltZXN0YW1wLXJlcGx5IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifV19fSwgImljbXA2IjogeyJzdGF0aXN0aWNzIjogeyJsYXN0LWNsZWFyIjogIjIwMjQtMDQtMDVUMDk6MTc6MjcuNzAyWiIsICJ0b3RhbCI6IHsiaW4tcGFja2V0cyI6ICI0NyIsICJpbi1lcnJvci1wYWNrZXRzIjogIjMwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCAidHlwZSI6IFt7Im5hbWUiOiAiZGVzdC11bnJlYWNoYWJsZSIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJwYWNrZXQtdG9vLWJpZyIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJ0aW1lLWV4Y2VlZGVkIiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogInBhcmFtLXByb2JsZW0iLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAiZWNoby1yZXF1ZXN0IiwgImluLXBhY2tldHMiOiAiMCIsICJvdXQtcGFja2V0cyI6ICIwIiwgIm91dC1lcnJvci1wYWNrZXRzIjogIjAifSwgeyJuYW1lIjogImVjaG8tcmVwbHkiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicnRyLXNvbGljaXRhdGlvbiIsICJpbi1wYWNrZXRzIjogIjMwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAicnRyLWFkdmVydGlzZW1lbnQiLCAiaW4tcGFja2V0cyI6ICIwIiwgIm91dC1wYWNrZXRzIjogIjAiLCAib3V0LWVycm9yLXBhY2tldHMiOiAiMCJ9LCB7Im5hbWUiOiAibmJyLXNvbGljaXRhdGlvbiIsICJpbi1wYWNrZXRzIjogIjIiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJuYnItYWR2ZXJ0aXNlbWVudCIsICJpbi1wYWNrZXRzIjogIjgiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn0sIHsibmFtZSI6ICJyZWRpcmVjdCIsICJpbi1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJvdXQtZXJyb3ItcGFja2V0cyI6ICIwIn1dfX0sICJwcm90b2NvbHMiOiB7InNybF9ub2tpYS1saW51eDpsaW51eCI6IHsiaW1wb3J0LXJvdXRlcyI6IHRydWUsICJleHBvcnQtcm91dGVzIjogdHJ1ZSwgImV4cG9ydC1uZWlnaGJvcnMiOiB0cnVlfX0sICJyb3V0ZS10YWJsZSI6IHsic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczppcHY0LXVuaWNhc3QiOiB7InJvdXRlIjogW3siaXB2NC1wcmVmaXgiOiAiMC4wLjAuMC8wIiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgInJvdXRlLW93bmVyIjogImRoY3BfY2xpZW50X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MjcuODY0WiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4MzQ4MzgiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyNy44NjdaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjQtcHJlZml4IjogIjE3Mi4yMC4yMC4wLzI0IiwgImlkIjogMCwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpsaW51eCIsICJyb3V0ZS1vd25lciI6ICJsaW51eF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiA1LCAiYWN0aXZlIjogZmFsc2UsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMy44OTFaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjgzNDg0MyIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjkwNFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX0sIHsiaXB2NC1wcmVmaXgiOiAiMTcyLjIwLjIwLjAvMjQiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmxvY2FsIiwgInJvdXRlLW93bmVyIjogIm5ldF9pbnN0X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDAsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuOTAxWiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4MzQ4NDQiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45MDRaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjQtcHJlZml4IjogIjE3Mi4yMC4yMC4xMDMvMzIiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAicm91dGUtb3duZXIiOiAibmV0X2luc3RfbWdyIiwgIm9yaWdpbi1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAibGVha2FibGUiOiBmYWxzZSwgIm1ldHJpYyI6IDAsICJwcmVmZXJlbmNlIjogMCwgImFjdGl2ZSI6IHRydWUsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45MDFaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjgzNDg0MiIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjkwNFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX0sIHsiaXB2NC1wcmVmaXgiOiAiMTcyLjIwLjIwLjI1NS8zMiIsICJpZCI6IDEsICJyb3V0ZS10eXBlIjogInNybF9ub2tpYS1jb21tb246aG9zdCIsICJyb3V0ZS1vd25lciI6ICJuZXRfaW5zdF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiAwLCAiYWN0aXZlIjogdHJ1ZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjkwMVoiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODM0ODQ1IiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuOTA0WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fV0sICJzdGF0aXN0aWNzIjogeyJhY3RpdmUtcm91dGVzIjogNCwgImFjdGl2ZS1yb3V0ZXMtd2l0aC1lY21wIjogMCwgInJlc2lsaWVudC1oYXNoLXJvdXRlcyI6IDAsICJmaWItZmFpbGVkLXJvdXRlcyI6IDAsICJ0b3RhbC1yb3V0ZXMiOiAiNSJ9LCAicm91dGUtc3VtbWFyeSI6IHsicm91dGUtdHlwZSI6IFt7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmRoY3AiLCAiYWN0aXZlLXJvdXRlcyI6IDF9LCB7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAiYWN0aXZlLXJvdXRlcyI6IDJ9LCB7ImlwLXJvdXRlLXR5cGUtbmFtZSI6ICJzcmxfbm9raWEtY29tbW9uOmxpbnV4IiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpsb2NhbCIsICJhY3RpdmUtcm91dGVzIjogMX1dfX0sICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmlwdjYtdW5pY2FzdCI6IHsicm91dGUiOiBbeyJpcHY2LXByZWZpeCI6ICI6Oi8wIiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgInJvdXRlLW93bmVyIjogImRoY3BfY2xpZW50X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiB0cnVlLCAibGFzdC1hcHAtdXBkYXRlIjogIjIwMjQtMDQtMDVUMDk6MTc6MjguOTc1WiIsICJuZXh0LWhvcC1ncm91cCI6ICIyNDcxMjI4MzQ4MzkiLCAibmV4dC1ob3AtZ3JvdXAtbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgInJlc2lsaWVudC1oYXNoIjogZmFsc2UsICJmaWItcHJvZ3JhbW1pbmciOiB7InN1cHByZXNzZWQiOiBmYWxzZSwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyOC45NzlaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn19LCB7ImlwdjYtcHJlZml4IjogIjIwMDE6MTcyOjIwOjIwOjovNjQiLCAiaWQiOiAwLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmxpbnV4IiwgInJvdXRlLW93bmVyIjogImxpbnV4X21nciIsICJvcmlnaW4tbmV0d29yay1pbnN0YW5jZSI6ICJtZ210IiwgImxlYWthYmxlIjogZmFsc2UsICJtZXRyaWMiOiAwLCAicHJlZmVyZW5jZSI6IDUsICJhY3RpdmUiOiBmYWxzZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjQwN1oiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODM0ODQwIiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzAuNDA4WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fSwgeyJpcHY2LXByZWZpeCI6ICIyMDAxOjE3MjoyMDoyMDo6LzY0IiwgImlkIjogMSwgInJvdXRlLXR5cGUiOiAic3JsX25va2lhLWNvbW1vbjpsb2NhbCIsICJyb3V0ZS1vd25lciI6ICJuZXRfaW5zdF9tZ3IiLCAib3JpZ2luLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJsZWFrYWJsZSI6IGZhbHNlLCAibWV0cmljIjogMCwgInByZWZlcmVuY2UiOiAwLCAiYWN0aXZlIjogdHJ1ZSwgImxhc3QtYXBwLXVwZGF0ZSI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjQwOFoiLCAibmV4dC1ob3AtZ3JvdXAiOiAiMjQ3MTIyODM0ODQxIiwgIm5leHQtaG9wLWdyb3VwLW5ldHdvcmstaW5zdGFuY2UiOiAibWdtdCIsICJyZXNpbGllbnQtaGFzaCI6IGZhbHNlLCAiZmliLXByb2dyYW1taW5nIjogeyJzdXBwcmVzc2VkIjogZmFsc2UsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzAuNDA4WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9fSwgeyJpcHY2LXByZWZpeCI6ICIyMDAxOjE3MjoyMDoyMDo6My8xMjgiLCAiaWQiOiAxLCAicm91dGUtdHlwZSI6ICJzcmxfbm9raWEtY29tbW9uOmhvc3QiLCAicm91dGUtb3duZXIiOiAibmV0X2luc3RfbWdyIiwgIm9yaWdpbi1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAibGVha2FibGUiOiBmYWxzZSwgIm1ldHJpYyI6IDAsICJwcmVmZXJlbmNlIjogMCwgImFjdGl2ZSI6IHRydWUsICJsYXN0LWFwcC11cGRhdGUiOiAiMjAyNC0wNC0wNVQwOToxNzozMC40MDhaIiwgIm5leHQtaG9wLWdyb3VwIjogIjI0NzEyMjgzNDg0MiIsICJuZXh0LWhvcC1ncm91cC1uZXR3b3JrLWluc3RhbmNlIjogIm1nbXQiLCAicmVzaWxpZW50LWhhc2giOiBmYWxzZSwgImZpYi1wcm9ncmFtbWluZyI6IHsic3VwcHJlc3NlZCI6IGZhbHNlLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjQwOFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifX1dLCAic3RhdGlzdGljcyI6IHsiYWN0aXZlLXJvdXRlcyI6IDMsICJhY3RpdmUtcm91dGVzLXdpdGgtZWNtcCI6IDAsICJyZXNpbGllbnQtaGFzaC1yb3V0ZXMiOiAwLCAiZmliLWZhaWxlZC1yb3V0ZXMiOiAwLCAidG90YWwtcm91dGVzIjogIjQifSwgInJvdXRlLXN1bW1hcnkiOiB7InJvdXRlLXR5cGUiOiBbeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpkaGNwIiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpob3N0IiwgImFjdGl2ZS1yb3V0ZXMiOiAxfSwgeyJpcC1yb3V0ZS10eXBlLW5hbWUiOiAic3JsX25va2lhLWNvbW1vbjpsaW51eCIsICJhY3RpdmUtcm91dGVzIjogMX0sIHsiaXAtcm91dGUtdHlwZS1uYW1lIjogInNybF9ub2tpYS1jb21tb246bG9jYWwiLCAiYWN0aXZlLXJvdXRlcyI6IDF9XX19LCAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpuZXh0LWhvcC1ncm91cCI6IFt7ImluZGV4IjogIjI0NzEyMjgzNDgzOCIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzoyNy44NjdaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjgzNDgzOCIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODM0ODM5IiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjI4Ljk3OVoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMjQ3MTIyODM0ODM5IiwgInJlc29sdmVkIjogIm5vdC1hcHBsaWNhYmxlIn1dfSwgeyJpbmRleCI6ICIyNDcxMjI4MzQ4NDAiLCAiYmFja3VwLW5leHQtaG9wLWdyb3VwIjogIjAiLCAiZmliLXByb2dyYW1taW5nIjogeyJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzAuNDA4WiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9LCAibmV4dC1ob3AiOiBbeyJpZCI6IDAsICJuZXh0LWhvcCI6ICIyNDcxMjI4MzQ4NDAiLCAicmVzb2x2ZWQiOiAibm90LWFwcGxpY2FibGUifV19LCB7ImluZGV4IjogIjI0NzEyMjgzNDg0MSIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMC40MDhaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjgzNDg0MSIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODM0ODQyIiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMwLjQwOFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMjQ3MTIyODM0ODQyIiwgInJlc29sdmVkIjogIm5vdC1hcHBsaWNhYmxlIn1dfSwgeyJpbmRleCI6ICIyNDcxMjI4MzQ4NDMiLCAiYmFja3VwLW5leHQtaG9wLWdyb3VwIjogIjAiLCAiZmliLXByb2dyYW1taW5nIjogeyJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXR5cGUiOiAiYWRkIiwgImxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdGltZXN0YW1wIjogIjIwMjQtMDQtMDVUMDk6MTc6MzMuODkxWiIsICJwZW5kaW5nLW9wZXJhdGlvbi10eXBlIjogIm5vbmUiLCAibGFzdC1mYWlsZWQtb3BlcmF0aW9uLXR5cGUiOiAibm9uZSJ9LCAibmV4dC1ob3AiOiBbeyJpZCI6IDAsICJuZXh0LWhvcCI6ICIyNDcxMjI4MzQ4NDMiLCAicmVzb2x2ZWQiOiAibm90LWFwcGxpY2FibGUifV19LCB7ImluZGV4IjogIjI0NzEyMjgzNDg0NCIsICJiYWNrdXAtbmV4dC1ob3AtZ3JvdXAiOiAiMCIsICJmaWItcHJvZ3JhbW1pbmciOiB7Imxhc3Qtc3VjY2Vzc2Z1bC1vcGVyYXRpb24tdHlwZSI6ICJhZGQiLCAibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10aW1lc3RhbXAiOiAiMjAyNC0wNC0wNVQwOToxNzozMy45MDRaIiwgInBlbmRpbmctb3BlcmF0aW9uLXR5cGUiOiAibm9uZSIsICJsYXN0LWZhaWxlZC1vcGVyYXRpb24tdHlwZSI6ICJub25lIn0sICJuZXh0LWhvcCI6IFt7ImlkIjogMCwgIm5leHQtaG9wIjogIjI0NzEyMjgzNDg0NCIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX0sIHsiaW5kZXgiOiAiMjQ3MTIyODM0ODQ1IiwgImJhY2t1cC1uZXh0LWhvcC1ncm91cCI6ICIwIiwgImZpYi1wcm9ncmFtbWluZyI6IHsibGFzdC1zdWNjZXNzZnVsLW9wZXJhdGlvbi10eXBlIjogImFkZCIsICJsYXN0LXN1Y2Nlc3NmdWwtb3BlcmF0aW9uLXRpbWVzdGFtcCI6ICIyMDI0LTA0LTA1VDA5OjE3OjMzLjkwNFoiLCAicGVuZGluZy1vcGVyYXRpb24tdHlwZSI6ICJub25lIiwgImxhc3QtZmFpbGVkLW9wZXJhdGlvbi10eXBlIjogIm5vbmUifSwgIm5leHQtaG9wIjogW3siaWQiOiAwLCAibmV4dC1ob3AiOiAiMyIsICJyZXNvbHZlZCI6ICJub3QtYXBwbGljYWJsZSJ9XX1dLCAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpuZXh0LWhvcCI6IFt7ImluZGV4IjogIjMiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmJyb2FkY2FzdCJ9LCB7ImluZGV4IjogIjI0NzEyMjgzNDgzOCIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZGlyZWN0IiwgImlwLWFkZHJlc3MiOiAiMTcyLjIwLjIwLjEiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifSwgeyJpbmRleCI6ICIyNDcxMjI4MzQ4MzkiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmRpcmVjdCIsICJpcC1hZGRyZXNzIjogIjIwMDE6MTcyOjIwOjIwOjoxIiwgInN1YmludGVyZmFjZSI6ICJtZ210MC4wIn0sIHsiaW5kZXgiOiAiMjQ3MTIyODM0ODQwIiwgInR5cGUiOiAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpkaXJlY3QiLCAiaXAtYWRkcmVzcyI6ICIyMDAxOjE3MjoyMDoyMDo6IiwgInN1YmludGVyZmFjZSI6ICJtZ210MC4wIn0sIHsiaW5kZXgiOiAiMjQ3MTIyODM0ODQxIiwgInR5cGUiOiAic3JsX25va2lhLWlwLXJvdXRlLXRhYmxlczpkaXJlY3QiLCAiaXAtYWRkcmVzcyI6ICIyMDAxOjE3MjoyMDoyMDo6MyIsICJzdWJpbnRlcmZhY2UiOiAibWdtdDAuMCJ9LCB7ImluZGV4IjogIjI0NzEyMjgzNDg0MiIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZXh0cmFjdCJ9LCB7ImluZGV4IjogIjI0NzEyMjgzNDg0MyIsICJ0eXBlIjogInNybF9ub2tpYS1pcC1yb3V0ZS10YWJsZXM6ZGlyZWN0IiwgImlwLWFkZHJlc3MiOiAiMTcyLjIwLjIwLjAiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifSwgeyJpbmRleCI6ICIyNDcxMjI4MzQ4NDQiLCAidHlwZSI6ICJzcmxfbm9raWEtaXAtcm91dGUtdGFibGVzOmRpcmVjdCIsICJpcC1hZGRyZXNzIjogIjE3Mi4yMC4yMC4xMDMiLCAic3ViaW50ZXJmYWNlIjogIm1nbXQwLjAifV19LCAidHVubmVsLXRhYmxlIjogeyJzcmxfbm9raWEtdHVubmVsLXRhYmxlczppcHY0Ijoge30sICJzcmxfbm9raWEtdHVubmVsLXRhYmxlczppcHY2Ijoge319LCAic3JsX25va2lhLXRjcC11ZHA6dGNwIjogeyJzdGF0aXN0aWNzIjogeyJhY3RpdmUtb3BlbnMiOiAiMCIsICJwYXNzaXZlLW9wZW5zIjogIjIiLCAiYXR0ZW1wdC1mYWlscyI6ICIwIiwgImVzdGFibGlzaGVkLXJlc2V0cyI6ICIwIiwgImluLXNlZ21lbnRzIjogIjQwIiwgIm91dC1zZWdtZW50cyI6ICI0NiIsICJyZXRyYW5zbWl0dGVkLXNlZ21lbnRzIjogIjAiLCAiaW4tZXJyb3Itc2VnbWVudHMiOiAiMCIsICJvdXQtcnN0LXNlZ21lbnRzIjogIjEiLCAiaW4tY2hlY2tzdW0tZXJyb3JzIjogIjAifSwgImxpc3RlbmluZy1hcHBsaWNhdGlvbiI6IFt7ImxvY2FsLWFkZHJlc3MiOiAiMC4wLjAuMCIsICJsb2NhbC1wb3J0IjogMjJ9LCB7ImxvY2FsLWFkZHJlc3MiOiAiMTI3LjAuMC4xIiwgImxvY2FsLXBvcnQiOiA1M30sIHsibG9jYWwtYWRkcmVzcyI6ICIxMjcuMC4wLjEiLCAibG9jYWwtcG9ydCI6IDE5OX0sIHsibG9jYWwtYWRkcmVzcyI6ICI6OiIsICJsb2NhbC1wb3J0IjogMjJ9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDgwfSwgeyJsb2NhbC1hZGRyZXNzIjogIjo6IiwgImxvY2FsLXBvcnQiOiA0NDN9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDU3NDAwfSwgeyJsb2NhbC1hZGRyZXNzIjogIjo6MSIsICJsb2NhbC1wb3J0IjogNTN9XX0sICJzcmxfbm9raWEtdGNwLXVkcDp1ZHAiOiB7InN0YXRpc3RpY3MiOiB7ImluLXBhY2tldHMiOiAiMCIsICJpbi1uby1vcGVuLXBvcnRzLXBhY2tldHMiOiAiMCIsICJpbi1lcnJvci1wYWNrZXRzIjogIjAiLCAib3V0LXBhY2tldHMiOiAiMCIsICJyZWNlaXZlLWJ1ZmZlci1lcnJvcnMiOiAiMCIsICJzZW5kLWJ1ZmZlci1lcnJvcnMiOiAiMCIsICJpbi1jaGVja3N1bS1lcnJvcnMiOiAiMCIsICJpZ25vcmVkLW11bHRpY2FzdC1wYWNrZXRzIjogIjAifSwgImxpc3RlbmluZy1hcHBsaWNhdGlvbiI6IFt7ImxvY2FsLWFkZHJlc3MiOiAiMC4wLjAuMCIsICJsb2NhbC1wb3J0IjogMTYxfSwgeyJsb2NhbC1hZGRyZXNzIjogIjEyNy4wLjAuMSIsICJsb2NhbC1wb3J0IjogNTN9LCB7ImxvY2FsLWFkZHJlc3MiOiAiOjoiLCAibG9jYWwtcG9ydCI6IDE2MX0sIHsibG9jYWwtYWRkcmVzcyI6ICI6OjEiLCAibG9jYWwtcG9ydCI6IDUzfV19fV19"}}]}
Traceback (most recent call last):
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/GnmiSessionHandler.py", line 140, in get
results.extend(parse(str_path, value))
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py", line 134, in parse
return handler.parse(value)
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/NetworkInstance.py", line 438, in parse
if afi_safi_entry:
UnboundLocalError: local variable 'afi_safi_entry' referenced before assignment
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-network-instance:network-instance, Schema path: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /network-instance
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /network-instance
ERROR:device.service.drivers.gnmi_nokia_srlinux.GnmiNokiaSrLinuxDriver:[172.20.20.103:57400]:Exception processing notification {"atomic": false, "delete": [], "timestamp": "1712310240225720524", "update": [{"duplicates": 0, "path": {"elem": [], "element": [], "origin": "", "target": ""}, "val": {"json_ietf_val": "eyJzcmxfbm9raWEtbmV0d29yay1pbnN0YW5jZTpuZXR3b3JrLWluc3RhbmNlIjogW3sibmFtZSI6ICJtZ210IiwgImludGVyZmFjZSI6IFt7Im5hbWUiOiAibWdtdDAuMCIsICJvcGVyLXN0YXRlIjogInVwIiwgImluZGV4IjogIjEifV19XX0="}}]}
Traceback (most recent call last):
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/GnmiSessionHandler.py", line 140, in get
results.extend(parse(str_path, value))
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py", line 134, in parse
return handler.parse(value)
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/handlers/NetworkInstance.py", line 438, in parse
if afi_safi_entry:
UnboundLocalError: local variable 'afi_safi_entry' referenced before assignment
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Original path: /srl_nokia-routing-policy:routing-policy, Schema path: /routing-policy
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Mapped path schema: /routing-policy
DEBUG:device.service.drivers.gnmi_nokia_srlinux.handlers:Handler found for path: /routing-policy
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/1]', {'name': 'ethernet-1/1', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/2]', {'name': 'ethernet-1/2', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/3]', {'name': 'ethernet-1/3', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/4]', {'name': 'ethernet-1/4', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/5]', {'name': 'ethernet-1/5', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/6]', {'name': 'ethernet-1/6', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/7]', {'name': 'ethernet-1/7', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/8]', {'name': 'ethernet-1/8', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/9]', {'name': 'ethernet-1/9', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/10]', {'name': 'ethernet-1/10', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/11]', {'name': 'ethernet-1/11', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/12]', {'name': 'ethernet-1/12', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/13]', {'name': 'ethernet-1/13', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/14]', {'name': 'ethernet-1/14', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/15]', {'name': 'ethernet-1/15', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/16]', {'name': 'ethernet-1/16', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/17]', {'name': 'ethernet-1/17', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/18]', {'name': 'ethernet-1/18', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/19]', {'name': 'ethernet-1/19', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/20]', {'name': 'ethernet-1/20', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/21]', {'name': 'ethernet-1/21', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/22]', {'name': 'ethernet-1/22', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/23]', {'name': 'ethernet-1/23', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/24]', {'name': 'ethernet-1/24', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/25]', {'name': 'ethernet-1/25', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/26]', {'name': 'ethernet-1/26', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/27]', {'name': 'ethernet-1/27', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/28]', {'name': 'ethernet-1/28', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/29]', {'name': 'ethernet-1/29', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/30]', {'name': 'ethernet-1/30', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/31]', {'name': 'ethernet-1/31', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/32]', {'name': 'ethernet-1/32', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/33]', {'name': 'ethernet-1/33', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/34]', {'name': 'ethernet-1/34', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/35]', {'name': 'ethernet-1/35', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/36]', {'name': 'ethernet-1/36', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/37]', {'name': 'ethernet-1/37', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/38]', {'name': 'ethernet-1/38', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/39]', {'name': 'ethernet-1/39', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/40]', {'name': 'ethernet-1/40', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/41]', {'name': 'ethernet-1/41', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/42]', {'name': 'ethernet-1/42', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/43]', {'name': 'ethernet-1/43', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/44]', {'name': 'ethernet-1/44', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/45]', {'name': 'ethernet-1/45', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/46]', {'name': 'ethernet-1/46', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/47]', {'name': 'ethernet-1/47', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/48]', {'name': 'ethernet-1/48', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/49]', {'name': 'ethernet-1/49', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/50]', {'name': 'ethernet-1/50', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/51]', {'name': 'ethernet-1/51', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/52]', {'name': 'ethernet-1/52', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/53]', {'name': 'ethernet-1/53', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/54]', {'name': 'ethernet-1/54', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/55]', {'name': 'ethernet-1/55', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/56]', {'name': 'ethernet-1/56', 'admin_state': 'disable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[mgmt0]/subinterface[0]', {'index': 0, 'admin-state': 'enable', 'type': None, 'ipv4': {'address': [{'ip-prefix': '172.20.20.103/24'}]}, 'vlan': {'encap': {'untagged': {}}}}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[mgmt0]', {'name': 'mgmt0', 'admin_state': 'enable'}))
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
ERROR:device.service.DeviceServiceServicerImpl:DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
ERROR:device.service.DeviceServiceServicerImpl:AddDevice exception
Traceback (most recent call last):
File "/var/teraflow/common/method_wrappers/Decorator.py", line 220, in inner_wrapper
reply = func(self, request, grpc_context)
File "/var/teraflow/device/service/DeviceServiceServicerImpl.py", line 122, in AddDevice
raise OperationFailedException('AddDevice', extra_details=errors)
common.method_wrappers.ServiceExceptions.OperationFailedException: Operation(AddDevice) failed; DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/1]', {'name': 'ethernet-1/1', 'admin_state': 'enable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/2]', {'name': 'ethernet-1/2', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/3]', {'name': 'ethernet-1/3', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/4]', {'name': 'ethernet-1/4', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/5]', {'name': 'ethernet-1/5', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/6]', {'name': 'ethernet-1/6', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/7]', {'name': 'ethernet-1/7', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/8]', {'name': 'ethernet-1/8', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/9]', {'name': 'ethernet-1/9', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/10]', {'name': 'ethernet-1/10', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/11]', {'name': 'ethernet-1/11', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/12]', {'name': 'ethernet-1/12', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/13]', {'name': 'ethernet-1/13', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/14]', {'name': 'ethernet-1/14', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/15]', {'name': 'ethernet-1/15', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/16]', {'name': 'ethernet-1/16', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/17]', {'name': 'ethernet-1/17', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/18]', {'name': 'ethernet-1/18', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/19]', {'name': 'ethernet-1/19', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/20]', {'name': 'ethernet-1/20', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/21]', {'name': 'ethernet-1/21', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/22]', {'name': 'ethernet-1/22', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/23]', {'name': 'ethernet-1/23', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/24]', {'name': 'ethernet-1/24', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/25]', {'name': 'ethernet-1/25', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/26]', {'name': 'ethernet-1/26', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/27]', {'name': 'ethernet-1/27', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/28]', {'name': 'ethernet-1/28', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/29]', {'name': 'ethernet-1/29', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/30]', {'name': 'ethernet-1/30', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/31]', {'name': 'ethernet-1/31', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/32]', {'name': 'ethernet-1/32', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/33]', {'name': 'ethernet-1/33', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/34]', {'name': 'ethernet-1/34', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/35]', {'name': 'ethernet-1/35', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/36]', {'name': 'ethernet-1/36', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/37]', {'name': 'ethernet-1/37', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/38]', {'name': 'ethernet-1/38', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/39]', {'name': 'ethernet-1/39', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/40]', {'name': 'ethernet-1/40', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/41]', {'name': 'ethernet-1/41', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/42]', {'name': 'ethernet-1/42', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/43]', {'name': 'ethernet-1/43', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/44]', {'name': 'ethernet-1/44', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/45]', {'name': 'ethernet-1/45', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/46]', {'name': 'ethernet-1/46', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/47]', {'name': 'ethernet-1/47', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/48]', {'name': 'ethernet-1/48', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/49]', {'name': 'ethernet-1/49', 'admin_state': 'enable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/50]', {'name': 'ethernet-1/50', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/51]', {'name': 'ethernet-1/51', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/52]', {'name': 'ethernet-1/52', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/53]', {'name': 'ethernet-1/53', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/54]', {'name': 'ethernet-1/54', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/55]', {'name': 'ethernet-1/55', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[ethernet-1/56]', {'name': 'ethernet-1/56', 'admin_state': 'disable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[mgmt0]/subinterface[0]', {'index': 0, 'admin-state': 'enable', 'type': None, 'ipv4': {'address': [{'ip-prefix': '172.20.20.103/24'}]}, 'vlan': {'encap': {'untagged': {}}}})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): GetConfig retrieved unsupported Resource(('/interface[mgmt0]', {'name': 'mgmt0', 'admin_state': 'enable'})); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment); DeviceId(5cca8a65-8a20-50ab-8d47-d12294f0dca1): Unable to Get Resource(key=/); Error(local variable 'afi_safi_entry' referenced before assignment)
Exception in thread Thread-25:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/threading.py", line 980, in _bootstrap_inner
self.run()
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/MonitoringThread.py", line 135, in run
for subscribe_response in self._response_iterator:
File "/usr/local/lib/python3.9/site-packages/grpc/_channel.py", line 426, in __next__
return self._next()
File "/usr/local/lib/python3.9/site-packages/grpc/_channel.py", line 826, in _next
raise self
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "Socket closed"
debug_error_string = "{"created":"@1712310326.014542657","description":"Error received from peer ipv4:172.20.20.103:57400","file":"src/core/lib/surface/call.cc","file_line":966,"grpc_message":"Socket closed","grpc_status":14}"
>
Exception in thread Thread-20:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/threading.py", line 980, in _bootstrap_inner
Exception in thread Thread-23:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/threading.py", line 980, in _bootstrap_inner
self.run()
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/MonitoringThread.py", line 135, in run
self.run()
for subscribe_response in self._response_iterator:
File "/var/teraflow/device/service/drivers/gnmi_nokia_srlinux/MonitoringThread.py", line 135, in run
File "/usr/local/lib/python3.9/site-packages/grpc/_channel.py", line 426, in __next__
for subscribe_response in self._response_iterator:
File "/usr/local/lib/python3.9/site-packages/grpc/_channel.py", line 426, in __next__
return self._next()
File "/usr/local/lib/python3.9/site-packages/grpc/_channel.py", line 826, in _next
raise self
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "Socket closed"
debug_error_string = "{"created":"@1712310326.018710184","description":"Error received from peer ipv4:172.20.20.101:57400","file":"src/core/lib/surface/call.cc","file_line":966,"grpc_message":"Socket closed","grpc_status":14}"
>
return self._next()
File "/usr/local/lib/python3.9/site-packages/grpc/_channel.py", line 826, in _next
raise self
grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "Socket closed"
debug_error_string = "{"created":"@1712310326.018746615","description":"Error received from peer ipv4:172.20.20.102:57400","file":"src/core/lib/surface/call.cc","file_line":966,"grpc_message":"Socket closed","grpc_status":14}"
\ No newline at end of file
......@@ -90,7 +90,7 @@ export CRDB_DATABASE="tfs"
export CRDB_DEPLOY_MODE="single"
# Disable flag for dropping database, if it exists.
export CRDB_DROP_DATABASE_IF_EXISTS=""
export CRDB_DROP_DATABASE_IF_EXISTS="YES"
# Disable flag for re-deploying CockroachDB from scratch.
export CRDB_REDEPLOY=""
......@@ -138,7 +138,7 @@ export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
# Disable flag for dropping tables if they exist.
export QDB_DROP_TABLES_IF_EXIST=""
export QDB_DROP_TABLES_IF_EXIST="YES"
# Disable flag for re-deploying QuestDB from scratch.
export QDB_REDEPLOY=""
......
......@@ -201,6 +201,7 @@ enum DeviceDriverEnum {
DEVICEDRIVER_XR = 6;
DEVICEDRIVER_IETF_L2VPN = 7;
DEVICEDRIVER_GNMI_OPENCONFIG = 8;
DEVICEDRIVER_GNMI_NOKIA_SRLINUX = 9;
}
enum DeviceOperationalStatusEnum {
......
#!/bin/bash
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
PROJECTDIR=`pwd`
cd $PROJECTDIR/src
RCFILE=$PROJECTDIR/coverage/.coveragerc
# Run unitary tests and analyze coverage of code at same time
coverage run --rcfile=$RCFILE --append -m pytest --log-level=DEBUG -o log_cli=true --verbose \
device/tests/device/tests/test_gnmi_srlinux-delete.py
#\ device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py
#\ device/service/driver_api/_Driver.py
#!/bin/bash
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
PROJECTDIR=`pwd`
cd $PROJECTDIR/src
RCFILE=$PROJECTDIR/coverage/.coveragerc
# Run unitary tests and analyze coverage of code at same time
coverage run --rcfile=$RCFILE --append -m pytest --log-level=DEBUG -o log_cli=true --verbose \
device/tests/test_gnmi_nokia_srlinux-get-ifs.py
#!/bin/bash
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
PROJECTDIR=`pwd`
cd $PROJECTDIR/src
RCFILE=$PROJECTDIR/coverage/.coveragerc
# Run unitary tests and analyze coverage of code at same time
coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO -o log_cli=true --verbose \
device/tests/test_gnmi_nokia_srlinux.py
#\ device/service/drivers/gnmi_nokia_srlinux/handlers/__init__.py
#\ device/service/driver_api/_Driver.py
......@@ -35,6 +35,7 @@ def validate_device_driver_enum(message):
'DEVICEDRIVER_XR',
'DEVICEDRIVER_IETF_L2VPN',
'DEVICEDRIVER_GNMI_OPENCONFIG',
'DEVICEDRIVER_GNMI_NOKIA_SRLINUX',
]
def validate_device_operational_status_enum(message):
......
......@@ -31,6 +31,7 @@ class ORM_DeviceDriverEnum(enum.Enum):
XR = DeviceDriverEnum.DEVICEDRIVER_XR
IETF_L2VPN = DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN
GNMI_OPENCONFIG = DeviceDriverEnum.DEVICEDRIVER_GNMI_OPENCONFIG
GNMI_NOKIA_SRLINUX = DeviceDriverEnum.DEVICEDRIVER_GNMI_NOKIA_SRLINUX
grpc_to_enum__device_driver = functools.partial(
grpc_to_enum, DeviceDriverEnum, ORM_DeviceDriverEnum)
......@@ -246,7 +246,7 @@ def _raw_config_rules_to_grpc(
raw_config_rules : List[Tuple[str, Union[Any, Exception, None]]]
) -> List[str]:
errors : List[str] = list()
LOGGER.warning('raw_config_rules={:s}'.format(str(raw_config_rules)))
for resource_key, resource_value in raw_config_rules:
if isinstance(resource_value, Exception):
errors.append(error_template.format(
......
......@@ -25,6 +25,9 @@ RESOURCE_ROUTING_POLICIES = '__routing_policies__'
RESOURCE_SERVICES = '__services__'
RESOURCE_ACL = '__acl__'
RESOURCE_INVENTORY = '__inventory__'
RESOURCE_NETWORK_INSTANCE_VXLAN = '__network_instance_vxlan__'
RESOURCE_ROUTING_POLICY='__routing_policy__'
RESOURCE_TUNNEL_INTERFACE='__tunnel_interface__'
class _Driver:
......
......@@ -71,6 +71,7 @@ DRIVERS.append(
# DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY,
# DeviceDriverEnum.DEVICEDRIVER_ONF_TR_532,
# DeviceDriverEnum.DEVICEDRIVER_GNMI_OPENCONFIG,
# DeviceDriverEnum.DEVICEDRIVER_GNMI_NOKIA_SRLINUX,
# ],
#}
]))
......@@ -106,6 +107,17 @@ if LOAD_ALL_DEVICE_DRIVERS:
}
]))
if LOAD_ALL_DEVICE_DRIVERS:
from .gnmi_nokia_srlinux.GnmiNokiaSrLinuxDriver import GnmiNokiaSrLinuxDriver # pylint: disable=wrong-import-position
DRIVERS.append(
(GnmiNokiaSrLinuxDriver, [
{
# Real Packet Router, specifying gNMI Nokia SR Linux Driver => use GnmiNokiaSrLinuxDriver
FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.PACKET_ROUTER,
FilterFieldEnum.DRIVER : DeviceDriverEnum.DEVICEDRIVER_GNMI_NOKIA_SRLINUX,
}
]))
if LOAD_ALL_DEVICE_DRIVERS:
from .transport_api.TransportApiDriver import TransportApiDriver # pylint: disable=wrong-import-position
DRIVERS.append(
......
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import copy
from typing import Any, Dict, Tuple, Union
class DeltaSampleCache:
def __init__(self) -> None:
self._previous_samples : Dict[str, Tuple[float, Union[int, float]]] = dict()
def get_delta(self, path : str, current_timestamp : float, current_value : Any) -> None:
previous_sample = copy.deepcopy(self._previous_samples.get(path))
self._previous_samples[path] = current_timestamp, current_value
if not isinstance(current_value, (int, float)): return None
if previous_sample is None: return current_timestamp, 0
previous_timestamp, previous_value = previous_sample
if not isinstance(previous_value, (int, float)): return None
delta_value = max(0, current_value - previous_value)
delay = current_timestamp - previous_timestamp
delta_sample = current_timestamp, delta_value / delay
return delta_sample
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging, queue, threading
from typing import Any, Iterator, List, Optional, Tuple, Union
from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
from common.type_checkers.Checkers import chk_type
from device.service.driver_api._Driver import _Driver
from .GnmiSessionHandler import GnmiSessionHandler
DRIVER_NAME = 'gnmi_nokiasrlinux'
METRICS_POOL = MetricsPool('Device', 'Driver', labels={'driver': DRIVER_NAME})
class GnmiNokiaSrLinuxDriver(_Driver):
def __init__(self, address : str, port : int, **settings) -> None:
super().__init__(DRIVER_NAME, address, port, **settings)
self.__logger = logging.getLogger('{:s}:[{:s}:{:s}]'.format(str(__name__), str(self.address), str(self.port)))
self.__lock = threading.Lock()
self.__started = threading.Event()
self.__terminate = threading.Event()
self.__handler = GnmiSessionHandler(self.address, self.port, settings, self.__logger)
self.__out_samples = self.__handler.out_samples
def Connect(self) -> bool:
with self.__lock:
if self.__started.is_set(): return True
self.__handler.connect()
self.__started.set()
return True
def Disconnect(self) -> bool:
with self.__lock:
# Trigger termination of loops and processes
self.__terminate.set()
# If not started, assume it is already disconnected
if not self.__started.is_set(): return True
self.__handler.disconnect()
return True
@metered_subclass_method(METRICS_POOL)
def GetInitialConfig(self) -> List[Tuple[str, Any]]:
with self.__lock:
return []
@metered_subclass_method(METRICS_POOL)
def GetConfig(self, resource_keys : List[str] = []) -> List[Tuple[str, Union[Any, None, Exception]]]:
chk_type('resources', resource_keys, list)
with self.__lock:
return self.__handler.get(resource_keys)
@metered_subclass_method(METRICS_POOL)
def SetConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
chk_type('resources', resources, list)
if len(resources) == 0: return []
with self.__lock:
return self.__handler.set(resources)
@metered_subclass_method(METRICS_POOL)
def DeleteConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
chk_type('resources', resources, list)
if len(resources) == 0: return []
with self.__lock:
return self.__handler.delete(resources)
@metered_subclass_method(METRICS_POOL)
def SubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
chk_type('subscriptions', subscriptions, list)
if len(subscriptions) == 0: return []
with self.__lock:
return self.__handler.subscribe(subscriptions)
@metered_subclass_method(METRICS_POOL)
def UnsubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
chk_type('subscriptions', subscriptions, list)
if len(subscriptions) == 0: return []
with self.__lock:
return self.__handler.unsubscribe(subscriptions)
def GetState(self, blocking=False, terminate : Optional[threading.Event] = None) -> Iterator[Tuple[str, Any]]:
while True:
if self.__terminate.is_set(): break
if terminate is not None and terminate.is_set(): break
try:
sample = self.__out_samples.get(block=blocking, timeout=0.1)
except queue.Empty:
if blocking: continue
return
if sample is None: continue
yield sample
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import copy,grpc,json, logging, queue, threading
from typing import Any, Dict, List, Optional, Tuple, Union
from common.tools.grpc.Tools import grpc_message_to_json_string
from common.type_checkers.Checkers import chk_float, chk_length, chk_string, chk_type
from device.service.drivers.gnmi_nokia_srlinux.handlers.Tools import get_schema
from .gnmi.gnmi_pb2_grpc import gNMIStub
from .gnmi.gnmi_pb2 import Encoding, GetRequest, SetRequest, UpdateResult # pylint: disable=no-name-in-module
from .handlers import ALL_RESOURCE_KEYS, compose, get_path, parse
from .tools.Capabilities import get_supported_encodings
from .tools.Channel import get_grpc_channel
from .tools.Path import path_from_string, path_to_string #, compose_path
from .tools.Subscriptions import Subscriptions
from .tools.Value import decode_value #, value_exists
from .MonitoringThread import MonitoringThread
logging.basicConfig(level=logging.DEBUG)
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
class GnmiSessionHandler:
def __init__(self, address : str, port : int, settings : Dict, logger : logging.Logger) -> None:
self._address = address
self._port = port
self._settings = copy.deepcopy(settings)
self._logger = logger
self._lock = threading.Lock()
self._connected = threading.Event()
self._username = settings.get('username')
self._password = settings.get('password')
self._use_tls = settings.get('use_tls', False)
self._channel : Optional[grpc.Channel] = None
self._stub : Optional[gNMIStub] = None
self._monit_thread = None
self._supported_encodings = None
self._subscriptions = Subscriptions()
self._in_subscriptions = queue.Queue()
self._out_samples = queue.Queue()
@property
def subscriptions(self): return self._subscriptions
@property
def in_subscriptions(self): return self._in_subscriptions
@property
def out_samples(self): return self._out_samples
def connect(self):
with self._lock:
self._channel = get_grpc_channel(self._address, self._port, self._use_tls, self._logger)
self._stub = gNMIStub(self._channel)
self._supported_encodings = get_supported_encodings(
self._stub, self._username, self._password, timeout=120)
self._monit_thread = MonitoringThread(
self._stub, self._logger, self._settings, self._in_subscriptions, self._out_samples)
self._monit_thread.start()
self._connected.set()
def disconnect(self):
if not self._connected.is_set(): return
with self._lock:
self._monit_thread.stop()
self._monit_thread.join()
self._channel.close()
self._connected.clear()
def get(self, resource_keys : List[str]) -> List[Tuple[str, Union[Any, None, Exception]]]:
if len(resource_keys) == 0: resource_keys = ALL_RESOURCE_KEYS
chk_type('resources', resource_keys, list)
parsing_results = []
map_paths_to_resource_keys : Dict[str, List[str]] = {}
get_request = GetRequest()
get_request.type = GetRequest.DataType.ALL
get_request.encoding = Encoding.JSON_IETF
#get_request.use_models.add() # kept empty: return for all models supported
for i,resource_key in enumerate(resource_keys):
str_resource_name = 'resource_key[#{:d}]'.format(i)
try:
chk_string(str_resource_name, resource_key, allow_empty=False)
self._logger.debug('[GnmiSessionHandler:get] resource_key = {:s}'.format(str(resource_key)))
str_path = get_path(resource_key)
map_paths_to_resource_keys.setdefault(get_schema(str_path), list()).append(resource_key)
self._logger.debug('[GnmiSessionHandler:get] str_path = {:s}'.format(str(str_path)))
get_request.path.append(path_from_string(str_path))
except Exception as e: # pylint: disable=broad-except
MSG = 'Exception parsing {:s}: {:s}'
self._logger.exception(MSG.format(str_resource_name, str(resource_key)))
parsing_results.append((resource_key, e)) # if validation fails, store the exception
if len(parsing_results) > 0:
return parsing_results
metadata = [('username', self._username), ('password', self._password)]
timeout = None # GNMI_SUBSCRIPTION_TIMEOUT = int(sampling_duration)
get_reply = self._stub.Get(get_request, metadata=metadata, timeout=timeout)
#self._logger.info('get_reply={:s}'.format(grpc_message_to_json_string(get_reply)))
results = []
#results[str_filter] = [i, None, False] # (index, value, processed?)
for notification in get_reply.notification:
#for delete_path in notification.delete:
# self._logger.info('delete_path={:s}'.format(grpc_message_to_json_string(delete_path)))
# str_path = path_to_string(delete_path)
# resource_key_tuple = results.get(str_path)
# if resource_key_tuple is None:
# # pylint: disable=broad-exception-raised
# MSG = 'Unexpected Delete Path({:s}); requested resource_keys({:s})'
# raise Exception(MSG.format(str(str_path), str(resource_keys)))
# resource_key_tuple[2] = True
for update in notification.update:
#self._logger.info('update.path={:s}'.format(grpc_message_to_json_string(update.path)))
str_path = path_to_string(update.path)
#self._logger.info('str_path is ={:s}'.format(str(str_path)))
#resource_key_tuple = results.get(str_path)
#if resource_key_tuple is None:
# # pylint: disable=broad-exception-raised
# MSG = 'Unexpected Update Path({:s}); requested resource_keys({:s})'
# raise Exception(MSG.format(str(str_path), str(resource_keys)))
try:
value = decode_value(update.val)
#self._logger.info('value is ={:s}'.format(str(value))) # uncomment to see decoded message from the device
#resource_key_tuple[1] = value
#resource_key_tuple[2] = True
#results.extend(parse(str_path, value))
_str_path = '/{:s}'.format(list(value.keys())[0]) if str_path == '/' else str_path
_str_path = get_schema(_str_path)
resource_keys = map_paths_to_resource_keys.get(_str_path, list())
self._logger.debug('[GnmiSessionHandler:get] _str_path is = {:s}'.format(_str_path))
if len(resource_keys) == 0:
MSG = 'No resource_keys found for str_path({:s})/_str_path({:s}). map_paths_to_resource_keys={:s}'
self._logger.error(MSG.format(str(str_path), str(_str_path), str(map_paths_to_resource_keys)))
else:
MSG = 'resource_keys for str_path({:s})/_str_path({:s}): {:s}'
self._logger.info(MSG.format(str(str_path), str(_str_path), str(resource_keys)))
for resource_key in resource_keys:
results.extend(parse(resource_key, str_path, value))
except Exception as e: # pylint: disable=broad-except
MSG = 'Exception processing notification {:s}'
self._logger.exception(MSG.format(grpc_message_to_json_string(notification)))
results.append((str_path, e)) # if validation fails, store the exception
#_results = sorted(results.items(), key=lambda x: x[1][0])
#results = list()
#for resource_key,resource_key_tuple in _results:
# _, value, processed = resource_key_tuple
# value = value if processed else Exception('Not Processed')
# results.append((resource_key, value))
return results
def set(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
#resource_keys = [key for key,_ in resources]
#current_values = self.get(resource_keys)
#resource_tuples = {
# resource_key : [i, value, value_exists(value), None]
# for i,(resource_key,value) in enumerate(current_values)
#}
#self._logger.info('---0')
#self._logger.info(str(resource_tuples))
set_request = SetRequest()
#for resource_key in resource_keys:
for resource_key, resource_value in resources:
self._logger.info('Resource from test script:')
self._logger.info(' resource_key = ' + str(resource_key))
self._logger.info(' resource_value = ' + str(resource_value))
#resource_tuple = resource_tuples.get(resource_key)
#if resource_tuple is None: continue
#_, value, exists, operation_done = resource_tuple
if isinstance(resource_value, str): resource_value = json.loads(resource_value)
str_path, str_data = compose(resource_key, resource_value, delete=False)
self._logger.info('Request being sent to device:')
self._logger.info(' path = ' + str(str_path))
self._logger.info(' data = ' + str(str_data))
set_request_list = set_request.update #if exists else set_request.replace
set_request_entry = set_request_list.add()
set_request_entry.path.CopyFrom(path_from_string(str_path))
set_request_entry.val.json_ietf_val = str_data.encode('UTF-8')
self._logger.info('set_request={:s}'.format(grpc_message_to_json_string(set_request)))
metadata = [('username', self._username), ('password', self._password)]
timeout = None # GNMI_SUBSCRIPTION_TIMEOUT = int(sampling_duration)
set_reply = self._stub.Set(set_request, metadata=metadata, timeout=timeout)
self._logger.info('set_reply={:s}'.format(grpc_message_to_json_string(set_reply)))
results = []
for (resource_key, resource_value), update_result in zip(resources, set_reply.response):
operation = update_result.op
if operation == UpdateResult.UPDATE:
results.append((resource_key, True))
else:
results.append((resource_key, Exception('Unexpected')))
#str_path = path_to_string(update_result.path)
#resource_tuple = resource_tuples.get(str_path)
#if resource_tuple is None: continue
#resource_tuple[3] = operation
#resource_tuples = sorted(resource_tuples.items(), key=lambda x: x[1][0])
#results = list()
#for resource_key,resource_tuple in resource_tuples:
# _, _, exists, operation_done = resource_tuple
# desired_operation = 'update' if exists else 'replace'
#
# if operation_done == UpdateResult.INVALID:
# value = Exception('Invalid')
# elif operation_done == UpdateResult.DELETE:
# value = Exception('Unexpected Delete')
# elif operation_done == UpdateResult.REPLACE:
# value = True if desired_operation == 'replace' else Exception('Failed')
# elif operation_done == UpdateResult.UPDATE:
# value = True if desired_operation == 'update' else Exception('Failed')
# else:
# value = Exception('Unexpected')
# results.append((resource_key, value))
return results
def delete(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
#resource_keys = [key for key,_ in resources]
#current_values = self.get(resource_keys)
#resource_tuples = {
# resource_key : [i, value, value_exists(value), None]
# for i,(resource_key,value) in enumerate(current_values)
#}
#self._logger.info('---0')
#self._logger.info(str(resource_tuples))
set_request = SetRequest()
#for resource_key in resource_keys:
for resource_key, resource_value in resources:
self._logger.info('---1')
self._logger.info(str(resource_key))
self._logger.info(str(resource_value))
#resource_tuple = resource_tuples.get(resource_key)
#if resource_tuple is None: continue
#_, value, exists, operation_done = resource_tuple
#if not exists: continue
if isinstance(resource_value, str): resource_value = json.loads(resource_value)
str_path, str_data = compose(resource_key, resource_value, delete=True)
self._logger.info('---3')
self._logger.info(str(str_path))
self._logger.info(str(str_data))
set_request_entry = set_request.delete.add()
set_request_entry.CopyFrom(path_from_string(str_path))
self._logger.info('set_request={:s}'.format(grpc_message_to_json_string(set_request)))
metadata = [('username', self._username), ('password', self._password)]
timeout = None # GNMI_SUBSCRIPTION_TIMEOUT = int(sampling_duration)
set_reply = self._stub.Set(set_request, metadata=metadata, timeout=timeout)
self._logger.info('set_reply={:s}'.format(grpc_message_to_json_string(set_reply)))
results = []
for (resource_key, resource_value), update_result in zip(resources, set_reply.response):
operation = update_result.op
if operation == UpdateResult.DELETE:
results.append((resource_key, True))
else:
results.append((resource_key, Exception('Unexpected')))
#str_path = path_to_string(update_result.path)
#resource_tuple = resource_tuples.get(str_path)
#if resource_tuple is None: continue
#resource_tuple[3] = operation
#resource_tuples = sorted(resource_tuples.items(), key=lambda x: x[1][0])
#results = list()
#for resource_key,resource_tuple in resource_tuples:
# _, _, exists, operation_done = resource_tuple
# if operation_done == UpdateResult.INVALID:
# value = Exception('Invalid')
# elif operation_done == UpdateResult.DELETE:
# value = True
# elif operation_done == UpdateResult.REPLACE:
# value = Exception('Unexpected Replace')
# elif operation_done == UpdateResult.UPDATE:
# value = Exception('Unexpected Update')
# else:
# value = Exception('Unexpected')
# results.append((resource_key, value))
return results
def subscribe(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
results = []
for i,subscription in enumerate(subscriptions):
str_subscription_name = 'subscriptions[#{:d}]'.format(i)
try:
chk_type(str_subscription_name, subscription, (list, tuple))
chk_length(str_subscription_name, subscription, min_length=3, max_length=3)
resource_key, sampling_duration, sampling_interval = subscription
chk_string(str_subscription_name + '.resource_key', resource_key, allow_empty=False)
chk_float(str_subscription_name + '.sampling_duration', sampling_duration, min_value=0)
chk_float(str_subscription_name + '.sampling_interval', sampling_interval, min_value=0)
except Exception as e: # pylint: disable=broad-except
MSG = 'Exception validating {:s}: {:s}'
self._logger.exception(MSG.format(str_subscription_name, str(resource_key)))
results.append(e) # if validation fails, store the exception
continue
#resource_path = resource_key.split('/')
#self._subscriptions.add(resource_path, sampling_duration, sampling_interval, reference)
subscription = 'subscribe', resource_key, sampling_duration, sampling_interval
self._in_subscriptions.put_nowait(subscription)
results.append(True)
return results
def unsubscribe(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
results = []
for i,subscription in enumerate(subscriptions):
str_subscription_name = 'subscriptions[#{:d}]'.format(i)
try:
chk_type(str_subscription_name, subscription, (list, tuple))
chk_length(str_subscription_name, subscription, min_length=3, max_length=3)
resource_key, sampling_duration, sampling_interval = subscription
chk_string(str_subscription_name + '.resource_key', resource_key, allow_empty=False)
chk_float(str_subscription_name + '.sampling_duration', sampling_duration, min_value=0)
chk_float(str_subscription_name + '.sampling_interval', sampling_interval, min_value=0)
except Exception as e: # pylint: disable=broad-except
MSG = 'Exception validating {:s}: {:s}'
self._logger.exception(MSG.format(str_subscription_name, str(resource_key)))
results.append(e) # if validation fails, store the exception
continue
#resource_path = resource_key.split('/')
#reference = self._subscriptions.get(resource_path, sampling_duration, sampling_interval)
#if reference is None:
# results.append(False)
# continue
#self._subscriptions.delete(reference)
subscription = 'unsubscribe', resource_key, sampling_duration, sampling_interval
self._in_subscriptions.put_nowait(subscription)
results.append(True)
return results
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Ref: https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md
# Ref: https://github.com/openconfig/gnmi/blob/master/proto/gnmi/gnmi.proto
from __future__ import annotations
import grpc, logging, queue, re, threading
from collections.abc import Iterator
from datetime import datetime
from typing import Dict
from common.tools.grpc.Tools import grpc_message_to_json_string
from .gnmi.gnmi_pb2 import ( # pylint: disable=no-name-in-module
QOSMarking, SubscribeRequest, Subscription, SubscriptionList, SubscriptionMode
)
from .gnmi.gnmi_pb2_grpc import gNMIStub
from .tools.Path import path_from_string, path_to_string
from .DeltaSampleCache import DeltaSampleCache
LOGGER = logging.getLogger(__name__)
# SubscriptionList Mode: Mode of the subscription.
# STREAM = 0: Values streamed by the target. gNMI Specification Section 3.5.1.5.2
# ONCE = 1: Values sent once-off by the target. gNMI Specification Section 3.5.1.5.1
# POLL = 2: Values sent in response to a poll request. gNMI Specification Section 3.5.1.5.3
GNMI_SUBSCRIPTION_LIST_MODE = SubscriptionList.Mode.STREAM
# Path Prefix: Prefix used for paths.
GNMI_PATH_PREFIX = None
# QOS MArking: DSCP marking to be used.
GNMI_QOS_MARKING = None
# Allow Aggregation: Whether elements of the schema that are marked as eligible for aggregation
# should be aggregated or not.
GNMI_ALLOW_AGGREGATION = False
# Encoding: The encoding that the target should use within the Notifications generated
# corresponding to the SubscriptionList.
GNMI_ENCODING = 'JSON'
#Subscription Mode: The mode of the subscription, specifying how the target must return values
# in a subscription. gNMI Specification Section 3.5.1.3
# TARGET_DEFINED = 0: The target selects the relevant mode for each element.
# ON_CHANGE = 1: The target sends an update on element value change.
# SAMPLE = 2: The target samples values according to the interval.
GNMI_SUBSCRIPTION_MODE = SubscriptionMode.SAMPLE
# Suppress Redundant: Indicates whether values that have not changed should be sent in a SAMPLE
# subscription. gNMI Specification Section 3.5.1.3
GNMI_SUPPRESS_REDUNDANT = False
# Heartbeat Interval: Specifies the maximum allowable silent period in nanoseconds when
# suppress_redundant is in use. The target should send a value at least once in the period
# specified. gNMI Specification Section 3.5.1.3
GNMI_HEARTBEAT_INTERVAL = 10 # seconds
GNMI_SUBSCRIPTION_TIMEOUT = None
class MonitoringThread(threading.Thread):
def __init__(
self, stub : gNMIStub, logger : logging.Logger, settings : Dict,
in_subscriptions : queue.Queue, out_samples : queue.Queue
) -> None:
super().__init__(daemon=True)
self._terminate = threading.Event()
self._stub = stub
self._logger = logger
self._username = settings.get('username')
self._password = settings.get('password')
self._in_subscriptions = in_subscriptions
self._out_samples = out_samples
self._response_iterator = None
self._delta_sample_cache = DeltaSampleCache()
def stop(self) -> None:
self._terminate.set()
if self._response_iterator is not None:
self._response_iterator.cancel()
def generate_requests(self) -> Iterator[SubscribeRequest]:
subscriptions = []
while not self._terminate.is_set():
try:
subscription = self._in_subscriptions.get(block=True, timeout=0.1)
operation, resource_key, sampling_duration, sampling_interval = subscription # pylint: disable=unused-variable
if operation != 'subscribe': continue # Unsubscribe not supported by gNM, needs to cancel entire connection
# options.timeout = int(sampling_duration)
#_path = parse_xpath(resource_key)
path = path_from_string(resource_key)
subscription = Subscription(
path=path, mode=GNMI_SUBSCRIPTION_MODE, suppress_redundant=GNMI_SUPPRESS_REDUNDANT,
sample_interval=int(sampling_interval * 1000000000),
heartbeat_interval=int(GNMI_HEARTBEAT_INTERVAL * 1000000000))
subscriptions.append(subscription)
except queue.Empty:
if len(subscriptions) == 0: continue
#self._logger.warning('[generate_requests] process')
prefix = path_from_string(GNMI_PATH_PREFIX) if GNMI_PATH_PREFIX is not None else None
qos = QOSMarking(marking=GNMI_QOS_MARKING) if GNMI_QOS_MARKING is not None else None
subscriptions_list = SubscriptionList(
prefix=prefix, mode=GNMI_SUBSCRIPTION_LIST_MODE, allow_aggregation=GNMI_ALLOW_AGGREGATION,
encoding=GNMI_ENCODING, subscription=subscriptions, qos=qos)
subscribe_request = SubscribeRequest(subscribe=subscriptions_list)
#str_subscribe_request = grpc_message_to_json_string(subscribe_request)
#self._logger.warning('[generate_requests] subscribe_request={:s}'.format(str_subscribe_request))
yield subscribe_request
subscriptions = []
except: # pylint: disable=bare-except
self._logger.exception('[generate_requests] Unhandled Exception')
def run(self) -> None:
# Add a dummy subscription to be used as keep-alive
# usable only with SRLinux native data models
#subscription = ('/system/name/host-name', None, 1)
#self._in_subscriptions.put_nowait(subscription)
try:
request_iterator = self.generate_requests()
metadata = [('username', self._username), ('password', self._password)]
timeout = None # GNMI_SUBSCRIPTION_TIMEOUT = int(sampling_duration)
self._response_iterator = self._stub.Subscribe(request_iterator, metadata=metadata, timeout=timeout)
for subscribe_response in self._response_iterator:
str_subscribe_response = grpc_message_to_json_string(subscribe_response)
self._logger.warning('[run] subscribe_response={:s}'.format(str_subscribe_response))
update = subscribe_response.update
timestamp_device = float(update.timestamp) / 1.e9
timestamp_local = datetime.timestamp(datetime.utcnow())
# if difference between timestamp from device and local is lower than 1 second
if abs(timestamp_device - timestamp_local) <= 1:
# assume clocks are synchronized, use timestamp from device
timestamp = timestamp_device
else:
# might be clocks are not synchronized, use local timestamp
timestamp = timestamp_local
for update_entry in update.update:
str_path = path_to_string(update_entry.path)
#if str_path != '/system/name/host-name': continue
#counter_name = update_entry.path[-1].name
value_type = update_entry.val.WhichOneof('value')
value = getattr(update_entry.val, value_type)
if re.match(r'^[0-9]+$', value) is not None:
value = int(value)
elif re.match(r'^[0-9]*\.[0-9]*$', value) is not None:
value = float(value)
else:
value = str(value)
delta_sample = self._delta_sample_cache.get_delta(str_path, timestamp, value)
if delta_sample is None:
sample = (timestamp, str_path, value)
else:
sample = (delta_sample[0], str_path, delta_sample[1])
self._logger.warning('[run] sample={:s}'.format(str(sample)))
self._out_samples.put_nowait(sample)
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.CANCELLED: raise # pylint: disable=no-member
if e.details() != 'Locally cancelled by application!': raise # pylint: disable=no-member
except: # pylint: disable=bare-except
self._logger.exception('Unhandled Exception')
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
This code is partially based on:
https://github.com/nokia/pygnmi/blob/master/gNMI_Subscribe.py
MIT License
Copyright (c) 2017 Nokia
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
\ No newline at end of file
# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
syntax = "proto3";
import "google/protobuf/any.proto";
import "google/protobuf/descriptor.proto";
// import gnmi_ext.proto;
// Package gNMI defines a service specification for the gRPC Network Management
// Interface. This interface is defined to be a standard interface via which
// a network management system ("client") can subscribe to state values,
// retrieve snapshots of state information, and manipulate the state of a data
// tree supported by a device ("target").
//
// This document references the gNMI Specification which can be found at
// http://github.com/openconfig/reference/blob/master/rpc/gnmi
package gnmi;
// Define a protobuf FileOption that defines the gNMI service version.
extend google.protobuf.FileOptions {
// The gNMI service semantic version.
string gnmi_service = 1001;
}
// gNMI_service is the current version of the gNMI service, returned through
// the Capabilities RPC.
option (gnmi_service) = "0.8.0";
option go_package = "github.com/openconfig/gnmi/proto/gnmi";
option java_multiple_files = true;
option java_outer_classname = "GnmiProto";
option java_package = "com.github.gnmi.proto";
service gNMI {
// Capabilities allows the client to retrieve the set of capabilities that
// is supported by the target. This allows the target to validate the
// service version that is implemented and retrieve the set of models that
// the target supports. The models can then be specified in subsequent RPCs
// to restrict the set of data that is utilized.
// Reference: gNMI Specification Section 3.2
rpc Capabilities(CapabilityRequest) returns (CapabilityResponse);
// Retrieve a snapshot of data from the target. A Get RPC requests that the
// target snapshots a subset of the data tree as specified by the paths
// included in the message and serializes this to be returned to the
// client using the specified encoding.
// Reference: gNMI Specification Section 3.3
rpc Get(GetRequest) returns (GetResponse);
// Set allows the client to modify the state of data on the target. The
// paths to modified along with the new values that the client wishes
// to set the value to.
// Reference: gNMI Specification Section 3.4
rpc Set(SetRequest) returns (SetResponse);
// Subscribe allows a client to request the target to send it values
// of particular paths within the data tree. These values may be streamed
// at a particular cadence (STREAM), sent one off on a long-lived channel
// (POLL), or sent as a one-off retrieval (ONCE).
// Reference: gNMI Specification Section 3.5
rpc Subscribe(stream SubscribeRequest) returns (stream SubscribeResponse);
}
// The Extension message contains a single gNMI extension.
message Extension {
oneof ext {
RegisteredExtension registered_ext = 1; // A registered extension.
// Well known extensions.
MasterArbitration master_arbitration = 2; // Master arbitration extension.
History history = 3; // History extension.
}
}
// The RegisteredExtension message defines an extension which is defined outside
// of this file.
message RegisteredExtension {
ExtensionID id = 1; // The unique ID assigned to this extension.
bytes msg = 2; // The binary-marshalled protobuf extension payload.
}
// RegisteredExtension is an enumeration acting as a registry for extensions
// defined by external sources.
enum ExtensionID {
EID_UNSET = 0;
// New extensions are to be defined within this enumeration - their definition
// MUST link to a reference describing their implementation.
// An experimental extension that may be used during prototyping of a new
// extension.
EID_EXPERIMENTAL = 999;
}
// MasterArbitration is used to select the master among multiple gNMI clients
// with the same Roles. The client with the largest election_id is honored as
// the master.
// The document about gNMI master arbitration can be found at
// https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-master-arbitration.md
message MasterArbitration {
Role role = 1;
Uint128 election_id = 2;
}
// Representation of unsigned 128-bit integer.
message Uint128 {
uint64 high = 1;
uint64 low = 2;
}
// There can be one master for each role. The role is identified by its id.
message Role {
string id = 1;
// More fields can be added if needed, for example, to specify what paths the
// role can read/write.
}
// The History extension allows clients to request historical data. Its
// spec can be found at
// https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-history.md
message History {
oneof request {
int64 snapshot_time = 1; // Nanoseconds since the epoch
TimeRange range = 2;
}
}
message TimeRange {
int64 start = 1; // Nanoseconds since the epoch
int64 end = 2; // Nanoseconds since the epoch
}
// Notification is a re-usable message that is used to encode data from the
// target to the client. A Notification carries two types of changes to the data
// tree:
// - Deleted values (delete) - a set of paths that have been removed from the
// data tree.
// - Updated values (update) - a set of path-value pairs indicating the path
// whose value has changed in the data tree.
// Reference: gNMI Specification Section 2.1
message Notification {
int64 timestamp = 1; // Timestamp in nanoseconds since Epoch.
Path prefix = 2; // Prefix used for paths in the message.
repeated Update update = 4; // Data elements that have changed values.
repeated Path delete = 5; // Data elements that have been deleted.
// This notification contains a set of paths that are always updated together
// referenced by a globally unique prefix.
bool atomic = 6;
// Reserved field numbers and identifiers.
reserved "alias";
reserved 3;
}
// Update is a re-usable message that is used to store a particular Path,
// Value pair.
// Reference: gNMI Specification Section 2.1
message Update {
Path path = 1; // The path (key) for the update.
Value value = 2 [deprecated=true]; // The value (value) for the update.
TypedValue val = 3; // The explicitly typed update value.
uint32 duplicates = 4; // Number of coalesced duplicates.
}
// TypedValue is used to encode a value being sent between the client and
// target (originated by either entity).
message TypedValue {
// One of the fields within the val oneof is populated with the value
// of the update. The type of the value being included in the Update
// determines which field should be populated. In the case that the
// encoding is a particular form of the base protobuf type, a specific
// field is used to store the value (e.g., json_val).
oneof value {
string string_val = 1; // String value.
int64 int_val = 2; // Integer value.
uint64 uint_val = 3; // Unsigned integer value.
bool bool_val = 4; // Bool value.
bytes bytes_val = 5; // Arbitrary byte sequence value.
float float_val = 6 [deprecated=true]; // Deprecated - use double_val.
double double_val = 14; // Floating point value.
Decimal64 decimal_val = 7 [deprecated=true]; // Deprecated - use double_val.
ScalarArray leaflist_val = 8; // Mixed type scalar array value.
google.protobuf.Any any_val = 9; // protobuf.Any encoded bytes.
bytes json_val = 10; // JSON-encoded text.
bytes json_ietf_val = 11; // JSON-encoded text per RFC7951.
string ascii_val = 12; // Arbitrary ASCII text.
// Protobuf binary encoded bytes. The message type is not included.
// See the specification at
// github.com/openconfig/reference/blob/master/rpc/gnmi/protobuf-vals.md
// for a complete specification. [Experimental]
bytes proto_bytes = 13;
}
}
// Path encodes a data tree path as a series of repeated strings, with
// each element of the path representing a data tree node name and the
// associated attributes.
// Reference: gNMI Specification Section 2.2.2.
message Path {
// Elements of the path are no longer encoded as a string, but rather within
// the elem field as a PathElem message.
repeated string element = 1 [deprecated=true];
string origin = 2; // Label to disambiguate path.
repeated PathElem elem = 3; // Elements of the path.
string target = 4; // The name of the target
// (Sec. 2.2.2.1)
}
// PathElem encodes an element of a gNMI path, along with any attributes (keys)
// that may be associated with it.
// Reference: gNMI Specification Section 2.2.2.
message PathElem {
string name = 1; // The name of the element in the path.
map<string, string> key = 2; // Map of key (attribute) name to value.
}
// Value encodes a data tree node's value - along with the way in which
// the value is encoded. This message is deprecated by gNMI 0.3.0.
// Reference: gNMI Specification Section 2.2.3.
message Value {
option deprecated = true;
bytes value = 1; // Value of the variable being transmitted.
Encoding type = 2; // Encoding used for the value field.
}
// Encoding defines the value encoding formats that are supported by the gNMI
// protocol. These encodings are used by both the client (when sending Set
// messages to modify the state of the target) and the target when serializing
// data to be returned to the client (in both Subscribe and Get RPCs).
// Reference: gNMI Specification Section 2.3
enum Encoding {
JSON = 0; // JSON encoded text.
BYTES = 1; // Arbitrarily encoded bytes.
PROTO = 2; // Encoded according to scalar values of TypedValue.
ASCII = 3; // ASCII text of an out-of-band agreed format.
JSON_IETF = 4; // JSON encoded text as per RFC7951.
}
// Error message previously utilised to return errors to the client. Deprecated
// in favour of using the google.golang.org/genproto/googleapis/rpc/status
// message in the RPC response.
// Reference: gNMI Specification Section 2.5
message Error {
option deprecated = true;
uint32 code = 1; // Canonical gRPC error code.
string message = 2; // Human readable error.
google.protobuf.Any data = 3; // Optional additional information.
}
// Decimal64 is used to encode a fixed precision decimal number. The value
// is expressed as a set of digits with the precision specifying the
// number of digits following the decimal point in the digit set.
// This message is deprecated in favor of encoding all floating point types
// as double precision.
message Decimal64 {
option deprecated = true;
int64 digits = 1; // Set of digits.
uint32 precision = 2; // Number of digits following the decimal point.
}
// ScalarArray is used to encode a mixed-type array of values.
message ScalarArray {
// The set of elements within the array. Each TypedValue message should
// specify only elements that have a field identifier of 1-7 (i.e., the
// values are scalar values).
repeated TypedValue element = 1;
}
// SubscribeRequest is the message sent by the client to the target when
// initiating a subscription to a set of paths within the data tree. The
// request field must be populated and the initial message must specify a
// SubscriptionList to initiate a subscription.
// Reference: gNMI Specification Section 3.5.1.1
message SubscribeRequest {
oneof request {
SubscriptionList subscribe = 1; // Specify the paths within a subscription.
Poll poll = 3; // Trigger a polled update.
}
// Extension messages associated with the SubscribeRequest. See the
// gNMI extension specification for further definition.
repeated Extension extension = 5;
// Reserved field numbers and identifiers.
reserved 4;
reserved "aliases";
}
// Poll is sent within a SubscribeRequest to trigger the device to
// send telemetry updates for the paths that are associated with the
// subscription.
// Reference: gNMI Specification Section Section 3.5.1.4
message Poll {
}
// SubscribeResponse is the message used by the target within a Subscribe RPC.
// The target includes a Notification message which is used to transmit values
// of the path(s) that are associated with the subscription. The same message
// is to indicate that the target has sent all data values once (is
// synchronized).
// Reference: gNMI Specification Section 3.5.1.4
message SubscribeResponse {
oneof response {
Notification update = 1; // Changed or sampled value for a path.
// Indicate target has sent all values associated with the subscription
// at least once.
bool sync_response = 3;
// Deprecated in favour of google.golang.org/genproto/googleapis/rpc/status
Error error = 4 [deprecated=true];
}
// Extension messages associated with the SubscribeResponse. See the
// gNMI extension specification for further definition.
repeated Extension extension = 5;
}
// SubscriptionList is used within a Subscribe message to specify the list of
// paths that the client wishes to subscribe to. The message consists of a
// list of (possibly prefixed) paths, and options that relate to the
// subscription.
// Reference: gNMI Specification Section 3.5.1.2
message SubscriptionList {
Path prefix = 1; // Prefix used for paths.
repeated Subscription subscription = 2; // Set of subscriptions to create.
QOSMarking qos = 4; // DSCP marking to be used.
// Mode of the subscription.
enum Mode {
STREAM = 0; // Values streamed by the target (Sec. 3.5.1.5.2).
ONCE = 1; // Values sent once-off by the target (Sec. 3.5.1.5.1).
POLL = 2; // Values sent in response to a poll request (Sec. 3.5.1.5.3).
}
Mode mode = 5;
// Whether elements of the schema that are marked as eligible for aggregation
// should be aggregated or not.
bool allow_aggregation = 6;
// The set of schemas that define the elements of the data tree that should
// be sent by the target.
repeated ModelData use_models = 7;
// The encoding that the target should use within the Notifications generated
// corresponding to the SubscriptionList.
Encoding encoding = 8;
// An optional field to specify that only updates to current state should be
// sent to a client. If set, the initial state is not sent to the client but
// rather only the sync message followed by any subsequent updates to the
// current state. For ONCE and POLL modes, this causes the server to send only
// the sync message (Sec. 3.5.2.3).
bool updates_only = 9;
// Reserved field numbers and identifiers.
reserved 3;
reserved "use_aliases";
}
// Subscription is a single request within a SubscriptionList. The path
// specified is interpreted (along with the prefix) as the elements of the data
// tree that the client is subscribing to. The mode determines how the target
// should trigger updates to be sent.
// Reference: gNMI Specification Section 3.5.1.3
message Subscription {
Path path = 1; // The data tree path.
SubscriptionMode mode = 2; // Subscription mode to be used.
uint64 sample_interval = 3; // ns between samples in SAMPLE mode.
// Indicates whether values that have not changed should be sent in a SAMPLE
// subscription.
bool suppress_redundant = 4;
// Specifies the maximum allowable silent period in nanoseconds when
// suppress_redundant is in use. The target should send a value at least once
// in the period specified.
uint64 heartbeat_interval = 5;
}
// SubscriptionMode is the mode of the subscription, specifying how the
// target must return values in a subscription.
// Reference: gNMI Specification Section 3.5.1.3
enum SubscriptionMode {
TARGET_DEFINED = 0; // The target selects the relevant mode for each element.
ON_CHANGE = 1; // The target sends an update on element value change.
SAMPLE = 2; // The target samples values according to the interval.
}
// QOSMarking specifies the DSCP value to be set on transmitted telemetry
// updates from the target.
// Reference: gNMI Specification Section 3.5.1.2
message QOSMarking {
uint32 marking = 1;
}
// SetRequest is sent from a client to the target to update values in the data
// tree. Paths are either deleted by the client, or modified by means of being
// updated, or replaced. Where a replace is used, unspecified values are
// considered to be replaced, whereas when update is used the changes are
// considered to be incremental. The set of changes that are specified within
// a single SetRequest are considered to be a transaction.
// Reference: gNMI Specification Section 3.4.1
message SetRequest {
Path prefix = 1; // Prefix used for paths in the message.
repeated Path delete = 2; // Paths to be deleted from the data tree.
repeated Update replace = 3; // Updates specifying elements to be replaced.
repeated Update update = 4; // Updates specifying elements to updated.
// Extension messages associated with the SetRequest. See the
// gNMI extension specification for further definition.
repeated Extension extension = 5;
}
// SetResponse is the response to a SetRequest, sent from the target to the
// client. It reports the result of the modifications to the data tree that were
// specified by the client. Errors for this RPC should be reported using the
// https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto
// message in the RPC return. The gnmi.Error message can be used to add additional
// details where required.
// Reference: gNMI Specification Section 3.4.2
message SetResponse {
Path prefix = 1; // Prefix used for paths.
// A set of responses specifying the result of the operations specified in
// the SetRequest.
repeated UpdateResult response = 2;
Error message = 3 [deprecated=true]; // The overall status of the transaction.
int64 timestamp = 4; // Timestamp of transaction (ns since epoch).
// Extension messages associated with the SetResponse. See the
// gNMI extension specification for further definition.
repeated Extension extension = 5;
}
// UpdateResult is used within the SetResponse message to communicate the
// result of an operation specified within a SetRequest message.
// Reference: gNMI Specification Section 3.4.2
message UpdateResult {
// The operation that was associated with the Path specified.
enum Operation {
INVALID = 0;
DELETE = 1; // The result relates to a delete of Path.
REPLACE = 2; // The result relates to a replace of Path.
UPDATE = 3; // The result relates to an update of Path.
}
// Deprecated timestamp for the UpdateResult, this field has been
// replaced by the timestamp within the SetResponse message, since
// all mutations effected by a set should be applied as a single
// transaction.
int64 timestamp = 1 [deprecated=true];
Path path = 2; // Path associated with the update.
Error message = 3 [deprecated=true]; // Status of the update operation.
Operation op = 4; // Update operation type.
}
// GetRequest is sent when a client initiates a Get RPC. It is used to specify
// the set of data elements for which the target should return a snapshot of
// data. The use_models field specifies the set of schema modules that are to
// be used by the target - where use_models is not specified then the target
// must use all schema models that it has.
// Reference: gNMI Specification Section 3.3.1
message GetRequest {
Path prefix = 1; // Prefix used for paths.
repeated Path path = 2; // Paths requested by the client.
// Type of elements within the data tree.
enum DataType {
ALL = 0; // All data elements.
CONFIG = 1; // Config (rw) only elements.
STATE = 2; // State (ro) only elements.
// Data elements marked in the schema as operational. This refers to data
// elements whose value relates to the state of processes or interactions
// running on the device.
OPERATIONAL = 3;
}
DataType type = 3; // The type of data being requested.
Encoding encoding = 5; // Encoding to be used.
repeated ModelData use_models = 6; // The schema models to be used.
// Extension messages associated with the GetRequest. See the
// gNMI extension specification for further definition.
repeated Extension extension = 7;
}
// GetResponse is used by the target to respond to a GetRequest from a client.
// The set of Notifications corresponds to the data values that are requested
// by the client in the GetRequest.
// Reference: gNMI Specification Section 3.3.2
message GetResponse {
repeated Notification notification = 1; // Data values.
Error error = 2 [deprecated=true]; // Errors that occurred in the Get.
// Extension messages associated with the GetResponse. See the
// gNMI extension specification for further definition.
repeated Extension extension = 3;
}
// CapabilityRequest is sent by the client in the Capabilities RPC to request
// that the target reports its capabilities.
// Reference: gNMI Specification Section 3.2.1
message CapabilityRequest {
// Extension messages associated with the CapabilityRequest. See the
// gNMI extension specification for further definition.
repeated Extension extension = 1;
}
// CapabilityResponse is used by the target to report its capabilities to the
// client within the Capabilities RPC.
// Reference: gNMI Specification Section 3.2.2
message CapabilityResponse {
repeated ModelData supported_models = 1; // Supported schema models.
repeated Encoding supported_encodings = 2; // Supported encodings.
string gNMI_version = 3; // Supported gNMI version.
// Extension messages associated with the CapabilityResponse. See the
// gNMI extension specification for further definition.
repeated Extension extension = 4;
}
// ModelData is used to describe a set of schema modules. It can be used in a
// CapabilityResponse where a target reports the set of modules that it
// supports, and within the SubscribeRequest and GetRequest messages to specify
// the set of models from which data tree elements should be reported.
// Reference: gNMI Specification Section 3.2.3
message ModelData {
string name = 1; // Name of the model.
string organization = 2; // Organization publishing the model.
string version = 3; // Semantic version of the model.
}
\ No newline at end of file
syntax = "proto3";
// Package gnmi_ext defines a set of extensions messages which can be optionally
// included with the request and response messages of gNMI RPCs. A set of
// well-known extensions are defined within this file, along with a registry for
// extensions defined outside of this package.
package gnmi_ext;
option go_package = "github.com/openconfig/gnmi/proto/gnmi_ext";
// The Extension message contains a single gNMI extension.
message Extension {
oneof ext {
RegisteredExtension registered_ext = 1; // A registered extension.
// Well known extensions.
MasterArbitration master_arbitration = 2; // Master arbitration extension.
History history = 3; // History extension.
}
}
// The RegisteredExtension message defines an extension which is defined outside
// of this file.
message RegisteredExtension {
ExtensionID id = 1; // The unique ID assigned to this extension.
bytes msg = 2; // The binary-marshalled protobuf extension payload.
}
// RegisteredExtension is an enumeration acting as a registry for extensions
// defined by external sources.
enum ExtensionID {
EID_UNSET = 0;
// New extensions are to be defined within this enumeration - their definition
// MUST link to a reference describing their implementation.
// An experimental extension that may be used during prototyping of a new
// extension.
EID_EXPERIMENTAL = 999;
}
// MasterArbitration is used to select the master among multiple gNMI clients
// with the same Roles. The client with the largest election_id is honored as
// the master.
// The document about gNMI master arbitration can be found at
// https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-master-arbitration.md
message MasterArbitration {
Role role = 1;
Uint128 election_id = 2;
}
// Representation of unsigned 128-bit integer.
message Uint128 {
uint64 high = 1;
uint64 low = 2;
}
// There can be one master for each role. The role is identified by its id.
message Role {
string id = 1;
// More fields can be added if needed, for example, to specify what paths the
// role can read/write.
}
// The History extension allows clients to request historical data. Its
// spec can be found at
// https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-history.md
message History {
oneof request {
int64 snapshot_time = 1; // Nanoseconds since the epoch
TimeRange range = 2;
}
}
message TimeRange {
int64 start = 1; // Nanoseconds since the epoch
int64 end = 2; // Nanoseconds since the epoch
}
\ No newline at end of file