From fcbc9c1fbe46914bfa74c3135771914654229b68 Mon Sep 17 00:00:00 2001 From: borod108 Date: Mon, 13 Jan 2025 06:37:54 +0200 Subject: [PATCH] smartstate poc using a container in the agent the container exposes a service that recieves the cluster credentials, runs the smartstate and will return the results as a bulk when done. Signed-off-by: borod108 --- Makefile | 4 +- api/v1alpha1/agent/spec.gen.go | 44 ++-- api/v1alpha1/openapi.yaml | 10 +- api/v1alpha1/spec.gen.go | 50 ++--- api/v1alpha1/types.gen.go | 10 +- data/ignition.template | 21 ++ go.sum | 141 +++++++++++++ internal/agent/agent.go | 34 ++-- internal/agent/service/collector.go | 6 + internal/agent/service/smartstate_client.go | 117 +++++++++++ internal/image/ova.go | 2 +- smart-state/Dockerfile | 48 +++++ smart-state/Gemfile | 10 + smart-state/Gemfile.lock | 214 ++++++++++++++++++++ smart-state/service.rb | 179 ++++++++++++++++ 15 files changed, 824 insertions(+), 66 deletions(-) create mode 100644 internal/agent/service/smartstate_client.go create mode 100644 smart-state/Dockerfile create mode 100644 smart-state/Gemfile create mode 100644 smart-state/Gemfile.lock create mode 100644 smart-state/service.rb diff --git a/Makefile b/Makefile index 27e116c..0167534 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,8 @@ GO_FILES := $(shell find ./ -name ".go" -not -path "./bin" -not -path "./packagi GO_CACHE := -v $${HOME}/go/migration-planner-go-cache:/opt/app-root/src/go:Z -v $${HOME}/go/migration-planner-go-cache/.cache:/opt/app-root/src/.cache:Z TIMEOUT ?= 30m VERBOSE ?= false -MIGRATION_PLANNER_AGENT_IMAGE ?= quay.io/kubev2v/migration-planner-agent -MIGRATION_PLANNER_API_IMAGE ?= quay.io/kubev2v/migration-planner-api +MIGRATION_PLANNER_AGENT_IMAGE ?= quay.io/bodnopoz/migration-planner-agent +MIGRATION_PLANNER_API_IMAGE ?= quay.io/bodnopoz/migration-planner-api MIGRATION_PLANNER_API_IMAGE_PULL_POLICY ?= Always MIGRATION_PLANNER_UI_IMAGE ?= quay.io/kubev2v/migration-planner-ui MIGRATION_PLANNER_NAMESPACE ?= assisted-migration diff --git a/api/v1alpha1/agent/spec.gen.go b/api/v1alpha1/agent/spec.gen.go index 0bb67f3..088106d 100644 --- a/api/v1alpha1/agent/spec.gen.go +++ b/api/v1alpha1/agent/spec.gen.go @@ -19,28 +19,28 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "H4sIAAAAAAAC/+xYzXLbNhB+FQ7aIyPKjnvRzVbzo2mTeuxJcsjoABErETEJoMDSGtejd+8AICRKhCjG", - "tTPtTG8SsNj9sD/fLvhIclkpKUCgIZNHYvICKup+Xq5A4C1SrM0nxSiCXVRaKtDIwYnkGhgI5LT8pEu7", - "gA8KyIQY1FysyCYlnEWXjVPbszUTSxndvgdtuBSRvU1KNPxZcw2MTL4GE3sK0wPEDt9O5zwNOuXiG+Ro", - "7b3RWuruzSswhq6cSxiYXHOFDpWXT8J2egJkkJtvUjITS027lhhFalBq/48jVKYrtNQAU6pozvHh3VXL", - "OVwgrEDbm6BEWp4UciunfOt2uxrTQxwxhzYLVGv6YP8X0uC1XIO2qeZvQxnj1p20vN675TG4Le1Wm7kG", - "PS1rg6D3XHb0+BaLAFxLfdfnaXZv1hzzIpqcglYQ3QhuBVFXTXIKRrVNPsat2KJGcP+C+pTUwtRKSW03", - "5mmkEkoqZmxwsBy2IQHxUfX+Mz2p9N66OrZ/aH8nfKi8G69uPrSikraLIXaVmbgHgVI/dOPGQ3X9rGFJ", - "JuSnbEd8WcN6mS9B69scRJM+ffKfp17MnvDJ0iv9wXScEwx5BWkDM3a3D3ylqa2KmTF1LxlQY8CYCgRG", - "czGX9d5OK64lXUB5OqO8WNo2FNQOSbBbWes80k3oKnSh7cX63OnVuC41Q6hilnINFIFduusupa4okolN", - "IniFvIrQc2hYW9m6dh2iK9bOtP6UCoJ9/FC7BvsdQA8i4kDubttWGIvIoetiKSRzbjW04C6kLIGKwV6K", - "YWwpPg6sf+hwaTJ7uTAdwt7upFvTMeiBC7rMM4Cj+RGdH27AOJdcaaB3TK5FV3/BDcqVplV8dvjOFlhx", - "8ZmWNcSlDYIaQPlbJc0JT9xxcrANoafLvJXaMx9dlDBU7gvH4gvVgouV6T/zUWK/+oOb7ZwdoEdxngR1", - "DEE8CyIkn6t6GobC/qbTTaGNmzrupqERPPG8nyGfcLgKrawdoz49h73PUmnbbTdAjRRPUSP/6cCpnm10", - "1bR6skdPVdGgEhpeP7EJj3RNpbssDdfbZk47BV0Y9l15JMCx3OmWzMYxv39AljwHYdy1ffcll4rmBSTn", - "o7Htk/bdSgpEZSZZtl6vR9Rtj6ReZc1Zk/0+m775ePvm1floPCqwKp3LOFpv7uay5LqkQoBOLq9nyavE", - "9YoEBFOSuztuX66kFgyWXABzGahAUMXJhLwejUdn1g8UC+f2jCqe3Z9lfjDKHjnbZLuXs6qx+/z0fT/x", - "UolcJliAh0KcqSb/GZkQ319br3xnWtMK/OD/9VD37Nc9bdyuWazhcTHxLX6XGahrSJtPCkPmhbk/DAav", - "JHMtO5cCmzmWKlXy3MHPvhn/BWCnuq9muh8yNhufwkZJG1+r4Hw87nrzj99shM7HZ8e2LvypZ4HpvzQ4", - "ZPumrihLbrxfvM2zl7f5SdAaC6n5Xz5LL8avX97oW6kXnDFwlHZx9gNc+04KsMZ++RFxnNn5UNAyuQV9", - "DzoJgilBann2q58vydwuhdr3ZD+s+DWokuaH1W8U5HzJgSVeV4cIbvyx9uw9gAqC9qDzP0MHkTfGZr+j", - "WaBH+OEZEcRS5H9WeWlWGV+8vMWPEt/KWrB/EbM0ZeqppQBaovuCuYIIjfjtJC8gv+uQxXt/dmj3bEFo", - "rM4dfuOAemrxM1hGNvPN3wEAAP//bPmVHo8YAAA=", + "H4sIAAAAAAAC/+xYzXLbNhB+FQ7aIyPKjnvRzXbzo2mTeuxJcsjosCJWImISQIGlNW5G794BIEqUCFGM", + "G2famd4kYLH7YffbH/Ary1WllURJlk2+MpsXWIH/eblESXcEVNsPmgOhW9RGaTQk0IvkBjlKElB+MKVb", + "oEeNbMIsGSGXbJ0ywaPL1qvt2ZrKhYpuP6CxQsnI3jplBv+shUHOJp8bE3sK0wPEHt9O5yxtdKr5F8zJ", + "2XtljDLdm1doLSy9Szja3AhNHlWQT5rt9ATIRm62TtlULgx0LXEgsKRM+CcIK9sVWhjEa9CQC3p8c9Vy", + "jpCESzTuJqQIypNCfuWUb/1uV2N6iCPm0M0CGAOP7n+hLN2oFRpHtXAb4Fw4d0J5s3fLY3Bb2p02e4Pm", + "uqwtodlz2dHjWywSaaXMfZ+n+YNdCcqLKDklVBjdaNyKsq425JQcjCMfF05sXhP6f436lNXS1lor4zZm", + "aSQTSpBTPjhYHtuQgISoBv/ZHiq9da6O7R/a3wkfKu/Gq8uHVlTSdjLErjKVDyhJmcdu3ESTXT8bXLAJ", + "+ynbFb5sU/WykIKuCFVgfO3DU0fudpIuJjnKDe36Dn28DmLuRCBZr/Q723FqYygoSDfXi/nknVgacNk0", + "tbbuLSJgLVpboaQoh3NV7+20+FDCHMvTTAxiadtQo3YIMe/2grK9RLxakKlxiE5VmzzS2WDZdMStnV4W", + "eDW+Y04Jq5il3CAQ8kvvwoUyFRCbOELjCxJVpFU0zXMrW9e+W3XF2qzvp3cj2Ferat/svwHoQZQ9yN1t", + "2wpjUT50XYyWKhdOQwvuXKkSQQ72UgxjS/FxYP0DkKfJ9PnCdAh7u5NuTcegN/WlWwUH9AtxROe7W7Te", + "JVcG4Z6rlezqL4QltTRQxeeYb2zHlZAfoawxLm0J9YD2s1WyORGaSLzguObU0/FeKxOqKcxLHCr3SVDx", + "CYwUcmn7z7xX1K/+4GY7ZzfQozhPgjqGIM6CSOPIdX3dDKj9jaxLobWfgO6vm+byxPNhnn3C4appj+0Y", + "9ek57KeulLbddotglXyKGvVPh1/93cZoA9WTPXoqiwal0PD8iU2brGsq3bG0ud6WOW0K+jDsu/JIgGPc", + "6abM2lf+8JgtRY7S+muH7ssuNeQFJuejseuT7g3NCiJtJ1m2Wq1G4LdHyiyzzVmb/T69fvX+7tWL89F4", + "VFBVepcJct7czXrJTQlSokkub6bJi8T3igQl10r4O25f0ayWHBdCIvcM1ChBCzZhL0fj0ZnzA1Dh3Z6B", + "FtnDWRYGo+yr4Ots94rXNXWfwqHvJ0EqUYuECgxQmDe14T9nExb6a+uLgzdtoMLwCPl8qHv665424dYc", + "1uahMwktfseMMA8G6g6ZF2bhMFq6Uty37FxJ2szGoHUpcg8/+2LD14id6r6c6X5UWa8Dha1WLr5Owfl4", + "3PXmH7+5CJ2Pz45tXYRT3wVm+Orhke2bugKe3Aa/BJtnz2/zg4SaCmXEX4GlF+OXz2/0tTJzwTn6knZx", + "9gNc+0ZJ/4b85UfEcermQwllcofmAU3SCKaMwNXZz2G+ZDO31OR+KPbDkt+gLiE/zH6rMRcLgTwJujqF", + "4DYca8/eA0pBo73R+Z8pB5E3xnq/ozmgR+rDd0QQo8j/VeW5q8r44vktvlf0WtWS/4sqyyZNQ2kpEEry", + "X1OXGCkjYTvJC8zvO8XibTg7tHu2IGyszjx+64GG0hJmsIytZ+u/AwAA//+0a2WKGxkAAA==", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/v1alpha1/openapi.yaml b/api/v1alpha1/openapi.yaml index 7440aa7..96eb397 100644 --- a/api/v1alpha1/openapi.yaml +++ b/api/v1alpha1/openapi.yaml @@ -385,7 +385,9 @@ components: infra: type: object $ref: '#/components/schemas/Infra' - + smartState: + type: object + $ref: '#/components/schemas/SmartState' VCenter: type: object required: @@ -440,6 +442,12 @@ components: type: object $ref: '#/components/schemas/MigrationIssues' + SmartState: + type: array + items: + type: object + additionalProperties: true + Infra: type: object required: diff --git a/api/v1alpha1/spec.gen.go b/api/v1alpha1/spec.gen.go index 97e7155..648e98f 100644 --- a/api/v1alpha1/spec.gen.go +++ b/api/v1alpha1/spec.gen.go @@ -19,36 +19,36 @@ import ( var swaggerSpec = []string{ "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/v1alpha1/types.gen.go b/api/v1alpha1/types.gen.go index ea01fda..210ee18 100644 --- a/api/v1alpha1/types.gen.go +++ b/api/v1alpha1/types.gen.go @@ -77,9 +77,10 @@ type InfraNetworksType string // Inventory defines model for Inventory. type Inventory struct { - Infra Infra `json:"infra"` - Vcenter VCenter `json:"vcenter"` - Vms VMs `json:"vms"` + Infra Infra `json:"infra"` + SmartState *SmartState `json:"smartState,omitempty"` + Vcenter VCenter `json:"vcenter"` + Vms VMs `json:"vms"` } // MigrationIssues defines model for MigrationIssues. @@ -89,6 +90,9 @@ type MigrationIssues = []struct { Label string `json:"label"` } +// SmartState defines model for SmartState. +type SmartState = []map[string]interface{} + // Source defines model for Source. type Source struct { Agents *[]SourceAgentItem `json:"agents,omitempty"` diff --git a/data/ignition.template b/data/ignition.template index a7f6a3a..f72e0e4 100644 --- a/data/ignition.template +++ b/data/ignition.template @@ -100,6 +100,27 @@ storage: name: core group: name: core + + - path: /home/core/.config/containers/systemd/manageiq-service.container + mode: 0644 + contents: + inline: | + [Unit] + Description=ManageIQ SmartState Service + + [Container] + ContainerName=manageiq-service + Image=quay.io/bodnopoz/manageiq-service:latest + PublishPort=3334:3334 + Network=host + UserNS=keep-id:uid=1001 + + [Service] + Restart=on-failure + RestartSec=5 + + [Install] + WantedBy=multi-user.target default.target - path: /home/core/.config/containers/systemd/planner-agent.container mode: 0644 contents: diff --git a/go.sum b/go.sum index bf48001..8b30324 100644 --- a/go.sum +++ b/go.sum @@ -1,25 +1,43 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go/compute v1.23.4/go.mod h1:/EJMj55asU6kAFnuZET8zqgwgJ9FvXWXOkkfQZa4ioI= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= +cloud.google.com/go/storage v1.38.0/go.mod h1:tlUADB0mAb9BgYls9lq+8MGkfzOXuLrnHXlpHmvFJoY= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v6 v6.2.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= github.com/IBM/sarama v1.43.3 h1:Yj6L2IaNvb2mRBop39N7mmJAHBVY3dTPncr3qGVkxPA= github.com/IBM/sarama v1.43.3/go.mod h1:FVIRaLrhK3Cla/9FfRF5X9Zua2KpS3SYIXxhac1H+FQ= +github.com/Joker/jade v1.1.3/go.mod h1:T+2WLyt7VH6Lp0TRxQrUYEs64nRc83wkMQrfeIQKduM= github.com/MicahParks/jwkset v0.5.19 h1:XZCsgJv05DBCvxEHYEHlSafqiuVn5ESG0VRB331Fxhw= github.com/MicahParks/jwkset v0.5.19/go.mod h1:q8ptTGn/Z9c4MwbcfeCDssADeVQb3Pk7PnVxrvi+2QY= github.com/MicahParks/keyfunc/v3 v3.3.5 h1:7ceAJLUAldnoueHDNzF8Bx06oVcQ5CfJnYwNt1U3YYo= github.com/MicahParks/keyfunc/v3 v3.3.5/go.mod h1:SdCCyMJn/bYqWDvARspC6nCT8Sk74MjuAY22C7dCST8= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= +github.com/a8m/tree v0.0.0-20210115125333-10a5fd5b637d/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.50.25 h1:vhiHtLYybv1Nhx3Kv18BBC6L0aPJHaG9aeEsr92W99c= github.com/aws/aws-sdk-go v1.50.25/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= +github.com/beevik/etree v1.3.0/go.mod h1:aiPf89g/1k3AShMVAzriilpcE4R/Vuor90y83zVZWFc= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/bytedance/sonic v1.12.6 h1:/isNmCUF2x3Sh8RAp/4mh4ZGkcFAX/hLrzrK3AvpRzk= github.com/bytedance/sonic v1.12.6/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= @@ -28,9 +46,11 @@ github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iC github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e h1:hHg27A0RSSp2Om9lubZpiMgVbvn39bsUmW9U5h0twqc= github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -45,6 +65,8 @@ github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/ github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= +github.com/containers/libhvee v0.6.0/go.mod h1:f/q1wCdQqOLiK3IZqqBfOD7exMZYBU5pDYsrMa/pSFg= github.com/coreos/butane v0.22.0 h1:nmXfiGqJMvPzBd2DfGyoayvO/KjpO6bES4uOEmtGTu8= github.com/coreos/butane v0.22.0/go.mod h1:3OKS5qaH58O2yLAKgAtOgBpUQSm7aIOU09IpG+IvmF4= github.com/coreos/go-json v0.0.0-20230131223807-18775e0fb4fb h1:rmqyI19j3Z/74bIRhuC59RB442rXUazKNueVpfJPxg4= @@ -66,12 +88,16 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8Yc github.com/diskfs/go-diskfs v1.4.0 h1:MAybY6TPD+fmhY+a2qFhmdvMeIKvCqlgh4QIc1uCmBs= github.com/diskfs/go-diskfs v1.4.0/go.mod h1:G8cyy+ngM+3yKlqjweMmtqvE+TxsnIo1xumbJX1AeLg= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dougm/pretty v0.0.0-20171025230240-2ee9d7453c02/go.mod h1:7NQ3kWOx2cZOSjtcveTa5nqupVr2s6/83sG+rTlI7uA= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/eapache/go-resiliency v1.7.0 h1:n3NRTnBn5N0Cbi/IeOHuQn9s2UwVUH7Ga0ZWcP+9JTA= github.com/eapache/go-resiliency v1.7.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws= github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/elastic/elastic-transport-go/v8 v8.6.0/go.mod h1:YLHer5cj0csTzNFXoNQ8qhtGY1GTvSqPnKWKaqQE3Hk= +github.com/elastic/go-elasticsearch/v8 v8.15.0/go.mod h1:HCON3zj4btpqs2N1jjsAy4a/fiAul+YBP00mBH4xik8= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab h1:h1UgjJdAAhj+uPL68n7XASS6bU+07ZX1WJvVS2eyoeY= github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab/go.mod h1:GLo/8fDswSAniFG+BFIaiSPcK610jyzgEhWYPQwuQdw= @@ -83,8 +109,13 @@ github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRr github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -118,6 +149,7 @@ github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= @@ -154,6 +186,7 @@ github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PU github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw= github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -177,6 +210,10 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomarkdown/markdown v0.0.0-20230922112808-5421fefb8386/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/cel-go v0.16.1/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -195,12 +232,20 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/renameio v1.0.1/go.mod h1:t/HQoYBZSsWSNK35C6CO/TpPLDVWvxOHboWUAweKUpk= +github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.1/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= +github.com/gophercloud/gophercloud v1.3.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/gophercloud/utils v0.0.0-20230418172808-6eab72e966e1/go.mod h1:VSalo4adEk+3sNkmVJLnhHoOyOYYS8sTWLG4mv5BKto= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= @@ -209,6 +254,11 @@ github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/z github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -217,6 +267,7 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9 github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= @@ -226,6 +277,7 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/invopop/yaml v0.3.1 h1:f0+ZpmhfBSS4MhG+4HYseMdJhoeeopbSKbq5Rpeelso= github.com/invopop/yaml v0.3.1/go.mod h1:PMOp3nn4/12yEZUFfmOuNHJsZToEEOwoWsT+D81KkeA= +github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= @@ -251,6 +303,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -259,6 +313,13 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.4.0 h1:VzM3TYHDgqPkettiP6I6q2jOeQFL4nrJM+UcAc4f6Fs= github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.4.0/go.mod h1:nqCI7aelBJU61wiBeeZWJ6oi4bJy5nrjkM6lWIMA4j0= +github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= +github.com/kataras/golog v0.1.9/go.mod h1:jlpk/bOaYCyqDqH18pgDHdaJab72yBE6i0O3s30hpWY= +github.com/kataras/iris/v12 v12.2.6-0.20230908161203-24ba4e8933b9/go.mod h1:ldkoR3iXABBeqlTibQ3MYaviA1oSlPvim6f55biwBh4= +github.com/kataras/pio v0.0.12/go.mod h1:ODK/8XBhhQ5WqrAhKy+9lTPS7sBf6O3KcLhc9klfRcY= +github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= +github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= @@ -280,6 +341,8 @@ github.com/kubev2v/forklift v0.0.0-20241129095927-4890e072e015 h1:lKoe5Sy+faux6g github.com/kubev2v/forklift v0.0.0-20241129095927-4890e072e015/go.mod h1:fHaGLhv09dWXKv0/0GNl3rgLe/KH5Y6IyG6eGLYaA6k= github.com/kubev2v/migration-event-streamer v0.0.0-20241125102656-9cdf9e64a16b h1:xOHUPs9sVGie2EpTZDfSsxUPZHMBgm8XYvthdAMzJD4= github.com/kubev2v/migration-event-streamer v0.0.0-20241125102656-9cdf9e64a16b/go.mod h1:xpo9o779xi1mM0142E8KqVc205ahAP1wswoN+DKbX8E= +github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8= +github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/leosunmo/zapchi v0.2.0 h1:BSX9FIcPbgVBgMgVBAfN0CrLWv012tjFcqSTfDDUYyY= @@ -288,16 +351,28 @@ github.com/libvirt/libvirt-go v7.4.0+incompatible h1:crnSLkwPqCdXtg6jib/FxBG/hwe github.com/libvirt/libvirt-go v7.4.0+incompatible/go.mod h1:34zsnB4iGeOv7Byj6qotuW8Ya4v4Tr43ttjz/F0wjLE= github.com/lthibault/jitterbug v2.0.0+incompatible h1:qouq51IKzlMx25+15jbxhC/d79YyTj0q6XFoptNqaUw= github.com/lthibault/jitterbug v2.0.0+incompatible/go.mod h1:2l7akWd27PScEs6YkjyUVj/8hKgNhbbQ3KiJgJtlf6o= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +github.com/mdlayher/vsock v1.2.1/go.mod h1:NRfCibel++DgeMD8z/hP+PPTjlNJsdPOmxcnENvE+SE= +github.com/microcosm-cc/bluemonday v1.0.25/go.mod h1:ZIOjCQp1OrzBBPIJmfX4qDYFuhU02nx4bn030ixfHLE= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -343,17 +418,22 @@ github.com/openshift/assisted-image-service v0.0.0-20240827125623-ad5c4b36a817 h github.com/openshift/assisted-image-service v0.0.0-20240827125623-ad5c4b36a817/go.mod h1:o2H5VwQhUD8P6XsK6dRmKpCCJqVvv12KJQZBXmcCXCU= github.com/openshift/custom-resource-status v1.1.2 h1:C3DL44LEbvlbItfd8mT5jWrqPfHnSOQoQf/sypqA6A4= github.com/openshift/custom-resource-status v1.1.2/go.mod h1:DB/Mf2oTeiAmVVX1gN+NEqweonAPY0TKUwADizj8+ZA= +github.com/openshift/library-go v0.0.0-20230626162119-954ade536d6d/go.mod h1:PegtilvJPBJXjJG3AV8uL1a0SAnBr6K67ShNiWVb40M= +github.com/ovirt/go-ovirt v0.0.0-20230808190322-9fd1992199b2/go.mod h1:Zkdj9/rW6eyuw0uOeEns6O3pP5G2ak+bI/tgkQ/tEZI= github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pin/tftp v2.1.0+incompatible/go.mod h1:xVpZOMCXTy+A5QMjEVN0Glwa1sUvaJhFXbr/aAxuxGY= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= github.com/pkg/xattr v0.4.9 h1:5883YPCtkSd8LFbs13nXplj9g9tlrwoJRjgpgMu1/fE= github.com/pkg/xattr v0.4.9/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -368,25 +448,37 @@ github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/rasky/go-xdr v0.0.0-20170217172119-4930550ba2e2/go.mod h1:Nfe4efndBz4TibWycNE+lqyJZiMX4ycx+QKV8Ta0f/o= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/slok/go-http-metrics v0.11.0/go.mod h1:ZGKeYG1ET6TEJpQx18BqAJAvxw9jBAZXCHU7bWQqqAc= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace h1:9PNP1jnUjRhfmGMlkXHjYPishpcw4jpSt/V/xYY3FMA= github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -397,8 +489,12 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tdewolff/minify/v2 v2.12.9/go.mod h1:qOqdlDfL+7v0/fyymB+OP497nIxJYSvX4MQWA8OoiXU= +github.com/tdewolff/parse/v2 v2.6.8/go.mod h1:XHDhaU6IBgsryfdnpzUXBlT6leW/l25yrFBTEb4eIyM= github.com/thoas/go-funk v0.9.3 h1:7+nAEx3kn5ZJcnDm2Bh23N2yOtweO14bi//dvRtgLpw= github.com/thoas/go-funk v0.9.3/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= +github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= @@ -407,18 +503,45 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/vincent-petithory/dataurl v1.0.0 h1:cXw+kPto8NLuJtlMsI152irrVw9fRDX8AbShPRpg2CI= github.com/vincent-petithory/dataurl v1.0.0/go.mod h1:FHafX5vmDzyP+1CQATJn7WFKc9CvnvxyvZy6I1MrG/U= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/vmware/govmomi v0.34.1 h1:Hqu2Uke2itC+cNoIcFQBLEZvX9wBRTTOP04J7V1fqRw= github.com/vmware/govmomi v0.34.1/go.mod h1:qWWT6n9mdCr/T9vySsoUqcI04sSEj4CqHXxtk/Y+Los= +github.com/vmware/vmw-guestinfo v0.0.0-20220317130741-510905f0efa3/go.mod h1:CSBTxrhePCm0cmXNKDGeu+6bOQzpaEklfCqEpn89JWk= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= +go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= +go.etcd.io/etcd/client/v2 v2.305.9/go.mod h1:0NBdNx9wbxtEQLwAQtrDHwx58m02vXpDcgSYI2seohQ= +go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= +go.etcd.io/etcd/pkg/v3 v3.5.9/go.mod h1:BZl0SAShQFk0IpLWR78T/+pyt8AruMHhTNNX73hkNVY= +go.etcd.io/etcd/raft/v3 v3.5.9/go.mod h1:WnFkqzFdZua4LVlVXQEGhmooLeyS7mqzS4Pf4BCVqXg= +go.etcd.io/etcd/server/v3 v3.5.9/go.mod h1:GgI1fQClQCFIzuVjlvdbMxNbnISt90gdfYyqiAIt65g= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.48.0/go.mod h1:tIKj3DbO8N9Y2xo52og3irLsPI4GW02DSMtrVgNMgxg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0/go.mod h1:Krqnjl22jUJ0HgMzw5eveuCvFDXY4nSYb4F8t5gdrag= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0/go.mod h1:OfUCyyIiDvNXHWpcWgbF+MWvqPZiNa3YDEnivcnYsV0= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -454,6 +577,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -523,6 +647,7 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -564,8 +689,10 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/api v0.167.0/go.mod h1:4FcBc686KFi7QI/U51/2GKKevfZMpM17sCdibqe/bSA= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= @@ -574,9 +701,13 @@ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20240205150955-31a09d347014/go.mod h1:xEgQu1e4stdSSsxPDK8Azkrk/ECl5HvdPf6nbZrTS5M= +google.golang.org/genproto/googleapis/api v0.0.0-20240205150955-31a09d347014/go.mod h1:rbHMSEDyoYX62nRVLOCc4Qt1HbsdytAYoVwgjiOhF3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:YUWgXUFRPfoYK1IHMuxH5K6nPEXSCzIMljnQ59lLRCk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.61.1/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -603,6 +734,8 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -634,19 +767,24 @@ k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM k8s.io/apimachinery v0.23.3/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apimachinery v0.29.7 h1:ICXzya58Q7hyEEfnTrbmdfX1n1schSepX2KUfC2/ykc= k8s.io/apimachinery v0.29.7/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y= +k8s.io/apiserver v0.28.3/go.mod h1:YIpM+9wngNAv8Ctt0rHG4vQuX/I5rvkEMtZtsxW2rNM= k8s.io/client-go v0.29.7 h1:vTtiFrGBKlcBhxaeZC4eDrqui1e108nsTyue/KU63IY= k8s.io/client-go v0.29.7/go.mod h1:69BvVqdRozgR/9TP45u/oO0tfrdbP+I8RqrcCJQshzg= k8s.io/code-generator v0.23.3/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= +k8s.io/code-generator v0.28.3/go.mod h1:A2EAHTRYvCvBrb/MM2zZBNipeCk3f8NtpdNIKawC43M= k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI= k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8= +k8s.io/component-helpers v0.28.3/go.mod h1:oJR7I9ist5UAQ3y/CTdbw6CXxdMZ1Lw2Ua/EZEwnVLs= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kms v0.28.3/go.mod h1:kSMjU2tg7vjqqoWVVCcmPmNZ/CofPsoTbSxAipCvZuE= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= @@ -661,7 +799,10 @@ kubevirt.io/containerized-data-importer-api v1.59.0 h1:GdDt9BlR0qHejpMaPfASbsG8J kubevirt.io/containerized-data-importer-api v1.59.0/go.mod h1:4yOGtCE7HvgKp7wftZZ3TBvDJ0x9d6N6KaRjRYcUFpE= kubevirt.io/controller-lifecycle-operator-sdk/api v0.0.0-20220329064328-f3cc58c6ed90 h1:QMrd0nKP0BGbnxTqakhDZAUhGKxPiPiN5gSDqKUmGGc= kubevirt.io/controller-lifecycle-operator-sdk/api v0.0.0-20220329064328-f3cc58c6ed90/go.mod h1:018lASpFYBsYN6XwmA2TIrPCx6e0gviTd/ZNtSitKgc= +libvirt.org/libvirt-go-xml v7.4.0+incompatible/go.mod h1:FL+H1+hKNWDdkKQGGS4sGCZJ3pGWcjt6VbxZvPlQJkY= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2/go.mod h1:+qG7ISXqCDVVcyO8hLn12AKVYYUjM7ftlqsqmrhMZE0= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= diff --git a/internal/agent/agent.go b/internal/agent/agent.go index ddeecb1..d5b1bb4 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -34,20 +34,20 @@ var version string // New creates a new agent. func New(id uuid.UUID, jwt string, config *config.Config) *Agent { return &Agent{ - config: config, - healtCheckStopCh: make(chan chan any), - id: id, - jwt: jwt, + config: config, + healthCheckStopCh: make(chan chan any), + id: id, + jwt: jwt, } } type Agent struct { - config *config.Config - server *Server - healtCheckStopCh chan chan any - credUrl string - id uuid.UUID - jwt string + config *config.Config + server *Server + healthCheckStopCh chan chan any + credUrl string + id uuid.UUID + jwt string } func (a *Agent) Run(ctx context.Context) error { @@ -90,7 +90,7 @@ func (a *Agent) Stop() { zap.S().Info("server stopped") c := make(chan any) - a.healtCheckStopCh <- c + a.healthCheckStopCh <- c <-c zap.S().Info("health check stopped") } @@ -122,7 +122,7 @@ func (a *Agent) start(ctx context.Context, plannerClient client.Planner) { } // TODO refactor health checker to call it from the main goroutine - healthChecker.Start(ctx, a.healtCheckStopCh) + healthChecker.Start(ctx, a.healthCheckStopCh) collector := service.NewCollector(a.config.DataDir) collector.Collect(ctx) @@ -152,6 +152,16 @@ func (a *Agent) start(ctx context.Context, plannerClient client.Planner) { continue } + nsc := service.NewSmartStateClient() + zap.S().Debug("trying to get smart state results") + smartResults, err := nsc.GetResults() + if err != nil { + zap.S().Errorf("error getting smart analysis results: %s", err) + } + if smartResults != nil { + inventory.SmartState = &smartResults + } + if err := statusUpdater.UpdateStatus(ctx, status, statusInfo, credUrl); err != nil { if errors.Is(err, client.ErrSourceGone) { zap.S().Info("Source is gone..Stop sending requests") diff --git a/internal/agent/service/collector.go b/internal/agent/service/collector.go index aa4b2eb..b3d9cab 100644 --- a/internal/agent/service/collector.go +++ b/internal/agent/service/collector.go @@ -153,6 +153,12 @@ func (c *Collector) run() { zap.S().Named("collector").Errorf("Fill the inventory object with more data: %s", err) return } + + zap.S().Named("collector").Infof("calling SmartState analysis init_scan") + sc := NewSmartStateClient() + if err = sc.InitScan(creds); err != nil { + zap.S().Named("collector").Errorf("Error running smart state analysis init_scan: %s", err) + } } func fillInventoryObjectWithMoreData(vms *[]vspheremodel.VM, inv *apiplanner.Inventory) { diff --git a/internal/agent/service/smartstate_client.go b/internal/agent/service/smartstate_client.go new file mode 100644 index 0000000..e74a3cd --- /dev/null +++ b/internal/agent/service/smartstate_client.go @@ -0,0 +1,117 @@ +package service + +import ( + "bytes" + "encoding/json" + "fmt" + "github.com/kubev2v/migration-planner/api/v1alpha1" + "github.com/kubev2v/migration-planner/internal/agent/config" + "net/http" + "net/url" +) + +type SmartStateClient struct { + ServiceUrl string +} + +type SmartStateOption func(client *SmartStateClient) + +func NewSmartStateClient(opts ...SmartStateOption) SmartStateClient { + sc := SmartStateClient{ + ServiceUrl: "http://localhost:3334", + } + + for _, opt := range opts { + opt(&sc) + } + + return sc +} + +func WithServiceUrl(url string) SmartStateOption { + return func(sc *SmartStateClient) { + sc.ServiceUrl = url + } +} + +func RemoveProtocolAndRoute(rawURL string) (string, error) { + parsedURL, err := url.Parse(rawURL) + if err != nil { + return "", err + } + + return parsedURL.Host, nil +} + +func (sc *SmartStateClient) InitScan(creds config.Credentials) error { + server, err := RemoveProtocolAndRoute(creds.URL) + if err != nil { + return err + } + requestData := map[string]string{ + "server": server, + "username": creds.Username, + "password": creds.Password, + } + + data, err := json.Marshal(requestData) + if err != nil { + return fmt.Errorf("failed to marshal request data: %w", err) + } + + url := fmt.Sprintf("%s/init_scan", sc.ServiceUrl) + req, err := http.NewRequest("POST", url, bytes.NewBuffer(data)) + if err != nil { + return fmt.Errorf("failed to create request: %w", err) + } + + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return fmt.Errorf("failed to execute request: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode >= 200 && resp.StatusCode < 300 { + fmt.Println("Request succeeded with status:", resp.StatusCode) + return nil + } + + return fmt.Errorf("request failed with status: %d", resp.StatusCode) +} + +func (sc *SmartStateClient) GetResults() (v1alpha1.SmartState, error) { + url := fmt.Sprintf("%s/results", sc.ServiceUrl) + req, err := http.NewRequest("GET", url, nil) // No need for bytes.NewBuffer() for a GET request + if err != nil { + return nil, fmt.Errorf("failed to create request: %w", err) + } + + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("failed to execute request: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode == 202 { + fmt.Println("Request in progress. Status:", resp.StatusCode) + return nil, nil + } + + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return nil, fmt.Errorf("request failed with status: %d", resp.StatusCode) + } + + var results []map[string]interface{} + if err := json.NewDecoder(resp.Body).Decode(&results); err != nil { + return nil, fmt.Errorf("failed to decode JSON response: %w", err) + } + + fmt.Println("Request succeeded with status:", resp.StatusCode) + return results, nil +} diff --git a/internal/image/ova.go b/internal/image/ova.go index 2fdb037..825a056 100644 --- a/internal/image/ova.go +++ b/internal/image/ova.go @@ -207,7 +207,7 @@ func (o *Ova) generateIgnition() (string, error) { ignData := IgnitionData{ PlannerService: util.GetEnv("CONFIG_SERVER", "http://127.0.0.1:7443"), PlannerServiceUI: util.GetEnv("CONFIG_SERVER_UI", "http://localhost:3000/migrate/wizard"), - MigrationPlannerAgentImage: util.GetEnv("MIGRATION_PLANNER_AGENT_IMAGE", "quay.io/kubev2v/migration-planner-agent"), + MigrationPlannerAgentImage: util.GetEnv("MIGRATION_PLANNER_AGENT_IMAGE", "quay.io/bodnopoz/migration-planner-agent"), } if o.SshKey != nil { ignData.SshKey = *o.SshKey diff --git a/smart-state/Dockerfile b/smart-state/Dockerfile new file mode 100644 index 0000000..67c41fa --- /dev/null +++ b/smart-state/Dockerfile @@ -0,0 +1,48 @@ +# --------------------------- +# Stage 1: VDDK Base +# --------------------------- + +FROM quay.io/bodnopoz/vmwd:8.0.3 AS vddk + +# --------------------------- +# Stage 2: Final Application +# --------------------------- +FROM ruby:3.2-slim + +# Install build tools, git, and other dependencies +RUN apt-get update && apt-get install -y \ + build-essential \ + git \ + && rm -rf /var/lib/apt/lists/* + +# Some older RubyGems or corporate proxies benefit from IPv4 fallback: +RUN echo ":ipv4_fallback_enabled: true" >> /root/.gemrc + +# Set up a working directory +WORKDIR /app + +# Copy VDDK from Stage 1 into this final image +# We'll place it under the same path: /opt/vmware-vix-disklib +COPY --from=vddk /opt/vmware-vix-disklib /opt/vmware-vix-disklib + +# Make sure the libraries can be found at runtime +ENV VDDK_PATH=/opt/vmware-vix-disklib +ENV LD_LIBRARY_PATH=$VDDK_PATH/lib64:$LD_LIBRARY_PATH + +# Clone manageiq-gems-pending +RUN git clone https://github.com/ManageIQ/manageiq-gems-pending.git + +# Update RUBYLIB to include manageiq-gems-pending +ENV RUBYLIB="/app/manageiq-gems-pending/lib:${RUBYLIB}" +ENV RUBYLIB="/app/manageiq-gems-pending/lib/gems/pending:${RUBYLIB}" + +# Copy your Gemfile and install bundler + dependencies +COPY Gemfile Gemfile +RUN gem install bundler +RUN bundle install + +# Copy your script (e.g. service.rb) into /app +COPY service.rb . + +# Default command +CMD ["ruby", "service.rb"] diff --git a/smart-state/Gemfile b/smart-state/Gemfile new file mode 100644 index 0000000..ff1a7de --- /dev/null +++ b/smart-state/Gemfile @@ -0,0 +1,10 @@ +source "https://rubygems.manageiq.org" +source "https://rubygems.org" + +gem "webrick" +gem "manageiq-smartstate" + +gem "manageiq-gems-pending", :git => "https://github.com/ManageIQ/manageiq-gems-pending.git", :branch => "master" + +# Modified gems for vmware_web_service. Setting sources here since they are git references +gem "handsoap", "=0.2.5.5", :require => false, :source => "https://rubygems.manageiq.org" diff --git a/smart-state/Gemfile.lock b/smart-state/Gemfile.lock new file mode 100644 index 0000000..88b55b4 --- /dev/null +++ b/smart-state/Gemfile.lock @@ -0,0 +1,214 @@ +GIT + remote: https://github.com/ManageIQ/manageiq-gems-pending.git + revision: f695bd75e1d98d54970ca1aad9ccb1452fb4cab2 + branch: master + specs: + manageiq-gems-pending (0.1.0) + activesupport (>= 6.0) + awesome_spawn (~> 1.5) + aws-sdk-s3 (~> 1.0) + bundler (~> 2.1, >= 2.1.4, != 2.2.10) + fog-openstack (~> 1.0) + more_core_extensions (~> 4.5) + net-ftp (~> 0.1.2) + nokogiri (~> 1.14, >= 1.14.3) + rexml (>= 3.3.6) + sys-proctable (~> 1.2.5) + sys-uname (~> 1.2.1) + win32ole (~> 1.8.8) + zeitwerk (~> 2.6, >= 2.6.8) + +GEM + remote: https://rubygems.manageiq.org/ + specs: + +GEM + remote: https://rubygems.manageiq.org/ + remote: https://rubygems.org/ + specs: + activesupport (8.0.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + awesome_spawn (1.6.0) + aws-eventstream (1.3.0) + aws-partitions (1.1031.0) + aws-sdk-core (3.214.1) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.96.0) + aws-sdk-core (~> 3, >= 3.210.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.177.0) + aws-sdk-core (~> 3, >= 3.210.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.5) + aws-sigv4 (1.10.1) + aws-eventstream (~> 1, >= 1.0.2) + azure-armrest (0.15.0) + activesupport (>= 4.2.2) + addressable (~> 2.8) + azure-signature (~> 0.3.0) + json (~> 2) + memoist (~> 0.15) + parallel (~> 1.22) + rest-client (~> 2.1.0) + azure-signature (0.3.0) + activesupport (>= 4.2.2) + addressable (~> 2) + base64 (0.2.0) + benchmark (0.4.0) + bigdecimal (3.1.9) + binary_struct (2.1.0) + builder (3.3.0) + concurrent-ruby (1.3.4) + connection_pool (2.4.1) + date (3.4.1) + domain_name (0.6.20240107) + drb (2.2.1) + excon (1.2.3) + ffi (1.17.1-aarch64-linux-gnu) + ffi (1.17.1-aarch64-linux-musl) + ffi (1.17.1-arm-linux-gnu) + ffi (1.17.1-arm-linux-musl) + ffi (1.17.1-arm64-darwin) + ffi (1.17.1-x86_64-darwin) + ffi (1.17.1-x86_64-linux-gnu) + ffi (1.17.1-x86_64-linux-musl) + ffi-vix_disk_lib (1.4.0) + ffi + fog-core (2.6.0) + builder + excon (~> 1.0) + formatador (>= 0.2, < 2.0) + mime-types + fog-json (1.2.0) + fog-core + multi_json (~> 1.10) + fog-openstack (1.1.3) + fog-core (~> 2.1) + fog-json (>= 1.0) + formatador (1.1.0) + handsoap (0.2.5.5) + nokogiri (>= 1.2.3) + http-accept (1.7.0) + http-cookie (1.0.8) + domain_name (~> 0.5) + httpclient (2.8.3) + i18n (1.14.6) + concurrent-ruby (~> 1.0) + iniparse (1.5.0) + jmespath (1.6.2) + json (2.9.1) + linux_block_device (0.2.1) + logger (1.6.4) + manageiq-password (1.2.0) + manageiq-smartstate (0.10.1) + activesupport + awesome_spawn (~> 1.5) + azure-armrest (~> 0.9) + binary_struct (~> 2.1) + iniparse + linux_block_device (~> 0.2.1) + manageiq-password (< 2) + memory_buffer (>= 0.1.0) + rufus-lru (~> 1.0.3) + sys-uname (~> 1.2.1) + uuidtools (~> 2.1) + vmware_web_service (~> 3.0) + memoist (0.16.2) + memory_buffer (0.1.0) + mime-types (3.6.0) + logger + mime-types-data (~> 3.2015) + mime-types-data (3.2024.1203) + minitest (5.25.4) + more_core_extensions (4.5.0) + activesupport + sync + multi_json (1.15.0) + net-ftp (0.1.4) + net-protocol + time + net-protocol (0.2.2) + timeout + netrc (0.11.0) + nokogiri (1.18.1-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.18.1-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.18.1-arm-linux-gnu) + racc (~> 1.4) + nokogiri (1.18.1-arm-linux-musl) + racc (~> 1.4) + nokogiri (1.18.1-arm64-darwin) + racc (~> 1.4) + nokogiri (1.18.1-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.18.1-x86_64-linux-gnu) + racc (~> 1.4) + nokogiri (1.18.1-x86_64-linux-musl) + racc (~> 1.4) + parallel (1.26.3) + public_suffix (6.0.1) + racc (1.8.1) + rest-client (2.1.0) + http-accept (>= 1.7.0, < 2.0) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 4.0) + netrc (~> 0.8) + rexml (3.4.0) + rufus-lru (1.0.7) + securerandom (0.4.1) + sync (0.5.0) + sys-proctable (1.2.7) + ffi (~> 1.1) + sys-uname (1.2.3) + ffi (~> 1.1) + time (0.4.1) + date + timeout (0.4.3) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + uri (1.0.2) + uuidtools (2.2.0) + vmware_web_service (3.4.0) + ffi-vix_disk_lib (~> 1.1) + handsoap (~> 0.2.5) + httpclient (~> 2.8.0) + more_core_extensions (>= 3.2, < 5) + webrick (1.9.1) + win32ole (1.8.10) + zeitwerk (2.7.1) + +PLATFORMS + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-musl + arm64-darwin + x86_64-darwin + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + handsoap (= 0.2.5.5)! + manageiq-gems-pending! + manageiq-smartstate + webrick + +BUNDLED WITH + 2.6.2 diff --git a/smart-state/service.rb b/smart-state/service.rb new file mode 100644 index 0000000..42d5ea8 --- /dev/null +++ b/smart-state/service.rb @@ -0,0 +1,179 @@ +require 'webrick' +require 'json' +require 'manageiq-smartstate' +# boot.rb +$LOAD_PATH << File.expand_path("/home/bodnopoz/work/manageiq-gems-pending/lib", __FILE__) +$LOAD_PATH << File.expand_path("/home/bodnopoz/work/manageiq-gems-pending/lib/gems/pending", __FILE__) +require 'manageiq/gems/pending' +require 'MiqVm/MiqVm' +require 'ostruct' +require 'VMwareWebService/MiqVim' +require "active_support" +require "active_support/core_ext/array" +require 'logger' +require 'timeout' + +$vim_log = $log = Logger.new(STDERR) + +port = ENV['SMART_STATE_SERVICE_PORT'] || 3334 +timeout_sec = ENV['SMART_STATE_SERVICE_TIMEOUT_SEC'] || 20 + +results_file_path = 'scan_results.json' + +# Create the HTTP server +server = WEBrick::HTTPServer.new(Port: port.to_i) + +server.mount_proc '/results' do |req, res| + if req.request_method == 'GET' + begin + if File.exist?(results_file_path) + # File exists, read and return its contents as JSON + file_contents = File.read(results_file_path) + res.status = 200 + res['Content-Type'] = 'application/json' + res.body = file_contents + else + res.status = 202 + res['Content-Type'] = 'application/json' + res.body = { + status: 'unknown', + message: 'No results available yet. The process may not have started or is still in progress.' + }.to_json + end + rescue StandardError => e + # Handle any unexpected errors + res.status = 500 + res['Content-Type'] = 'application/json' + res.body = { + status: 'error', + message: 'An error occurred while processing the request.', + details: e.message + }.to_json + end + else + # Handle unsupported methods + res.status = 405 + res['Content-Type'] = 'application/json' + res.body = { status: 'error', message: 'Method not allowed' }.to_json + end +end +# Define an endpoint to handle requests +server.mount_proc '/init_scan' do |req, res| + if req.request_method == 'POST' + begin + begin + body = JSON.parse(req.body) + host_address = body['server'] + username = body['username'] + password = body['password'] + rescue JSON::ParserError => e + res.status = 400 + res['Content-Type'] = 'application/json' + res.body = { status: 'error', message: 'Invalid JSON payload', details: e.message }.to_json + return + end + + # Respond immediately to the client + res.status = 200 + res['Content-Type'] = 'application/json' + res.body = { status: 'success', message: 'Scan initiated.' }.to_json + + # Start the heavy lifting in a separate thread + Thread.new do + begin + puts 'starting scan thread' + + vim = MiqVim.new(server: host_address, username: username, password: password) + + all_vms_extracted_data = [] + CATEGORIES = %w(accounts services software system vmconfig) + + + vm_count = 0 + num_of_vms = vim.virtualMachines.keys.size + start_time = Time.now + + vim.virtualMachines.each do |vm_name, vm_props| + begin + max_vms = max_vms_to_scan + num_vms_to_scan = max_vms ? max_vms.to_i : num_of_vms + break if max_vms && vm_count >= max_vms + puts "now scanning key: #{vm_name} which is #{vm_count} out of #{num_vms_to_scan}" + ds_path = vm_props.dig('summary', 'config', 'vmPathName') + next if ds_path.to_s.strip.empty? + + ost = OpenStruct.new + ost.miqVim = vim + vm = MiqVm.new(ds_path, ost) + + vm_data_by_category = {} + CATEGORIES.each do |cat| + begin + Timeout.timeout(timeout_sec) do + xml = vm.extract(cat) + vm_data_by_category[cat] = xml.to_s + end + rescue Timeout::Error + # Handle the timeout error + puts "Timed out while extracting #{cat} for VM '#{vm_name}'" + vm_data_by_category[cat] = { 'error' => 'Timeout: Extraction took too long' } + rescue => err + vm_data_by_category[cat] = { 'error' => err.message } + end + end + + all_vms_extracted_data << { + 'vm_name' => vm_name, + 'datastore_path' => ds_path, + 'categories' => vm_data_by_category + } + rescue => e + all_vms_extracted_data << { + 'vm_name' => vm_name, + 'datastore_path' => ds_path, + 'error' => e.message + } + end + vm_count += 1 + end + + end_time = Time.now + elapsed_time = end_time - start_time + puts "Processing all VMs took #{elapsed_time.round(2)} seconds." + + # Save the results to a file + File.open(results_file_path, 'w') do |file| + file.write(JSON.pretty_generate(all_vms_extracted_data)) + end + rescue => e + $log.error("Error in background thread: #{e.message}") + ensure + vim.disconnect if vim + end + end + + rescue StandardError => e + # Handle errors + res.status = 500 + res['Content-Type'] = 'application/json' + res.body = { status: 'error', message: e.message }.to_json + end + else + # Handle unsupported methods + res.status = 405 + res['Content-Type'] = 'application/json' + res.body = { status: 'error', message: 'Method not allowed' }.to_json + end +end + +def max_vms_to_scan + File.exist?('max_vms_to_scan.txt') ? File.read('max_vms_to_scan.txt').to_i : ENV['MAX_VMS_TO_SCAN']&.to_i +end + +# Graceful shutdown on CTRL+C +trap 'INT' do + server.shutdown +end + +# Start the server +server.start