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";
// 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