diff --git a/job.yaml b/job.yaml index c60ed1f..86cb02f 100644 --- a/job.yaml +++ b/job.yaml @@ -53,13 +53,21 @@ spec: serviceAccountName: node-collector containers: - name: node-collector - image: ghcr.io/aquasecurity/node-collector:0.2.0 + image: ghcr.io/aquasecurity/node-collector:0.2.1 command: - node-collector args: - k8s - - --node - - kind-control-plane + - --kubelet-config + - eyJrdWJlbGV0Y29uZmlnIjp7ImVuYWJsZVNlcnZlciI6dHJ1ZSwic3RhdGljUG9kUGF0aCI6Ii9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMiLCJzeW5jRnJlcXVlbmN5IjoiMW0wcyIsImZpbGVDaGVja0ZyZXF1ZW5jeSI6IjIwcyIsImh0dHBDaGVja0ZyZXF1ZW5jeSI6IjIwcyIsImFkZHJlc3MiOiIwLjAuMC4wIiwicG9ydCI6MTAyNTAsInRsc0NlcnRGaWxlIjoiL3Zhci9saWIva3ViZWxldC9wa2kva3ViZWxldC5jcnQiLCJ0bHNQcml2YXRlS2V5RmlsZSI6Ii92YXIvbGliL2t1YmVsZXQvcGtpL2t1YmVsZXQua2V5Iiwicm90YXRlQ2VydGlmaWNhdGVzIjp0cnVlLCJhdXRoZW50aWNhdGlvbiI6eyJ4NTA5Ijp7ImNsaWVudENBRmlsZSI6Ii9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0In0sIndlYmhvb2siOnsiZW5hYmxlZCI6dHJ1ZSwiY2FjaGVUVEwiOiIybTBzIn0sImFub255bW91cyI6eyJlbmFibGVkIjpmYWxzZX19LCJhdXRob3JpemF0aW9uIjp7Im1vZGUiOiJXZWJob29rIiwid2ViaG9vayI6eyJjYWNoZUF1dGhvcml6ZWRUVEwiOiI1bTBzIiwiY2FjaGVVbmF1dGhvcml6ZWRUVEwiOiIzMHMifX0sInJlZ2lzdHJ5UHVsbFFQUyI6NSwicmVnaXN0cnlCdXJzdCI6MTAsImV2ZW50UmVjb3JkUVBTIjo1LCJldmVudEJ1cnN0IjoxMCwiZW5hYmxlRGVidWdnaW5nSGFuZGxlcnMiOnRydWUsImhlYWx0aHpQb3J0IjoxMDI0OCwiaGVhbHRoekJpbmRBZGRyZXNzIjoiMTI3LjAuMC4xIiwib29tU2NvcmVBZGoiOi05OTksImNsdXN0ZXJEb21haW4iOiJjbHVzdGVyLmxvY2FsIiwiY2x1c3RlckROUyI6WyIxMC45Ni4wLjEwIl0sInN0cmVhbWluZ0Nvbm5lY3Rpb25JZGxlVGltZW91dCI6IjRoMG0wcyIsIm5vZGVTdGF0dXNVcGRhdGVGcmVxdWVuY3kiOiIxMHMiLCJub2RlU3RhdHVzUmVwb3J0RnJlcXVlbmN5IjoiNW0wcyIsIm5vZGVMZWFzZUR1cmF0aW9uU2Vjb25kcyI6NDAsImltYWdlTWluaW11bUdDQWdlIjoiMm0wcyIsImltYWdlR0NIaWdoVGhyZXNob2xkUGVyY2VudCI6MTAwLCJpbWFnZUdDTG93VGhyZXNob2xkUGVyY2VudCI6ODAsInZvbHVtZVN0YXRzQWdnUGVyaW9kIjoiMW0wcyIsImNncm91cFJvb3QiOiIva3ViZWxldCIsImNncm91cHNQZXJRT1MiOnRydWUsImNncm91cERyaXZlciI6ImNncm91cGZzIiwiY3B1TWFuYWdlclBvbGljeSI6Im5vbmUiLCJjcHVNYW5hZ2VyUmVjb25jaWxlUGVyaW9kIjoiMTBzIiwibWVtb3J5TWFuYWdlclBvbGljeSI6Ik5vbmUiLCJ0b3BvbG9neU1hbmFnZXJQb2xpY3kiOiJub25lIiwidG9wb2xvZ3lNYW5hZ2VyU2NvcGUiOiJjb250YWluZXIiLCJydW50aW1lUmVxdWVzdFRpbWVvdXQiOiIybTBzIiwiaGFpcnBpbk1vZGUiOiJwcm9taXNjdW91cy1icmlkZ2UiLCJtYXhQb2RzIjoxMTAsInBvZFBpZHNMaW1pdCI6LTEsInJlc29sdkNvbmYiOiIvZXRjL3Jlc29sdi5jb25mIiwiY3B1Q0ZTUXVvdGEiOnRydWUsImNwdUNGU1F1b3RhUGVyaW9kIjoiMTAwbXMiLCJub2RlU3RhdHVzTWF4SW1hZ2VzIjo1MCwibWF4T3BlbkZpbGVzIjoxMDAwMDAwLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5rdWJlcm5ldGVzLnByb3RvYnVmIiwia3ViZUFQSVFQUyI6NSwia3ViZUFQSUJ1cnN0IjoxMCwic2VyaWFsaXplSW1hZ2VQdWxscyI6dHJ1ZSwiZXZpY3Rpb25IYXJkIjp7ImltYWdlZnMuYXZhaWxhYmxlIjoiMCUiLCJub2RlZnMuYXZhaWxhYmxlIjoiMCUiLCJub2RlZnMuaW5vZGVzRnJlZSI6IjAlIn0sImV2aWN0aW9uUHJlc3N1cmVUcmFuc2l0aW9uUGVyaW9kIjoiNW0wcyIsImVuYWJsZUNvbnRyb2xsZXJBdHRhY2hEZXRhY2giOnRydWUsIm1ha2VJUFRhYmxlc1V0aWxDaGFpbnMiOnRydWUsImlwdGFibGVzTWFzcXVlcmFkZUJpdCI6MTQsImlwdGFibGVzRHJvcEJpdCI6MTUsImZhaWxTd2FwT24iOmZhbHNlLCJjb250YWluZXJMb2dNYXhTaXplIjoiMTBNaSIsImNvbnRhaW5lckxvZ01heEZpbGVzIjo1LCJjb25maWdNYXBBbmRTZWNyZXRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSI6IldhdGNoIiwiZW5mb3JjZU5vZGVBbGxvY2F0YWJsZSI6WyJwb2RzIl0sInZvbHVtZVBsdWdpbkRpciI6Ii91c3IvbGliZXhlYy9rdWJlcm5ldGVzL2t1YmVsZXQtcGx1Z2lucy92b2x1bWUvZXhlYy8iLCJwcm92aWRlcklEIjoia2luZDovL3BvZG1hbi9raW5kL2tpbmQtY29udHJvbC1wbGFuZSIsImxvZ2dpbmciOnsiZm9ybWF0IjoidGV4dCJ9LCJlbmFibGVTeXN0ZW1Mb2dIYW5kbGVyIjp0cnVlLCJzaHV0ZG93bkdyYWNlUGVyaW9kIjoiMHMiLCJzaHV0ZG93bkdyYWNlUGVyaW9kQ3JpdGljYWxQb2RzIjoiMHMiLCJlbmFibGVQcm9maWxpbmdIYW5kbGVyIjp0cnVlLCJlbmFibGVEZWJ1Z0ZsYWdzSGFuZGxlciI6dHJ1ZX19Cg== + - --kubelet-config-mapping + - LS0tCmt1YmVsZXRBbm9ueW1vdXNBdXRoQXJndW1lbnRTZXQ6IGt1YmVsZXRjb25maWcuYXV0aGVudGljYXRpb24uYW5vbnltb3VzLmVuYWJsZWQKa3ViZWxldEF1dGhvcml6YXRpb25Nb2RlQXJndW1lbnRTZXQ6IGt1YmVsZXRjb25maWcuYXV0aG9yaXphdGlvbi5tb2RlCmt1YmVsZXRDbGllbnRDYUZpbGVBcmd1bWVudFNldDoga3ViZWxldGNvbmZpZy5hdXRoZW50aWNhdGlvbi54NTA5LmNsaWVudENBRmlsZQprdWJlbGV0UmVhZE9ubHlQb3J0QXJndW1lbnRTZXQ6IGt1YmVsZXRjb25maWcucmVhZE9ubHlQb3J0Cmt1YmVsZXRTdHJlYW1pbmdDb25uZWN0aW9uSWRsZVRpbWVvdXRBcmd1bWVudFNldDoga3ViZWxldGNvbmZpZy5zdHJlYW1pbmdDb25uZWN0aW9uSWRsZVRpbWVvdXQKa3ViZWxldFByb3RlY3RLZXJuZWxEZWZhdWx0c0FyZ3VtZW50U2V0OiBrdWJlbGV0Y29uZmlnLnByb3RlY3RLZXJuZWxEZWZhdWx0cwprdWJlbGV0TWFrZUlwdGFibGVzVXRpbENoYWluc0FyZ3VtZW50U2V0OiBrdWJlbGV0Y29uZmlnLm1ha2VJUFRhYmxlc1V0aWxDaGFpbnMKa3ViZWxldEV2ZW50UXBzQXJndW1lbnRTZXQ6IGt1YmVsZXRjb25maWcuZXZlbnRSZWNvcmRRUFMiLAprdWJlbGV0Um90YXRlS3ViZWxldFNlcnZlckNlcnRpZmljYXRlQXJndW1lbnRTZXQ6IGt1YmVsZXRjb25maWcuZmVhdHVyZUdhdGVzLlJvdGF0ZUt1YmVsZXRTZXJ2ZXJDZXJ0aWZpY2F0ZQprdWJlbGV0Um90YXRlQ2VydGlmaWNhdGVzQXJndW1lbnRTZXQ6IGt1YmVsZXRjb25maWcucm90YXRlQ2VydGlmaWNhdGVzCmt1YmVsZXRUbHNDZXJ0RmlsZVRsc0FyZ3VtZW50U2V0OiBrdWJlbGV0Y29uZmlnLnRsc0NlcnRGaWxlCmt1YmVsZXRUbHNQcml2YXRlS2V5RmlsZUFyZ3VtZW50U2V0OiBrdWJlbGV0Y29uZmlnLnRsc1ByaXZhdGVLZXlGaWxlCmt1YmVsZXRPbmx5VXNlU3Ryb25nQ3J5cHRvZ3JhcGhpYzoga3ViZWxldGNvbmZpZy50bHNDaXBoZXJTdWl0ZXMKCg== + - --spec-version-mapping + - LS0tCnZlcnNpb25fbWFwcGluZzoKICBrOHM6CiAgICAtIG9wOiAiPj0iCiAgICAgIGNsdXN0ZXJfdmVyc2lvbjogIjEuMjEiCiAgICAgIHNwZWM6IGs4cy1jaXMtMS4yMy4wCiAgZ2tlOgogICAgLSBvcDogIj49IgogICAgICBjbHVzdGVyX3ZlcnNpb246ICIxLjIxIgogICAgICBzcGVjOiBna2UtY2lzLTEuMi4wCiAgZWtzOgogICAgLSBvcDogIj49IgogICAgICBjbHVzdGVyX3ZlcnNpb246ICIxLjIxIgogICAgICBzcGVjOiBla3MtY2lzLTEuMi4wCiAgYWtzOgogICAgLSBvcDogIj49IgogICAgICBjbHVzdGVyX3ZlcnNpb246ICIxLjIxIgogICAgICBzcGVjOiBha3MtY2lzLTEuMAogIHJrZTI6CiAgICAtIG9wOiAiPj0iCiAgICAgIGNsdXN0ZXJfdmVyc2lvbjogIjEuMjEiCiAgICAgIHNwZWM6IHJrZTItY2lzLTEuMjQKICBtaWNyb2s4czoKICAgIC0gb3A6ICI+PSIKICAgICAgY2x1c3Rlcl92ZXJzaW9uOiAiMS4yMSIKICAgICAgc3BlYzogbWljcm9rOHMtY2lzLTEuMjQKICBvY3A6CiAgICAtIG9wOiAiPj0iCiAgICAgIGNsdXN0ZXJfdmVyc2lvbjogIjQuMCIKICAgICAgc3BlYzogcmgtY2lzLTEuMAoK + - --node-config + - LS0tCm5vZGU6CiAgYXBpc2VydmVyOgogICAgY29uZnM6CiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLWFwaXNlcnZlci55YW1sCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLWFwaXNlcnZlci55bWwKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzL2t1YmUtYXBpc2VydmVyLm1hbmlmZXN0CiAgICAgIC0gL3Zhci9zbmFwL2t1YmUtYXBpc2VydmVyL2N1cnJlbnQvYXJncwogICAgICAtIC92YXIvc25hcC9taWNyb2s4cy9jdXJyZW50L2FyZ3Mva3ViZS1hcGlzZXJ2ZXIKICAgICAgLSAvZXRjL29yaWdpbi9tYXN0ZXIvbWFzdGVyLWNvbmZpZy55YW1sCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy90YWxvcy1rdWJlLWFwaXNlcnZlci55YW1sCiAgICAgIC0gL3Zhci9saWIvcmFuY2hlci9ya2UyL2FnZW50L3BvZC1tYW5pZmVzdHMva3ViZS1hcGlzZXJ2ZXIueWFtbAogICAgZGVmYXVsdGNvbmY6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMva3ViZS1hcGlzZXJ2ZXIueWFtbAogIGNvbnRyb2xsZXJtYW5hZ2VyOgogICAgY29uZnM6CiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLWNvbnRyb2xsZXItbWFuYWdlci55YW1sCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLWNvbnRyb2xsZXItbWFuYWdlci55bWwKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyLm1hbmlmZXN0CiAgICAgIC0gL3Zhci9zbmFwL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyL2N1cnJlbnQvYXJncwogICAgICAtIC92YXIvc25hcC9taWNyb2s4cy9jdXJyZW50L2FyZ3Mva3ViZS1jb250cm9sbGVyLW1hbmFnZXIKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzL3RhbG9zLWt1YmUtY29udHJvbGxlci1tYW5hZ2VyLnlhbWwKICAgICAgLSAvdmFyL2xpYi9yYW5jaGVyL3JrZTIvYWdlbnQvcG9kLW1hbmlmZXN0cy9rdWJlLWNvbnRyb2xsZXItbWFuYWdlci55YW1sCiAgICBkZWZhdWx0Y29uZjogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLWNvbnRyb2xsZXItbWFuYWdlci55YW1sCiAgICBrdWJlY29uZmlnOgogICAgICAtIC9ldGMva3ViZXJuZXRlcy9jb250cm9sbGVyLW1hbmFnZXIuY29uZgogICAgICAtIC92YXIvbGliL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyL2t1YmVjb25maWcKICAgICAgLSAvc3lzdGVtL3NlY3JldHMva3ViZXJuZXRlcy9rdWJlLWNvbnRyb2xsZXItbWFuYWdlci9rdWJlY29uZmlnCiAgICBkZWZhdWx0a3ViZWNvbmZpZzogL2V0Yy9rdWJlcm5ldGVzL2NvbnRyb2xsZXItbWFuYWdlci5jb25mCiAgc2NoZWR1bGVyOgogICAgY29uZnM6CiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLXNjaGVkdWxlci55YW1sCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLXNjaGVkdWxlci55bWwKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzL2t1YmUtc2NoZWR1bGVyLm1hbmlmZXN0CiAgICAgIC0gL3Zhci9zbmFwL2t1YmUtc2NoZWR1bGVyL2N1cnJlbnQvYXJncwogICAgICAtIC92YXIvc25hcC9taWNyb2s4cy9jdXJyZW50L2FyZ3Mva3ViZS1zY2hlZHVsZXIKICAgICAgLSAvZXRjL29yaWdpbi9tYXN0ZXIvc2NoZWR1bGVyLmpzb24KICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzL3RhbG9zLWt1YmUtc2NoZWR1bGVyLnlhbWwKICAgICAgLSAvdmFyL2xpYi9yYW5jaGVyL3JrZTIvYWdlbnQvcG9kLW1hbmlmZXN0cy9rdWJlLXNjaGVkdWxlci55YW1sCiAgICBkZWZhdWx0Y29uZjogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9rdWJlLXNjaGVkdWxlci55YW1sCiAgICBrdWJlY29uZmlnOgogICAgICAtIC9ldGMva3ViZXJuZXRlcy9zY2hlZHVsZXIuY29uZgogICAgICAtIC92YXIvbGliL2t1YmUtc2NoZWR1bGVyL2t1YmVjb25maWcKICAgICAgLSAvdmFyL2xpYi9rdWJlLXNjaGVkdWxlci9jb25maWcueWFtbAogICAgICAtIC9zeXN0ZW0vc2VjcmV0cy9rdWJlcm5ldGVzL2t1YmUtc2NoZWR1bGVyL2t1YmVjb25maWcKICAgIGRlZmF1bHRrdWJlY29uZmlnOiAvZXRjL2t1YmVybmV0ZXMvc2NoZWR1bGVyLmNvbmYKICBldGNkOgogICAgZGF0YWRpcnM6CiAgICAgIC0gL3Zhci9saWIvZXRjZC9kZWZhdWx0LmV0Y2QKICAgICAgLSAvdmFyL2xpYi9ldGNkL2RhdGEuZXRjZAogICAgY29uZnM6CiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9ldGNkLnlhbWwKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzL2V0Y2QueW1sCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9ldGNkLm1hbmlmZXN0CiAgICAgIC0gL2V0Yy9ldGNkL2V0Y2QuY29uZgogICAgICAtIC92YXIvc25hcC9ldGNkL2NvbW1vbi9ldGNkLmNvbmYueW1sCiAgICAgIC0gL3Zhci9zbmFwL2V0Y2QvY29tbW9uL2V0Y2QuY29uZi55YW1sCiAgICAgIC0gL3Zhci9zbmFwL21pY3JvazhzL2N1cnJlbnQvYXJncy9ldGNkCiAgICAgIC0gL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW0vZXRjZC5zZXJ2aWNlCiAgICAgIC0gL3Zhci9saWIvcmFuY2hlci9ya2UyL2FnZW50L3BvZC1tYW5pZmVzdHMvZXRjZC55YW1sCiAgICAgIC0gL3Zhci9saWIvcmFuY2hlci9rM3Mvc2VydmVyL2RiL2V0Y2QvY29uZmlnCiAgICBkZWZhdWx0Y29uZjogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cy9ldGNkLnlhbWwKICAgIGRlZmF1bHRkYXRhZGlyOiAvdmFyL2xpYi9ldGNkL2RlZmF1bHQuZXRjZAogIGZsYW5uZWxkOgogICAgZGVmYXVsdGNvbmY6IC9ldGMvc3lzY29uZmlnL2ZsYW5uZWxkCiAga3ViZXJuZXRlczoKICAgIGRlZmF1bHRjb25mOiAvZXRjL2t1YmVybmV0ZXMvY29uZmlnCiAga3ViZWxldDoKICAgIGNhZmlsZToKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvcGtpL2NhLmNydAogICAgICAtIC9ldGMva3ViZXJuZXRlcy9jZXJ0cy9jYS5jcnQKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvY2VydC9jYS5wZW0KICAgICAgLSAvdmFyL3NuYXAvbWljcm9rOHMvY3VycmVudC9jZXJ0cy9jYS5jcnQKICAgICAgLSAvdmFyL2xpYi9yYW5jaGVyL3JrZTIvYWdlbnQvc2VydmVyLmNydAogICAgICAtIC92YXIvbGliL3JhbmNoZXIvcmtlMi9hZ2VudC9jbGllbnQtY2EuY3J0CiAgICAgIC0gL3Zhci9saWIvcmFuY2hlci9rM3MvYWdlbnQvY2xpZW50LWNhLmNydAogICAgc3ZjOgogICAgICAtIC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvMTAta3ViZWFkbS5jb25mCiAgICAgIC0gL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UKICAgICAgLSAvbGliL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQuc2VydmljZQogICAgICAtIC9ldGMvc3lzdGVtZC9zeXN0ZW0vc25hcC5rdWJlbGV0LmRhZW1vbi5zZXJ2aWNlCiAgICAgIC0gL2V0Yy9zeXN0ZW1kL3N5c3RlbS9zbmFwLm1pY3JvazhzLmRhZW1vbi1rdWJlbGV0LnNlcnZpY2UKICAgICAgLSAvZXRjL3N5c3RlbWQvc3lzdGVtL2F0b21pYy1vcGVuc2hpZnQtbm9kZS5zZXJ2aWNlCiAgICAgIC0gL2V0Yy9zeXN0ZW1kL3N5c3RlbS9vcmlnaW4tbm9kZS5zZXJ2aWNlCiAgICBiaW5zOgogICAgICAtIGh5cGVya3ViZSBrdWJlbGV0CiAgICAgIC0ga3ViZWxldAogICAga3ViZWNvbmZpZzoKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQta3ViZWNvbmZpZy5jb25mCiAgICAgIC0gL3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQta3ViZWNvbmZpZwogICAgICAtIC9ldGMva3ViZXJuZXRlcy9rdWJlbGV0L2t1YmVjb25maWcKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvc3NsL2t1YmVjZmcta3ViZS1ub2RlLnlhbWwKICAgICAgLSAvdmFyL3NuYXAvbWljcm9rOHMvY3VycmVudC9jcmVkZW50aWFscy9rdWJlbGV0LmNvbmZpZwogICAgICAtIC9ldGMva3ViZXJuZXRlcy9rdWJlY29uZmlnLWt1YmVsZXQKICAgICAgLSAvdmFyL2xpYi9yYW5jaGVyL3JrZTIvYWdlbnQva3ViZWxldC5rdWJlY29uZmlnCiAgICAgIC0gL3Zhci9saWIvcmFuY2hlci9rM3Mvc2VydmVyL2NyZWQvYWRtaW4ua3ViZWNvbmZpZwogICAgICAtIC92YXIvbGliL3JhbmNoZXIvazNzL2FnZW50L2t1YmVsZXQua3ViZWNvbmZpZwogICAgY29uZnM6CiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQtY29uZmlnLnlhbWwKICAgICAgLSAvdmFyL2xpYi9rdWJlbGV0L2NvbmZpZy55YW1sCiAgICAgIC0gL3Zhci9saWIva3ViZWxldC9jb25maWcueW1sCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQva3ViZWxldC1jb25maWcuanNvbgogICAgICAtIC9ldGMva3ViZXJuZXRlcy9rdWJlbGV0L2NvbmZpZwogICAgICAtIC9ob21lL2t1YmVybmV0ZXMva3ViZWxldC1jb25maWcueWFtbAogICAgICAtIC9ob21lL2t1YmVybmV0ZXMva3ViZWxldC1jb25maWcueW1sCiAgICAgIC0gL2V0Yy9kZWZhdWx0L2t1YmVsZXRjb25maWcuanNvbgogICAgICAtIC9ldGMvZGVmYXVsdC9rdWJlbGV0CiAgICAgIC0gL3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnCiAgICAgIC0gL3Zhci9zbmFwL2t1YmVsZXQvY3VycmVudC9hcmdzCiAgICAgIC0gL3Zhci9zbmFwL21pY3JvazhzL2N1cnJlbnQvYXJncy9rdWJlbGV0CiAgICAgIC0gL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC8xMC1rdWJlYWRtLmNvbmYKICAgICAgLSAvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQuc2VydmljZQogICAgICAtIC9saWIvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlCiAgICAgIC0gL2V0Yy9zeXN0ZW1kL3N5c3RlbS9zbmFwLmt1YmVsZXQuZGFlbW9uLnNlcnZpY2UKICAgICAgLSAvZXRjL3N5c3RlbWQvc3lzdGVtL3NuYXAubWljcm9rOHMuZGFlbW9uLWt1YmVsZXQuc2VydmljZQogICAgICAtIC9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LnlhbWwKICAgICAgLSAvdmFyL2xpYi9yYW5jaGVyL3JrZTIvYWdlbnQva3ViZWxldC5rdWJlY29uZmlnCiAgICBkZWZhdWx0Y29uZjogL3Zhci9saWIva3ViZWxldC9jb25maWcueWFtbAogICAgZGVmYXVsdHN2YzogL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC8xMC1rdWJlYWRtLmNvbmYKICAgIGRlZmF1bHRrdWJlY29uZmlnOiAvZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mCiAgICBkZWZhdWx0Y2FmaWxlOiAvZXRjL2t1YmVybmV0ZXMvcGtpL2NhLmNydAogIHByb3h5OgogICAgYmluczoKICAgICAgLSBrdWJlLXByb3h5CiAgICAgIC0gaHlwZXJrdWJlIHByb3h5CiAgICAgIC0gaHlwZXJrdWJlIGt1YmUtcHJveHkKICAgICAgLSBwcm94eQogICAgICAtIG9wZW5zaGlmdCBzdGFydCBuZXR3b3JrCiAgICBjb25mczoKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvcHJveHkKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvYWRkb25zL2t1YmUtcHJveHktZGFlbW9uc2V0LnlhbWwKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMvYWRkb25zL2t1YmUtcHJveHktZGFlbW9uc2V0LnltbAogICAgICAtIC92YXIvc25hcC9rdWJlLXByb3h5L2N1cnJlbnQvYXJncwogICAgICAtIC92YXIvc25hcC9taWNyb2s4cy9jdXJyZW50L2FyZ3Mva3ViZS1wcm94eQogICAga3ViZWNvbmZpZzoKICAgICAgLSAvZXRjL2t1YmVybmV0ZXMva3ViZWxldC1rdWJlY29uZmlnCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQta3ViZWNvbmZpZy5jb25mCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQvY29uZmlnCiAgICAgIC0gL2V0Yy9rdWJlcm5ldGVzL3NzbC9rdWJlY2ZnLWt1YmUtcHJveHkueWFtbAogICAgICAtIC92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZwogICAgICAtIC92YXIvc25hcC9taWNyb2s4cy9jdXJyZW50L2NyZWRlbnRpYWxzL3Byb3h5LmNvbmZpZwogICAgICAtIC92YXIvbGliL3JhbmNoZXIvcmtlMi9hZ2VudC9rdWJlcHJveHkua3ViZWNvbmZpZwogICAgICAtIC92YXIvbGliL3JhbmNoZXIvazNzL2FnZW50L2t1YmVwcm94eS5rdWJlY29uZmlnCiAgICBzdmM6CiAgICAgIC0gL2xpYi9zeXN0ZW1kL3N5c3RlbS9rdWJlLXByb3h5LnNlcnZpY2UKICAgICAgLSAvZXRjL3N5c3RlbWQvc3lzdGVtL3NuYXAubWljcm9rOHMuZGFlbW9uLXByb3h5LnNlcnZpY2UKICAgIGRlZmF1bHRjb25mOiAvZXRjL2t1YmVybmV0ZXMvYWRkb25zL2t1YmUtcHJveHktZGFlbW9uc2V0LnlhbWwKICAgIGRlZmF1bHRrdWJlY29uZmlnOiAvZXRjL2t1YmVybmV0ZXMvcHJveHkuY29uZgo= + - --node-commands + - LS0tCmNvbW1hbmRzOgogIC0ga2V5OiBrdWJlQVBJU2VydmVyU3BlY0ZpbGVQZXJtaXNzaW9uCiAgICB0aXRsZTogQVBJIHNlcnZlciBwb2Qgc3BlY2lmaWNhdGlvbiBmaWxlIHBlcm1pc3Npb25zCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlYSAkYXBpc2VydmVyLmNvbmZzCiAgLSBrZXk6IGt1YmVBUElTZXJ2ZXJTcGVjRmlsZU93bmVyc2hpcAogICAgdGl0bGU6IEFQSSBzZXJ2ZXIgcG9kIHNwZWNpZmljYXRpb24gZmlsZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiBtYXN0ZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVVOiVHICRhcGlzZXJ2ZXIuY29uZnMKICAtIGtleToga3ViZUNvbnRyb2xsZXJNYW5hZ2VyU3BlY0ZpbGVQZXJtaXNzaW9uCiAgICB0aXRsZTogQ29udHJvbGxlciBtYW5hZ2VyIHBvZCBzcGVjaWZpY2F0aW9uIGZpbGUgcGVybWlzc2lvbnMKICAgIG5vZGVUeXBlOiBtYXN0ZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVhICRjb250cm9sbGVybWFuYWdlci5jb25mcwogIC0ga2V5OiBrdWJlQ29udHJvbGxlck1hbmFnZXJTcGVjRmlsZU93bmVyc2hpcAogICAgdGl0bGU6IENvbnRyb2xsZXIgbWFuYWdlciBwb2Qgc3BlY2lmaWNhdGlvbiBmaWxlIG93bmVyc2hpcCBpcyBzZXQgdG8gcm9vdDpyb290CiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlVTolRyAkY29udHJvbGxlcm1hbmFnZXIuY29uZnMKICAtIGtleToga3ViZVNjaGVkdWxlclNwZWNGaWxlUGVybWlzc2lvbgogICAgdGl0bGU6IFNjaGVkdWxlciBwb2Qgc3BlY2lmaWNhdGlvbiBmaWxlIHBlcm1pc3Npb25zCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlYSAkc2NoZWR1bGVyLmNvbmZzCiAgLSBrZXk6IGt1YmVTY2hlZHVsZXJTcGVjRmlsZU93bmVyc2hpcAogICAgdGl0bGU6IFNjaGVkdWxlciBwb2Qgc3BlY2lmaWNhdGlvbiBmaWxlIG93bmVyc2hpcAogICAgbm9kZVR5cGU6IG1hc3RlcgogICAgYXVkaXQ6IHN0YXQgLWMgJVU6JUcgJHNjaGVkdWxlci5jb25mcwogIC0ga2V5OiBrdWJlRXRjZFNwZWNGaWxlUGVybWlzc2lvbgogICAgdGl0bGU6IEV0Y2QgcG9kIHNwZWNpZmljYXRpb24gZmlsZSBwZXJtaXNzaW9ucwogICAgbm9kZVR5cGU6IG1hc3RlcgogICAgYXVkaXQ6IHN0YXQgLWMgJWEgJGV0Y2QuY29uZnMKICAtIGtleToga3ViZUV0Y2RTcGVjRmlsZU93bmVyc2hpcAogICAgdGl0bGU6IEV0Y2QgcG9kIHNwZWNpZmljYXRpb24gZmlsZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiBtYXN0ZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVVOiVHICRldGNkLmNvbmZzCiAgLSBrZXk6IGNvbnRhaW5lck5ldHdvcmtJbnRlcmZhY2VGaWxlUGVybWlzc2lvbnMKICAgIHRpdGxlOiBDb250YWluZXIgTmV0d29yayBJbnRlcmZhY2UgZmlsZSBwZXJtaXNzaW9ucwogICAgbm9kZVR5cGU6IG1hc3RlcgogICAgYXVkaXQ6IHN0YXQgLWMgJWEgLyovY25pLyoKICAtIGtleTogY29udGFpbmVyTmV0d29ya0ludGVyZmFjZUZpbGVPd25lcnNoaXAKICAgIHRpdGxlOiBDb250YWluZXIgTmV0d29yayBJbnRlcmZhY2UgZmlsZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiBtYXN0ZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVVOiVHIC8qL2NuaS8qCiAgLSBrZXk6IGV0Y2REYXRhRGlyZWN0b3J5UGVybWlzc2lvbnMKICAgIHRpdGxlOiBFdGNkIGRhdGEgZGlyZWN0b3J5IHBlcm1pc3Npb25zCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlYSAkZXRjZC5kYXRhZGlycwogIC0ga2V5OiBldGNkRGF0YURpcmVjdG9yeU93bmVyc2hpcAogICAgdGl0bGU6IEV0Y2QgZGF0YSBkaXJlY3RvcnkgT3duZXJzaGlwCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlVTolRyAkZXRjZC5kYXRhZGlycwogIC0ga2V5OiBhZG1pbkNvbmZGaWxlUGVybWlzc2lvbnMKICAgIHRpdGxlOiBhZG1pbi5jb25mIGZpbGUgcGVybWlzc2lvbnMKICAgIG5vZGVUeXBlOiBtYXN0ZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVhIC9ldGMva3ViZXJuZXRlcy9hZG1pbi5jb25mCiAgLSBrZXk6IGFkbWluQ29uZkZpbGVPd25lcnNoaXAKICAgIHRpdGxlOiBhZG1pbi5jb25mIGZpbGUgb3duZXJzaGlwCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlVTolRyAvZXRjL2t1YmVybmV0ZXMvYWRtaW4uY29uZgogIC0ga2V5OiBzY2hlZHVsZXJDb25mRmlsZVBlcm1pc3Npb25zCiAgICB0aXRsZTogc2NoZWR1bGVyLmNvbmYgZmlsZSBwZXJtaXNzaW9ucwogICAgbm9kZVR5cGU6IG1hc3RlcgogICAgYXVkaXQ6IHN0YXQgLWMgJWEgJHNjaGVkdWxlci5rdWJlY29uZmlnCiAgLSBrZXk6IHNjaGVkdWxlckNvbmZGaWxlT3duZXJzaGlwCiAgICB0aXRsZTogc2NoZWR1bGVyLmNvbmYgZmlsZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiBtYXN0ZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVVOiVHICRzY2hlZHVsZXIua3ViZWNvbmZpZwogIC0ga2V5OiBjb250cm9sbGVyTWFuYWdlckNvbmZGaWxlUGVybWlzc2lvbnMKICAgIHRpdGxlOiBjb250cm9sbGVyLW1hbmFnZXIuY29uZiBmaWxlIHBlcm1pc3Npb25zCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlYSAkY29udHJvbGxlcm1hbmFnZXIua3ViZWNvbmZpZwogIC0ga2V5OiBjb250cm9sbGVyTWFuYWdlckNvbmZGaWxlT3duZXJzaGlwCiAgICB0aXRsZTogY29udHJvbGxlci1tYW5hZ2VyLmNvbmYgZmlsZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiBtYXN0ZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVVOiVHICRjb250cm9sbGVybWFuYWdlci5rdWJlY29uZmlnCiAgLSBrZXk6IGt1YmVQS0lEaXJlY3RvcnlGaWxlT3duZXJzaGlwCiAgICB0aXRsZTogS3ViZXJuZXRlcyBQS0kgZGlyZWN0b3J5IGFuZCBmaWxlIG93bmVyc2hpcAogICAgbm9kZVR5cGU6IG1hc3RlcgogICAgYXVkaXQ6IHN0YXQgLWMgJVU6JUcgJChscyAtUiAka3ViZWxldC5jYWZpbGUgfCBhd2sKICAgICAgJy86JC8mJmZ7cz0kMDtmPTB9LzokLyYmIWZ7c3ViKC86JC8sIiIpO3M9JDA7Zj0xO25leHR9TkYmJmZ7cHJpbnQgcyIvIiQwCiAgICAgIH0nKQogIC0ga2V5OiBrdWJlcm5ldGVzUEtJQ2VydGlmaWNhdGVGaWxlUGVybWlzc2lvbnMKICAgIHRpdGxlOiBLdWJlcm5ldGVzIFBLSSBjZXJ0aWZpY2F0ZSBmaWxlIHBlcm1pc3Npb25zCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlYSAkKGxzIC1hUiAka3ViZWxldC5jYWZpbGUgfAogICAgICBhd2snLzokLyYmZntzPSQwO2Y9MH0vOiQvJiYhZntzdWIoLzokLywiIik7cz0kMDtmPTE7bmV4dH1ORiYmZntwcmludAogICAgICBzIi8iJDB9JyB8IGdyZXAgXC5jcnQkKQogIC0ga2V5OiBrdWJlUEtJS2V5RmlsZVBlcm1pc3Npb25zCiAgICB0aXRsZTogS3ViZXJuZXRlcyBQS0kgY2VydGlmaWNhdGUgZmlsZSBwZXJtaXNzaW9ucwogICAgbm9kZVR5cGU6IG1hc3RlcgogICAgYXVkaXQ6IHN0YXQgLWMgJWEgJChscyAtYVIgJGt1YmVsZXQuY2FmaWxlIHwgYXdrCiAgICAgICcvOiQvJiZme3M9JDA7Zj0wfS86JC8mJiFme3N1YigvOiQvLCIiKTtzPSQwO2Y9MTtuZXh0fU5GJiZme3ByaW50IHMiLyIkMH0nCiAgICAgIHwgZ3JlcCBcLmtleSQpCiAgLSBrZXk6IGt1YmVsZXRTZXJ2aWNlRmlsZVBlcm1pc3Npb25zCiAgICB0aXRsZTogS3ViZWxldCBzZXJ2aWNlIGZpbGUgcGVybWlzc2lvbnMKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVhICRrdWJlbGV0LnN2YwogIC0ga2V5OiBrdWJlbGV0U2VydmljZUZpbGVPd25lcnNoaXAKICAgIHRpdGxlOiBLdWJlbGV0IHNlcnZpY2UgZmlsZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVVOiVHICRrdWJlbGV0LnN2YwogIC0ga2V5OiBrdWJlY29uZmlnRmlsZUV4aXN0c1Blcm1pc3Npb25zCiAgICB0aXRsZTogS3ViZWNvbmZpZyBmaWxlIGV4aXN0cyBlbnN1cmUgcGVybWlzc2lvbnMKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBvdXRwdXQ9YHN0YXQgLWMgJWEgJChwcyAtZWYgfCBncmVwICRwcm94eS5iaW5zIHxncmVwICdrdWJlY29uZmlnJyB8IGdyZXAKICAgICAgLW8gJ2t1YmVjb25maWc9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScpCiAgICAgIDI+L2Rldi9udWxsYCB8fCBlY2hvICRvdXRwdXQKICAtIGtleToga3ViZWNvbmZpZ0ZpbGVFeGlzdHNPd25lcnNoaXAKICAgIHRpdGxlOiBLdWJlY29uZmlnIGZpbGUgZXhpc3RzIGVuc3VyZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBvdXRwdXQ9YHN0YXQgLWMgJVU6JUcgJChwcyAtZWYgfCBncmVwICRwcm94eS5iaW5zIHxncmVwICdrdWJlY29uZmlnJyB8CiAgICAgIGdyZXAgLW8gJ2t1YmVjb25maWc9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScpCiAgICAgIDI+L2Rldi9udWxsYCB8fCBlY2hvICRvdXRwdXQKICAtIGtleToga3ViZWxldENvbmZGaWxlUGVybWlzc2lvbnMKICAgIHRpdGxlOiBrdWJlbGV0LmNvbmYgZmlsZSBwZXJtaXNzaW9ucwogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHN0YXQgLWMgJWEgJGt1YmVsZXQua3ViZWNvbmZpZwogIC0ga2V5OiBrdWJlbGV0Q29uZkZpbGVPd25lcnNoaXAKICAgIHRpdGxlOiBrdWJlbGV0LmNvbmYgZmlsZSBvd25lcnNoaXAKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBzdGF0IC1jICVVOiVHICRrdWJlbGV0Lmt1YmVjb25maWcKICAtIGtleTogY2VydGlmaWNhdGVBdXRob3JpdGllc0ZpbGVQZXJtaXNzaW9ucwogICAgdGl0bGU6IENsaWVudCBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyBmaWxlIHBlcm1pc3Npb25zCiAgICBub2RlVHlwZTogd29ya2VyCiAgICBhdWRpdDogc3RhdCAtYyAlYSAkKHBzIC1lZiB8IGdyZXAga3ViZWxldCB8Z3JlcCAnY2xpZW50LWNhLWZpbGUnIHwgZ3JlcCAtbwogICAgICAnY2xpZW50LWNhLWZpbGU9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScpIDI+CiAgICAgIC9kZXYvbnVsbAogIC0ga2V5OiBjZXJ0aWZpY2F0ZUF1dGhvcml0aWVzRmlsZU93bmVyc2hpcAogICAgdGl0bGU6IENsaWVudCBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyBmaWxlIG93bmVyc2hpcAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHN0YXQgLWMgJVU6JUcgJChwcyAtZWYgfCBncmVwICRrdWJlbGV0LmJpbnMgfGdyZXAgJ2NsaWVudC1jYS1maWxlJyB8IGdyZXAKICAgICAgLW8gJ2NsaWVudC1jYS1maWxlPVteIl1cUyonIHwgYXdrIC1GICI9IiAne3ByaW50ICQyfScgfGF3ayAnRk5SIDw9IDEnKSAyPgogICAgICAvZGV2L251bGwKICAtIGtleToga3ViZWxldENvbmZpZ1lhbWxDb25maWd1cmF0aW9uRmlsZVBlcm1pc3Npb24KICAgIHRpdGxlOiBrdWJlbGV0IGNvbmZpZy55YW1sIGNvbmZpZ3VyYXRpb24gZmlsZSBwZXJtaXNzaW9ucwogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHN0YXQgLWMgJWEgJGt1YmVsZXQuY29uZnMKICAtIGtleToga3ViZWxldENvbmZpZ1lhbWxDb25maWd1cmF0aW9uRmlsZU93bmVyc2hpcAogICAgdGl0bGU6IGt1YmVsZXQgY29uZmlnLnlhbWwgY29uZmlndXJhdGlvbiBmaWxlIG93bmVyc2hpcAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHN0YXQgLWMgJVU6JUcgJGt1YmVsZXQuY29uZnMKICAtIGtleToga3ViZWxldEFub255bW91c0F1dGhBcmd1bWVudFNldAogICAgdGl0bGU6IGt1YmVsZXQgLS1hbm9ueW1vdXMtYXV0aCBhcmd1bWVudCBpcyBzZXQKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBwcyAtZWYgfCBncmVwICRrdWJlbGV0LmJpbnMgfGdyZXAgJyAtLWFub255bW91cy1hdXRoJyB8IGdyZXAgLW8gJwogICAgICAtLWFub255bW91cy1hdXRoPVteIl1cUyonIHwgYXdrIC1GICI9IiAne3ByaW50ICQyfScgfGF3ayAnRk5SIDw9IDEnCiAgLSBrZXk6IGt1YmVsZXRBdXRob3JpemF0aW9uTW9kZUFyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCAtLWF1dGhvcml6YXRpb24tbW9kZSBhcmd1bWVudCBpcyBzZXQKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBwcyAtZWYgfCBncmVwICRrdWJlbGV0LmJpbnMgfGdyZXAgJyAtLWF1dGhvcml6YXRpb24tbW9kZScgfCBncmVwIC1vICcKICAgICAgLS1hdXRob3JpemF0aW9uLW1vZGU9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScKICAtIGtleToga3ViZWxldENsaWVudENhRmlsZUFyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCAtLWNsaWVudC1jYS1maWxlIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0tY2xpZW50LWNhLWZpbGUnIHwgZ3JlcCAtbyAnCiAgICAgIC0tY2xpZW50LWNhLWZpbGU9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScKICAtIGtleToga3ViZWxldFJlYWRPbmx5UG9ydEFyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCAtLXJlYWQtb25seS1wb3J0IGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0tcmVhZC1vbmx5LXBvcnQnIHwgZ3JlcCAtbyAnCiAgICAgIC0tcmVhZC1vbmx5LXBvcnQ9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScKICAtIGtleToga3ViZWxldFN0cmVhbWluZ0Nvbm5lY3Rpb25JZGxlVGltZW91dEFyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCAtLXN0cmVhbWluZy1jb25uZWN0aW9uLWlkbGUtdGltZW91dCBhcmd1bWVudCBpcyBzZXQKICAgIG5vZGVUeXBlOiB3b3JrZXIKICAgIGF1ZGl0OiBwcyAtZWYgfCBncmVwICRrdWJlbGV0LmJpbnMgfGdyZXAgJyAtLXN0cmVhbWluZ0Nvbm5lY3Rpb25JZGxlVGltZW91dCcgfAogICAgICBncmVwIC1vICcgLS1zdHJlYW1pbmdDb25uZWN0aW9uSWRsZVRpbWVvdXQ9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQKICAgICAgJDJ9JyB8YXdrICdGTlIgPD0gMScKICAtIGtleToga3ViZWxldFByb3RlY3RLZXJuZWxEZWZhdWx0c0FyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCAtLXByb3RlY3Qta2VybmVsLWRlZmF1bHRzIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0tcHJvdGVjdC1rZXJuZWwtZGVmYXVsdHMnIHwgZ3JlcCAtbwogICAgICAnIC0tcHJvdGVjdC1rZXJuZWwtZGVmYXVsdHM9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIKICAgICAgPD0gMScKICAtIGtleToga3ViZWxldE1ha2VJcHRhYmxlc1V0aWxDaGFpbnNBcmd1bWVudFNldAogICAgdGl0bGU6IGt1YmVsZXQgLS1tYWtlLWlwdGFibGVzLXV0aWwtY2hhaW5zIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0tbWFrZS1pcHRhYmxlcy11dGlsLWNoYWlucycgfCBncmVwCiAgICAgIC1vICcgLS1tYWtlLWlwdGFibGVzLXV0aWwtY2hhaW5zPVteIl1cUyonIHwgYXdrIC1GICI9IiAne3ByaW50ICQyfScgfGF3awogICAgICAnRk5SIDw9IDEnCiAgLSBrZXk6IGt1YmVsZXRIb3N0bmFtZU92ZXJyaWRlQXJndW1lbnRTZXQKICAgIHRpdGxlOiBrdWJlbGV0IGhvc3RuYW1lLW92ZXJyaWRlIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0taG9zdG5hbWUtb3ZlcnJpZGUnIHwgZ3JlcCAtbyAnCiAgICAgIC0taG9zdG5hbWUtb3ZlcnJpZGU9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScKICAtIGtleToga3ViZWxldEV2ZW50UXBzQXJndW1lbnRTZXQKICAgIHRpdGxlOiBrdWJlbGV0IC0tZXZlbnQtcXBzIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0tZXZlbnQtcXBzJyB8IGdyZXAgLW8gJwogICAgICAtLWV2ZW50LXFwcz1bXiJdXFMqJyB8IGF3ayAtRiAiPSIgJ3twcmludCAkMn0nIHxhd2sgJ0ZOUiA8PSAxJwogIC0ga2V5OiBrdWJlbGV0VGxzQ2VydEZpbGVUbHNBcmd1bWVudFNldAogICAgdGl0bGU6IGt1YmVsZXQgLS10bHMtY2VydC1maWxlIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0tdGxzLWNlcnQtZmlsZScgfCBncmVwIC1vICcKICAgICAgLS10bHMtY2VydC1maWxlPVteIl1cUyonIHwgYXdrIC1GICI9IiAne3ByaW50ICQyfScgfGF3ayAnRk5SIDw9IDEnCiAgLSBrZXk6IGt1YmVsZXRUbHNQcml2YXRlS2V5RmlsZUFyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCAtLXRscy1wcml2YXRlLWtleS1maWxlIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnIC0tdGxzLXByaXZhdGUta2V5LWZpbGUnIHwgZ3JlcCAtbyAnCiAgICAgIC0tdGxzLXByaXZhdGUta2V5LWZpbGU9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScKICAtIGtleToga3ViZWxldFJvdGF0ZUNlcnRpZmljYXRlc0FyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCAtLXJvdGF0ZS1jZXJ0aWZpY2F0ZXMgYXJndW1lbnQgaXMgc2V0CiAgICBub2RlVHlwZTogd29ya2VyCiAgICBhdWRpdDogcHMgLWVmIHwgZ3JlcCAka3ViZWxldC5iaW5zIHxncmVwICcgLS1yb3RhdGUtY2VydGlmaWNhdGVzJyB8IGdyZXAgLW8gJwogICAgICAtLXJvdGF0ZS1jZXJ0aWZpY2F0ZXM9W14iXVxTKicgfCBhd2sgLUYgIj0iICd7cHJpbnQgJDJ9JyB8YXdrICdGTlIgPD0gMScKICAtIGtleToga3ViZWxldFJvdGF0ZUt1YmVsZXRTZXJ2ZXJDZXJ0aWZpY2F0ZUFyZ3VtZW50U2V0CiAgICB0aXRsZToga3ViZWxldCBSb3RhdGVLdWJlbGV0U2VydmVyQ2VydGlmaWNhdGUgYXJndW1lbnQgaXMgc2V0CiAgICBub2RlVHlwZTogd29ya2VyCiAgICBhdWRpdDogcHMgLWVmIHwgZ3JlcCAka3ViZWxldC5iaW5zIHxncmVwICdSb3RhdGVLdWJlbGV0U2VydmVyQ2VydGlmaWNhdGUnIHwgZ3JlcAogICAgICAtbyAnUm90YXRlS3ViZWxldFNlcnZlckNlcnRpZmljYXRlPVteIl1cUyonIHwgYXdrIC1GICI9IiAne3ByaW50ICQyfScgfGF3awogICAgICAnRk5SIDw9IDEnCiAgLSBrZXk6IGt1YmVsZXRSb3RhdGVLdWJlbGV0U2VydmVyQ2VydGlmaWNhdGVBcmd1bWVudFNldAogICAgdGl0bGU6IGt1YmVsZXQgUm90YXRlS3ViZWxldFNlcnZlckNlcnRpZmljYXRlIGFyZ3VtZW50IGlzIHNldAogICAgbm9kZVR5cGU6IHdvcmtlcgogICAgYXVkaXQ6IHBzIC1lZiB8IGdyZXAgJGt1YmVsZXQuYmlucyB8Z3JlcCAnUm90YXRlS3ViZWxldFNlcnZlckNlcnRpZmljYXRlJyB8IGdyZXAKICAgICAgLW8gJ1JvdGF0ZUt1YmVsZXRTZXJ2ZXJDZXJ0aWZpY2F0ZT1bXiJdXFMqJyB8IGF3ayAtRiAiPSIgJ3twcmludCAkMn0nIHxhd2sKICAgICAgJ0ZOUiA8PSAxJwogIC0ga2V5OiBrdWJlbGV0T25seVVzZVN0cm9uZ0NyeXB0b2dyYXBoaWMKICAgIHRpdGxlOiBLdWJlbGV0IG9ubHkgbWFrZXMgdXNlIG9mIFN0cm9uZyBDcnlwdG9ncmFwaGljCiAgICBub2RlVHlwZTogd29ya2VyCiAgICBhdWRpdDogcHMgLWVmIHwgZ3JlcCAka3ViZWxldC5iaW5zIHxncmVwICdUTFNDaXBoZXJTdWl0ZXMnIHwgZ3JlcCAtbwogICAgICAnVExTQ2lwaGVyU3VpdGVzPVteIl1cUyonIHwgYXdrIC1GICI9IiAne3ByaW50ICQyfScgfGF3ayAnRk5SIDw9IDEnCgo= resources: limits: cpu: 100m diff --git a/pkg/collector/collect.go b/pkg/collector/collect.go index 83efb57..c052f08 100644 --- a/pkg/collector/collect.go +++ b/pkg/collector/collect.go @@ -17,6 +17,7 @@ import ( "github.com/Masterminds/semver" "github.com/spf13/cobra" + "gopkg.in/yaml.v3" ) const ( @@ -44,7 +45,9 @@ func CollectData(cmd *cobra.Command) error { if err != nil { return err } - lp, err := LoadConfigParams() + nodeFileconfig := cmd.Flag("node-config").Value.String() + specVersionMapping := cmd.Flag("spec-version-mapping").Value.String() + lp, mp, err := LoadConfigParams(nodeFileconfig, specVersionMapping) if err != nil { return err } @@ -53,59 +56,89 @@ func CollectData(cmd *cobra.Command) error { if err != nil { return err } - sv, err := specID(cmd, cluster, lp) + specName := cmd.Flag("spec-name").Value.String() + specVersion := cmd.Flag("spec-version").Value.String() + clusterVersion := cmd.Flag("cluster-version").Value.String() + sv, err := specID(specName, specVersion, clusterVersion, cluster, mp) if err != nil { return err } - for _, infoCollector := range infoCollectorMap { - nodeInfo := make(map[string]*Info) - if fmt.Sprintf("%s-%s", infoCollector.Name, infoCollector.Version) != sv { - continue - } - for _, ci := range infoCollector.Collectors { - if ci.NodeType != nodeType && nodeType != MasterNode { - continue - } - output, err := shellCmd.Execute(ci.Audit) + nodeCommands := cmd.Flag("node-commands").Value.String() + commands, err := GetNodesCommands(nodeCommands, infoCollectorMap, nodeType, sv) + if len(commands) == 0 { + return fmt.Errorf("spec not found") + } + nodeInfo, err := ExecuteCommands(shellCmd, commands) + if err != nil { + return err + } + nodeName := cmd.Flag("node").Value.String() + kubeletConfig := cmd.Flag("kubelet-config").Value.String() + if nodeName != "" || kubeletConfig != "" { + nodeConfig, err := loadNodeConfig(ctx, *cluster, nodeName, kubeletConfig) + if err == nil { + kubeletConfigMapping := cmd.Flag("kubelet-config-mapping").Value.String() + mapping, err := LoadKubeletMapping(kubeletConfigMapping) if err != nil { return err } - values := StringToArray(output, ",") - nodeInfo[ci.Key] = &Info{Values: values} + configVal := getValuesFromkubeletConfig(nodeConfig, mapping) + mergeConfigValues(nodeInfo, configVal) } - nodeName := cmd.Flag("node").Value.String() - kubeletConfig := cmd.Flag("kubelet-config").Value.String() - if nodeName != "" || kubeletConfig != "" { - nodeConfig, err := loadNodeConfig(ctx, *cluster, nodeName, kubeletConfig) - if err == nil { - mapping, err := LoadKubeletMapping() - if err != nil { - return err - } - configVal := getValuesFromkubeletConfig(nodeConfig, mapping) - mergeConfigValues(nodeInfo, configVal) - } + } + nodeData := Node{ + APIVersion: Version, + Kind: Kind, + Type: nodeType, + Metadata: map[string]string{"creationTimestamp": time.Now().Format(time.RFC3339)}, + Info: nodeInfo, + } + outputFormat := cmd.Flag("output").Value.String() + err = printOutput(nodeData, outputFormat, os.Stdout) + if err != nil { + return err + } + return nil +} + +func GetNodesCommands(nodeCommands string, infoCollectorMap map[string]*SpecInfo, nodeType string, sv string) ([]Command, error) { + var commands []Command + var specInfo SpecInfo + if nodeCommands != "" { + base64Commands, err := base64.StdEncoding.DecodeString(nodeCommands) + if err != nil { + return nil, err } - nodeData := Node{ - APIVersion: Version, - Kind: Kind, - Type: nodeType, - Metadata: map[string]string{"creationTimestamp": time.Now().Format(time.RFC3339)}, - Info: nodeInfo, + err = yaml.Unmarshal(base64Commands, &specInfo) + if err != nil { + return nil, err + } + commands = specInfo.Commands + } else { + for _, infoCollector := range infoCollectorMap { + if fmt.Sprintf("%s-%s", infoCollector.Name, infoCollector.Version) == sv { + commands = infoCollector.Commands + break + } } - outputFormat := cmd.Flag("output").Value.String() - err = printOutput(nodeData, outputFormat, os.Stdout) + } + return commands, nil +} + +func ExecuteCommands(shellCmd Shell, ci []Command) (map[string]*Info, error) { + nodeInfo := make(map[string]*Info) + for _, c := range ci { + output, err := shellCmd.Execute(c.Audit) if err != nil { - return err + return nil, err } + values := StringToArray(output, ",") + nodeInfo[c.Key] = &Info{Values: values} } - return nil + return nodeInfo, nil } -func specID(cmd *cobra.Command, cluster *Cluster, lp *Config) (string, error) { - specName := cmd.Flag("spec-name").Value.String() - specVersion := cmd.Flag("spec-version").Value.String() - clusterVersion := cmd.Flag("cluster-version").Value.String() +func specID(specName, specVersion, clusterVersion string, cluster *Cluster, mp *Mapper) (string, error) { switch { case specName != "" && specVersion != "": return fmt.Sprintf("%s-%s", specName, specVersion), nil @@ -115,13 +148,13 @@ func specID(cmd *cobra.Command, cluster *Cluster, lp *Config) (string, error) { Name: strings.TrimSuffix(specName, "-cis"), Version: majorVersion(clusterVersion), }, - lp.VersionMapping), nil + mp.VersionMapping), nil default: // auto detect spec by platform type (k8s, aks, eks and etc) and version p, err := cluster.Platfrom() if err != nil { return "", err } - return specByPlatfromVersion(p, lp.VersionMapping), nil + return specByPlatfromVersion(p, mp.VersionMapping), nil } } diff --git a/pkg/collector/collect_test.go b/pkg/collector/collect_test.go index c5209d6..8fdf28d 100644 --- a/pkg/collector/collect_test.go +++ b/pkg/collector/collect_test.go @@ -3,6 +3,7 @@ package collector import ( "encoding/json" "os" + "reflect" "testing" "github.com/stretchr/testify/assert" @@ -57,7 +58,7 @@ func TestParseNodeConfig(t *testing.T) { nodeConfig := make(map[string]interface{}) err = json.Unmarshal(data, &nodeConfig) assert.NoError(t, err) - mapping, err := LoadKubeletMapping() + mapping, err := LoadKubeletMapping("") assert.NoError(t, err) m := getValuesFromkubeletConfig(nodeConfig, mapping) for k, v := range m { @@ -118,10 +119,10 @@ func TestSpecByVersionName(t *testing.T) { t.Run(tt.name, func(t *testing.T) { f, err := os.ReadFile(tt.versionMappingfile) assert.NoError(t, err) - var config Config - err = yaml.Unmarshal(f, &config) + var mapper Mapper + err = yaml.Unmarshal(f, &mapper) assert.NoError(t, err) - gotSpec := specByPlatfromVersion(tt.platfrom, config.VersionMapping) + gotSpec := specByPlatfromVersion(tt.platfrom, mapper.VersionMapping) assert.Equal(t, gotSpec, tt.wantSpec) }) } @@ -172,3 +173,32 @@ func TestPlatfromVersion(t *testing.T) { }) } } + +func TestNodeCommamnd(t *testing.T) { + tests := []struct { + name string + commands string + want []Command + }{ + { + name: "k8s version", + commands: "LS0tCmNvbW1hbmRzOgogIC0ga2V5OiBrdWJlQVBJU2VydmVyU3BlY0ZpbGVQZXJtaXNzaW9uCiAgICB0aXRsZTogQVBJIHNlcnZlciBwb2Qgc3BlY2lmaWNhdGlvbiBmaWxlIHBlcm1pc3Npb25zCiAgICBub2RlVHlwZTogbWFzdGVyCiAgICBhdWRpdDogc3RhdCAtYyAlYSAkYXBpc2VydmVyLmNvbmZzCgo=", + want: []Command{ + { + Key: "kubeAPIServerSpecFilePermission", + Title: "API server pod specification file permissions", + NodeType: "master", + Audit: "stat -c %a $apiserver.confs", + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := GetNodesCommands(tt.commands, nil, "worker", "k8s-cis-1.23.2") + assert.NoError(t, err) + assert.True(t, reflect.DeepEqual(got, tt.want)) + }) + } +} diff --git a/pkg/collector/config/specs/k8s-cis-1.23.0.yaml b/pkg/collector/config/specs/k8s-cis-1.23.0.yaml index a51b98c..c6fdb6f 100644 --- a/pkg/collector/config/specs/k8s-cis-1.23.0.yaml +++ b/pkg/collector/config/specs/k8s-cis-1.23.0.yaml @@ -2,7 +2,7 @@ version: "1.23.0" name: k8s-cis title: Node Specification for info collector -collectors: +commands: - key: kubeAPIServerSpecFilePermission title: API server pod specification file permissions nodeType: master diff --git a/pkg/collector/info.go b/pkg/collector/info.go index 9dfccfb..e564fbb 100644 --- a/pkg/collector/info.go +++ b/pkg/collector/info.go @@ -2,6 +2,7 @@ package collector import ( "embed" + "encoding/base64" "fmt" "strings" @@ -49,20 +50,43 @@ func LoadConfig(configMap map[string]string) (map[string]*SpecInfo, error) { } // LoadConfigParams load audit params data -func LoadConfigParams() (*Config, error) { - fullPath := fmt.Sprintf("%s/%s", configFolder, "config.yaml") - fContent, err := params.ReadFile(fullPath) - if err != nil { - return nil, err +func LoadConfigParams(nodeFileconfig, specVersionMapping string) (*Config, *Mapper, error) { + var decodedNodeFileconfig, decodedspecVersionMapping []byte + var err error + if nodeFileconfig != "" && specVersionMapping != "" { + decodedNodeFileconfig, err = base64.StdEncoding.DecodeString(nodeFileconfig) + if err != nil { + return nil, nil, err + } + decodedspecVersionMapping, err = base64.StdEncoding.DecodeString(specVersionMapping) + if err != nil { + return nil, nil, err + } + } else { + fullPath := fmt.Sprintf("%s/%s", configFolder, "config.yaml") + decodedNodeFileconfig, err = params.ReadFile(fullPath) + if err != nil { + return nil, nil, err + } + decodedspecVersionMapping = decodedNodeFileconfig } - return getNodeParams(string(fContent)) + return getNodeParams(string(decodedNodeFileconfig), string(decodedspecVersionMapping)) } -func LoadKubeletMapping() (map[string]string, error) { - fullPath := fmt.Sprintf("%s/%s", configFolder, "kubeletconfig-mapping.yaml") - fContent, err := params.ReadFile(fullPath) - if err != nil { - return nil, err +func LoadKubeletMapping(kubletConfigMapping string) (map[string]string, error) { + var fContent []byte + var err error + if len(kubletConfigMapping) > 0 { + fContent, err = base64.StdEncoding.DecodeString(kubletConfigMapping) + if err != nil { + return nil, err + } + } else { + fullPath := fmt.Sprintf("%s/%s", configFolder, "kubeletconfig-mapping.yaml") + fContent, err = params.ReadFile(fullPath) + if err != nil { + return nil, err + } } mapping := make(map[string]string) err = yaml.Unmarshal(fContent, &mapping) @@ -74,14 +98,14 @@ func LoadKubeletMapping() (map[string]string, error) { // SpecInfo spec info with require comand to collect type SpecInfo struct { - Version string `yaml:"version"` - Name string `yaml:"name"` - Title string `yaml:"title"` - Collectors []Collector `yaml:"collectors"` + Version string `yaml:"version"` + Name string `yaml:"name"` + Title string `yaml:"title"` + Commands []Command `yaml:"commands"` } // Collector details of info to collect -type Collector struct { +type Command struct { Key string `yaml:"key"` Title string `yaml:"title"` Audit string `yaml:"audit"` @@ -97,13 +121,18 @@ func getSpecInfo(info string) (*SpecInfo, error) { return &specInfo, nil } -func getNodeParams(info string) (*Config, error) { +func getNodeParams(config string, mapping string) (*Config, *Mapper, error) { var np Config - err := yaml.Unmarshal([]byte(info), &np) + err := yaml.Unmarshal([]byte(config), &np) if err != nil { - return nil, err + return nil, nil, err + } + var mp Mapper + err = yaml.Unmarshal([]byte(mapping), &mp) + if err != nil { + return nil, nil, err } - return &np, nil + return &np, &mp, nil } // Node output node data with info results @@ -121,10 +150,11 @@ type Info struct { } type Config struct { - Node NodeParams `yaml:"node"` + Node NodeParams `yaml:"node"` +} +type Mapper struct { VersionMapping map[string][]SpecVersion `yaml:"version_mapping"` } - type SpecVersion struct { Name string Version string `yaml:"cluster_version"` diff --git a/pkg/command/root.go b/pkg/command/root.go index 1abb585..0d74430 100644 --- a/pkg/command/root.go +++ b/pkg/command/root.go @@ -13,7 +13,11 @@ func init() { rootCmd.PersistentFlags().StringP("spec-version", "v", "", "spec version. example 1.23.0") rootCmd.PersistentFlags().StringP("cluster-version", "c", "", "cluser version. example 1.23.0") rootCmd.PersistentFlags().StringP("node", "n", "", "node name") - rootCmd.PersistentFlags().StringP("kubelet-config", "", "", "kubelet config via api /api/v1/nodes/<>/proxy/configz encoded in base64") + rootCmd.PersistentFlags().StringP("kubelet-config", "", "", "kubelet config via api /api/v1/nodes/<>/proxy/configz encoded to base64") + rootCmd.PersistentFlags().StringP("spec-version-mapping", "", "", "k8s spec-version mapping encoded to base64") + rootCmd.PersistentFlags().StringP("node-config", "", "", "k8s node file config encoded to base64") + rootCmd.PersistentFlags().StringP("node-commands", "", "", "k8s node commands to be executed encoded to base64") + rootCmd.PersistentFlags().StringP("kubelet-config-mapping", "", "", "kubelet config api mapping encoded to base64") } var rootCmd = &cobra.Command{