diff --git a/_local/docker-compose-deps.yaml b/_local/docker-compose-deps.yaml index 4d892713834..05f3410269d 100644 --- a/_local/docker-compose-deps.yaml +++ b/_local/docker-compose-deps.yaml @@ -1,4 +1,4 @@ -version: '3.8' +version: "3.8" services: redis: @@ -37,7 +37,8 @@ services: - "8090:8080" restart: unless-stopped healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8080/admin/v2/brokers/health"] + test: + ["CMD", "curl", "-f", "http://localhost:8080/admin/v2/brokers/health"] interval: 30s timeout: 10s retries: 5 @@ -66,4 +67,3 @@ services: timeout: 5s retries: 10 start_period: 30s - diff --git a/client/python/pyproject.toml b/client/python/pyproject.toml index 158e3d49936..b3df2447c4c 100644 --- a/client/python/pyproject.toml +++ b/client/python/pyproject.toml @@ -4,7 +4,7 @@ version = "0.4.13" description = "Armada gRPC API python client" readme = "README.md" requires-python = ">=3.9" -dependencies = ["grpcio==1.68.1", "grpcio-tools==1.68.1", "mypy-protobuf>=3.6.0", "protobuf >= 5.28.1" ] +dependencies = ["grpcio==1.76.0", "grpcio-tools==1.76.0", "mypy-protobuf>=3.6.0", "protobuf>=6.32.1" ] license = { text = "Apache Software License" } authors = [{ name = "G-Research Open Source Software", email = "armada@armadaproject.io" }] diff --git a/go.mod b/go.mod index 83d717e4f02..dc09d69f92e 100644 --- a/go.mod +++ b/go.mod @@ -7,11 +7,11 @@ toolchain go1.25.3 require ( github.com/apache/pulsar-client-go v0.14.0 github.com/coreos/go-oidc/v3 v3.12.0 - github.com/go-openapi/analysis v0.23.0 - github.com/go-openapi/jsonreference v0.21.0 - github.com/go-openapi/loads v0.22.0 - github.com/go-openapi/runtime v0.28.0 - github.com/go-openapi/spec v0.21.0 + github.com/go-openapi/analysis v0.24.1 + github.com/go-openapi/jsonreference v0.21.3 + github.com/go-openapi/loads v0.23.2 + github.com/go-openapi/runtime v0.29.2 + github.com/go-openapi/spec v0.22.1 github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.5.4 github.com/google/go-cmp v0.7.0 // indirect @@ -33,11 +33,11 @@ require ( github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.1 golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 - golang.org/x/net v0.37.0 + golang.org/x/net v0.46.0 golang.org/x/oauth2 v0.28.0 - golang.org/x/sync v0.12.0 + golang.org/x/sync v0.18.0 google.golang.org/genproto v0.0.0-20250311190419-81fb87f6b8bf // indirect google.golang.org/grpc v1.71.0 gopkg.in/yaml.v2 v2.4.0 @@ -56,10 +56,10 @@ require ( github.com/Masterminds/semver/v3 v3.3.1 github.com/benbjohnson/immutable v0.4.3 github.com/charmbracelet/glamour v0.8.0 - github.com/go-openapi/errors v0.22.0 - github.com/go-openapi/strfmt v0.23.0 + github.com/go-openapi/errors v0.22.4 + github.com/go-openapi/strfmt v0.25.0 github.com/go-openapi/swag v0.23.1 - github.com/go-openapi/validate v0.24.0 + github.com/go-openapi/validate v0.25.1 github.com/go-playground/validator/v10 v10.25.0 github.com/gogo/status v1.1.1 github.com/goreleaser/goreleaser/v2 v2.8.1 @@ -78,7 +78,7 @@ require ( github.com/xitongsys/parquet-go v1.6.2 go.uber.org/atomic v1.11.0 go.uber.org/mock v0.5.0 - golang.org/x/term v0.30.0 + golang.org/x/term v0.36.0 golang.org/x/time v0.11.0 google.golang.org/genproto/googleapis/api v0.0.0-20250311190419-81fb87f6b8bf gopkg.in/inf.v0 v0.9.1 @@ -101,7 +101,6 @@ require ( github.com/apache/arrow/go/arrow v0.0.0-20200730104253-651201b0f516 // indirect github.com/apache/thrift v0.14.2 // indirect github.com/ardielle/ardielle-go v1.5.2 // indirect - github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect @@ -133,10 +132,20 @@ require ( github.com/go-git/go-billy/v5 v5.6.1 // indirect github.com/go-git/go-git/v5 v5.13.1 // indirect github.com/go-jose/go-jose/v4 v4.0.5 // indirect - github.com/go-logr/logr v1.4.2 // indirect - github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-openapi/jsonpointer v0.22.1 // indirect + github.com/go-openapi/swag/conv v0.25.1 // indirect + github.com/go-openapi/swag/fileutils v0.25.1 // indirect + github.com/go-openapi/swag/jsonname v0.25.1 // indirect + github.com/go-openapi/swag/jsonutils v0.25.1 // indirect + github.com/go-openapi/swag/loading v0.25.1 // indirect + github.com/go-openapi/swag/mangling v0.25.1 // indirect + github.com/go-openapi/swag/stringutils v0.25.1 // indirect + github.com/go-openapi/swag/typeutils v0.25.1 // indirect + github.com/go-openapi/swag/yamlutils v0.25.1 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-viper/mapstructure/v2 v2.4.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a // indirect @@ -199,7 +208,6 @@ require ( github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/sagikazarmark/locafero v0.6.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect @@ -218,13 +226,14 @@ require ( github.com/yuin/goldmark v1.7.4 // indirect github.com/yuin/goldmark-emoji v1.0.3 // indirect gitlab.com/digitalxero/go-conventional-commit v1.0.7 // indirect - go.mongodb.org/mongo-driver v1.14.0 // indirect + go.mongodb.org/mongo-driver v1.17.6 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/mod v0.24.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/crypto v0.43.0 // indirect + golang.org/x/mod v0.28.0 // indirect + golang.org/x/sys v0.37.0 // indirect + golang.org/x/text v0.30.0 // indirect golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250227231956-55c901821b1e // indirect google.golang.org/protobuf v1.36.5 // indirect diff --git a/go.sum b/go.sum index 2ad9ead5e20..62a952de69d 100644 --- a/go.sum +++ b/go.sum @@ -76,8 +76,6 @@ github.com/ardielle/ardielle-go v1.5.2/go.mod h1:I4hy1n795cUhaVt/ojz83SNVCYIGsAF github.com/ardielle/ardielle-tools v1.5.4/go.mod h1:oZN+JRMnqGiIhrzkRN9l26Cej9dEx4jeNG6A+AdkShk= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= -github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.30.19/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= @@ -210,32 +208,54 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= -github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= -github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w= -github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= -github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= -github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= -github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= -github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= -github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ= -github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc= -github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= -github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= -github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= -github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= +github.com/go-openapi/analysis v0.24.1 h1:Xp+7Yn/KOnVWYG8d+hPksOYnCYImE3TieBa7rBOesYM= +github.com/go-openapi/analysis v0.24.1/go.mod h1:dU+qxX7QGU1rl7IYhBC8bIfmWQdX4Buoea4TGtxXY84= +github.com/go-openapi/errors v0.22.4 h1:oi2K9mHTOb5DPW2Zjdzs/NIvwi2N3fARKaTJLdNabaM= +github.com/go-openapi/errors v0.22.4/go.mod h1:z9S8ASTUqx7+CP1Q8dD8ewGH/1JWFFLX/2PmAYNQLgk= +github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk= +github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM= +github.com/go-openapi/jsonreference v0.21.3 h1:96Dn+MRPa0nYAR8DR1E03SblB5FJvh7W6krPI0Z7qMc= +github.com/go-openapi/jsonreference v0.21.3/go.mod h1:RqkUP0MrLf37HqxZxrIAtTWW4ZJIK1VzduhXYBEeGc4= +github.com/go-openapi/loads v0.23.2 h1:rJXAcP7g1+lWyBHC7iTY+WAF0rprtM+pm8Jxv1uQJp4= +github.com/go-openapi/loads v0.23.2/go.mod h1:IEVw1GfRt/P2Pplkelxzj9BYFajiWOtY2nHZNj4UnWY= +github.com/go-openapi/runtime v0.29.2 h1:UmwSGWNmWQqKm1c2MGgXVpC2FTGwPDQeUsBMufc5Yj0= +github.com/go-openapi/runtime v0.29.2/go.mod h1:biq5kJXRJKBJxTDJXAa00DOTa/anflQPhT0/wmjuy+0= +github.com/go-openapi/spec v0.22.1 h1:beZMa5AVQzRspNjvhe5aG1/XyBSMeX1eEOs7dMoXh/k= +github.com/go-openapi/spec v0.22.1/go.mod h1:c7aeIQT175dVowfp7FeCvXXnjN/MrpaONStibD2WtDA= +github.com/go-openapi/strfmt v0.25.0 h1:7R0RX7mbKLa9EYCTHRcCuIPcaqlyQiWNPTXwClK0saQ= +github.com/go-openapi/strfmt v0.25.0/go.mod h1:nNXct7OzbwrMY9+5tLX4I21pzcmE6ccMGXl3jFdPfn8= github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= -github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= -github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= +github.com/go-openapi/swag/conv v0.25.1 h1:+9o8YUg6QuqqBM5X6rYL/p1dpWeZRhoIt9x7CCP+he0= +github.com/go-openapi/swag/conv v0.25.1/go.mod h1:Z1mFEGPfyIKPu0806khI3zF+/EUXde+fdeksUl2NiDs= +github.com/go-openapi/swag/fileutils v0.25.1 h1:rSRXapjQequt7kqalKXdcpIegIShhTPXx7yw0kek2uU= +github.com/go-openapi/swag/fileutils v0.25.1/go.mod h1:+NXtt5xNZZqmpIpjqcujqojGFek9/w55b3ecmOdtg8M= +github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU= +github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo= +github.com/go-openapi/swag/jsonutils v0.25.1 h1:AihLHaD0brrkJoMqEZOBNzTLnk81Kg9cWr+SPtxtgl8= +github.com/go-openapi/swag/jsonutils v0.25.1/go.mod h1:JpEkAjxQXpiaHmRO04N1zE4qbUEg3b7Udll7AMGTNOo= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1 h1:DSQGcdB6G0N9c/KhtpYc71PzzGEIc/fZ1no35x4/XBY= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1/go.mod h1:kjmweouyPwRUEYMSrbAidoLMGeJ5p6zdHi9BgZiqmsg= +github.com/go-openapi/swag/loading v0.25.1 h1:6OruqzjWoJyanZOim58iG2vj934TysYVptyaoXS24kw= +github.com/go-openapi/swag/loading v0.25.1/go.mod h1:xoIe2EG32NOYYbqxvXgPzne989bWvSNoWoyQVWEZicc= +github.com/go-openapi/swag/mangling v0.25.1 h1:XzILnLzhZPZNtmxKaz/2xIGPQsBsvmCjrJOWGNz/ync= +github.com/go-openapi/swag/mangling v0.25.1/go.mod h1:CdiMQ6pnfAgyQGSOIYnZkXvqhnnwOn997uXZMAd/7mQ= +github.com/go-openapi/swag/stringutils v0.25.1 h1:Xasqgjvk30eUe8VKdmyzKtjkVjeiXx1Iz0zDfMNpPbw= +github.com/go-openapi/swag/stringutils v0.25.1/go.mod h1:JLdSAq5169HaiDUbTvArA2yQxmgn4D6h4A+4HqVvAYg= +github.com/go-openapi/swag/typeutils v0.25.1 h1:rD/9HsEQieewNt6/k+JBwkxuAHktFtH3I3ysiFZqukA= +github.com/go-openapi/swag/typeutils v0.25.1/go.mod h1:9McMC/oCdS4BKwk2shEB7x17P6HmMmA6dQRtAkSnNb8= +github.com/go-openapi/swag/yamlutils v0.25.1 h1:mry5ez8joJwzvMbaTGLhw8pXUnhDK91oSJLDPF1bmGk= +github.com/go-openapi/swag/yamlutils v0.25.1/go.mod h1:cm9ywbzncy3y6uPm/97ysW8+wZ09qsks+9RS8fLWKqg= +github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= +github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= +github.com/go-openapi/validate v0.25.1 h1:sSACUI6Jcnbo5IWqbYHgjibrhhmt3vR6lCzKZnmAgBw= +github.com/go-openapi/validate v0.25.1/go.mod h1:RMVyVFYte0gbSTaZ0N4KmTn6u/kClvAFp+mAVfS/DQc= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -247,6 +267,8 @@ github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs= +github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= @@ -557,8 +579,8 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= @@ -611,8 +633,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV 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= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/testcontainers/testcontainers-go v0.32.0 h1:ug1aK08L3gCHdhknlTTwWjPHPS+/alvLJU/DRxTD/ME= @@ -646,26 +668,26 @@ github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFi github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= gitlab.com/digitalxero/go-conventional-commit v1.0.7 h1:8/dO6WWG+98PMhlZowt/YjuiKhqhGlOCwlIV8SqqGh8= gitlab.com/digitalxero/go-conventional-commit v1.0.7/go.mod h1:05Xc2BFsSyC5tKhK0y+P3bs0AwUtNuTp+mTpbCU/DZ0= -go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= -go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= +go.mongodb.org/mongo-driver v1.17.6 h1:87JUG1wZfWsr6rIz3ZmpH90rL5tea7O3IHuSwHUpsss= +go.mongodb.org/mongo-driver v1.17.6/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= @@ -674,6 +696,8 @@ go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -682,8 +706,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= +golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -715,8 +739,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= +golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= 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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -737,8 +761,8 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= +golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -753,8 +777,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -785,20 +809,20 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= +golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= +golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -835,8 +859,8 @@ golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= +golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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= diff --git a/internal/lookout/conversions/convert.go b/internal/lookout/conversions/convert.go index 32de94902ad..d612c368ac9 100644 --- a/internal/lookout/conversions/convert.go +++ b/internal/lookout/conversions/convert.go @@ -1,6 +1,7 @@ package conversions import ( + "strconv" "time" "github.com/go-openapi/strfmt" @@ -47,15 +48,16 @@ func ToSwaggerJob(job *model.Job) *models.Job { func ToSwaggerRun(run *model.Run) *models.Run { return &models.Run{ - Cluster: run.Cluster, - ExitCode: run.ExitCode, - Finished: PostgreSQLTimeToSwaggerTime(run.Finished), - JobRunState: string(lookout.JobRunStateMap[run.JobRunState]), - Node: run.Node, - Leased: PostgreSQLTimeToSwaggerTime(run.Leased), - Pending: PostgreSQLTimeToSwaggerTime(run.Pending), - RunID: run.RunId, - Started: PostgreSQLTimeToSwaggerTime(run.Started), + Cluster: run.Cluster, + ExitCode: run.ExitCode, + Finished: PostgreSQLTimeToSwaggerTime(run.Finished), + JobRunState: string(lookout.JobRunStateMap[run.JobRunState]), + Node: run.Node, + Leased: PostgreSQLTimeToSwaggerTime(run.Leased), + Pending: PostgreSQLTimeToSwaggerTime(run.Pending), + RunID: run.RunId, + Started: PostgreSQLTimeToSwaggerTime(run.Started), + IngressAddresses: ingressAddressesToSwagger(run.IngressAddresses), } } @@ -117,3 +119,15 @@ func PostgreSQLTimeToSwaggerTime(t *model.PostgreSQLTime) *strfmt.DateTime { s := strfmt.DateTime(t.Time) return &s } + +func ingressAddressesToSwagger(addresses map[int32]string) map[string]string { + if len(addresses) == 0 { + return nil + } + + swaggerAddresses := make(map[string]string, len(addresses)) + for k, v := range addresses { + swaggerAddresses[strconv.Itoa(int(k))] = v + } + return swaggerAddresses +} diff --git a/internal/lookout/conversions/convert_test.go b/internal/lookout/conversions/convert_test.go index 8572bedd80c..ee23ff1d136 100644 --- a/internal/lookout/conversions/convert_test.go +++ b/internal/lookout/conversions/convert_test.go @@ -48,6 +48,9 @@ var ( Pending: &baseTimeSwagger, RunID: "run-id", Started: &baseTimeSwagger, + IngressAddresses: map[string]string{ + "80": "address1.svc.cluster.local", + }, }, }, State: string(lookout.JobFailed), @@ -84,6 +87,9 @@ var ( Pending: model.NewPostgreSQLTime(&baseTime), RunId: "run-id", Started: model.NewPostgreSQLTime(&baseTime), + IngressAddresses: map[int32]string{ + 80: "address1.svc.cluster.local", + }, }, }, State: string(lookout.JobFailed), diff --git a/internal/lookout/gen/models/run.go b/internal/lookout/gen/models/run.go index 0754ea4c9ce..6c3f6920167 100644 --- a/internal/lookout/gen/models/run.go +++ b/internal/lookout/gen/models/run.go @@ -32,6 +32,9 @@ type Run struct { // Format: date-time Finished *strfmt.DateTime `json:"finished,omitempty"` + // ingress addresses + IngressAddresses map[string]string `json:"ingressAddresses,omitempty"` + // job run state // Required: true // Enum: ["RUN_PENDING","RUN_RUNNING","RUN_SUCCEEDED","RUN_FAILED","RUN_TERMINATED","RUN_PREEMPTED","RUN_UNABLE_TO_SCHEDULE","RUN_LEASE_RETURNED","RUN_LEASE_EXPIRED","RUN_MAX_RUNS_EXCEEDED","RUN_LEASED","RUN_CANCELLED"] diff --git a/internal/lookout/gen/restapi/embedded_spec.go b/internal/lookout/gen/restapi/embedded_spec.go index 68cbe177f82..49d99313da7 100644 --- a/internal/lookout/gen/restapi/embedded_spec.go +++ b/internal/lookout/gen/restapi/embedded_spec.go @@ -765,6 +765,12 @@ func init() { "format": "date-time", "x-nullable": true }, + "ingressAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "jobRunState": { "type": "string", "enum": [ @@ -1611,6 +1617,12 @@ func init() { "format": "date-time", "x-nullable": true }, + "ingressAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "jobRunState": { "type": "string", "enum": [ diff --git a/internal/lookout/model/model.go b/internal/lookout/model/model.go index 12ac70dec80..25597a4dfd7 100644 --- a/internal/lookout/model/model.go +++ b/internal/lookout/model/model.go @@ -89,15 +89,16 @@ func (t *PostgreSQLTime) UnmarshalJSON(b []byte) error { } type Run struct { - Cluster string - ExitCode *int32 - Finished *PostgreSQLTime - JobRunState int - Node *string - Leased *PostgreSQLTime - Pending *PostgreSQLTime - RunId string - Started *PostgreSQLTime + Cluster string + ExitCode *int32 + Finished *PostgreSQLTime + JobRunState int + Node *string + Leased *PostgreSQLTime + Pending *PostgreSQLTime + RunId string + Started *PostgreSQLTime + IngressAddresses map[int32]string } type JobGroup struct { diff --git a/internal/lookout/repository/getjobs.go b/internal/lookout/repository/getjobs.go index 19c5819cb6e..b42cc10398e 100644 --- a/internal/lookout/repository/getjobs.go +++ b/internal/lookout/repository/getjobs.go @@ -111,6 +111,7 @@ func (r *SqlGetJobsRepository) getJobs(ctx *armadacontext.Context, filters []*mo ); err != nil { return nil, err } + job := jobRowToModel(&row) if annotations.Valid { if err := json.Unmarshal([]byte(annotations.String), &job.Annotations); err != nil { diff --git a/internal/lookout/repository/getjobs_test.go b/internal/lookout/repository/getjobs_test.go index b8c7e974f69..97ddb4134bf 100644 --- a/internal/lookout/repository/getjobs_test.go +++ b/internal/lookout/repository/getjobs_test.go @@ -2529,3 +2529,32 @@ func TestGetJobsByClusterOfLatestRun(t *testing.T) { }) require.NoError(t, err) } + +func TestGetJobsIncludesIngressAddresses(t *testing.T) { + err := withGetJobsSetup(func(converter *instructions.InstructionConverter, store *lookoutdb.LookoutDb, repo *SqlGetJobsRepository, testClock *clock.FakeClock) error { + runId := uuid.NewString() + ingressAddresses := map[int32]string{ + 80: "ingress.example.com", + } + + job := NewJobSimulatorWithClock(converter, store, testClock). + Submit(queue, jobSet, owner, namespace, baseTime, basicJobOpts). + Lease(runId, cluster, node, baseTime). + Pending(runId, cluster, baseTime). + Running(runId, node, baseTime.Add(time.Minute)). + IngressInfo(runId, ingressAddresses, baseTime.Add(2*time.Minute)). + RunSucceeded(runId, baseTime.Add(3*time.Minute)). + Succeeded(baseTime.Add(3 * time.Minute)). + Build(). + Job() + + result, err := repo.GetJobs(armadacontext.TODO(), []*model.Filter{}, false, &model.Order{}, 0, 10) + require.NoError(t, err) + require.Len(t, result.Jobs, 1) + assert.Equal(t, job, result.Jobs[0]) + require.Len(t, result.Jobs[0].Runs, 1) + assert.Equal(t, ingressAddresses, result.Jobs[0].Runs[0].IngressAddresses) + return nil + }) + require.NoError(t, err) +} diff --git a/internal/lookout/repository/querybuilder.go b/internal/lookout/repository/querybuilder.go index c32352c9135..8b74b955e61 100644 --- a/internal/lookout/repository/querybuilder.go +++ b/internal/lookout/repository/querybuilder.go @@ -144,7 +144,8 @@ CROSS JOIN LATERAL ( 'started', started AT TIME ZONE 'UTC', 'finished', finished AT TIME ZONE 'UTC', 'jobRunState', job_run_state, - 'exitCode', exit_code + 'exitCode', exit_code, + 'ingressAddresses', ingress_addresses ) ) ORDER BY COALESCE(leased, pending) diff --git a/internal/lookout/repository/util.go b/internal/lookout/repository/util.go index 7e1ec98a787..f965dec9292 100644 --- a/internal/lookout/repository/util.go +++ b/internal/lookout/repository/util.go @@ -55,15 +55,16 @@ type JobOptions struct { } type runPatch struct { - runId string - cluster *string - exitCode *int32 - finished *time.Time - jobRunState lookout.JobRunState - node *string - leased *time.Time - pending *time.Time - started *time.Time + runId string + cluster *string + exitCode *int32 + finished *time.Time + jobRunState lookout.JobRunState + node *string + leased *time.Time + pending *time.Time + started *time.Time + ingressAddresses map[int32]string } func NewJobSimulator(converter *instructions.InstructionConverter, store *lookoutdb.LookoutDb) *JobSimulator { @@ -298,6 +299,27 @@ func (js *JobSimulator) Running(runId string, node string, timestamp time.Time) return js } +func (js *JobSimulator) IngressInfo(runId string, ingressAddresses map[int32]string, timestamp time.Time) *JobSimulator { + ts := timestampOrNow(timestamp) + ingressEvent := &armadaevents.EventSequence_Event{ + Created: ts, + Event: &armadaevents.EventSequence_Event_StandaloneIngressInfo{ + StandaloneIngressInfo: &armadaevents.StandaloneIngressInfo{ + IngressAddresses: ingressAddresses, + JobId: js.jobId, + RunId: runId, + }, + }, + } + js.events = append(js.events, ingressEvent) + + js.updateRun(js.job, &runPatch{ + runId: runId, + ingressAddresses: ingressAddresses, + }) + return js +} + func (js *JobSimulator) RunSucceeded(runId string, timestamp time.Time) *JobSimulator { ts := timestampOrNow(timestamp) succeeded := protoutil.ToStdTime(ts) @@ -667,15 +689,16 @@ func (js *JobSimulator) updateRun(job *model.Job, patch *runPatch) { cluster = *patch.cluster } job.Runs = append(job.Runs, &model.Run{ - Cluster: cluster, - ExitCode: patch.exitCode, - Finished: model.NewPostgreSQLTime(patch.finished), - JobRunState: lookout.JobRunStateOrdinalMap[patch.jobRunState], - Node: patch.node, - Leased: model.NewPostgreSQLTime(patch.leased), - Pending: model.NewPostgreSQLTime(patch.pending), - RunId: patch.runId, - Started: model.NewPostgreSQLTime(patch.started), + Cluster: cluster, + ExitCode: patch.exitCode, + Finished: model.NewPostgreSQLTime(patch.finished), + JobRunState: lookout.JobRunStateOrdinalMap[patch.jobRunState], + Node: patch.node, + Leased: model.NewPostgreSQLTime(patch.leased), + Pending: model.NewPostgreSQLTime(patch.pending), + RunId: patch.runId, + Started: model.NewPostgreSQLTime(patch.started), + IngressAddresses: patch.ingressAddresses, }) job.RuntimeSeconds = calculateJobRuntime(model.NewPostgreSQLTime(patch.started), model.NewPostgreSQLTime(patch.finished), js.clock) } @@ -703,6 +726,9 @@ func patchRun(run *model.Run, patch *runPatch) { if patch.started != nil { run.Started = model.NewPostgreSQLTime(patch.started) } + if patch.ingressAddresses != nil { + run.IngressAddresses = patch.ingressAddresses + } } func prefixAnnotations(prefix string, annotations map[string]string) map[string]string { diff --git a/internal/lookout/schema/migrations/025_create_job_run_ingress_addresses_column.sql b/internal/lookout/schema/migrations/025_create_job_run_ingress_addresses_column.sql new file mode 100644 index 00000000000..1b921cf2559 --- /dev/null +++ b/internal/lookout/schema/migrations/025_create_job_run_ingress_addresses_column.sql @@ -0,0 +1 @@ +ALTER TABLE job_run ADD COLUMN ingress_addresses JSONB NULL; diff --git a/internal/lookout/swagger.yaml b/internal/lookout/swagger.yaml index 4bef434e809..e7142db2cfd 100644 --- a/internal/lookout/swagger.yaml +++ b/internal/lookout/swagger.yaml @@ -189,6 +189,10 @@ definitions: type: integer format: int32 x-nullable: true + ingressAddresses: + type: object + additionalProperties: + type: string group: type: object required: diff --git a/internal/lookoutingester/instructions/instructions.go b/internal/lookoutingester/instructions/instructions.go index 3958b40d3b2..139df2cdf56 100644 --- a/internal/lookoutingester/instructions/instructions.go +++ b/internal/lookoutingester/instructions/instructions.go @@ -118,11 +118,12 @@ func (c *InstructionConverter) convertSequence( err = c.handleJobRequeued(ts, event.GetJobRequeued(), update) case *armadaevents.EventSequence_Event_JobRunLeased: err = c.handleJobRunLeased(ts, event.GetJobRunLeased(), update) + case *armadaevents.EventSequence_Event_StandaloneIngressInfo: + err = c.handleStandaloneIngressInfo(event.GetStandaloneIngressInfo(), update) case *armadaevents.EventSequence_Event_ReprioritiseJobSet, *armadaevents.EventSequence_Event_CancelJob, *armadaevents.EventSequence_Event_CancelJobSet, *armadaevents.EventSequence_Event_ResourceUtilisation, - *armadaevents.EventSequence_Event_StandaloneIngressInfo, *armadaevents.EventSequence_Event_PartitionMarker, *armadaevents.EventSequence_Event_JobValidated, *armadaevents.EventSequence_Event_JobRunPreemptionRequested: @@ -459,6 +460,15 @@ func (c *InstructionConverter) handleJobRunPreempted(ts time.Time, event *armada return nil } +func (c *InstructionConverter) handleStandaloneIngressInfo(event *armadaevents.StandaloneIngressInfo, update *model.InstructionSet) error { + jobRun := model.UpdateJobRunInstruction{ + RunId: event.RunId, + IngressAddresses: event.IngressAddresses, + } + update.JobRunsToUpdate = append(update.JobRunsToUpdate, &jobRun) + return nil +} + func tryCompressError(jobId string, errorString string, compressor compress.Compressor) []byte { compressedError, err := compressor.Compress([]byte(errorString)) if err != nil { diff --git a/internal/lookoutingester/instructions/instructions_test.go b/internal/lookoutingester/instructions/instructions_test.go index e78fbf28620..80cd509ee88 100644 --- a/internal/lookoutingester/instructions/instructions_test.go +++ b/internal/lookoutingester/instructions/instructions_test.go @@ -173,6 +173,26 @@ var expectedCancelledRun = model.UpdateJobRunInstruction{ JobRunState: pointer.Int32(lookout.JobRunCancelledOrdinal), } +var standaloneIngressAddresses = map[int32]string{ + 80: "ingress.example.com", +} + +var standaloneIngressInfoEvent = &armadaevents.EventSequence_Event{ + Created: testfixtures.BaseTimeProto, + Event: &armadaevents.EventSequence_Event_StandaloneIngressInfo{ + StandaloneIngressInfo: &armadaevents.StandaloneIngressInfo{ + JobId: testfixtures.JobId, + RunId: testfixtures.RunId, + IngressAddresses: standaloneIngressAddresses, + }, + }, +} + +var expectedStandaloneIngressRun = model.UpdateJobRunInstruction{ + RunId: testfixtures.RunId, + IngressAddresses: standaloneIngressAddresses, +} + func TestConvert(t *testing.T) { submit, err := testfixtures.DeepCopy(testfixtures.Submit) assert.NoError(t, err) @@ -402,6 +422,16 @@ func TestConvert(t *testing.T) { MessageIds: []pulsar.MessageID{pulsarutils.NewMessageId(1)}, }, }, + "job run ingress info": { + events: &utils.EventsWithIds[*armadaevents.EventSequence]{ + Events: []*armadaevents.EventSequence{testfixtures.NewEventSequence(standaloneIngressInfoEvent)}, + MessageIds: []pulsar.MessageID{pulsarutils.NewMessageId(1)}, + }, + expected: &model.InstructionSet{ + JobRunsToUpdate: []*model.UpdateJobRunInstruction{&expectedStandaloneIngressRun}, + MessageIds: []pulsar.MessageID{pulsarutils.NewMessageId(1)}, + }, + }, "job run preempted": { events: &utils.EventsWithIds[*armadaevents.EventSequence]{ Events: []*armadaevents.EventSequence{testfixtures.NewEventSequence(testfixtures.JobRunPreempted)}, diff --git a/internal/lookoutingester/lookoutdb/insertion.go b/internal/lookoutingester/lookoutdb/insertion.go index a41ac51eee4..faef695bd13 100644 --- a/internal/lookoutingester/lookoutdb/insertion.go +++ b/internal/lookoutingester/lookoutdb/insertion.go @@ -563,14 +563,15 @@ func (l *LookoutDb) CreateJobRunsBatch(ctx *armadacontext.Context, instructions createTmp := func(tx pgx.Tx) error { _, err := tx.Exec(ctx, fmt.Sprintf(` CREATE TEMPORARY TABLE %s ( - run_id varchar(36), - job_id varchar(32), - cluster varchar(512), - node varchar(512), - leased timestamp, - pending timestamp, - job_run_state smallint, - pool text + run_id varchar(36), + job_id varchar(32), + cluster varchar(512), + node varchar(512), + leased timestamp, + pending timestamp, + job_run_state smallint, + pool text, + ingress_addresses jsonb ) ON COMMIT DROP;`, tmpTable)) if err != nil { l.metrics.RecordDBError(commonmetrics.DBOperationCreateTempTable) @@ -590,6 +591,7 @@ func (l *LookoutDb) CreateJobRunsBatch(ctx *armadacontext.Context, instructions "pending", "job_run_state", "pool", + "ingress_addresses", }, pgx.CopyFromSlice(len(instructions), func(i int) ([]interface{}, error) { return []interface{}{ @@ -601,6 +603,7 @@ func (l *LookoutDb) CreateJobRunsBatch(ctx *armadacontext.Context, instructions instructions[i].Pending, instructions[i].JobRunState, instructions[i].Pool, + instructions[i].IngressAddresses, }, nil }), ) @@ -619,7 +622,8 @@ func (l *LookoutDb) CreateJobRunsBatch(ctx *armadacontext.Context, instructions leased, pending, job_run_state, - pool + pool, + ingress_addresses ) SELECT * from %s ON CONFLICT DO NOTHING`, tmpTable)) if err != nil { @@ -640,8 +644,9 @@ func (l *LookoutDb) CreateJobRunsScalar(ctx *armadacontext.Context, instructions leased, pending, job_run_state, - pool) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8) + pool, + ingress_addresses) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) ON CONFLICT DO NOTHING` for _, i := range instructions { err := l.withDatabaseRetryInsert(func() error { @@ -653,7 +658,9 @@ func (l *LookoutDb) CreateJobRunsScalar(ctx *armadacontext.Context, instructions i.Leased, i.Pending, i.JobRunState, - i.Pool) + i.Pool, + i.IngressAddresses, + ) if err != nil { l.metrics.RecordDBError(commonmetrics.DBOperationInsert) } @@ -672,15 +679,16 @@ func (l *LookoutDb) UpdateJobRunsBatch(ctx *armadacontext.Context, instructions createTmp := func(tx pgx.Tx) error { _, err := tx.Exec(ctx, fmt.Sprintf(` CREATE TEMPORARY TABLE %s ( - run_id varchar(36), - node varchar(512), - pending timestamp, - started timestamp, - finished timestamp, - job_run_state smallint, - error bytea, - debug bytea, - exit_code int + run_id varchar(36), + node varchar(512), + pending timestamp, + started timestamp, + finished timestamp, + job_run_state smallint, + error bytea, + debug bytea, + exit_code int, + ingress_addresses jsonb ) ON COMMIT DROP;`, tmpTable)) if err != nil { l.metrics.RecordDBError(commonmetrics.DBOperationCreateTempTable) @@ -701,6 +709,7 @@ func (l *LookoutDb) UpdateJobRunsBatch(ctx *armadacontext.Context, instructions "error", "debug", "exit_code", + "ingress_addresses", }, pgx.CopyFromSlice(len(instructions), func(i int) ([]interface{}, error) { return []interface{}{ @@ -713,6 +722,7 @@ func (l *LookoutDb) UpdateJobRunsBatch(ctx *armadacontext.Context, instructions instructions[i].Error, instructions[i].Debug, instructions[i].ExitCode, + instructions[i].IngressAddresses, }, nil }), ) @@ -724,14 +734,15 @@ func (l *LookoutDb) UpdateJobRunsBatch(ctx *armadacontext.Context, instructions ctx, fmt.Sprintf(`UPDATE job_run SET - node = coalesce(tmp.node, job_run.node), - pending = coalesce(tmp.pending, job_run.pending), - started = coalesce(tmp.started, job_run.started), - finished = coalesce(tmp.finished, job_run.finished), - job_run_state = coalesce(tmp.job_run_state, job_run.job_run_state), - error = coalesce(tmp.error, job_run.error), - debug = coalesce(tmp.debug, job_run.debug), - exit_code = coalesce(tmp.exit_code, job_run.exit_code) + node = coalesce(tmp.node, job_run.node), + pending = coalesce(tmp.pending, job_run.pending), + started = coalesce(tmp.started, job_run.started), + finished = coalesce(tmp.finished, job_run.finished), + job_run_state = coalesce(tmp.job_run_state, job_run.job_run_state), + error = coalesce(tmp.error, job_run.error), + debug = coalesce(tmp.debug, job_run.debug), + exit_code = coalesce(tmp.exit_code, job_run.exit_code), + ingress_addresses = coalesce(tmp.ingress_addresses, job_run.ingress_addresses) FROM %s as tmp where tmp.run_id = job_run.run_id`, tmpTable), ) if err != nil { @@ -747,14 +758,15 @@ func (l *LookoutDb) UpdateJobRunsBatch(ctx *armadacontext.Context, instructions func (l *LookoutDb) UpdateJobRunsScalar(ctx *armadacontext.Context, instructions []*model.UpdateJobRunInstruction) { sqlStatement := `UPDATE job_run SET - node = coalesce($2, node), - started = coalesce($3, started), - finished = coalesce($4, finished), - job_run_state = coalesce($5, job_run_state), - error = coalesce($6, error), - exit_code = coalesce($7, exit_code), - pending = coalesce($8, pending), - debug = coalesce($9, debug) + node = coalesce($2, node), + started = coalesce($3, started), + finished = coalesce($4, finished), + job_run_state = coalesce($5, job_run_state), + error = coalesce($6, error), + exit_code = coalesce($7, exit_code), + pending = coalesce($8, pending), + debug = coalesce($9, debug), + ingress_addresses = coalesce($10, ingress_addresses) WHERE run_id = $1` for _, i := range instructions { err := l.withDatabaseRetryInsert(func() error { @@ -767,7 +779,9 @@ func (l *LookoutDb) UpdateJobRunsScalar(ctx *armadacontext.Context, instructions i.Error, i.ExitCode, i.Pending, - i.Debug) + i.Debug, + i.IngressAddresses, + ) if err != nil { l.metrics.RecordDBError(commonmetrics.DBOperationUpdate) } @@ -964,6 +978,9 @@ func conflateJobRunUpdates(updates []*model.UpdateJobRunInstruction) []*model.Up if update.ExitCode != nil { existing.ExitCode = update.ExitCode } + if update.IngressAddresses != nil { + existing.IngressAddresses = update.IngressAddresses + } } else { updatesById[update.RunId] = update } diff --git a/internal/lookoutingester/lookoutdb/insertion_test.go b/internal/lookoutingester/lookoutdb/insertion_test.go index fb6324075f1..6b6d40597f7 100644 --- a/internal/lookoutingester/lookoutdb/insertion_test.go +++ b/internal/lookoutingester/lookoutdb/insertion_test.go @@ -1,6 +1,7 @@ package lookoutdb import ( + "encoding/json" "fmt" "regexp" "sort" @@ -45,6 +46,16 @@ var annotations = map[string]string{ "b": "1", } +var ( + initialIngressAddresses = map[int32]string{ + 80: "ingress.example.com", + } + updatedIngressAddresses = map[int32]string{ + 80: "ingress.example.com", + 443: "ingress-backup.example.com", + } +) + var ( baseTime, _ = time.Parse("2006-01-02T15:04:05.000Z", "2022-03-01T15:04:05.000Z") updateTime, _ = time.Parse("2006-01-02T15:04:05.000Z", "2022-03-01T15:04:06.000Z") @@ -87,17 +98,18 @@ type JobSpecRow struct { } type JobRunRow struct { - RunId string - JobId string - Cluster string - Node *string - Pending time.Time - Started *time.Time - Finished *time.Time - JobRunState int32 - Error []byte - Debug []byte - ExitCode *int32 + RunId string + JobId string + Cluster string + Node *string + Pending time.Time + Started *time.Time + Finished *time.Time + JobRunState int32 + Error []byte + Debug []byte + ExitCode *int32 + IngressAddresses map[int32]string } type JobErrorRow struct { @@ -116,21 +128,23 @@ func defaultInstructionSet() *model.InstructionSet { LastTransitionTimeSeconds: pointer.Int64(updateTime.Unix()), }}, JobRunsToCreate: []*model.CreateJobRunInstruction{{ - RunId: RunId, - JobId: JobId, - Cluster: executorId, - Leased: &updateTime, - Pending: &updateTime, - JobRunState: lookout.JobRunPendingOrdinal, + RunId: RunId, + JobId: JobId, + Cluster: executorId, + Leased: &updateTime, + Pending: &updateTime, + JobRunState: lookout.JobRunPendingOrdinal, + IngressAddresses: cloneIngressAddresses(initialIngressAddresses), }}, JobRunsToUpdate: []*model.UpdateJobRunInstruction{{ - RunId: RunId, - Node: pointer.String(nodeName), - Started: &startTime, - Finished: &finishedTime, - Debug: []byte(testfixtures.DebugMsg), - JobRunState: pointer.Int32(lookout.JobRunSucceededOrdinal), - ExitCode: pointer.Int32(0), + RunId: RunId, + Node: pointer.String(nodeName), + Started: &startTime, + Finished: &finishedTime, + Debug: []byte(testfixtures.DebugMsg), + JobRunState: pointer.Int32(lookout.JobRunSucceededOrdinal), + ExitCode: pointer.Int32(0), + IngressAddresses: cloneIngressAddresses(updatedIngressAddresses), }}, JobErrorsToCreate: []*model.CreateJobErrorInstruction{{ JobId: JobId, @@ -183,11 +197,12 @@ var expectedJobAfterUpdate = JobRow{ } var expectedJobRun = JobRunRow{ - RunId: RunId, - JobId: JobId, - Cluster: executorId, - Pending: updateTime, - JobRunState: lookout.JobRunPendingOrdinal, + RunId: RunId, + JobId: JobId, + Cluster: executorId, + Pending: updateTime, + JobRunState: lookout.JobRunPendingOrdinal, + IngressAddresses: cloneIngressAddresses(initialIngressAddresses), } var expectedJobError = JobErrorRow{ @@ -196,16 +211,17 @@ var expectedJobError = JobErrorRow{ } var expectedJobRunAfterUpdate = JobRunRow{ - RunId: RunId, - JobId: JobId, - Cluster: executorId, - Node: pointer.String(nodeName), - Pending: updateTime, - Started: &startTime, - Finished: &finishedTime, - JobRunState: lookout.JobRunSucceededOrdinal, - ExitCode: pointer.Int32(0), - Debug: []byte(testfixtures.DebugMsg), + RunId: RunId, + JobId: JobId, + Cluster: executorId, + Node: pointer.String(nodeName), + Pending: updateTime, + Started: &startTime, + Finished: &finishedTime, + JobRunState: lookout.JobRunSucceededOrdinal, + ExitCode: pointer.Int32(0), + Debug: []byte(testfixtures.DebugMsg), + IngressAddresses: cloneIngressAddresses(updatedIngressAddresses), } func TestCreateJobsBatch(t *testing.T) { @@ -1004,6 +1020,17 @@ func getJob(t *testing.T, db *pgxpool.Pool, jobId string) JobRow { return job } +func cloneIngressAddresses(source map[int32]string) map[int32]string { + if source == nil { + return nil + } + copy := make(map[int32]string, len(source)) + for k, v := range source { + copy[k] = v + } + return copy +} + func getJobSpec(t *testing.T, db *pgxpool.Pool, jobId string) JobSpecRow { jobSpec := JobSpecRow{} r := db.QueryRow( @@ -1036,9 +1063,11 @@ func getJobRun(t *testing.T, db *pgxpool.Pool, runId string) JobRunRow { job_run_state, error, exit_code, - debug + debug, + ingress_addresses FROM job_run WHERE run_id = $1`, runId) + var ingressJSON []byte err := r.Scan( &run.RunId, &run.JobId, @@ -1051,8 +1080,13 @@ func getJobRun(t *testing.T, db *pgxpool.Pool, runId string) JobRunRow { &run.Error, &run.ExitCode, &run.Debug, + &ingressJSON, ) assert.NoError(t, err) + if len(ingressJSON) > 0 { + err = json.Unmarshal(ingressJSON, &run.IngressAddresses) + assert.NoError(t, err) + } return run } diff --git a/internal/lookoutingester/model/model.go b/internal/lookoutingester/model/model.go index 6495bcedada..128bff957a7 100644 --- a/internal/lookoutingester/model/model.go +++ b/internal/lookoutingester/model/model.go @@ -44,27 +44,29 @@ type UpdateJobInstruction struct { // CreateJobRunInstruction is an instruction to update an existing row in the jobRuns table type CreateJobRunInstruction struct { - RunId string - JobId string - Cluster string - Pool string - Node *string - Leased *time.Time - Pending *time.Time - JobRunState int32 + RunId string + JobId string + Cluster string + Pool string + Node *string + Leased *time.Time + Pending *time.Time + JobRunState int32 + IngressAddresses map[int32]string } // UpdateJobRunInstruction is an instruction to update an existing row in the job runs table type UpdateJobRunInstruction struct { - RunId string - Node *string - Pending *time.Time - Started *time.Time - Finished *time.Time - JobRunState *int32 - Error []byte - Debug []byte - ExitCode *int32 + RunId string + Node *string + Pending *time.Time + Started *time.Time + Finished *time.Time + JobRunState *int32 + Error []byte + Debug []byte + ExitCode *int32 + IngressAddresses map[int32]string } // CreateJobErrorInstruction is an instruction to crearte a new row in the job_error table diff --git a/internal/lookoutui/src/models/lookoutModels.tsx b/internal/lookoutui/src/models/lookoutModels.tsx index d3359bb2468..a65388536ae 100644 --- a/internal/lookoutui/src/models/lookoutModels.tsx +++ b/internal/lookoutui/src/models/lookoutModels.tsx @@ -144,6 +144,7 @@ export type JobRun = { finished?: string jobRunState: JobRunState exitCode?: number + ingressAddresses?: Record } export enum Match { diff --git a/internal/lookoutui/src/pages/jobs/components/sidebar/JobRunDetails.tsx b/internal/lookoutui/src/pages/jobs/components/sidebar/JobRunDetails.tsx index acdf432783f..8912e3ad6e2 100644 --- a/internal/lookoutui/src/pages/jobs/components/sidebar/JobRunDetails.tsx +++ b/internal/lookoutui/src/pages/jobs/components/sidebar/JobRunDetails.tsx @@ -87,10 +87,23 @@ const makeKeyValuePairsData = ( if (node) { d.push({ key: "Node", value: node, allowCopy: true }) } - return d } +const makeIngressAddressEntries = (ingressAddresses?: JobRun["ingressAddresses"]) => { + if (!ingressAddresses) { + return [] as { portLabel: string; address: string }[] + } + + return Object.entries(ingressAddresses) + .filter(([, address]) => Boolean(address)) + .map(([port, address]) => ({ + portLabel: port.toString(), + address: address, + })) + .sort((a, b) => Number(a.portLabel) - Number(b.portLabel)) +} + export interface JobRunDetailsProps { run: JobRun runIndex: number @@ -99,7 +112,7 @@ export interface JobRunDetailsProps { } export const JobRunDetails = ({ - run: { node, cluster, started, pending, leased, finished, jobRunState, runId, exitCode }, + run: { node, cluster, started, pending, leased, finished, jobRunState, runId, exitCode, ingressAddresses }, runIndex, defaultExpanded, setRunError, @@ -139,21 +152,45 @@ export const JobRunDetails = ({ headingTextParts.push(`(${formatJobRunState(jobRunState)})`) const headingText = headingTextParts.join(" ") - const tableData = useMemo( - () => - makeKeyValuePairsData(formatIsoTimestamp, { - runId, - jobRunState, - leased, - pending, - started, - finished, - exitCode, - cluster, - node, - }), - [formatIsoTimestamp, runId, jobRunState, leased, pending, started, finished, exitCode, cluster, node], - ) + const ingressAddressEntries = useMemo(() => makeIngressAddressEntries(ingressAddresses), [ingressAddresses]) + + const tableData = useMemo(() => { + const baseRows = makeKeyValuePairsData(formatIsoTimestamp, { + runId, + jobRunState, + leased, + pending, + started, + finished, + exitCode, + cluster, + node, + }) + + if (ingressAddressEntries.length === 0) { + return baseRows + } + + const ingressRows = ingressAddressEntries.map(({ portLabel, address }, index) => ({ + key: ingressAddressEntries.length === 1 ? "Ingress address" : `Ingress address ${index + 1}`, + value: portLabel ? `${address}:${portLabel}` : address, + allowCopy: true, + })) + + return [...baseRows, ...ingressRows] + }, [ + formatIsoTimestamp, + runId, + jobRunState, + leased, + pending, + started, + finished, + exitCode, + cluster, + node, + ingressAddressEntries, + ]) return ( diff --git a/internal/server/queryapi/database/models.go b/internal/server/queryapi/database/models.go index 3c3addaa667..1af5f4f9af2 100644 --- a/internal/server/queryapi/database/models.go +++ b/internal/server/queryapi/database/models.go @@ -46,19 +46,20 @@ type JobError struct { } type JobRun struct { - RunID string `db:"run_id"` - JobID string `db:"job_id"` - Cluster string `db:"cluster"` - Node *string `db:"node"` - Pending pgtype.Timestamp `db:"pending"` - Started pgtype.Timestamp `db:"started"` - Finished pgtype.Timestamp `db:"finished"` - JobRunState int16 `db:"job_run_state"` - Error []byte `db:"error"` - ExitCode *int32 `db:"exit_code"` - Leased pgtype.Timestamp `db:"leased"` - Debug []byte `db:"debug"` - Pool *string `db:"pool"` + RunID string `db:"run_id"` + JobID string `db:"job_id"` + Cluster string `db:"cluster"` + Node *string `db:"node"` + Pending pgtype.Timestamp `db:"pending"` + Started pgtype.Timestamp `db:"started"` + Finished pgtype.Timestamp `db:"finished"` + JobRunState int16 `db:"job_run_state"` + Error []byte `db:"error"` + ExitCode *int32 `db:"exit_code"` + Leased pgtype.Timestamp `db:"leased"` + Debug []byte `db:"debug"` + Pool *string `db:"pool"` + IngressAddresses []byte `db:"ingress_addresses"` } type JobSpec struct { diff --git a/internal/server/queryapi/database/query.sql.go b/internal/server/queryapi/database/query.sql.go index 55ffdb6d19c..9303c42c8cc 100644 --- a/internal/server/queryapi/database/query.sql.go +++ b/internal/server/queryapi/database/query.sql.go @@ -126,7 +126,7 @@ func (q *Queries) GetJobErrorsByJobIds(ctx context.Context, jobIds []string) ([] } const getJobRunsByJobIds = `-- name: GetJobRunsByJobIds :many -SELECT run_id, job_id, cluster, node, pending, started, finished, job_run_state, error, exit_code, leased, debug, pool FROM job_run WHERE job_id = ANY($1::text[]) order by leased desc +SELECT run_id, job_id, cluster, node, pending, started, finished, job_run_state, error, exit_code, leased, debug, pool, ingress_addresses FROM job_run WHERE job_id = ANY($1::text[]) order by leased desc ` func (q *Queries) GetJobRunsByJobIds(ctx context.Context, jobIds []string) ([]JobRun, error) { @@ -152,6 +152,7 @@ func (q *Queries) GetJobRunsByJobIds(ctx context.Context, jobIds []string) ([]Jo &i.Leased, &i.Debug, &i.Pool, + &i.IngressAddresses, ); err != nil { return nil, err } @@ -164,7 +165,7 @@ func (q *Queries) GetJobRunsByJobIds(ctx context.Context, jobIds []string) ([]Jo } const getJobRunsByRunIds = `-- name: GetJobRunsByRunIds :many -SELECT run_id, job_id, cluster, node, pending, started, finished, job_run_state, error, exit_code, leased, debug, pool FROM job_run WHERE run_id = ANY($1::text[]) +SELECT run_id, job_id, cluster, node, pending, started, finished, job_run_state, error, exit_code, leased, debug, pool, ingress_addresses FROM job_run WHERE run_id = ANY($1::text[]) ` func (q *Queries) GetJobRunsByRunIds(ctx context.Context, runIds []string) ([]JobRun, error) { @@ -190,6 +191,7 @@ func (q *Queries) GetJobRunsByRunIds(ctx context.Context, runIds []string) ([]Jo &i.Leased, &i.Debug, &i.Pool, + &i.IngressAddresses, ); err != nil { return nil, err } diff --git a/internal/server/queryapi/query_api.go b/internal/server/queryapi/query_api.go index fec33f6e384..cf7b0485066 100644 --- a/internal/server/queryapi/query_api.go +++ b/internal/server/queryapi/query_api.go @@ -2,6 +2,7 @@ package queryapi import ( "context" + "encoding/json" "fmt" "github.com/jackc/pgx/v5" @@ -120,7 +121,11 @@ func (q *QueryApi) GetJobDetails(ctx context.Context, req *api.JobDetailsRequest if !ok { jobRuns = []*api.JobRunDetails{} } - jobRuns = append(jobRuns, parseJobDetails(row)) + jobRunDetails, err := parseJobDetails(row) + if err != nil { + return err + } + jobRuns = append(jobRuns, jobRunDetails) runsByJob[row.JobID] = jobRuns } @@ -180,7 +185,11 @@ func (q *QueryApi) GetJobRunDetails(ctx context.Context, req *api.JobRunDetailsR } detailsById := make(map[string]*api.JobRunDetails, len(resultRows)) for _, row := range resultRows { - detailsById[row.RunID] = parseJobDetails(row) + jobRunDetails, err := parseJobDetails(row) + if err != nil { + return nil, err + } + detailsById[row.RunID] = jobRunDetails } return &api.JobRunDetailsResponse{ JobRunDetails: detailsById, @@ -276,20 +285,39 @@ func parseDbJobStateToApi(dbStatus int16) api.JobState { return apiStatus } -func parseJobDetails(row database.JobRun) *api.JobRunDetails { +func parseJobDetails(row database.JobRun) (*api.JobRunDetails, error) { runState, ok := JobRunStateMap[row.JobRunState] if !ok { runState = api.JobRunState_RUN_STATE_UNKNOWN } + ingressAddresses, err := parseIngressAddresses(row.IngressAddresses) + if err != nil { + return nil, fmt.Errorf("failed to parse ingress addresses for run %s: %w", row.RunID, err) + } return &api.JobRunDetails{ - RunId: row.RunID, - JobId: row.JobID, - State: runState, - Cluster: row.Cluster, - Node: NilStringToString(row.Node), - LeasedTs: DbTimeToTimestamp(row.Leased), - PendingTs: DbTimeToTimestamp(row.Pending), - StartedTs: DbTimeToTimestamp(row.Started), - FinishedTs: DbTimeToTimestamp(row.Finished), + RunId: row.RunID, + JobId: row.JobID, + State: runState, + Cluster: row.Cluster, + Node: NilStringToString(row.Node), + LeasedTs: DbTimeToTimestamp(row.Leased), + PendingTs: DbTimeToTimestamp(row.Pending), + StartedTs: DbTimeToTimestamp(row.Started), + FinishedTs: DbTimeToTimestamp(row.Finished), + IngressAddresses: ingressAddresses, + }, nil +} + +func parseIngressAddresses(raw []byte) (map[int32]string, error) { + if len(raw) == 0 { + return nil, nil + } + var ingressAddresses map[int32]string + if err := json.Unmarshal(raw, &ingressAddresses); err != nil { + return nil, fmt.Errorf("unmarshal ingress addresses json: %w", err) + } + if len(ingressAddresses) == 0 { + return nil, nil } + return ingressAddresses, nil } diff --git a/internal/server/queryapi/query_api_test.go b/internal/server/queryapi/query_api_test.go index 31d0ab5c851..7526f425caf 100644 --- a/internal/server/queryapi/query_api_test.go +++ b/internal/server/queryapi/query_api_test.go @@ -25,9 +25,13 @@ const ( ) var ( - baseTime, _ = time.Parse("2006-01-02T15:04:05.000Z", "2022-03-01T15:04:05.000Z") - baseTimestamp = protoutil.ToTimestamp(baseTime) - testDecompressor = func() compress.Decompressor { return &compress.NoOpDecompressor{} } + baseTime, _ = time.Parse("2006-01-02T15:04:05.000Z", "2022-03-01T15:04:05.000Z") + baseTimestamp = protoutil.ToTimestamp(baseTime) + testDecompressor = func() compress.Decompressor { return &compress.NoOpDecompressor{} } + testIngressAddresses = map[int32]string{ + 80: "ingress.example.com", + 443: "ingress-backup.example.com", + } ) func TestGetJobDetails(t *testing.T) { @@ -41,8 +45,8 @@ func TestGetJobDetails(t *testing.T) { testJobs := []database.Job{job1, job2} testJobRuns := []database.JobRun{ - newJobRun("job2", "run1", lookout.JobRunRunningOrdinal, baseTime, ""), - newJobRun("job2", "run2", lookout.JobRunLeaseReturnedOrdinal, baseTime.Add(-1*time.Minute), ""), + newJobRun("job2", "run1", lookout.JobRunRunningOrdinal, baseTime, "", testIngressAddresses), + newJobRun("job2", "run2", lookout.JobRunLeaseReturnedOrdinal, baseTime.Add(-1*time.Minute), "", nil), } // setup job db @@ -109,8 +113,8 @@ func TestGetJobDetails(t *testing.T) { "job2", api.JobState_RUNNING, "run1", - newJobRunDetails("job2", "run1", api.JobRunState_RUN_STATE_RUNNING, baseTime), - newJobRunDetails("job2", "run2", api.JobRunState_RUNS_STATE_LEASE_RETURNED, baseTime.Add(-1*time.Minute))), + newJobRunDetails("job2", "run1", api.JobRunState_RUN_STATE_RUNNING, baseTime, testIngressAddresses), + newJobRunDetails("job2", "run2", api.JobRunState_RUNS_STATE_LEASE_RETURNED, baseTime.Add(-1*time.Minute), nil)), }, }, }, @@ -142,8 +146,8 @@ func TestGetJobRunDetails(t *testing.T) { } testJobRuns := []database.JobRun{ - newJobRun("job1", "run1", lookout.JobRunRunningOrdinal, baseTime, ""), - newJobRun("job1", "run2", lookout.JobRunLeaseReturnedOrdinal, baseTime.Add(-1*time.Minute), ""), + newJobRun("job1", "run1", lookout.JobRunRunningOrdinal, baseTime, "", testIngressAddresses), + newJobRun("job1", "run2", lookout.JobRunLeaseReturnedOrdinal, baseTime.Add(-1*time.Minute), "", nil), } // setup job db @@ -157,7 +161,7 @@ func TestGetJobRunDetails(t *testing.T) { }, expectedResponse: &api.JobRunDetailsResponse{ JobRunDetails: map[string]*api.JobRunDetails{ - "run1": newJobRunDetails("job1", "run1", api.JobRunState_RUN_STATE_RUNNING, baseTime), + "run1": newJobRunDetails("job1", "run1", api.JobRunState_RUN_STATE_RUNNING, baseTime, testIngressAddresses), }, }, }, @@ -167,8 +171,8 @@ func TestGetJobRunDetails(t *testing.T) { }, expectedResponse: &api.JobRunDetailsResponse{ JobRunDetails: map[string]*api.JobRunDetails{ - "run1": newJobRunDetails("job1", "run1", api.JobRunState_RUN_STATE_RUNNING, baseTime), - "run2": newJobRunDetails("job1", "run2", api.JobRunState_RUNS_STATE_LEASE_RETURNED, baseTime.Add(-1*time.Minute)), + "run1": newJobRunDetails("job1", "run1", api.JobRunState_RUN_STATE_RUNNING, baseTime, testIngressAddresses), + "run2": newJobRunDetails("job1", "run2", api.JobRunState_RUNS_STATE_LEASE_RETURNED, baseTime.Add(-1*time.Minute), nil), }, }, }, @@ -343,8 +347,8 @@ func TestGetJobErrors(t *testing.T) { } testJobRuns := []database.JobRun{ - newJobRun("job1", "run1", lookout.JobRunRunningOrdinal, baseTime, ""), - newJobRun("job2", "run2", lookout.JobRunLeaseReturnedOrdinal, baseTime.Add(-1*time.Minute), "expected-failure"), + newJobRun("job1", "run1", lookout.JobRunRunningOrdinal, baseTime, "", testIngressAddresses), + newJobRun("job2", "run2", lookout.JobRunLeaseReturnedOrdinal, baseTime.Add(-1*time.Minute), "expected-failure", nil), } testJobErrors := []database.JobError{ @@ -443,12 +447,17 @@ func newJob(jobId string, state int16, latestRunId string) database.Job { } } -func newJobRun(jobId, runId string, state int16, leased time.Time, error string) database.JobRun { +func newJobRun(jobId, runId string, state int16, leased time.Time, error string, ingressAddresses map[int32]string) database.JobRun { var errorBytes []byte = nil if error != "" { errorBytes = []byte(error) } + var ingressBytes []byte + if ingressAddresses != nil { + ingressBytes, _ = json.Marshal(ingressAddresses) + } + return database.JobRun{ RunID: runId, JobID: jobId, @@ -470,6 +479,7 @@ func newJobRun(jobId, runId string, state int16, leased time.Time, error string) Time: leased, Valid: true, }, + IngressAddresses: ingressBytes, } } @@ -491,16 +501,17 @@ func newJobDetails(jobId string, state api.JobState, latestRunId string, runs .. } } -func newJobRunDetails(jobId string, runId string, state api.JobRunState, leased time.Time) *api.JobRunDetails { +func newJobRunDetails(jobId string, runId string, state api.JobRunState, leased time.Time, ingressAddresses map[int32]string) *api.JobRunDetails { return &api.JobRunDetails{ - RunId: runId, - JobId: jobId, - State: state, - Cluster: "testCluster", - Node: "testNode", - LeasedTs: protoutil.ToTimestamp(leased), - PendingTs: baseTimestamp, - StartedTs: baseTimestamp, - FinishedTs: nil, + RunId: runId, + JobId: jobId, + State: state, + Cluster: "testCluster", + Node: "testNode", + LeasedTs: protoutil.ToTimestamp(leased), + PendingTs: baseTimestamp, + StartedTs: baseTimestamp, + FinishedTs: nil, + IngressAddresses: ingressAddresses, } } diff --git a/magefiles/tests.go b/magefiles/tests.go index e4460c8eee0..4b595a3c0a1 100644 --- a/magefiles/tests.go +++ b/magefiles/tests.go @@ -143,7 +143,7 @@ func Teste2eAirflow() error { if err != nil { return err } - cmd = append(cmd, "go", "run", "cmd/armadactl/main.go", "create", "queue", "queue-a") + cmd = append(cmd, "go", "run", "cmd/armadactl/main.go", "create", "queue", "e2e-test-queue") if err := dockerRun(cmd...); err != nil { fmt.Println(err) } diff --git a/pkg/api/api.swagger.go b/pkg/api/api.swagger.go index 0533e51aa73..1192dcef585 100644 --- a/pkg/api/api.swagger.go +++ b/pkg/api/api.swagger.go @@ -1550,6 +1550,12 @@ func SwaggerJsonTemplate() string { " \"type\": \"string\",\n" + " \"format\": \"date-time\"\n" + " },\n" + + " \"ingressAddresses\": {\n" + + " \"type\": \"object\",\n" + + " \"additionalProperties\": {\n" + + " \"type\": \"string\"\n" + + " }\n" + + " },\n" + " \"jobId\": {\n" + " \"type\": \"string\"\n" + " },\n" + diff --git a/pkg/api/api.swagger.json b/pkg/api/api.swagger.json index 9437b11142f..667c9586fb0 100644 --- a/pkg/api/api.swagger.json +++ b/pkg/api/api.swagger.json @@ -1539,6 +1539,12 @@ "type": "string", "format": "date-time" }, + "ingressAddresses": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "jobId": { "type": "string" }, diff --git a/pkg/api/job.pb.go b/pkg/api/job.pb.go index f94c0cb3563..320f2397fa7 100644 --- a/pkg/api/job.pb.go +++ b/pkg/api/job.pb.go @@ -79,15 +79,16 @@ func (JobRunState) EnumDescriptor() ([]byte, []int) { } type JobRunDetails struct { - RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` - JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` - State JobRunState `protobuf:"varint,3,opt,name=state,proto3,enum=api.JobRunState" json:"state,omitempty"` - Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3" json:"cluster,omitempty"` - Node string `protobuf:"bytes,5,opt,name=node,proto3" json:"node,omitempty"` - LeasedTs *types.Timestamp `protobuf:"bytes,7,opt,name=leased_ts,json=leasedTs,proto3" json:"leasedTs,omitempty"` - PendingTs *types.Timestamp `protobuf:"bytes,8,opt,name=pending_ts,json=pendingTs,proto3" json:"pendingTs,omitempty"` - StartedTs *types.Timestamp `protobuf:"bytes,9,opt,name=started_ts,json=startedTs,proto3" json:"startedTs,omitempty"` - FinishedTs *types.Timestamp `protobuf:"bytes,10,opt,name=finished_ts,json=finishedTs,proto3" json:"finishedTs,omitempty"` + RunId string `protobuf:"bytes,1,opt,name=run_id,json=runId,proto3" json:"runId,omitempty"` + JobId string `protobuf:"bytes,2,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` + State JobRunState `protobuf:"varint,3,opt,name=state,proto3,enum=api.JobRunState" json:"state,omitempty"` + Cluster string `protobuf:"bytes,4,opt,name=cluster,proto3" json:"cluster,omitempty"` + Node string `protobuf:"bytes,5,opt,name=node,proto3" json:"node,omitempty"` + LeasedTs *types.Timestamp `protobuf:"bytes,7,opt,name=leased_ts,json=leasedTs,proto3" json:"leasedTs,omitempty"` + PendingTs *types.Timestamp `protobuf:"bytes,8,opt,name=pending_ts,json=pendingTs,proto3" json:"pendingTs,omitempty"` + StartedTs *types.Timestamp `protobuf:"bytes,9,opt,name=started_ts,json=startedTs,proto3" json:"startedTs,omitempty"` + FinishedTs *types.Timestamp `protobuf:"bytes,10,opt,name=finished_ts,json=finishedTs,proto3" json:"finishedTs,omitempty"` + IngressAddresses map[int32]string `protobuf:"bytes,11,rep,name=ingress_addresses,json=ingressAddresses,proto3" json:"ingressAddresses,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *JobRunDetails) Reset() { *m = JobRunDetails{} } @@ -186,6 +187,13 @@ func (m *JobRunDetails) GetFinishedTs() *types.Timestamp { return nil } +func (m *JobRunDetails) GetIngressAddresses() map[int32]string { + if m != nil { + return m.IngressAddresses + } + return nil +} + type JobDetails struct { JobId string `protobuf:"bytes,1,opt,name=job_id,json=jobId,proto3" json:"jobId,omitempty"` Queue string `protobuf:"bytes,2,opt,name=queue,proto3" json:"queue,omitempty"` @@ -881,6 +889,7 @@ func (m *JobStatusResponse) GetJobStates() map[string]JobState { func init() { proto.RegisterEnum("api.JobRunState", JobRunState_name, JobRunState_value) proto.RegisterType((*JobRunDetails)(nil), "api.JobRunDetails") + proto.RegisterMapType((map[int32]string)(nil), "api.JobRunDetails.IngressAddressesEntry") proto.RegisterType((*JobDetails)(nil), "api.JobDetails") proto.RegisterType((*JobDetailsRequest)(nil), "api.JobDetailsRequest") proto.RegisterType((*JobDetailsResponse)(nil), "api.JobDetailsResponse") @@ -904,106 +913,109 @@ func init() { func init() { proto.RegisterFile("pkg/api/job.proto", fileDescriptor_e45f6b75bfad87a4) } var fileDescriptor_e45f6b75bfad87a4 = []byte{ - // 1569 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4f, 0x6f, 0xdb, 0x46, - 0x16, 0x37, 0xe5, 0xbf, 0x7a, 0xb2, 0x6c, 0x7a, 0xfc, 0x4f, 0x56, 0xbc, 0xa6, 0x97, 0xc1, 0x26, - 0x8e, 0x91, 0x48, 0x58, 0xef, 0x2e, 0x90, 0xf5, 0x26, 0xd8, 0xda, 0x16, 0x13, 0xd8, 0x4d, 0x15, - 0x97, 0xb6, 0xd0, 0xa0, 0x68, 0x21, 0x90, 0xd2, 0xc4, 0xa1, 0x22, 0x91, 0x0c, 0x87, 0x34, 0x62, - 0xa0, 0x87, 0xa2, 0x40, 0x0f, 0xb9, 0xb5, 0xe8, 0x97, 0xe8, 0x27, 0x29, 0xda, 0x43, 0x81, 0x00, - 0xed, 0x21, 0x27, 0xa1, 0x48, 0x0a, 0x14, 0xd0, 0xa9, 0xdf, 0xa0, 0x05, 0x67, 0x48, 0x6a, 0x86, - 0xb2, 0x2b, 0x27, 0x47, 0xfd, 0xde, 0x7b, 0xbf, 0x79, 0xf3, 0xfe, 0xcd, 0xa3, 0x60, 0xce, 0x7d, - 0x7a, 0x52, 0x36, 0x5c, 0xab, 0xdc, 0x72, 0xcc, 0x92, 0xeb, 0x39, 0xbe, 0x83, 0x46, 0x0d, 0xd7, - 0x2a, 0x2e, 0xc4, 0x38, 0x09, 0xcc, 0x8e, 0xe5, 0x33, 0x51, 0x51, 0x39, 0x71, 0x9c, 0x93, 0x36, - 0x2e, 0xd3, 0x5f, 0x66, 0xf0, 0xb8, 0xec, 0x5b, 0x1d, 0x4c, 0x7c, 0xa3, 0xe3, 0x46, 0x0a, 0xab, - 0x91, 0x42, 0x68, 0x69, 0xd8, 0xb6, 0xe3, 0x1b, 0xbe, 0xe5, 0xd8, 0x84, 0x49, 0xd5, 0x1f, 0xc7, - 0x20, 0x7f, 0xe0, 0x98, 0x7a, 0x60, 0x57, 0xb0, 0x6f, 0x58, 0x6d, 0x82, 0x36, 0x61, 0xc2, 0x0b, - 0xec, 0xba, 0xd5, 0x2c, 0x48, 0xeb, 0xd2, 0x46, 0x76, 0x77, 0xbe, 0xd7, 0x55, 0x66, 0xbd, 0xc0, - 0xde, 0x6f, 0xde, 0x74, 0x3a, 0x96, 0x8f, 0x3b, 0xae, 0x7f, 0xa6, 0x8f, 0x53, 0x20, 0xd4, 0x6d, - 0x39, 0x66, 0xa8, 0x9b, 0xe9, 0xeb, 0xb6, 0x1c, 0x53, 0xd4, 0xa5, 0x00, 0xfa, 0x1f, 0x8c, 0x13, - 0xdf, 0xf0, 0x71, 0x61, 0x74, 0x5d, 0xda, 0x98, 0xd9, 0x92, 0x4b, 0x86, 0x6b, 0x95, 0xd8, 0xd1, - 0x47, 0x21, 0xce, 0x8c, 0xa9, 0x0a, 0x6f, 0x4c, 0x01, 0x54, 0x86, 0xc9, 0x46, 0x3b, 0x20, 0x3e, - 0xf6, 0x0a, 0x63, 0xf4, 0xa4, 0xc5, 0x5e, 0x57, 0x99, 0x8b, 0x20, 0x4e, 0x3d, 0xd6, 0x42, 0xd7, - 0x60, 0xcc, 0x76, 0x9a, 0xb8, 0x30, 0x4e, 0xb5, 0x51, 0xaf, 0xab, 0xcc, 0x84, 0xbf, 0x39, 0x55, - 0x2a, 0x47, 0x0f, 0x21, 0xdb, 0xc6, 0x06, 0xc1, 0xcd, 0xba, 0x4f, 0x0a, 0x93, 0xeb, 0xd2, 0x46, - 0x6e, 0xab, 0x58, 0x62, 0x11, 0x2b, 0xc5, 0x21, 0x2d, 0x1d, 0xc7, 0x21, 0xdd, 0x5d, 0xea, 0x75, - 0x15, 0xc4, 0x0c, 0x8e, 0x09, 0x47, 0x36, 0x15, 0x63, 0x48, 0x07, 0x70, 0xb1, 0xdd, 0xb4, 0xec, - 0x93, 0x90, 0x71, 0x6a, 0x28, 0xe3, 0x72, 0xaf, 0xab, 0xcc, 0x47, 0x16, 0x02, 0x65, 0x36, 0x01, - 0x43, 0x4e, 0xe2, 0x1b, 0x9e, 0xcf, 0xbc, 0xcc, 0x5e, 0x8e, 0x33, 0xb2, 0x10, 0x39, 0x13, 0x10, - 0xd5, 0x20, 0xf7, 0xd8, 0xb2, 0x2d, 0xf2, 0x84, 0x91, 0xc2, 0x50, 0xd2, 0x42, 0xaf, 0xab, 0x2c, - 0xc4, 0x26, 0x02, 0x2b, 0xf4, 0x51, 0xf5, 0xe7, 0x09, 0x80, 0x03, 0xc7, 0xe4, 0x8a, 0x29, 0x2a, - 0x10, 0x69, 0x68, 0x81, 0xdc, 0x80, 0xf1, 0x67, 0x01, 0x0e, 0x30, 0x5f, 0x4b, 0x14, 0xe0, 0x55, - 0x29, 0x80, 0x6e, 0x52, 0x5a, 0x82, 0x7d, 0x5a, 0x4c, 0xd9, 0xdd, 0x85, 0x5e, 0x57, 0x91, 0x19, - 0xc2, 0x29, 0x47, 0x3a, 0xe8, 0x3f, 0x90, 0xb5, 0x8d, 0x0e, 0x26, 0xae, 0xd1, 0xc0, 0x51, 0xf9, - 0xd0, 0x08, 0x25, 0x20, 0x1f, 0xa1, 0x04, 0x44, 0xb7, 0xe3, 0x82, 0x1d, 0xa7, 0x05, 0x9b, 0x8f, - 0x0b, 0x76, 0x78, 0xb5, 0x3e, 0x82, 0x69, 0xd6, 0xa3, 0x51, 0xc6, 0x26, 0x86, 0x06, 0x77, 0xa5, - 0xd7, 0x55, 0x16, 0x13, 0x1b, 0x21, 0xba, 0x39, 0x0e, 0x0e, 0xcb, 0xb5, 0x61, 0xd8, 0x0d, 0xdc, - 0x7e, 0x8b, 0x72, 0x65, 0x06, 0x62, 0xb9, 0xc6, 0x18, 0xfa, 0x3f, 0xe4, 0x23, 0x42, 0x0f, 0x1b, - 0xc4, 0xb1, 0x69, 0xc5, 0x66, 0x77, 0x8b, 0xbd, 0xae, 0xb2, 0xc4, 0x04, 0x3a, 0xc5, 0x39, 0xe3, - 0x69, 0x1e, 0x47, 0x4f, 0x00, 0xb5, 0x0d, 0xe2, 0xd7, 0x7d, 0xcf, 0xb0, 0x89, 0x15, 0x8e, 0x96, - 0xcb, 0xd5, 0xe8, 0x5a, 0xaf, 0xab, 0x14, 0x43, 0xcb, 0xe3, 0xc4, 0x50, 0x70, 0x51, 0x4e, 0xcb, - 0xd0, 0x5d, 0xc8, 0xb7, 0x0d, 0x1f, 0x13, 0xbf, 0x1e, 0xcd, 0x27, 0xa0, 0xae, 0xd2, 0xd0, 0x31, - 0x81, 0x9e, 0x9a, 0x52, 0x39, 0x0e, 0x46, 0xdb, 0x30, 0x15, 0x96, 0x22, 0x71, 0x71, 0xa3, 0x90, - 0xa3, 0xee, 0x4d, 0xc5, 0x19, 0x65, 0xd3, 0xa4, 0xe5, 0x98, 0x47, 0x2e, 0x6e, 0xf0, 0xd3, 0x24, - 0x82, 0x50, 0x85, 0xd9, 0x7a, 0x81, 0x4d, 0x0a, 0xd3, 0xeb, 0xa3, 0x1b, 0xb9, 0x2d, 0xc4, 0x8d, - 0xaf, 0xa8, 0xd8, 0x13, 0x16, 0x3d, 0xb0, 0x49, 0x8a, 0x25, 0x84, 0xd0, 0x7f, 0x21, 0x17, 0xc5, - 0x3a, 0x20, 0xd8, 0x2b, 0xe4, 0xa9, 0xfb, 0xb4, 0xad, 0x18, 0x5c, 0x23, 0xc2, 0x2c, 0x83, 0x3e, - 0xaa, 0xfe, 0x20, 0xc1, 0x5c, 0xbf, 0xad, 0x74, 0xfc, 0x2c, 0xc0, 0xc4, 0x47, 0xb7, 0x60, 0x92, - 0x75, 0x17, 0x29, 0x48, 0xeb, 0xa3, 0x5c, 0x1f, 0xec, 0x37, 0x49, 0xaa, 0x0f, 0xf6, 0x9b, 0x04, - 0xed, 0xc1, 0x2c, 0x7e, 0xee, 0x1a, 0x76, 0xb3, 0x9e, 0x04, 0x22, 0x6c, 0xb5, 0xa9, 0xdd, 0x2b, - 0xbd, 0xae, 0xb2, 0xcc, 0x44, 0x07, 0x03, 0x41, 0xc8, 0x0b, 0x02, 0xf4, 0x1e, 0xcc, 0x70, 0x24, - 0x5e, 0x60, 0xd3, 0x16, 0x9c, 0x62, 0x15, 0x93, 0xa8, 0xea, 0x81, 0x50, 0x31, 0x3c, 0xae, 0xfe, - 0x2e, 0x01, 0xe2, 0xef, 0x42, 0x5c, 0xc7, 0x26, 0x18, 0x99, 0x90, 0x0b, 0x19, 0x9b, 0x0c, 0xa6, - 0x17, 0xca, 0x6d, 0x5d, 0x8f, 0xc3, 0x9c, 0xd2, 0xe6, 0x20, 0xcd, 0xf6, 0xbd, 0x33, 0x16, 0xc6, - 0x56, 0x02, 0xf2, 0x61, 0xec, 0xa3, 0xc5, 0x53, 0x98, 0x4d, 0x19, 0xa2, 0xab, 0x30, 0xfa, 0x14, - 0x9f, 0x45, 0xe3, 0x69, 0xae, 0xd7, 0x55, 0xf2, 0x4f, 0xf1, 0x19, 0x67, 0x1e, 0x4a, 0xd1, 0x36, - 0x8c, 0x9f, 0x1a, 0xed, 0x68, 0x34, 0xe5, 0xb6, 0x66, 0x53, 0x5e, 0xb1, 0x61, 0x40, 0x35, 0xf8, - 0x61, 0x40, 0x81, 0xed, 0xcc, 0x6d, 0x49, 0x7d, 0x91, 0x81, 0x45, 0xa1, 0x56, 0x92, 0x5b, 0x7b, - 0x30, 0x1b, 0xc5, 0x31, 0x75, 0xf3, 0x5b, 0x83, 0x05, 0xc6, 0x5f, 0xbe, 0x8f, 0xb2, 0xfb, 0xd3, - 0x14, 0xb6, 0x78, 0x9c, 0x4f, 0xa1, 0x20, 0x28, 0x7e, 0x46, 0xe3, 0x9f, 0x62, 0xb8, 0x5c, 0x20, - 0xee, 0x8a, 0x81, 0x38, 0xaf, 0x0b, 0x86, 0xc5, 0x42, 0x83, 0x85, 0xd4, 0xad, 0x92, 0x62, 0x66, - 0x7d, 0x2d, 0x14, 0x33, 0xdd, 0x33, 0x84, 0x62, 0x66, 0x88, 0xba, 0x03, 0xf2, 0x81, 0x63, 0x6a, - 0x9e, 0xe7, 0x78, 0xef, 0xd8, 0x0f, 0xea, 0x2b, 0xd6, 0x54, 0x31, 0x47, 0x94, 0x91, 0x4f, 0x21, - 0xac, 0x98, 0x3a, 0xa6, 0x68, 0x94, 0x8c, 0x7f, 0xc4, 0xf7, 0x14, 0x75, 0xfb, 0x08, 0x4b, 0x02, - 0x7d, 0x55, 0x5a, 0x31, 0xc6, 0xbf, 0x2a, 0x09, 0x58, 0x6c, 0xc2, 0x8c, 0x68, 0x75, 0xb9, 0xc0, - 0xdf, 0xe0, 0x03, 0x9f, 0x1d, 0x1a, 0x64, 0x16, 0x9d, 0xf0, 0xa5, 0x0a, 0xde, 0x35, 0x3a, 0x77, - 0x60, 0x7a, 0xa7, 0xe1, 0x5b, 0xa7, 0xf8, 0xc3, 0xf0, 0xc9, 0x25, 0xe1, 0x9b, 0x4b, 0x1f, 0x5f, - 0xc1, 0x9a, 0x21, 0xbc, 0x35, 0x43, 0xd4, 0x02, 0x2c, 0xdd, 0xc7, 0x3e, 0x4f, 0x10, 0xb9, 0xa1, - 0x7e, 0x9b, 0x81, 0xe5, 0x01, 0x51, 0x14, 0xfb, 0x17, 0x12, 0x2c, 0x1a, 0x54, 0x50, 0x67, 0x3c, - 0x75, 0xf3, 0xac, 0xee, 0x3a, 0x4e, 0x3b, 0xca, 0xc3, 0xbf, 0x69, 0x1e, 0x2e, 0xb0, 0x2e, 0xf1, - 0xe0, 0xee, 0xd9, 0xa1, 0xe3, 0xb4, 0x59, 0x5a, 0xd6, 0x7b, 0x5d, 0x65, 0xd5, 0x18, 0x10, 0x72, - 0x5e, 0xa3, 0x41, 0x69, 0xf1, 0x73, 0x09, 0x96, 0x2f, 0x60, 0xbc, 0x5c, 0xca, 0xee, 0x88, 0xbd, - 0x32, 0x47, 0x7d, 0x17, 0x18, 0x87, 0x65, 0xf1, 0x3b, 0x09, 0xae, 0x26, 0x69, 0xac, 0x11, 0xcb, - 0x3e, 0xd1, 0x9e, 0xfb, 0xd8, 0xb3, 0x8d, 0xf6, 0x81, 0x63, 0xd6, 0x3c, 0x2b, 0xce, 0x6c, 0xb2, - 0x39, 0x49, 0x6f, 0xb1, 0x39, 0x65, 0x2e, 0xb1, 0x39, 0xdd, 0x03, 0x19, 0x47, 0x27, 0xd2, 0x71, - 0x1f, 0x78, 0x56, 0xb4, 0x71, 0xad, 0xf6, 0xba, 0x4a, 0x01, 0x0b, 0xde, 0x70, 0xf6, 0x33, 0xa2, - 0x44, 0xfd, 0x8d, 0x75, 0x5a, 0x5c, 0x8f, 0x62, 0xa7, 0xd1, 0x9d, 0x69, 0xa0, 0xd3, 0x44, 0xdd, - 0x64, 0xef, 0x4a, 0x75, 0x1a, 0xc3, 0x52, 0x9d, 0xc6, 0xc0, 0x22, 0xa1, 0x9d, 0xc6, 0x59, 0x5d, - 0x2e, 0x6d, 0xb7, 0xf9, 0xb4, 0x9d, 0xbf, 0xf6, 0x5d, 0x9c, 0xb2, 0xcd, 0x2f, 0x33, 0x90, 0xe3, - 0x3e, 0x6a, 0xd0, 0x22, 0xcc, 0xe9, 0xb5, 0x6a, 0xfd, 0xe8, 0x78, 0xe7, 0x58, 0xab, 0xd7, 0xaa, - 0xef, 0x57, 0x1f, 0x7e, 0x54, 0x95, 0x47, 0xd0, 0x02, 0xc8, 0x7d, 0xf8, 0x81, 0xb6, 0x73, 0xa4, - 0x55, 0x64, 0x49, 0x54, 0x3e, 0xd4, 0xaa, 0x95, 0xfd, 0xea, 0x7d, 0x39, 0x23, 0xc2, 0x7a, 0xad, - 0x5a, 0x0d, 0xe1, 0x51, 0xb4, 0x0c, 0xf3, 0x7d, 0xf8, 0xa8, 0xb6, 0xb7, 0xa7, 0x69, 0x15, 0xad, - 0x22, 0x8f, 0x89, 0xe4, 0xf7, 0x76, 0xf6, 0x1f, 0x68, 0x15, 0x79, 0x5c, 0x54, 0x3f, 0xd4, 0x35, - 0xed, 0x83, 0xc3, 0x63, 0xad, 0x22, 0x4f, 0x88, 0x82, 0xbd, 0x9d, 0xea, 0x9e, 0xf6, 0x20, 0xb4, - 0x98, 0x44, 0x57, 0x60, 0x39, 0xe5, 0x64, 0x5d, 0x7b, 0x74, 0xb8, 0xaf, 0x6b, 0x15, 0x79, 0x0a, - 0xfd, 0x0d, 0x56, 0xf4, 0x5a, 0xf5, 0x48, 0x90, 0xea, 0xda, 0x71, 0x4d, 0xaf, 0x6a, 0x15, 0x39, - 0xbb, 0xf5, 0xc7, 0x18, 0x8c, 0x1d, 0x38, 0x26, 0x09, 0x77, 0xe1, 0xfb, 0xd8, 0x4f, 0x12, 0x8a, - 0x16, 0xd3, 0x09, 0xa6, 0x25, 0x5c, 0x5c, 0x3a, 0x3f, 0xef, 0xea, 0xca, 0x17, 0x3f, 0xfd, 0xfa, - 0x4d, 0x66, 0x5e, 0x9d, 0x29, 0x9f, 0xfe, 0x33, 0xfc, 0x20, 0x2e, 0x13, 0x2a, 0xdf, 0x96, 0x36, - 0xd1, 0xd7, 0x12, 0x28, 0x3c, 0xf5, 0x39, 0x0d, 0x82, 0x36, 0x44, 0xda, 0x8b, 0x7b, 0xe8, 0x42, - 0x07, 0x6e, 0x52, 0x07, 0xae, 0xa9, 0x7f, 0x17, 0x1d, 0x38, 0x87, 0x29, 0xf4, 0xe9, 0x13, 0xc8, - 0x33, 0x97, 0xe2, 0x0f, 0xa0, 0xa5, 0x81, 0x05, 0x86, 0x1d, 0xb7, 0x7c, 0xc1, 0x62, 0xa3, 0x16, - 0xe9, 0x79, 0x0b, 0xea, 0x6c, 0x7c, 0x5e, 0xb4, 0x16, 0x84, 0xec, 0x49, 0x2c, 0xd9, 0xf3, 0xd1, - 0x8f, 0xa5, 0xf0, 0x0c, 0xf6, 0xaf, 0x22, 0xbe, 0x56, 0x83, 0xb1, 0x64, 0x6f, 0x5c, 0xc8, 0x8c, - 0x41, 0x66, 0xcc, 0xdc, 0x1f, 0x01, 0x2b, 0xe7, 0x6d, 0x20, 0xec, 0x84, 0xe2, 0xc5, 0xcb, 0x89, - 0x78, 0x01, 0x2f, 0xb0, 0xf9, 0x0b, 0xb4, 0x60, 0x36, 0x35, 0xbc, 0xd1, 0x95, 0xf3, 0x47, 0x3a, - 0x3b, 0x67, 0xf5, 0xaf, 0xe6, 0xbd, 0xba, 0x4a, 0x4f, 0x5a, 0x52, 0xe7, 0xc2, 0x93, 0xd8, 0x7b, - 0x51, 0x66, 0x83, 0x7c, 0x5b, 0xda, 0xdc, 0xdd, 0xf9, 0xfe, 0xf5, 0x9a, 0xf4, 0xf2, 0xf5, 0x9a, - 0xf4, 0xcb, 0xeb, 0x35, 0xe9, 0xab, 0x37, 0x6b, 0x23, 0x2f, 0xdf, 0xac, 0x8d, 0xbc, 0x7a, 0xb3, - 0x36, 0xf2, 0xf1, 0xf5, 0x13, 0xcb, 0x7f, 0x12, 0x98, 0xa5, 0x86, 0xd3, 0x29, 0x1b, 0x5e, 0xc7, - 0x68, 0x1a, 0xae, 0xe7, 0xb4, 0x70, 0xc3, 0x8f, 0x7e, 0x95, 0xa3, 0x3f, 0x5a, 0xcc, 0x09, 0xfa, - 0xdd, 0xf2, 0xaf, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xf8, 0xa4, 0x20, 0x92, 0x11, 0x00, - 0x00, + // 1624 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x58, 0x4f, 0x6f, 0xdb, 0xc6, + 0x12, 0x37, 0x65, 0xcb, 0xb6, 0x56, 0x96, 0x4d, 0xad, 0xff, 0xc9, 0x8a, 0x9f, 0xe9, 0xc7, 0xe0, + 0x25, 0x8e, 0x91, 0x48, 0x78, 0x7e, 0xaf, 0x40, 0xea, 0x26, 0x68, 0x25, 0x8b, 0x09, 0xec, 0xa6, + 0x8a, 0x4b, 0x5b, 0x68, 0x50, 0xb4, 0x10, 0x48, 0x69, 0xe3, 0x50, 0x96, 0x48, 0x86, 0x4b, 0x1a, + 0x31, 0xd0, 0x43, 0x51, 0xa0, 0x87, 0xdc, 0x5a, 0xf4, 0x4b, 0xf4, 0xda, 0x2f, 0x51, 0xb4, 0xb7, + 0x00, 0xed, 0x21, 0x27, 0xa1, 0x48, 0x0a, 0x14, 0xd0, 0xa9, 0xdf, 0xa0, 0x05, 0x77, 0x49, 0x6a, + 0x97, 0x92, 0x2a, 0x25, 0x27, 0x43, 0xbf, 0x99, 0xf9, 0xed, 0xee, 0xcc, 0xfc, 0x66, 0x97, 0x06, + 0x59, 0xfb, 0xfc, 0xac, 0xa8, 0xd9, 0x46, 0xb1, 0x65, 0xe9, 0x05, 0xdb, 0xb1, 0x5c, 0x0b, 0x4e, + 0x6b, 0xb6, 0x91, 0x5f, 0x09, 0x71, 0xec, 0xe9, 0x1d, 0xc3, 0xa5, 0xa6, 0xbc, 0x74, 0x66, 0x59, + 0x67, 0x6d, 0x54, 0x24, 0xbf, 0x74, 0xef, 0x71, 0xd1, 0x35, 0x3a, 0x08, 0xbb, 0x5a, 0xc7, 0x0e, + 0x1c, 0x36, 0x03, 0x07, 0x3f, 0x52, 0x33, 0x4d, 0xcb, 0xd5, 0x5c, 0xc3, 0x32, 0x31, 0xb5, 0xca, + 0x3f, 0xcc, 0x82, 0xcc, 0x91, 0xa5, 0xab, 0x9e, 0x59, 0x41, 0xae, 0x66, 0xb4, 0x31, 0xdc, 0x05, + 0xb3, 0x8e, 0x67, 0xd6, 0x8d, 0x66, 0x4e, 0xd8, 0x16, 0x76, 0x52, 0xe5, 0xe5, 0x5e, 0x57, 0x5a, + 0x72, 0x3c, 0xf3, 0xb0, 0x79, 0xd3, 0xea, 0x18, 0x2e, 0xea, 0xd8, 0xee, 0xa5, 0x9a, 0x24, 0x80, + 0xef, 0xdb, 0xb2, 0x74, 0xdf, 0x37, 0xd1, 0xf7, 0x6d, 0x59, 0x3a, 0xef, 0x4b, 0x00, 0xf8, 0x1e, + 0x48, 0x62, 0x57, 0x73, 0x51, 0x6e, 0x7a, 0x5b, 0xd8, 0x59, 0xdc, 0x13, 0x0b, 0x9a, 0x6d, 0x14, + 0xe8, 0xd2, 0x27, 0x3e, 0x4e, 0x83, 0x89, 0x0b, 0x1b, 0x4c, 0x00, 0x58, 0x04, 0x73, 0x8d, 0xb6, + 0x87, 0x5d, 0xe4, 0xe4, 0x66, 0xc8, 0x4a, 0xab, 0xbd, 0xae, 0x94, 0x0d, 0x20, 0xc6, 0x3d, 0xf4, + 0x82, 0xd7, 0xc0, 0x8c, 0x69, 0x35, 0x51, 0x2e, 0x49, 0xbc, 0x61, 0xaf, 0x2b, 0x2d, 0xfa, 0xbf, + 0x19, 0x57, 0x62, 0x87, 0x0f, 0x41, 0xaa, 0x8d, 0x34, 0x8c, 0x9a, 0x75, 0x17, 0xe7, 0xe6, 0xb6, + 0x85, 0x9d, 0xf4, 0x5e, 0xbe, 0x40, 0x33, 0x56, 0x08, 0x53, 0x5a, 0x38, 0x0d, 0x53, 0x5a, 0x5e, + 0xeb, 0x75, 0x25, 0x48, 0x03, 0x4e, 0x31, 0x43, 0x36, 0x1f, 0x62, 0x50, 0x05, 0xc0, 0x46, 0x66, + 0xd3, 0x30, 0xcf, 0x7c, 0xc6, 0xf9, 0xb1, 0x8c, 0xeb, 0xbd, 0xae, 0xb4, 0x1c, 0x44, 0x70, 0x94, + 0xa9, 0x08, 0xf4, 0x39, 0xb1, 0xab, 0x39, 0x2e, 0xdd, 0x65, 0x6a, 0x32, 0xce, 0x20, 0x82, 0xe7, + 0x8c, 0x40, 0x58, 0x03, 0xe9, 0xc7, 0x86, 0x69, 0xe0, 0x27, 0x94, 0x14, 0x8c, 0x25, 0xcd, 0xf5, + 0xba, 0xd2, 0x4a, 0x18, 0xc2, 0xb1, 0x82, 0x3e, 0x0a, 0x3d, 0x90, 0x35, 0xcc, 0x33, 0x07, 0x61, + 0x5c, 0xd7, 0x9a, 0x4d, 0xff, 0x2f, 0xc2, 0xb9, 0xf4, 0xf6, 0xf4, 0x4e, 0x7a, 0x6f, 0x87, 0xa9, + 0x78, 0xd0, 0x6c, 0x85, 0x43, 0xea, 0x5b, 0x0a, 0x5d, 0x15, 0xd3, 0x75, 0x2e, 0xcb, 0x5b, 0xbd, + 0xae, 0x94, 0x37, 0x62, 0x26, 0x66, 0x41, 0x31, 0x6e, 0xcb, 0x9f, 0x83, 0xd5, 0xa1, 0x54, 0xf0, + 0x2a, 0x98, 0x3e, 0x47, 0x97, 0xa4, 0x95, 0x93, 0xe5, 0x6c, 0xaf, 0x2b, 0x65, 0xce, 0xd1, 0x25, + 0x43, 0xe5, 0x5b, 0xe1, 0x0d, 0x90, 0xbc, 0xd0, 0xda, 0x1e, 0x62, 0xbb, 0x98, 0x00, 0x6c, 0x23, + 0x12, 0x60, 0x3f, 0x71, 0x5b, 0x90, 0x7f, 0x9d, 0x05, 0xe0, 0xc8, 0xd2, 0x19, 0xc1, 0x04, 0x22, + 0x10, 0xc6, 0x8a, 0xe0, 0x06, 0x48, 0x3e, 0xf5, 0x10, 0xbf, 0x12, 0x01, 0x58, 0x57, 0x02, 0xc0, + 0x9b, 0x84, 0x16, 0x23, 0x97, 0x08, 0x26, 0x55, 0x5e, 0xe9, 0x75, 0x25, 0x91, 0x22, 0x8c, 0x73, + 0xe0, 0x03, 0xdf, 0x01, 0x29, 0x53, 0xeb, 0x20, 0x6c, 0x6b, 0x0d, 0x14, 0x48, 0x84, 0x74, 0x41, + 0x04, 0xb2, 0x5d, 0x10, 0x81, 0xf0, 0x76, 0x28, 0xca, 0x24, 0x11, 0x65, 0x26, 0x2c, 0xd1, 0x78, + 0x45, 0x3e, 0x02, 0x0b, 0x74, 0x0e, 0x05, 0x5d, 0x39, 0x3b, 0xb6, 0x81, 0x36, 0x7a, 0x5d, 0x69, + 0x35, 0x8a, 0xe1, 0x3a, 0x28, 0xcd, 0xc0, 0xbe, 0x24, 0x1b, 0x9a, 0xd9, 0x40, 0xed, 0x37, 0x90, + 0x24, 0x0d, 0xe0, 0x25, 0x19, 0x62, 0xf0, 0x7d, 0x90, 0x09, 0x08, 0x1d, 0xa4, 0x61, 0xcb, 0x24, + 0xaa, 0x4c, 0x95, 0xf3, 0xbd, 0xae, 0xb4, 0x46, 0x0d, 0x2a, 0xc1, 0x99, 0xe0, 0x05, 0x16, 0x87, + 0x4f, 0x00, 0x6c, 0x6b, 0xd8, 0xad, 0xbb, 0x8e, 0x66, 0x62, 0xc3, 0x1f, 0x9f, 0x93, 0xe9, 0x90, + 0xf4, 0xb1, 0x1f, 0x79, 0x1a, 0x05, 0x72, 0x5b, 0x14, 0xe3, 0x36, 0x78, 0x17, 0x64, 0xda, 0x9a, + 0x8b, 0xb0, 0x5b, 0x0f, 0x66, 0x30, 0x20, 0x5b, 0x25, 0xa9, 0xa3, 0x06, 0x35, 0x36, 0x89, 0xd3, + 0x0c, 0x0c, 0xf7, 0xc1, 0xbc, 0xdf, 0x8a, 0xd8, 0x46, 0x8d, 0x5c, 0x9a, 0x6c, 0x6f, 0x3e, 0xac, + 0x28, 0x9d, 0x98, 0x2d, 0x4b, 0x3f, 0xb1, 0x51, 0x83, 0x9d, 0x98, 0x01, 0x04, 0x2b, 0x34, 0xd6, + 0xf1, 0x4c, 0x9c, 0x5b, 0x20, 0x82, 0x85, 0x83, 0x82, 0x8d, 0x58, 0x54, 0xcf, 0xc4, 0x31, 0x16, + 0x1f, 0x82, 0xef, 0x82, 0x74, 0x90, 0x6b, 0x0f, 0x23, 0x27, 0x97, 0x21, 0xdb, 0x27, 0xa3, 0x83, + 0xc2, 0x35, 0xcc, 0xcd, 0x6b, 0xd0, 0x47, 0xe5, 0x9f, 0x05, 0x90, 0xed, 0xcb, 0x4a, 0x45, 0x4f, + 0x3d, 0x84, 0x5d, 0x78, 0x0b, 0xcc, 0x51, 0x75, 0xe1, 0x9c, 0xb0, 0x3d, 0xcd, 0xe8, 0xe0, 0xb0, + 0x89, 0x63, 0x3a, 0x38, 0x6c, 0x62, 0x78, 0x00, 0x96, 0xd0, 0x33, 0x5b, 0x33, 0x9b, 0xf5, 0x28, + 0x11, 0xbe, 0xd4, 0xe6, 0xcb, 0x57, 0x7a, 0x5d, 0x69, 0x9d, 0x9a, 0x8e, 0x06, 0x92, 0x90, 0xe1, + 0x0c, 0xf0, 0x03, 0xb0, 0xc8, 0x90, 0x38, 0x9e, 0x49, 0x24, 0x38, 0x4f, 0x3b, 0x26, 0x72, 0x55, + 0x3d, 0xae, 0x63, 0x58, 0x5c, 0xfe, 0x53, 0x00, 0x90, 0x3d, 0x0b, 0xb6, 0x2d, 0x13, 0x23, 0xa8, + 0x83, 0xb4, 0xcf, 0xd8, 0xa4, 0x30, 0x39, 0x50, 0x7a, 0xef, 0x7a, 0x98, 0xe6, 0x98, 0x37, 0x03, + 0xd1, 0xb1, 0x48, 0xd2, 0xd8, 0x8a, 0x40, 0x36, 0x8d, 0x7d, 0x34, 0x7f, 0x01, 0x96, 0x62, 0x81, + 0xec, 0x10, 0x4c, 0x8d, 0x1c, 0x82, 0xfb, 0xec, 0x10, 0x4c, 0xef, 0x2d, 0xc5, 0x76, 0x35, 0x76, + 0x2a, 0x3e, 0x4f, 0x80, 0x55, 0xae, 0x57, 0xa2, 0x53, 0x3b, 0x60, 0x29, 0xc8, 0x63, 0xec, 0xe4, + 0xb7, 0x06, 0x1b, 0x8c, 0x3d, 0x7c, 0x1f, 0xa5, 0xe7, 0x27, 0x25, 0x6c, 0xb1, 0x38, 0x5b, 0x42, + 0xce, 0x90, 0xff, 0x82, 0xe4, 0x3f, 0xc6, 0x30, 0x59, 0x22, 0xee, 0xf2, 0x89, 0x18, 0xa6, 0x82, + 0x71, 0xb9, 0x50, 0xc0, 0x4a, 0xec, 0x54, 0x51, 0x33, 0x53, 0x5d, 0x73, 0xcd, 0x4c, 0xde, 0x52, + 0x5c, 0x33, 0x53, 0x44, 0x2e, 0x01, 0xf1, 0xc8, 0xd2, 0x15, 0xc7, 0xb1, 0x9c, 0xb7, 0xd4, 0x83, + 0xfc, 0x92, 0x8a, 0x2a, 0xe4, 0x08, 0x2a, 0xf2, 0x39, 0xf0, 0x3b, 0xa6, 0x8e, 0x08, 0x1a, 0x14, + 0xe3, 0x3f, 0xe1, 0x39, 0x79, 0xdf, 0x3e, 0x42, 0x8b, 0x40, 0x6e, 0x95, 0x56, 0x88, 0xb1, 0xb7, + 0x4a, 0x04, 0xe6, 0x9b, 0x60, 0x91, 0x8f, 0x9a, 0x2c, 0xf1, 0x6f, 0x78, 0x0d, 0xd3, 0xec, 0xf8, + 0x37, 0x95, 0xf7, 0xb6, 0xd9, 0xb9, 0x03, 0x16, 0x4a, 0x0d, 0xd7, 0xb8, 0x40, 0x1f, 0xfb, 0x57, + 0x2e, 0xf6, 0xef, 0x5c, 0x72, 0xf9, 0x72, 0xd1, 0x14, 0x61, 0xa3, 0x29, 0x22, 0xe7, 0xc0, 0xda, + 0x7d, 0xe4, 0xb2, 0x04, 0xc1, 0x36, 0xe4, 0xef, 0x13, 0x60, 0x7d, 0xc0, 0x14, 0xe4, 0xfe, 0xb9, + 0x00, 0x56, 0x35, 0x62, 0xa8, 0x53, 0x9e, 0xba, 0x7e, 0x59, 0xb7, 0x2d, 0xab, 0x1d, 0xd4, 0xe1, + 0xff, 0xa4, 0x0e, 0x23, 0xa2, 0x0b, 0x2c, 0x58, 0xbe, 0x3c, 0xb6, 0xac, 0x36, 0x2d, 0xcb, 0x76, + 0xaf, 0x2b, 0x6d, 0x6a, 0x03, 0x46, 0x66, 0xd7, 0x70, 0xd0, 0x9a, 0xff, 0x52, 0x00, 0xeb, 0x23, + 0x18, 0x27, 0x2b, 0xd9, 0x1d, 0x5e, 0x2b, 0x59, 0xb2, 0x77, 0x8e, 0x71, 0x5c, 0x15, 0x7f, 0x14, + 0xc0, 0xd5, 0xa8, 0x8c, 0x35, 0x6c, 0x98, 0x67, 0xca, 0x33, 0x17, 0x39, 0xa6, 0xd6, 0x3e, 0xb2, + 0xf4, 0x9a, 0x63, 0x84, 0x95, 0x8d, 0x5e, 0x4e, 0xc2, 0x1b, 0xbc, 0x9c, 0x12, 0x13, 0xbc, 0x9c, + 0xee, 0x01, 0x11, 0x05, 0x2b, 0x92, 0x71, 0xef, 0x39, 0x46, 0xf0, 0xe2, 0xda, 0xec, 0x75, 0xa5, + 0x1c, 0xe2, 0x76, 0xc3, 0xc4, 0x2f, 0xf2, 0x16, 0xf9, 0x0f, 0xaa, 0xb4, 0xb0, 0x1f, 0x79, 0xa5, + 0x91, 0x37, 0xd3, 0x80, 0xd2, 0x78, 0xdf, 0xe8, 0xdd, 0x15, 0x53, 0x1a, 0xc5, 0x62, 0x4a, 0xa3, + 0x60, 0x1e, 0x13, 0xa5, 0x31, 0x51, 0x93, 0x95, 0xed, 0x36, 0x5b, 0xb6, 0xe1, 0xcf, 0xbe, 0xd1, + 0x25, 0xdb, 0xfd, 0x3a, 0x01, 0xd2, 0xcc, 0x87, 0x1b, 0x5c, 0x05, 0x59, 0xb5, 0x56, 0xad, 0x9f, + 0x9c, 0x96, 0x4e, 0x95, 0x7a, 0xad, 0xfa, 0x61, 0xf5, 0xe1, 0x27, 0x55, 0x71, 0x0a, 0xae, 0x00, + 0xb1, 0x0f, 0x3f, 0x50, 0x4a, 0x27, 0x4a, 0x45, 0x14, 0x78, 0xe7, 0x63, 0xa5, 0x5a, 0x39, 0xac, + 0xde, 0x17, 0x13, 0x3c, 0xac, 0xd6, 0xaa, 0x55, 0x1f, 0x9e, 0x86, 0xeb, 0x60, 0xb9, 0x0f, 0x9f, + 0xd4, 0x0e, 0x0e, 0x14, 0xa5, 0xa2, 0x54, 0xc4, 0x19, 0x9e, 0xfc, 0x5e, 0xe9, 0xf0, 0x81, 0x52, + 0x11, 0x93, 0xbc, 0xfb, 0xb1, 0xaa, 0x28, 0x1f, 0x1d, 0x9f, 0x2a, 0x15, 0x71, 0x96, 0x37, 0x1c, + 0x94, 0xaa, 0x07, 0xca, 0x03, 0x3f, 0x62, 0x0e, 0x5e, 0x01, 0xeb, 0xb1, 0x4d, 0xd6, 0x95, 0x47, + 0xc7, 0x87, 0xaa, 0x52, 0x11, 0xe7, 0xe1, 0xbf, 0xc0, 0x86, 0x5a, 0xab, 0x9e, 0x70, 0x56, 0x55, + 0x39, 0xad, 0xa9, 0x55, 0xa5, 0x22, 0xa6, 0xf6, 0xfe, 0x9a, 0x01, 0x33, 0x47, 0x96, 0x8e, 0xfd, + 0xb7, 0xf0, 0x7d, 0xe4, 0x46, 0x05, 0x85, 0xab, 0xf1, 0x02, 0x93, 0x16, 0xce, 0xaf, 0x0d, 0xaf, + 0xbb, 0xbc, 0xf1, 0xd5, 0x2f, 0xbf, 0x7f, 0x97, 0x58, 0x96, 0x17, 0x8b, 0x17, 0xff, 0xf5, 0x3f, + 0xfa, 0x8b, 0x98, 0xd8, 0xf7, 0x85, 0x5d, 0xf8, 0xad, 0x00, 0x24, 0x96, 0x7a, 0x88, 0x40, 0xe0, + 0x0e, 0x4f, 0x3b, 0x5a, 0x43, 0x23, 0x37, 0x70, 0x93, 0x6c, 0xe0, 0x9a, 0xfc, 0x6f, 0x7e, 0x03, + 0x43, 0x98, 0xfc, 0x3d, 0x7d, 0x06, 0x32, 0x74, 0x4b, 0xe1, 0x07, 0xd0, 0xda, 0xc0, 0x03, 0x86, + 0x2e, 0xb7, 0x3e, 0xe2, 0x61, 0x23, 0xe7, 0xc9, 0x7a, 0x2b, 0xf2, 0x52, 0xb8, 0x5e, 0xf0, 0x2c, + 0xf0, 0xd9, 0xa3, 0x5c, 0xd2, 0xeb, 0xa3, 0x9f, 0x4b, 0xee, 0x1a, 0xec, 0x1f, 0x85, 0xbf, 0xad, + 0x06, 0x73, 0x49, 0xef, 0x38, 0x9f, 0x19, 0x01, 0x91, 0x32, 0x33, 0xff, 0xec, 0xd8, 0x18, 0xf6, + 0x02, 0xa1, 0x2b, 0xe4, 0x47, 0x3f, 0x4e, 0xf8, 0x03, 0x38, 0x9e, 0xc9, 0x1e, 0xa0, 0x05, 0x96, + 0x62, 0xc3, 0x1b, 0x5e, 0x19, 0x3e, 0xd2, 0xe9, 0x3a, 0x9b, 0xff, 0x34, 0xef, 0xe5, 0x4d, 0xb2, + 0xd2, 0x9a, 0x9c, 0xf5, 0x57, 0xa2, 0xf7, 0x45, 0x91, 0x0e, 0xf2, 0x7d, 0x61, 0xb7, 0x5c, 0xfa, + 0xe9, 0xd5, 0x96, 0xf0, 0xe2, 0xd5, 0x96, 0xf0, 0xdb, 0xab, 0x2d, 0xe1, 0x9b, 0xd7, 0x5b, 0x53, + 0x2f, 0x5e, 0x6f, 0x4d, 0xbd, 0x7c, 0xbd, 0x35, 0xf5, 0xe9, 0xf5, 0x33, 0xc3, 0x7d, 0xe2, 0xe9, + 0x85, 0x86, 0xd5, 0x29, 0x6a, 0x4e, 0x47, 0x6b, 0x6a, 0xb6, 0x63, 0xb5, 0x50, 0xc3, 0x0d, 0x7e, + 0x15, 0x83, 0x7f, 0x26, 0xe9, 0xb3, 0xe4, 0xbb, 0xe5, 0x7f, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, + 0xbb, 0xb8, 0x01, 0xe8, 0x76, 0x12, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1286,6 +1298,23 @@ func (m *JobRunDetails) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.IngressAddresses) > 0 { + for k := range m.IngressAddresses { + v := m.IngressAddresses[k] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintJob(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i = encodeVarintJob(dAtA, i, uint64(k)) + i-- + dAtA[i] = 0x8 + i = encodeVarintJob(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x5a + } + } if m.FinishedTs != nil { { size, err := m.FinishedTs.MarshalToSizedBuffer(dAtA[:i]) @@ -2037,6 +2066,14 @@ func (m *JobRunDetails) Size() (n int) { l = m.FinishedTs.Size() n += 1 + l + sovJob(uint64(l)) } + if len(m.IngressAddresses) > 0 { + for k, v := range m.IngressAddresses { + _ = k + _ = v + mapEntrySize := 1 + sovJob(uint64(k)) + 1 + len(v) + sovJob(uint64(len(v))) + n += mapEntrySize + 1 + sovJob(uint64(mapEntrySize)) + } + } return n } @@ -2639,6 +2676,119 @@ func (m *JobRunDetails) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IngressAddresses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowJob + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthJob + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthJob + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.IngressAddresses == nil { + m.IngressAddresses = make(map[int32]string) + } + var mapkey int32 + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowJob + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowJob + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapkey |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowJob + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthJob + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthJob + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipJob(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthJob + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.IngressAddresses[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipJob(dAtA[iNdEx:]) diff --git a/pkg/api/job.proto b/pkg/api/job.proto index bdccc477a6c..787f1ad9d95 100644 --- a/pkg/api/job.proto +++ b/pkg/api/job.proto @@ -29,6 +29,7 @@ message JobRunDetails { google.protobuf.Timestamp pending_ts = 8; google.protobuf.Timestamp started_ts = 9; google.protobuf.Timestamp finished_ts = 10; + map ingress_addresses = 11; } diff --git a/scripts/localdev-init.sh b/scripts/localdev-init.sh index 078dd772c86..5dbaf8f92ff 100755 --- a/scripts/localdev-init.sh +++ b/scripts/localdev-init.sh @@ -25,7 +25,7 @@ # - POSTGRES_CONTAINER: Name of the PostgreSQL Docker container (default: postgres) # - GO_BIN: Path to Go binary (default: go) -set -eu # Exit on error and undefined variable +set -eu # Exit on error and undefined variable # Configuration POSTGRES_CONTAINER="${POSTGRES_CONTAINER:-postgres}" @@ -43,7 +43,7 @@ print_info() { echo -e "${YELLOW}→${NC} $1"; } print_info "Waiting for PostgreSQL container '${POSTGRES_CONTAINER}' to be ready..." for i in {1..30}; do - if docker exec "${POSTGRES_CONTAINER}" pg_isready -U postgres > /dev/null 2>&1; then + if docker exec "${POSTGRES_CONTAINER}" pg_isready -U postgres >/dev/null 2>&1; then print_success "PostgreSQL is ready!" break fi