Compare commits

..

28 Commits

Author SHA1 Message Date
allanice001
85f37cd113 fix: ui updates for org api keys
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-12 02:05:31 +00:00
allanice001
fd1a81ecd8 fix: api keys form bugfix and org key sweeper job
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-12 01:37:42 +00:00
allanice001
793daf3ac3 Merge remote-tracking branch 'origin/main' 2025-12-12 00:20:34 +00:00
allanice001
7bef4ef6f1 feat: add org_key and org_secret to payload on bastion
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-12 00:20:27 +00:00
public-glueops-renovatebot[bot]
9fa9cd169b chore: lock file maintenance (#448)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-11 23:26:33 +00:00
public-glueops-renovatebot[bot]
8812b43346 chore: lock file maintenance (#447)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-11 20:39:59 +00:00
public-glueops-renovatebot[bot]
21a6d7d5a1 chore: lock file maintenance (#445)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-11 19:37:53 +00:00
public-glueops-renovatebot[bot]
da332c89dd chore: lock file maintenance (#443)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-11 17:12:09 +00:00
public-glueops-renovatebot[bot]
fd25825f34 chore: lock file maintenance (#441)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-11 15:54:18 +00:00
allanice001
de3740e974 Merge remote-tracking branch 'origin/main' 2025-12-11 13:08:47 +00:00
allanice001
21dd26503f feat: add kubeconfig to payload if available
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-11 13:08:39 +00:00
public-glueops-renovatebot[bot]
e1da229c30 chore: lock file maintenance (#439)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-10 14:43:04 +00:00
allanice001
5377e521e9 fix: fix build error
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-10 14:19:10 +00:00
allanice001
a929561bc8 fix: bg jobs sequencing 2025-12-10 13:25:12 +00:00
allanice001
c63f9f1cf3 Merge remote-tracking branch 'origin/main' 2025-12-10 12:35:10 +00:00
allanice001
4c02179b70 fix: fix payload shape
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-10 12:34:11 +00:00
public-glueops-renovatebot[bot]
c8289c6936 chore: lock file maintenance (#435)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-10 11:38:00 +00:00
allanice001
c17caf22a2 fix: ui typo fix 2025-12-10 09:51:38 +00:00
allanice001
986eeb9bf9 fix: ui typo fix
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-10 09:51:13 +00:00
allanice001
b0bbc13946 fix: ui typo fix
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-10 09:51:07 +00:00
public-glueops-renovatebot[bot]
f50dcae823 feat: update github.com/aws/aws-sdk-go-v2/service/route53 to v1.62.0 #minor (#433)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-09 21:20:27 +00:00
public-glueops-renovatebot[bot]
ab9a77e1f5 chore(patch): update github.com/aws/aws-sdk-go-v2/config to v1.32.5 #patch (#432)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-09 20:41:11 +00:00
allanice001
416b2ff4e2 Merge remote-tracking branch 'origin/main' 2025-12-09 18:11:01 +00:00
allanice001
20bef7545c chore: log background jobs
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-09 18:10:50 +00:00
public-glueops-renovatebot[bot]
15e101439b chore: lock file maintenance (#430)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-09 17:05:07 +00:00
public-glueops-renovatebot[bot]
fb0901a812 chore(patch): update github.com/aws/aws-sdk-go-v2/config to v1.32.4 #patch (#428)
Co-authored-by: public-glueops-renovatebot[bot] <186083205+public-glueops-renovatebot[bot]@users.noreply.github.com>
2025-12-09 16:56:56 +00:00
allanice001
fee4c64551 fix: fix background jobs
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-09 15:49:31 +00:00
allanice001
4d37a6363f feat: add docker_image and docker_tag to cluster api
Signed-off-by: allanice001 <allanice001@gmail.com>
2025-12-08 17:04:10 +00:00
127 changed files with 1722 additions and 684 deletions

View File

@@ -204,6 +204,7 @@ swagger: $(DOCS_JSON) ## Generate Swagger docs if stale
# --- build --- # --- build ---
build: prepare ui swagger sdk-all ## Build everything: Go hygiene, UI, Swagger, SDKs, then Go binary build: prepare ui swagger sdk-all ## Build everything: Go hygiene, UI, Swagger, SDKs, then Go binary
@echo ">> Building Go binary: $(BIN)" @echo ">> Building Go binary: $(BIN)"
@$(GOCMD) get github.com/swaggo/swag/v2@v2.0.0-rc4
@$(GOCMD) build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN) $(MAIN) @$(GOCMD) build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN) $(MAIN)
# Handy: print resolved version metadata # Handy: print resolved version metadata

View File

@@ -156,6 +156,21 @@ var serveCmd = &cobra.Command{
if err != nil { if err != nil {
log.Printf("failed to enqueue cluster bootstrap: %v", err) log.Printf("failed to enqueue cluster bootstrap: %v", err)
} }
_, err = jobs.Enqueue(
context.Background(),
uuid.NewString(),
"org_key_sweeper",
bg.OrgKeySweeperArgs{
IntervalS: 3600,
RetentionDays: 10,
},
archer.WithMaxRetries(1),
archer.WithScheduleTime(time.Now()),
)
if err != nil {
log.Printf("failed to enqueue org_key_sweeper: %v", err)
}
} }
_ = auth.Refresh(rt.DB, rt.Cfg.JWTPrivateEncKey) _ = auth.Refresh(rt.DB, rt.Cfg.JWTPrivateEncKey)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -96,10 +96,16 @@ components:
$ref: '#/components/schemas/dto.RecordSetResponse' $ref: '#/components/schemas/dto.RecordSetResponse'
created_at: created_at:
type: string type: string
docker_image:
type: string
docker_tag:
type: string
glueops_load_balancer: glueops_load_balancer:
$ref: '#/components/schemas/dto.LoadBalancerResponse' $ref: '#/components/schemas/dto.LoadBalancerResponse'
id: id:
type: string type: string
kubeconfig:
type: string
last_error: last_error:
type: string type: string
name: name:
@@ -109,6 +115,10 @@ components:
$ref: '#/components/schemas/dto.NodePoolResponse' $ref: '#/components/schemas/dto.NodePoolResponse'
type: array type: array
uniqueItems: false uniqueItems: false
org_key:
type: string
org_secret:
type: string
random_token: random_token:
type: string type: string
region: region:
@@ -129,6 +139,10 @@ components:
properties: properties:
cluster_provider: cluster_provider:
type: string type: string
docker_image:
type: string
docker_tag:
type: string
name: name:
type: string type: string
region: region:
@@ -713,6 +727,10 @@ components:
properties: properties:
cluster_provider: cluster_provider:
type: string type: string
docker_image:
type: string
docker_tag:
type: string
name: name:
type: string type: string
region: region:
@@ -1025,6 +1043,8 @@ components:
type: object type: object
models.APIKey: models.APIKey:
properties: properties:
cluster_id:
type: string
created_at: created_at:
format: date-time format: date-time
type: string type: string
@@ -1034,6 +1054,8 @@ components:
id: id:
format: uuid format: uuid
type: string type: string
is_ephemeral:
type: boolean
last_used_at: last_used_at:
format: date-time format: date-time
type: string type: string
@@ -1044,6 +1066,8 @@ components:
type: string type: string
prefix: prefix:
type: string type: string
purpose:
type: string
revoked: revoked:
type: boolean type: boolean
scope: scope:

45
go.mod
View File

@@ -4,11 +4,11 @@ go 1.25.4
require ( require (
github.com/alexedwards/argon2id v1.0.0 github.com/alexedwards/argon2id v1.0.0
github.com/aws/aws-sdk-go-v2 v1.40.1 github.com/aws/aws-sdk-go-v2 v1.41.0
github.com/aws/aws-sdk-go-v2/config v1.32.3 github.com/aws/aws-sdk-go-v2/config v1.32.5
github.com/aws/aws-sdk-go-v2/credentials v1.19.3 github.com/aws/aws-sdk-go-v2/credentials v1.19.5
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.1 github.com/aws/aws-sdk-go-v2/service/route53 v1.62.0
github.com/aws/aws-sdk-go-v2/service/s3 v1.93.0 github.com/aws/aws-sdk-go-v2/service/s3 v1.93.2
github.com/coreos/go-oidc/v3 v3.17.0 github.com/coreos/go-oidc/v3 v3.17.0
github.com/dyaksa/archer v1.1.5 github.com/dyaksa/archer v1.1.5
github.com/fergusstrange/embedded-postgres v1.33.0 github.com/fergusstrange/embedded-postgres v1.33.0
@@ -25,12 +25,13 @@ require (
github.com/spf13/cobra v1.10.2 github.com/spf13/cobra v1.10.2
github.com/spf13/viper v1.21.0 github.com/spf13/viper v1.21.0
github.com/swaggo/swag/v2 v2.0.0-rc4 github.com/swaggo/swag/v2 v2.0.0-rc4
golang.org/x/crypto v0.45.0 golang.org/x/crypto v0.46.0
golang.org/x/oauth2 v0.34.0 golang.org/x/oauth2 v0.34.0
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
gorm.io/datatypes v1.2.7 gorm.io/datatypes v1.2.7
gorm.io/driver/postgres v1.6.0 gorm.io/driver/postgres v1.6.0
gorm.io/gorm v1.31.1 gorm.io/gorm v1.31.1
github.com/swaggo/swag/v2 v2.0.0-rc4
) )
require ( require (
@@ -39,19 +40,19 @@ require (
github.com/KyleBanks/depth v1.2.1 // indirect github.com/KyleBanks/depth v1.2.1 // indirect
github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5 // indirect github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.15 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.16 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.6 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16 // indirect
github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.4 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.7 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.41.5 // indirect
github.com/aws/smithy-go v1.24.0 // indirect github.com/aws/smithy-go v1.24.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect github.com/beorn7/perks v1.0.1 // indirect
github.com/bytedance/sonic v1.14.0 // indirect github.com/bytedance/sonic v1.14.0 // indirect
@@ -122,12 +123,12 @@ require (
go.uber.org/mock v0.5.0 // indirect go.uber.org/mock v0.5.0 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/arch v0.20.0 // indirect golang.org/x/arch v0.20.0 // indirect
golang.org/x/mod v0.29.0 // indirect golang.org/x/mod v0.30.0 // indirect
golang.org/x/net v0.47.0 // indirect golang.org/x/net v0.47.0 // indirect
golang.org/x/sync v0.18.0 // indirect golang.org/x/sync v0.19.0 // indirect
golang.org/x/sys v0.38.0 // indirect golang.org/x/sys v0.39.0 // indirect
golang.org/x/text v0.31.0 // indirect golang.org/x/text v0.32.0 // indirect
golang.org/x/tools v0.38.0 // indirect golang.org/x/tools v0.39.0 // indirect
google.golang.org/protobuf v1.36.9 // indirect google.golang.org/protobuf v1.36.9 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect
gorm.io/driver/mysql v1.5.7 // indirect gorm.io/driver/mysql v1.5.7 // indirect

94
go.sum
View File

@@ -10,44 +10,44 @@ github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5 h1:VauE2GcJNZFun2O
github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5/go.mod h1:gxOHeajFfvGQh/fxlC8oOKBe23xnnJTif00IFFbiT+o= github.com/ScaleFT/sshkeys v0.0.0-20200327173127-6142f742bca5/go.mod h1:gxOHeajFfvGQh/fxlC8oOKBe23xnnJTif00IFFbiT+o=
github.com/alexedwards/argon2id v1.0.0 h1:wJzDx66hqWX7siL/SRUmgz3F8YMrd/nfX/xHHcQQP0w= github.com/alexedwards/argon2id v1.0.0 h1:wJzDx66hqWX7siL/SRUmgz3F8YMrd/nfX/xHHcQQP0w=
github.com/alexedwards/argon2id v1.0.0/go.mod h1:tYKkqIjzXvZdzPvADMWOEZ+l6+BD6CtBXMj5fnJppiw= github.com/alexedwards/argon2id v1.0.0/go.mod h1:tYKkqIjzXvZdzPvADMWOEZ+l6+BD6CtBXMj5fnJppiw=
github.com/aws/aws-sdk-go-v2 v1.40.1 h1:difXb4maDZkRH0x//Qkwcfpdg1XQVXEAEs2DdXldFFc= github.com/aws/aws-sdk-go-v2 v1.41.0 h1:tNvqh1s+v0vFYdA1xq0aOJH+Y5cRyZ5upu6roPgPKd4=
github.com/aws/aws-sdk-go-v2 v1.40.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0= github.com/aws/aws-sdk-go-v2 v1.41.0/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 h1:489krEF9xIGkOaaX3CE/Be2uWjiXrkCH6gUX+bZA/BU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 h1:489krEF9xIGkOaaX3CE/Be2uWjiXrkCH6gUX+bZA/BU=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4/go.mod h1:IOAPF6oT9KCsceNTvvYMNHy0+kMF8akOjeDvPENWxp4= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4/go.mod h1:IOAPF6oT9KCsceNTvvYMNHy0+kMF8akOjeDvPENWxp4=
github.com/aws/aws-sdk-go-v2/config v1.32.3 h1:cpz7H2uMNTDa0h/5CYL5dLUEzPSLo2g0NkbxTRJtSSU= github.com/aws/aws-sdk-go-v2/config v1.32.5 h1:pz3duhAfUgnxbtVhIK39PGF/AHYyrzGEyRD9Og0QrE8=
github.com/aws/aws-sdk-go-v2/config v1.32.3/go.mod h1:srtPKaJJe3McW6T/+GMBZyIPc+SeqJsNPJsd4mOYZ6s= github.com/aws/aws-sdk-go-v2/config v1.32.5/go.mod h1:xmDjzSUs/d0BB7ClzYPAZMmgQdrodNjPPhd6bGASwoE=
github.com/aws/aws-sdk-go-v2/credentials v1.19.3 h1:01Ym72hK43hjwDeJUfi1l2oYLXBAOR8gNSZNmXmvuas= github.com/aws/aws-sdk-go-v2/credentials v1.19.5 h1:xMo63RlqP3ZZydpJDMBsH9uJ10hgHYfQFIk1cHDXrR4=
github.com/aws/aws-sdk-go-v2/credentials v1.19.3/go.mod h1:55nWF/Sr9Zvls0bGnWkRxUdhzKqj9uRNlPvgV1vgxKc= github.com/aws/aws-sdk-go-v2/credentials v1.19.5/go.mod h1:hhbH6oRcou+LpXfA/0vPElh/e0M3aFeOblE1sssAAEk=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15 h1:utxLraaifrSBkeyII9mIbVwXXWrZdlPO7FIKmyLCEcY= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16 h1:80+uETIWS1BqjnN9uJ0dBUaETh+P1XwFy5vwHwK5r9k=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.15/go.mod h1:hW6zjYUDQwfz3icf4g2O41PHi77u10oAzJ84iSzR/lo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.16/go.mod h1:wOOsYuxYuB/7FlnVtzeBYRcjSRtQpAW0hCP7tIULMwo=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15 h1:Y5YXgygXwDI5P4RkteB5yF7v35neH7LfJKBG+hzIons= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16 h1:rgGwPzb82iBYSvHMHXc8h9mRoOUBZIGFgKb9qniaZZc=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.15/go.mod h1:K+/1EpG42dFSY7CBj+Fruzm8PsCGWTXJ3jdeJ659oGQ= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.16/go.mod h1:L/UxsGeKpGoIj6DxfhOWHWQ/kGKcd4I1VncE4++IyKA=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15 h1:AvltKnW9ewxX2hFmQS0FyJH93aSvJVUEFvXfU+HWtSE= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16 h1:1jtGzuV7c82xnqOVfx2F0xmJcOw5374L7N6juGW6x6U=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.15/go.mod h1:3I4oCdZdmgrREhU74qS1dK9yZ62yumob+58AbFR4cQA= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.16/go.mod h1:M2E5OQf+XLe+SZGmmpaI2yy+J326aFf6/+54PoxSANc=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.15 h1:NLYTEyZmVZo0Qh183sC8nC+ydJXOOeIL/qI/sS3PdLY= github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.16 h1:CjMzUs78RDDv4ROu3JnJn/Ig1r6ZD7/T2DXLLRpejic=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.15/go.mod h1:Z803iB3B0bc8oJV8zH2PERLRfQUJ2n2BXISpsA4+O1M= github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.16/go.mod h1:uVW4OLBqbJXSHJYA9svT9BluSvvwbzLQ2Crf6UPzR3c=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 h1:0ryTNEdJbzUCEWkVXEXoqlXV72J5keC1GvILMOuD00E=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.6 h1:P1MU/SuhadGvg2jtviDXPEejU3jBNhoeeAlRadHzvHI= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7 h1:DIBqIrJ7hv+e4CmIk2z3pyKT+3B6qVMgRsawHiR3qso=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.6/go.mod h1:5KYaMG6wmVKMFBSfWoyG/zH8pWwzQFnKgpoSRlXHKdQ= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.7/go.mod h1:vLm00xmBke75UmpNvOcZQ/Q30ZFjbczeLFqGx5urmGo=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15 h1:3/u/4yZOffg5jdNk1sDpOQ4Y+R6Xbh+GzpDrSZjuy3U= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16 h1:oHjJHeUy0ImIV0bsrX0X91GkV5nJAyv1l1CC9lnO0TI=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.15/go.mod h1:4Zkjq0FKjE78NKjabuM4tRXKFzUJWXgP0ItEZK8l7JU= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.16/go.mod h1:iRSNGgOYmiYwSCXxXaKb9HfOEj40+oTKn8pTxMlYkRM=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.15 h1:wsSQ4SVz5YE1crz0Ap7VBZrV4nNqZt4CIBBT8mnwoNc= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16 h1:NSbvS17MlI2lurYgXnCOLvCFX38sBW4eiVER7+kkgsU=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.15/go.mod h1:I7sditnFGtYMIqPRU1QoHZAUrXkGp4SczmlLwrNPlD0= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.16/go.mod h1:SwT8Tmqd4sA6G1qaGdzWCJN99bUmPGHfRwwq3G5Qb+A=
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.1 h1:ik9tMw+xWZqzffOtGH3PfV0Yy/V+QsCb1XYXXXjUskk= github.com/aws/aws-sdk-go-v2/service/route53 v1.62.0 h1:80pDB3Tpmb2RCSZORrK9/3iQxsd+w6vSzVqpT1FGiwE=
github.com/aws/aws-sdk-go-v2/service/route53 v1.61.1/go.mod h1:JRqmldxIPU6uck5bcFS8ExwwG2mUwfy+jiUmismOxJs= github.com/aws/aws-sdk-go-v2/service/route53 v1.62.0/go.mod h1:6EZUGGNLPLh5Unt30uEoA+KQcByERfXIkax9qrc80nA=
github.com/aws/aws-sdk-go-v2/service/s3 v1.93.0 h1:IrbE3B8O9pm3lsg96AXIN5MXX4pECEuExh/A0Du3AuI= github.com/aws/aws-sdk-go-v2/service/s3 v1.93.2 h1:U3ygWUhCpiSPYSHOrRhb3gOl9T5Y3kB8k5Vjs//57bE=
github.com/aws/aws-sdk-go-v2/service/s3 v1.93.0/go.mod h1:/sJLzHtiiZvs6C1RbxS/anSAFwZD6oC6M/kotQzOiLw= github.com/aws/aws-sdk-go-v2/service/s3 v1.93.2/go.mod h1:79S2BdqCJpScXZA2y+cpZuocWsjGjJINyXnOsf5DTz8=
github.com/aws/aws-sdk-go-v2/service/signin v1.0.3 h1:d/6xOGIllc/XW1lzG9a4AUBMmpLA9PXcQnVPTuHHcik= github.com/aws/aws-sdk-go-v2/service/signin v1.0.4 h1:HpI7aMmJ+mm1wkSHIA2t5EaFFv5EFYXePW30p1EIrbQ=
github.com/aws/aws-sdk-go-v2/service/signin v1.0.3/go.mod h1:fQ7E7Qj9GiW8y0ClD7cUJk3Bz5Iw8wZkWDHsTe8vDKs= github.com/aws/aws-sdk-go-v2/service/signin v1.0.4/go.mod h1:C5RdGMYGlfM0gYq/tifqgn4EbyX99V15P2V3R+VHbQU=
github.com/aws/aws-sdk-go-v2/service/sso v1.30.6 h1:8sTTiw+9yuNXcfWeqKF2x01GqCF49CpP4Z9nKrrk/ts= github.com/aws/aws-sdk-go-v2/service/sso v1.30.7 h1:eYnlt6QxnFINKzwxP5/Ucs1vkG7VT3Iezmvfgc2waUw=
github.com/aws/aws-sdk-go-v2/service/sso v1.30.6/go.mod h1:8WYg+Y40Sn3X2hioaaWAAIngndR8n1XFdRPPX+7QBaM= github.com/aws/aws-sdk-go-v2/service/sso v1.30.7/go.mod h1:+fWt2UHSb4kS7Pu8y+BMBvJF0EWx+4H0hzNwtDNRTrg=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11 h1:E+KqWoVsSrj1tJ6I/fjDIu5xoS2Zacuu1zT+H7KtiIk= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12 h1:AHDr0DaHIAo8c9t1emrzAlVDFp+iMMKnPdYy6XO4MCE=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.11/go.mod h1:qyWHz+4lvkXcr3+PoGlGHEI+3DLLiU6/GdrFfMaAhB0= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.12/go.mod h1:GQ73XawFFiWxyWXMHWfhiomvP3tXtdNar/fi8z18sx0=
github.com/aws/aws-sdk-go-v2/service/sts v1.41.3 h1:tzMkjh0yTChUqJDgGkcDdxvZDSrJ/WB6R6ymI5ehqJI= github.com/aws/aws-sdk-go-v2/service/sts v1.41.5 h1:SciGFVNZ4mHdm7gpD1dgZYnCuVdX1s+lFTg4+4DOy70=
github.com/aws/aws-sdk-go-v2/service/sts v1.41.3/go.mod h1:T270C0R5sZNLbWUe8ueiAF42XSZxxPocTaGSgs5c/60= github.com/aws/aws-sdk-go-v2/service/sts v1.41.5/go.mod h1:iW40X4QBmUxdP+fZNOpfmkdMZqsovezbAeO+Ubiv2pk=
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk= github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -290,12 +290,12 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
@@ -304,15 +304,13 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -328,29 +326,29 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.39.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-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
golang.org/x/text v0.3.0/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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=

View File

@@ -129,6 +129,12 @@ func NewJobs(gdb *gorm.DB, dbUrl string) (*Jobs, error) {
archer.WithTimeout(60*time.Minute), archer.WithTimeout(60*time.Minute),
) )
c.Register(
"org_key_sweeper",
OrgKeySweeperWorker(gdb, jobs),
archer.WithInstances(1),
archer.WithTimeout(5*time.Minute),
)
return jobs, nil return jobs, nil
} }

View File

@@ -40,7 +40,7 @@ func ClusterBootstrapWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
var clusters []models.Cluster var clusters []models.Cluster
if err := db. if err := db.
Preload("BastionServer.SshKey"). Preload("BastionServer.SshKey").
Where("status = ?", clusterStatusProvisioning). Where("status = ?", clusterStatusPending).
Find(&clusters).Error; err != nil { Find(&clusters).Error; err != nil {
log.Error().Err(err).Msg("[cluster_bootstrap] query clusters failed") log.Error().Err(err).Msg("[cluster_bootstrap] query clusters failed")
return nil, err return nil, err
@@ -68,14 +68,14 @@ func ClusterBootstrapWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
logger.Info().Msg("[cluster_bootstrap] running make bootstrap") logger.Info().Msg("[cluster_bootstrap] running make bootstrap")
runCtx, cancel := context.WithTimeout(ctx, perClusterTimeout) runCtx, cancel := context.WithTimeout(ctx, perClusterTimeout)
out, err := runMakeOnBastion(runCtx, db, c, "bootstrap") out, err := runMakeOnBastion(runCtx, db, c, "setup")
cancel() cancel()
if err != nil { if err != nil {
failCount++ failCount++
failedIDs = append(failedIDs, c.ID) failedIDs = append(failedIDs, c.ID)
logger.Error().Err(err).Str("output", out).Msg("[cluster_bootstrap] make bootstrap failed") logger.Error().Err(err).Str("output", out).Msg("[cluster_bootstrap] make setup failed")
_ = setClusterStatus(db, c.ID, clusterStatusFailed, fmt.Sprintf("make bootstrap: %v", err)) _ = setClusterStatus(db, c.ID, clusterStatusFailed, fmt.Sprintf("make setup: %v", err))
continue continue
} }

View File

@@ -68,7 +68,7 @@ func ClusterSetupWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
logger.Info().Msg("[cluster_setup] running make setup") logger.Info().Msg("[cluster_setup] running make setup")
runCtx, cancel := context.WithTimeout(ctx, perClusterTimeout) runCtx, cancel := context.WithTimeout(ctx, perClusterTimeout)
out, err := runMakeOnBastion(runCtx, db, c, "setup") out, err := runMakeOnBastion(runCtx, db, c, "ping-servers")
cancel() cancel()
if err != nil { if err != nil {

View File

@@ -0,0 +1,95 @@
package bg
import (
"context"
"time"
"github.com/dyaksa/archer"
"github.com/dyaksa/archer/job"
"github.com/glueops/autoglue/internal/models"
"github.com/google/uuid"
"github.com/rs/zerolog/log"
"gorm.io/gorm"
)
type OrgKeySweeperArgs struct {
IntervalS int `json:"interval_seconds,omitempty"`
RetentionDays int `json:"retention_days,omitempty"`
}
type OrgKeySweeperResult struct {
Status string `json:"status"`
MarkedRevoked int `json:"marked_revoked"`
DeletedEphemeral int `json:"deleted_ephemeral"`
ElapsedMs int `json:"elapsed_ms"`
}
func OrgKeySweeperWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
return func(ctx context.Context, j job.Job) (any, error) {
args := OrgKeySweeperArgs{
IntervalS: 3600,
RetentionDays: 10,
}
start := time.Now()
_ = j.ParseArguments(&args)
if args.IntervalS <= 0 {
args.IntervalS = 3600
}
if args.RetentionDays <= 0 {
args.RetentionDays = 10
}
now := time.Now()
// 1) Mark expired keys as revoked
res1 := db.Model(&models.APIKey{}).
Where("expires_at IS NOT NULL AND expires_at <= ? AND revoked = false", now).
Updates(map[string]any{
"revoked": true,
"updated_at": now,
})
if res1.Error != nil {
log.Error().Err(res1.Error).Msg("[org_key_sweeper] mark expired revoked failed")
return nil, res1.Error
}
markedRevoked := int(res1.RowsAffected)
// 2) Hard-delete ephemeral keys that are revoked and older than retention
cutoff := now.Add(-time.Duration(args.RetentionDays) * 24 * time.Hour)
res2 := db.
Where("is_ephemeral = ? AND revoked = ? AND updated_at <= ?", true, true, cutoff).
Delete(&models.APIKey{})
if res2.Error != nil {
log.Error().Err(res2.Error).Msg("[org_key_sweeper] delete revoked ephemeral keys failed")
return nil, res2.Error
}
deletedEphemeral := int(res2.RowsAffected)
out := OrgKeySweeperResult{
Status: "ok",
MarkedRevoked: markedRevoked,
DeletedEphemeral: deletedEphemeral,
ElapsedMs: int(time.Since(start).Milliseconds()),
}
log.Info().
Int("marked_revoked", markedRevoked).
Int("deleted_ephemeral", deletedEphemeral).
Msg("[org_key_sweeper] cleanup tick ok")
// Re-enqueue the sweeper
next := time.Now().Add(time.Duration(args.IntervalS) * time.Second)
_, _ = jobs.Enqueue(
ctx,
uuid.NewString(),
"org_key_sweeper",
args,
archer.WithScheduleTime(next),
archer.WithMaxRetries(1),
)
return out, nil
}
}

View File

@@ -3,6 +3,7 @@ package bg
import ( import (
"bytes" "bytes"
"context" "context"
"crypto/rand"
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"fmt" "fmt"
@@ -12,6 +13,8 @@ import (
"github.com/dyaksa/archer" "github.com/dyaksa/archer"
"github.com/dyaksa/archer/job" "github.com/dyaksa/archer/job"
"github.com/glueops/autoglue/internal/auth"
"github.com/glueops/autoglue/internal/mapper"
"github.com/glueops/autoglue/internal/models" "github.com/glueops/autoglue/internal/models"
"github.com/glueops/autoglue/internal/utils" "github.com/glueops/autoglue/internal/utils"
"github.com/google/uuid" "github.com/google/uuid"
@@ -66,6 +69,12 @@ func ClusterPrepareWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
Preload("BastionServer.SshKey"). Preload("BastionServer.SshKey").
Preload("CaptainDomain"). Preload("CaptainDomain").
Preload("ControlPlaneRecordSet"). Preload("ControlPlaneRecordSet").
Preload("AppsLoadBalancer").
Preload("GlueOpsLoadBalancer").
Preload("NodePools").
Preload("NodePools.Labels").
Preload("NodePools.Annotations").
Preload("NodePools.Taints").
Preload("NodePools.Servers.SshKey"). Preload("NodePools.Servers.SshKey").
Where("status = ?", clusterStatusPrePending). Where("status = ?", clusterStatusPrePending).
Find(&clusters).Error; err != nil { Find(&clusters).Error; err != nil {
@@ -124,7 +133,55 @@ func ClusterPrepareWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
continue continue
} }
payloadJSON, err := json.MarshalIndent(c, "", " ") dtoCluster := mapper.ClusterToDTO(*c)
if c.EncryptedKubeconfig != "" && c.KubeIV != "" && c.KubeTag != "" {
kubeconfig, err := utils.DecryptForOrg(
c.OrganizationID,
c.EncryptedKubeconfig,
c.KubeIV,
c.KubeTag,
db,
)
if err != nil {
fail++
failedIDs = append(failedIDs, c.ID)
failures = append(failures, ClusterPrepareFailure{
ClusterID: c.ID,
Step: "decrypt_kubeconfig",
Reason: err.Error(),
})
clusterLog.Error().Err(err).Msg("[cluster_prepare] decrypt kubeconfig failed")
_ = setClusterStatus(db, c.ID, clusterStatusFailed, err.Error())
continue
}
dtoCluster.Kubeconfig = &kubeconfig
}
orgKey, orgSecret, err := findOrCreateClusterAutomationKey(
db,
c.OrganizationID,
c.ID,
24*time.Hour,
)
if err != nil {
fail++
failedIDs = append(failedIDs, c.ID)
failures = append(failures, ClusterPrepareFailure{
ClusterID: c.ID,
Step: "create_org_key",
Reason: err.Error(),
})
clusterLog.Error().Err(err).Msg("[cluster_prepare] create org key for payload failed")
_ = setClusterStatus(db, c.ID, clusterStatusFailed, err.Error())
continue
}
dtoCluster.OrgKey = &orgKey
dtoCluster.OrgSecret = &orgSecret
payloadJSON, err := json.MarshalIndent(dtoCluster, "", " ")
if err != nil { if err != nil {
fail++ fail++
failedIDs = append(failedIDs, c.ID) failedIDs = append(failedIDs, c.ID)
@@ -443,6 +500,11 @@ func runMakeOnBastion(
c *models.Cluster, c *models.Cluster,
target string, target string,
) (string, error) { ) (string, error) {
logger := log.With().
Str("cluster_id", c.ID.String()).
Str("cluster_name", c.Name).
Logger()
bastion := c.BastionServer bastion := c.BastionServer
if bastion == nil { if bastion == nil {
return "", fmt.Errorf("bastion server is nil") return "", fmt.Errorf("bastion server is nil")
@@ -500,7 +562,13 @@ func runMakeOnBastion(
defer sess.Close() defer sess.Close()
clusterDir := fmt.Sprintf("$HOME/autoglue/clusters/%s", c.ID.String()) clusterDir := fmt.Sprintf("$HOME/autoglue/clusters/%s", c.ID.String())
cmd := fmt.Sprintf("cd %s && make %s", clusterDir, target) sshDir := fmt.Sprintf("$HOME/.ssh")
cmd := fmt.Sprintf("cd %s && docker run -v %s:/root/.ssh -v ./payload.json:/opt/gluekube/platform.json %s:%s make %s", clusterDir, sshDir, c.DockerImage, c.DockerTag, target)
logger.Info().
Str("cmd", cmd).
Msg("[runMakeOnBastion] executing remote command")
out, runErr := sess.CombinedOutput(cmd) out, runErr := sess.CombinedOutput(cmd)
if runErr != nil { if runErr != nil {
@@ -508,3 +576,75 @@ func runMakeOnBastion(
} }
return string(out), nil return string(out), nil
} }
func randomB64URL(n int) (string, error) {
b := make([]byte, n)
if _, err := rand.Read(b); err != nil {
return "", err
}
return base64.RawURLEncoding.EncodeToString(b), nil
}
func findOrCreateClusterAutomationKey(
db *gorm.DB,
orgID uuid.UUID,
clusterID uuid.UUID,
ttl time.Duration,
) (orgKey string, orgSecret string, err error) {
now := time.Now()
name := fmt.Sprintf("cluster-%s-bastion", clusterID.String())
// 1) Delete any existing ephemeral cluster-bastion key for this org+cluster
if err := db.Where(
"org_id = ? AND scope = ? AND purpose = ? AND cluster_id = ? AND is_ephemeral = ?",
orgID, "org", "cluster_bastion", clusterID, true,
).Delete(&models.APIKey{}).Error; err != nil {
return "", "", fmt.Errorf("delete existing cluster key: %w", err)
}
// 2) Mint a fresh keypair
keySuffix, err := randomB64URL(16)
if err != nil {
return "", "", fmt.Errorf("entropy_error: %w", err)
}
sec, err := randomB64URL(32)
if err != nil {
return "", "", fmt.Errorf("entropy_error: %w", err)
}
orgKey = "org_" + keySuffix
orgSecret = sec
keyHash := auth.SHA256Hex(orgKey)
secretHash, err := auth.HashSecretArgon2id(orgSecret)
if err != nil {
return "", "", fmt.Errorf("hash_error: %w", err)
}
exp := now.Add(ttl)
prefix := orgKey
if len(prefix) > 12 {
prefix = prefix[:12]
}
rec := models.APIKey{
OrgID: &orgID,
Scope: "org",
Purpose: "cluster_bastion",
ClusterID: &clusterID,
IsEphemeral: true,
Name: name,
KeyHash: keyHash,
SecretHash: &secretHash,
ExpiresAt: &exp,
Revoked: false,
Prefix: &prefix,
}
if err := db.Create(&rec).Error; err != nil {
return "", "", fmt.Errorf("db_error: %w", err)
}
return orgKey, orgSecret, nil
}

View File

@@ -69,7 +69,17 @@ func ListClusters(db *gorm.DB) http.HandlerFunc {
out := make([]dto.ClusterResponse, 0, len(rows)) out := make([]dto.ClusterResponse, 0, len(rows))
for _, row := range rows { for _, row := range rows {
out = append(out, clusterToDTO(row)) cr := clusterToDTO(row)
if row.EncryptedKubeconfig != "" && row.KubeIV != "" && row.KubeTag != "" {
kubeconfig, err := utils.DecryptForOrg(orgID, row.EncryptedKubeconfig, row.KubeIV, row.KubeTag, db)
if err != nil {
utils.WriteError(w, http.StatusInternalServerError, "kubeconfig_decrypt_failed", "failed to decrypt kubeconfig")
return
}
cr.Kubeconfig = &kubeconfig
}
out = append(out, cr)
} }
utils.WriteJSON(w, http.StatusOK, out) utils.WriteJSON(w, http.StatusOK, out)
} }
@@ -131,7 +141,18 @@ func GetCluster(db *gorm.DB) http.HandlerFunc {
return return
} }
utils.WriteJSON(w, http.StatusOK, clusterToDTO(cluster)) resp := clusterToDTO(cluster)
if cluster.EncryptedKubeconfig != "" && cluster.KubeIV != "" && cluster.KubeTag != "" {
kubeconfig, err := utils.DecryptForOrg(orgID, cluster.EncryptedKubeconfig, cluster.KubeIV, cluster.KubeTag, db)
if err != nil {
utils.WriteError(w, http.StatusInternalServerError, "kubeconfig_decrypt_failed", "failed to decrypt kubeconfig")
return
}
resp.Kubeconfig = &kubeconfig
}
utils.WriteJSON(w, http.StatusOK, resp)
} }
} }
@@ -189,6 +210,8 @@ func CreateCluster(db *gorm.DB) http.HandlerFunc {
LastError: "", LastError: "",
CertificateKey: certificateKey, CertificateKey: certificateKey,
RandomToken: randomToken, RandomToken: randomToken,
DockerImage: in.DockerImage,
DockerTag: in.DockerTag,
} }
if err := db.Create(&c).Error; err != nil { if err := db.Create(&c).Error; err != nil {
@@ -262,6 +285,14 @@ func UpdateCluster(db *gorm.DB) http.HandlerFunc {
cluster.Region = *in.Region cluster.Region = *in.Region
} }
if in.DockerImage != nil {
cluster.DockerImage = *in.DockerImage
}
if in.DockerTag != nil {
cluster.DockerTag = *in.DockerTag
}
if err := db.Save(&cluster).Error; err != nil { if err := db.Save(&cluster).Error; err != nil {
utils.WriteError(w, http.StatusInternalServerError, "db_error", "db error") utils.WriteError(w, http.StatusInternalServerError, "db_error", "db error")
return return
@@ -1547,6 +1578,8 @@ func clusterToDTO(c models.Cluster) dto.ClusterResponse {
RandomToken: c.RandomToken, RandomToken: c.RandomToken,
CertificateKey: c.CertificateKey, CertificateKey: c.CertificateKey,
NodePools: nps, NodePools: nps,
DockerImage: c.DockerImage,
DockerTag: c.DockerTag,
CreatedAt: c.CreatedAt, CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt, UpdatedAt: c.UpdatedAt,
} }

View File

@@ -22,6 +22,11 @@ type ClusterResponse struct {
RandomToken string `json:"random_token"` RandomToken string `json:"random_token"`
CertificateKey string `json:"certificate_key"` CertificateKey string `json:"certificate_key"`
NodePools []NodePoolResponse `json:"node_pools,omitempty"` NodePools []NodePoolResponse `json:"node_pools,omitempty"`
DockerImage string `json:"docker_image"`
DockerTag string `json:"docker_tag"`
Kubeconfig *string `json:"kubeconfig,omitempty"`
OrgKey *string `json:"org_key,omitempty"`
OrgSecret *string `json:"org_secret,omitempty"`
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"` UpdatedAt time.Time `json:"updated_at"`
} }
@@ -30,12 +35,16 @@ type CreateClusterRequest struct {
Name string `json:"name"` Name string `json:"name"`
ClusterProvider string `json:"cluster_provider"` ClusterProvider string `json:"cluster_provider"`
Region string `json:"region"` Region string `json:"region"`
DockerImage string `json:"docker_image"`
DockerTag string `json:"docker_tag"`
} }
type UpdateClusterRequest struct { type UpdateClusterRequest struct {
Name *string `json:"name,omitempty"` Name *string `json:"name,omitempty"`
ClusterProvider *string `json:"cluster_provider,omitempty"` ClusterProvider *string `json:"cluster_provider,omitempty"`
Region *string `json:"region,omitempty"` Region *string `json:"region,omitempty"`
DockerImage *string `json:"docker_image,omitempty"`
DockerTag *string `json:"docker_tag,omitempty"`
} }
type AttachCaptainDomainRequest struct { type AttachCaptainDomainRequest struct {

View File

@@ -585,13 +585,22 @@ func CreateOrgKey(db *gorm.DB) http.HandlerFunc {
exp = &e exp = &e
} }
prefix := orgKey
if len(prefix) > 12 {
prefix = prefix[:12]
}
rec := models.APIKey{ rec := models.APIKey{
OrgID: &oid, OrgID: &oid,
Scope: "org", Scope: "org",
Purpose: "user",
IsEphemeral: false,
Name: req.Name, Name: req.Name,
KeyHash: keyHash, KeyHash: keyHash,
SecretHash: &secretHash, SecretHash: &secretHash,
ExpiresAt: exp, ExpiresAt: exp,
Revoked: false,
Prefix: &prefix,
} }
if err := db.Create(&rec).Error; err != nil { if err := db.Create(&rec).Error; err != nil {
utils.WriteError(w, 500, "db_error", err.Error()) utils.WriteError(w, 500, "db_error", err.Error())

182
internal/mapper/cluster.go Normal file
View File

@@ -0,0 +1,182 @@
package mapper
import (
"fmt"
"time"
"github.com/glueops/autoglue/internal/common"
"github.com/glueops/autoglue/internal/handlers/dto"
"github.com/glueops/autoglue/internal/models"
"github.com/google/uuid"
)
func ClusterToDTO(c models.Cluster) dto.ClusterResponse {
var bastion *dto.ServerResponse
if c.BastionServer != nil {
b := ServerToDTO(*c.BastionServer)
bastion = &b
}
var captainDomain *dto.DomainResponse
if c.CaptainDomainID != nil && c.CaptainDomain.ID != uuid.Nil {
dr := DomainToDTO(c.CaptainDomain)
captainDomain = &dr
}
var controlPlane *dto.RecordSetResponse
if c.ControlPlaneRecordSet != nil {
rr := RecordSetToDTO(*c.ControlPlaneRecordSet)
controlPlane = &rr
}
var cfqdn *string
if captainDomain != nil && controlPlane != nil {
fq := fmt.Sprintf("%s.%s", controlPlane.Name, captainDomain.DomainName)
cfqdn = &fq
}
var appsLB *dto.LoadBalancerResponse
if c.AppsLoadBalancer != nil {
lr := LoadBalancerToDTO(*c.AppsLoadBalancer)
appsLB = &lr
}
var glueOpsLB *dto.LoadBalancerResponse
if c.GlueOpsLoadBalancer != nil {
lr := LoadBalancerToDTO(*c.GlueOpsLoadBalancer)
glueOpsLB = &lr
}
nps := make([]dto.NodePoolResponse, 0, len(c.NodePools))
for _, np := range c.NodePools {
nps = append(nps, NodePoolToDTO(np))
}
return dto.ClusterResponse{
ID: c.ID,
Name: c.Name,
CaptainDomain: captainDomain,
ControlPlaneRecordSet: controlPlane,
ControlPlaneFQDN: cfqdn,
AppsLoadBalancer: appsLB,
GlueOpsLoadBalancer: glueOpsLB,
BastionServer: bastion,
Provider: c.Provider,
Region: c.Region,
Status: c.Status,
LastError: c.LastError,
RandomToken: c.RandomToken,
CertificateKey: c.CertificateKey,
NodePools: nps,
DockerImage: c.DockerImage,
DockerTag: c.DockerTag,
CreatedAt: c.CreatedAt,
UpdatedAt: c.UpdatedAt,
}
}
func NodePoolToDTO(np models.NodePool) dto.NodePoolResponse {
labels := make([]dto.LabelResponse, 0, len(np.Labels))
for _, l := range np.Labels {
labels = append(labels, dto.LabelResponse{
Key: l.Key,
Value: l.Value,
})
}
annotations := make([]dto.AnnotationResponse, 0, len(np.Annotations))
for _, a := range np.Annotations {
annotations = append(annotations, dto.AnnotationResponse{
Key: a.Key,
Value: a.Value,
})
}
taints := make([]dto.TaintResponse, 0, len(np.Taints))
for _, t := range np.Taints {
taints = append(taints, dto.TaintResponse{
Key: t.Key,
Value: t.Value,
Effect: t.Effect,
})
}
servers := make([]dto.ServerResponse, 0, len(np.Servers))
for _, s := range np.Servers {
servers = append(servers, ServerToDTO(s))
}
return dto.NodePoolResponse{
AuditFields: common.AuditFields{
ID: np.ID,
OrganizationID: np.OrganizationID,
CreatedAt: np.CreatedAt,
UpdatedAt: np.UpdatedAt,
},
Name: np.Name,
Role: dto.NodeRole(np.Role),
Labels: labels,
Annotations: annotations,
Taints: taints,
Servers: servers,
}
}
func ServerToDTO(s models.Server) dto.ServerResponse {
return dto.ServerResponse{
ID: s.ID,
Hostname: s.Hostname,
PrivateIPAddress: s.PrivateIPAddress,
PublicIPAddress: s.PublicIPAddress,
Role: s.Role,
Status: s.Status,
SSHUser: s.SSHUser,
SshKeyID: s.SshKeyID,
CreatedAt: s.CreatedAt.UTC().Format(time.RFC3339),
UpdatedAt: s.UpdatedAt.UTC().Format(time.RFC3339),
}
}
func DomainToDTO(d models.Domain) dto.DomainResponse {
return dto.DomainResponse{
ID: d.ID.String(),
OrganizationID: d.OrganizationID.String(),
DomainName: d.DomainName,
ZoneID: d.ZoneID,
Status: d.Status,
LastError: d.LastError,
CredentialID: d.CredentialID.String(),
CreatedAt: d.CreatedAt.UTC().Format(time.RFC3339),
UpdatedAt: d.UpdatedAt.UTC().Format(time.RFC3339),
}
}
func RecordSetToDTO(rs models.RecordSet) dto.RecordSetResponse {
return dto.RecordSetResponse{
ID: rs.ID.String(),
DomainID: rs.DomainID.String(),
Name: rs.Name,
Type: rs.Type,
TTL: rs.TTL,
Values: []byte(rs.Values),
Fingerprint: rs.Fingerprint,
Status: rs.Status,
Owner: rs.Owner,
LastError: rs.LastError,
CreatedAt: rs.CreatedAt.UTC().Format(time.RFC3339),
UpdatedAt: rs.UpdatedAt.UTC().Format(time.RFC3339),
}
}
func LoadBalancerToDTO(lb models.LoadBalancer) dto.LoadBalancerResponse {
return dto.LoadBalancerResponse{
ID: lb.ID,
OrganizationID: lb.OrganizationID,
Name: lb.Name,
Kind: lb.Kind,
PublicIPAddress: lb.PublicIPAddress,
PrivateIPAddress: lb.PrivateIPAddress,
CreatedAt: lb.CreatedAt,
UpdatedAt: lb.UpdatedAt,
}
}

View File

@@ -8,12 +8,15 @@ import (
type APIKey struct { type APIKey struct {
ID uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id" format:"uuid"` ID uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id" format:"uuid"`
OrgID *uuid.UUID `json:"org_id,omitempty" format:"uuid"`
Scope string `gorm:"not null;default:''" json:"scope"`
Purpose string `json:"purpose"`
ClusterID *uuid.UUID `json:"cluster_id,omitempty"`
IsEphemeral bool `json:"is_ephemeral"`
Name string `gorm:"not null;default:''" json:"name"` Name string `gorm:"not null;default:''" json:"name"`
KeyHash string `gorm:"uniqueIndex;not null" json:"-"` KeyHash string `gorm:"uniqueIndex;not null" json:"-"`
Scope string `gorm:"not null;default:''" json:"scope"`
UserID *uuid.UUID `json:"user_id,omitempty" format:"uuid"`
OrgID *uuid.UUID `json:"org_id,omitempty" format:"uuid"`
SecretHash *string `json:"-"` SecretHash *string `json:"-"`
UserID *uuid.UUID `json:"user_id,omitempty" format:"uuid"`
ExpiresAt *time.Time `json:"expires_at,omitempty" format:"date-time"` ExpiresAt *time.Time `json:"expires_at,omitempty" format:"date-time"`
Revoked bool `gorm:"not null;default:false" json:"revoked"` Revoked bool `gorm:"not null;default:false" json:"revoked"`
Prefix *string `json:"prefix,omitempty"` Prefix *string `json:"prefix,omitempty"`

View File

@@ -40,6 +40,8 @@ type Cluster struct {
EncryptedKubeconfig string `gorm:"type:text" json:"-"` EncryptedKubeconfig string `gorm:"type:text" json:"-"`
KubeIV string `json:"-"` KubeIV string `json:"-"`
KubeTag string `json:"-"` KubeTag string `json:"-"`
DockerImage string `json:"docker_image"`
DockerTag string `json:"docker_tag"`
CreatedAt time.Time `json:"created_at,omitempty" gorm:"type:timestamptz;column:created_at;not null;default:now()"` CreatedAt time.Time `json:"created_at,omitempty" gorm:"type:timestamptz;column:created_at;not null;default:now()"`
UpdatedAt time.Time `json:"updated_at,omitempty" gorm:"type:timestamptz;autoUpdateTime;column:updated_at;not null;default:now()"` UpdatedAt time.Time `json:"updated_at,omitempty" gorm:"type:timestamptz;autoUpdateTime;column:updated_at;not null;default:now()"`
} }

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@@ -5,7 +5,7 @@
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AutoGlue</title> <title>AutoGlue</title>
<script type="module" crossorigin src="/assets/index-BwyDjDcq.js"></script> <script type="module" crossorigin src="/assets/index-CyGsiYei.js"></script>
<link rel="modulepreload" crossorigin href="/assets/react-Dt2M6tWj.js"> <link rel="modulepreload" crossorigin href="/assets/react-Dt2M6tWj.js">
<link rel="stylesheet" crossorigin href="/assets/index-VHZG0dIU.css"> <link rel="stylesheet" crossorigin href="/assets/index-VHZG0dIU.css">
</head> </head>

Binary file not shown.

Binary file not shown.

View File

@@ -12,6 +12,8 @@
| `control_plane_fqdn` | string | | `control_plane_fqdn` | string |
| `control_plane_record_set` | [DtoRecordSetResponse](DtoRecordSetResponse.md) | | `control_plane_record_set` | [DtoRecordSetResponse](DtoRecordSetResponse.md) |
| `created_at` | string | | `created_at` | string |
| `docker_image` | string |
| `docker_tag` | string |
| `glueops_load_balancer` | [DtoLoadBalancerResponse](DtoLoadBalancerResponse.md) | | `glueops_load_balancer` | [DtoLoadBalancerResponse](DtoLoadBalancerResponse.md) |
| `id` | string | | `id` | string |
| `last_error` | string | | `last_error` | string |
@@ -37,6 +39,8 @@ const example = {
control_plane_fqdn: null, control_plane_fqdn: null,
control_plane_record_set: null, control_plane_record_set: null,
created_at: null, created_at: null,
docker_image: null,
docker_tag: null,
glueops_load_balancer: null, glueops_load_balancer: null,
id: null, id: null,
last_error: null, last_error: null,

View File

@@ -5,6 +5,8 @@
| Name | Type | | Name | Type |
| ------------------ | ------ | | ------------------ | ------ |
| `cluster_provider` | string | | `cluster_provider` | string |
| `docker_image` | string |
| `docker_tag` | string |
| `name` | string | | `name` | string |
| `region` | string | | `region` | string |
@@ -16,6 +18,8 @@ import type { DtoCreateClusterRequest } from "@glueops/autoglue-sdk-go";
// TODO: Update the object below with actual values // TODO: Update the object below with actual values
const example = { const example = {
cluster_provider: null, cluster_provider: null,
docker_image: null,
docker_tag: null,
name: null, name: null,
region: null, region: null,
} satisfies DtoCreateClusterRequest; } satisfies DtoCreateClusterRequest;

View File

@@ -5,6 +5,8 @@
| Name | Type | | Name | Type |
| ------------------ | ------ | | ------------------ | ------ |
| `cluster_provider` | string | | `cluster_provider` | string |
| `docker_image` | string |
| `docker_tag` | string |
| `name` | string | | `name` | string |
| `region` | string | | `region` | string |
@@ -16,6 +18,8 @@ import type { DtoUpdateClusterRequest } from "@glueops/autoglue-sdk-go";
// TODO: Update the object below with actual values // TODO: Update the object below with actual values
const example = { const example = {
cluster_provider: null, cluster_provider: null,
docker_image: null,
docker_tag: null,
name: null, name: null,
region: null, region: null,
} satisfies DtoUpdateClusterRequest; } satisfies DtoUpdateClusterRequest;

View File

@@ -16,6 +16,6 @@
"prepare": "npm run build" "prepare": "npm run build"
}, },
"devDependencies": { "devDependencies": {
"typescript": "5.9.3" "typescript": "^4.0 || ^5.0"
} }
} }

View File

@@ -13,10 +13,17 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoAnnotationResponse, DtoCreateAnnotationRequest, DtoUpdateAnnotationRequest,} from "../models/index"; import type {
DtoAnnotationResponse,
DtoCreateAnnotationRequest,
DtoUpdateAnnotationRequest,
} from "../models/index";
import { import {
DtoAnnotationResponseFromJSON, DtoAnnotationResponseFromJSON,
DtoAnnotationResponseToJSON,
DtoCreateAnnotationRequestFromJSON,
DtoCreateAnnotationRequestToJSON, DtoCreateAnnotationRequestToJSON,
DtoUpdateAnnotationRequestFromJSON,
DtoUpdateAnnotationRequestToJSON, DtoUpdateAnnotationRequestToJSON,
} from "../models/index"; } from "../models/index";

View File

@@ -13,8 +13,22 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoEnqueueRequest, DtoJob, DtoPageJob, DtoQueueInfo,} from "../models/index"; import type {
import {DtoEnqueueRequestToJSON, DtoJobFromJSON, DtoPageJobFromJSON, DtoQueueInfoFromJSON,} from "../models/index"; DtoEnqueueRequest,
DtoJob,
DtoPageJob,
DtoQueueInfo,
} from "../models/index";
import {
DtoEnqueueRequestFromJSON,
DtoEnqueueRequestToJSON,
DtoJobFromJSON,
DtoJobToJSON,
DtoPageJobFromJSON,
DtoPageJobToJSON,
DtoQueueInfoFromJSON,
DtoQueueInfoToJSON,
} from "../models/index";
export interface AdminCancelArcherJobRequest { export interface AdminCancelArcherJobRequest {
id: string; id: string;

View File

@@ -13,13 +13,24 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoAuthStartResponse, DtoJWKS, DtoLogoutRequest, DtoRefreshRequest, DtoTokenPair,} from "../models/index"; import type {
DtoAuthStartResponse,
DtoJWKS,
DtoLogoutRequest,
DtoRefreshRequest,
DtoTokenPair,
} from "../models/index";
import { import {
DtoAuthStartResponseFromJSON, DtoAuthStartResponseFromJSON,
DtoAuthStartResponseToJSON,
DtoJWKSFromJSON, DtoJWKSFromJSON,
DtoJWKSToJSON,
DtoLogoutRequestFromJSON,
DtoLogoutRequestToJSON, DtoLogoutRequestToJSON,
DtoRefreshRequestFromJSON,
DtoRefreshRequestToJSON, DtoRefreshRequestToJSON,
DtoTokenPairFromJSON, DtoTokenPairFromJSON,
DtoTokenPairToJSON,
} from "../models/index"; } from "../models/index";
export interface AuthCallbackRequest { export interface AuthCallbackRequest {

View File

@@ -25,14 +25,23 @@ import type {
DtoUpdateClusterRequest, DtoUpdateClusterRequest,
} from "../models/index"; } from "../models/index";
import { import {
DtoAttachBastionRequestFromJSON,
DtoAttachBastionRequestToJSON, DtoAttachBastionRequestToJSON,
DtoAttachCaptainDomainRequestFromJSON,
DtoAttachCaptainDomainRequestToJSON, DtoAttachCaptainDomainRequestToJSON,
DtoAttachLoadBalancerRequestFromJSON,
DtoAttachLoadBalancerRequestToJSON, DtoAttachLoadBalancerRequestToJSON,
DtoAttachNodePoolRequestFromJSON,
DtoAttachNodePoolRequestToJSON, DtoAttachNodePoolRequestToJSON,
DtoAttachRecordSetRequestFromJSON,
DtoAttachRecordSetRequestToJSON, DtoAttachRecordSetRequestToJSON,
DtoClusterResponseFromJSON, DtoClusterResponseFromJSON,
DtoClusterResponseToJSON,
DtoCreateClusterRequestFromJSON,
DtoCreateClusterRequestToJSON, DtoCreateClusterRequestToJSON,
DtoSetKubeconfigRequestFromJSON,
DtoSetKubeconfigRequestToJSON, DtoSetKubeconfigRequestToJSON,
DtoUpdateClusterRequestFromJSON,
DtoUpdateClusterRequestToJSON, DtoUpdateClusterRequestToJSON,
} from "../models/index"; } from "../models/index";

View File

@@ -13,10 +13,17 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoCreateCredentialRequest, DtoCredentialOut, DtoUpdateCredentialRequest,} from "../models/index"; import type {
DtoCreateCredentialRequest,
DtoCredentialOut,
DtoUpdateCredentialRequest,
} from "../models/index";
import { import {
DtoCreateCredentialRequestFromJSON,
DtoCreateCredentialRequestToJSON, DtoCreateCredentialRequestToJSON,
DtoCredentialOutFromJSON, DtoCredentialOutFromJSON,
DtoCredentialOutToJSON,
DtoUpdateCredentialRequestFromJSON,
DtoUpdateCredentialRequestToJSON, DtoUpdateCredentialRequestToJSON,
} from "../models/index"; } from "../models/index";

View File

@@ -22,11 +22,17 @@ import type {
DtoUpdateRecordSetRequest, DtoUpdateRecordSetRequest,
} from "../models/index"; } from "../models/index";
import { import {
DtoCreateDomainRequestFromJSON,
DtoCreateDomainRequestToJSON, DtoCreateDomainRequestToJSON,
DtoCreateRecordSetRequestFromJSON,
DtoCreateRecordSetRequestToJSON, DtoCreateRecordSetRequestToJSON,
DtoDomainResponseFromJSON, DtoDomainResponseFromJSON,
DtoDomainResponseToJSON,
DtoRecordSetResponseFromJSON, DtoRecordSetResponseFromJSON,
DtoRecordSetResponseToJSON,
DtoUpdateDomainRequestFromJSON,
DtoUpdateDomainRequestToJSON, DtoUpdateDomainRequestToJSON,
DtoUpdateRecordSetRequestFromJSON,
DtoUpdateRecordSetRequestToJSON, DtoUpdateRecordSetRequestToJSON,
} from "../models/index"; } from "../models/index";

View File

@@ -14,7 +14,10 @@
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type { HandlersHealthStatus } from "../models/index"; import type { HandlersHealthStatus } from "../models/index";
import {HandlersHealthStatusFromJSON,} from "../models/index"; import {
HandlersHealthStatusFromJSON,
HandlersHealthStatusToJSON,
} from "../models/index";
/** /**
* *

View File

@@ -13,8 +13,19 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoCreateLabelRequest, DtoLabelResponse, DtoUpdateLabelRequest,} from "../models/index"; import type {
import {DtoCreateLabelRequestToJSON, DtoLabelResponseFromJSON, DtoUpdateLabelRequestToJSON,} from "../models/index"; DtoCreateLabelRequest,
DtoLabelResponse,
DtoUpdateLabelRequest,
} from "../models/index";
import {
DtoCreateLabelRequestFromJSON,
DtoCreateLabelRequestToJSON,
DtoLabelResponseFromJSON,
DtoLabelResponseToJSON,
DtoUpdateLabelRequestFromJSON,
DtoUpdateLabelRequestToJSON,
} from "../models/index";
export interface CreateLabelRequest { export interface CreateLabelRequest {
dtoCreateLabelRequest: DtoCreateLabelRequest; dtoCreateLabelRequest: DtoCreateLabelRequest;

View File

@@ -19,8 +19,11 @@ import type {
DtoUpdateLoadBalancerRequest, DtoUpdateLoadBalancerRequest,
} from "../models/index"; } from "../models/index";
import { import {
DtoCreateLoadBalancerRequestFromJSON,
DtoCreateLoadBalancerRequestToJSON, DtoCreateLoadBalancerRequestToJSON,
DtoLoadBalancerResponseFromJSON, DtoLoadBalancerResponseFromJSON,
DtoLoadBalancerResponseToJSON,
DtoUpdateLoadBalancerRequestFromJSON,
DtoUpdateLoadBalancerRequestToJSON, DtoUpdateLoadBalancerRequestToJSON,
} from "../models/index"; } from "../models/index";

View File

@@ -13,8 +13,16 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {HandlersCreateUserKeyRequest, HandlersUserAPIKeyOut,} from "../models/index"; import type {
import {HandlersCreateUserKeyRequestToJSON, HandlersUserAPIKeyOutFromJSON,} from "../models/index"; HandlersCreateUserKeyRequest,
HandlersUserAPIKeyOut,
} from "../models/index";
import {
HandlersCreateUserKeyRequestFromJSON,
HandlersCreateUserKeyRequestToJSON,
HandlersUserAPIKeyOutFromJSON,
HandlersUserAPIKeyOutToJSON,
} from "../models/index";
export interface CreateUserAPIKeyRequest { export interface CreateUserAPIKeyRequest {
handlersCreateUserKeyRequest: HandlersCreateUserKeyRequest; handlersCreateUserKeyRequest: HandlersCreateUserKeyRequest;

View File

@@ -13,8 +13,19 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {HandlersMeResponse, HandlersUpdateMeRequest, ModelsUser,} from "../models/index"; import type {
import {HandlersMeResponseFromJSON, HandlersUpdateMeRequestToJSON, ModelsUserFromJSON,} from "../models/index"; HandlersMeResponse,
HandlersUpdateMeRequest,
ModelsUser,
} from "../models/index";
import {
HandlersMeResponseFromJSON,
HandlersMeResponseToJSON,
HandlersUpdateMeRequestFromJSON,
HandlersUpdateMeRequestToJSON,
ModelsUserFromJSON,
ModelsUserToJSON,
} from "../models/index";
export interface UpdateMeRequest { export interface UpdateMeRequest {
handlersUpdateMeRequest: HandlersUpdateMeRequest; handlersUpdateMeRequest: HandlersUpdateMeRequest;

View File

@@ -14,7 +14,10 @@
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type { HandlersVersionResponse } from "../models/index"; import type { HandlersVersionResponse } from "../models/index";
import {HandlersVersionResponseFromJSON,} from "../models/index"; import {
HandlersVersionResponseFromJSON,
HandlersVersionResponseToJSON,
} from "../models/index";
/** /**
* *

View File

@@ -28,15 +28,26 @@ import type {
} from "../models/index"; } from "../models/index";
import { import {
DtoAnnotationResponseFromJSON, DtoAnnotationResponseFromJSON,
DtoAnnotationResponseToJSON,
DtoAttachAnnotationsRequestFromJSON,
DtoAttachAnnotationsRequestToJSON, DtoAttachAnnotationsRequestToJSON,
DtoAttachLabelsRequestFromJSON,
DtoAttachLabelsRequestToJSON, DtoAttachLabelsRequestToJSON,
DtoAttachServersRequestFromJSON,
DtoAttachServersRequestToJSON, DtoAttachServersRequestToJSON,
DtoAttachTaintsRequestFromJSON,
DtoAttachTaintsRequestToJSON, DtoAttachTaintsRequestToJSON,
DtoCreateNodePoolRequestFromJSON,
DtoCreateNodePoolRequestToJSON, DtoCreateNodePoolRequestToJSON,
DtoLabelResponseFromJSON, DtoLabelResponseFromJSON,
DtoLabelResponseToJSON,
DtoNodePoolResponseFromJSON, DtoNodePoolResponseFromJSON,
DtoNodePoolResponseToJSON,
DtoServerResponseFromJSON, DtoServerResponseFromJSON,
DtoServerResponseToJSON,
DtoTaintResponseFromJSON, DtoTaintResponseFromJSON,
DtoTaintResponseToJSON,
DtoUpdateNodePoolRequestFromJSON,
DtoUpdateNodePoolRequestToJSON, DtoUpdateNodePoolRequestToJSON,
} from "../models/index"; } from "../models/index";

View File

@@ -22,16 +22,27 @@ import type {
HandlersOrgUpdateReq, HandlersOrgUpdateReq,
ModelsAPIKey, ModelsAPIKey,
ModelsOrganization, ModelsOrganization,
UtilsErrorResponse,
} from "../models/index"; } from "../models/index";
import { import {
HandlersMemberOutFromJSON, HandlersMemberOutFromJSON,
HandlersMemberOutToJSON,
HandlersMemberUpsertReqFromJSON,
HandlersMemberUpsertReqToJSON, HandlersMemberUpsertReqToJSON,
HandlersOrgCreateReqFromJSON,
HandlersOrgCreateReqToJSON, HandlersOrgCreateReqToJSON,
HandlersOrgKeyCreateReqFromJSON,
HandlersOrgKeyCreateReqToJSON, HandlersOrgKeyCreateReqToJSON,
HandlersOrgKeyCreateRespFromJSON, HandlersOrgKeyCreateRespFromJSON,
HandlersOrgKeyCreateRespToJSON,
HandlersOrgUpdateReqFromJSON,
HandlersOrgUpdateReqToJSON, HandlersOrgUpdateReqToJSON,
ModelsAPIKeyFromJSON, ModelsAPIKeyFromJSON,
ModelsAPIKeyToJSON,
ModelsOrganizationFromJSON, ModelsOrganizationFromJSON,
ModelsOrganizationToJSON,
UtilsErrorResponseFromJSON,
UtilsErrorResponseToJSON,
} from "../models/index"; } from "../models/index";
export interface AddOrUpdateMemberRequest { export interface AddOrUpdateMemberRequest {

View File

@@ -13,8 +13,19 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoCreateServerRequest, DtoServerResponse, DtoUpdateServerRequest,} from "../models/index"; import type {
import {DtoCreateServerRequestToJSON, DtoServerResponseFromJSON, DtoUpdateServerRequestToJSON,} from "../models/index"; DtoCreateServerRequest,
DtoServerResponse,
DtoUpdateServerRequest,
} from "../models/index";
import {
DtoCreateServerRequestFromJSON,
DtoCreateServerRequestToJSON,
DtoServerResponseFromJSON,
DtoServerResponseToJSON,
DtoUpdateServerRequestFromJSON,
DtoUpdateServerRequestToJSON,
} from "../models/index";
export interface CreateServerRequest { export interface CreateServerRequest {
dtoCreateServerRequest: DtoCreateServerRequest; dtoCreateServerRequest: DtoCreateServerRequest;

View File

@@ -13,8 +13,19 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoCreateSSHRequest, DtoSshResponse, GetSSHKey200Response,} from "../models/index"; import type {
import {DtoCreateSSHRequestToJSON, DtoSshResponseFromJSON, GetSSHKey200ResponseFromJSON,} from "../models/index"; DtoCreateSSHRequest,
DtoSshResponse,
GetSSHKey200Response,
} from "../models/index";
import {
DtoCreateSSHRequestFromJSON,
DtoCreateSSHRequestToJSON,
DtoSshResponseFromJSON,
DtoSshResponseToJSON,
GetSSHKey200ResponseFromJSON,
GetSSHKey200ResponseToJSON,
} from "../models/index";
export interface CreateSSHKeyRequest { export interface CreateSSHKeyRequest {
dtoCreateSSHRequest: DtoCreateSSHRequest; dtoCreateSSHRequest: DtoCreateSSHRequest;

View File

@@ -13,8 +13,19 @@
*/ */
import * as runtime from "../runtime"; import * as runtime from "../runtime";
import type {DtoCreateTaintRequest, DtoTaintResponse, DtoUpdateTaintRequest,} from "../models/index"; import type {
import {DtoCreateTaintRequestToJSON, DtoTaintResponseFromJSON, DtoUpdateTaintRequestToJSON,} from "../models/index"; DtoCreateTaintRequest,
DtoTaintResponse,
DtoUpdateTaintRequest,
} from "../models/index";
import {
DtoCreateTaintRequestFromJSON,
DtoCreateTaintRequestToJSON,
DtoTaintResponseFromJSON,
DtoTaintResponseToJSON,
DtoUpdateTaintRequestFromJSON,
DtoUpdateTaintRequestToJSON,
} from "../models/index";
export interface CreateTaintRequest { export interface CreateTaintRequest {
dtoCreateTaintRequest: DtoCreateTaintRequest; dtoCreateTaintRequest: DtoCreateTaintRequest;

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,16 +12,42 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
import type { DtoDomainResponse } from "./DtoDomainResponse"; import type { DtoDomainResponse } from "./DtoDomainResponse";
import {DtoDomainResponseFromJSON, DtoDomainResponseToJSON,} from "./DtoDomainResponse"; import {
DtoDomainResponseFromJSON,
DtoDomainResponseFromJSONTyped,
DtoDomainResponseToJSON,
DtoDomainResponseToJSONTyped,
} from "./DtoDomainResponse";
import type { DtoLoadBalancerResponse } from "./DtoLoadBalancerResponse"; import type { DtoLoadBalancerResponse } from "./DtoLoadBalancerResponse";
import {DtoLoadBalancerResponseFromJSON, DtoLoadBalancerResponseToJSON,} from "./DtoLoadBalancerResponse"; import {
DtoLoadBalancerResponseFromJSON,
DtoLoadBalancerResponseFromJSONTyped,
DtoLoadBalancerResponseToJSON,
DtoLoadBalancerResponseToJSONTyped,
} from "./DtoLoadBalancerResponse";
import type { DtoNodePoolResponse } from "./DtoNodePoolResponse"; import type { DtoNodePoolResponse } from "./DtoNodePoolResponse";
import {DtoNodePoolResponseFromJSON, DtoNodePoolResponseToJSON,} from "./DtoNodePoolResponse"; import {
DtoNodePoolResponseFromJSON,
DtoNodePoolResponseFromJSONTyped,
DtoNodePoolResponseToJSON,
DtoNodePoolResponseToJSONTyped,
} from "./DtoNodePoolResponse";
import type { DtoServerResponse } from "./DtoServerResponse"; import type { DtoServerResponse } from "./DtoServerResponse";
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse"; import {
DtoServerResponseFromJSON,
DtoServerResponseFromJSONTyped,
DtoServerResponseToJSON,
DtoServerResponseToJSONTyped,
} from "./DtoServerResponse";
import type { DtoRecordSetResponse } from "./DtoRecordSetResponse"; import type { DtoRecordSetResponse } from "./DtoRecordSetResponse";
import {DtoRecordSetResponseFromJSON, DtoRecordSetResponseToJSON,} from "./DtoRecordSetResponse"; import {
DtoRecordSetResponseFromJSON,
DtoRecordSetResponseFromJSONTyped,
DtoRecordSetResponseToJSON,
DtoRecordSetResponseToJSONTyped,
} from "./DtoRecordSetResponse";
/** /**
* *
@@ -77,6 +103,18 @@ export interface DtoClusterResponse {
* @memberof DtoClusterResponse * @memberof DtoClusterResponse
*/ */
created_at?: string; created_at?: string;
/**
*
* @type {string}
* @memberof DtoClusterResponse
*/
docker_image?: string;
/**
*
* @type {string}
* @memberof DtoClusterResponse
*/
docker_tag?: string;
/** /**
* *
* @type {DtoLoadBalancerResponse} * @type {DtoLoadBalancerResponse}
@@ -179,6 +217,9 @@ export function DtoClusterResponseFromJSONTyped(
? undefined ? undefined
: DtoRecordSetResponseFromJSON(json["control_plane_record_set"]), : DtoRecordSetResponseFromJSON(json["control_plane_record_set"]),
created_at: json["created_at"] == null ? undefined : json["created_at"], created_at: json["created_at"] == null ? undefined : json["created_at"],
docker_image:
json["docker_image"] == null ? undefined : json["docker_image"],
docker_tag: json["docker_tag"] == null ? undefined : json["docker_tag"],
glueops_load_balancer: glueops_load_balancer:
json["glueops_load_balancer"] == null json["glueops_load_balancer"] == null
? undefined ? undefined
@@ -223,6 +264,8 @@ export function DtoClusterResponseToJSONTyped(
value["control_plane_record_set"], value["control_plane_record_set"],
), ),
created_at: value["created_at"], created_at: value["created_at"],
docker_image: value["docker_image"],
docker_tag: value["docker_tag"],
glueops_load_balancer: DtoLoadBalancerResponseToJSON( glueops_load_balancer: DtoLoadBalancerResponseToJSON(
value["glueops_load_balancer"], value["glueops_load_balancer"],
), ),

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export
@@ -24,6 +25,18 @@ export interface DtoCreateClusterRequest {
* @memberof DtoCreateClusterRequest * @memberof DtoCreateClusterRequest
*/ */
cluster_provider?: string; cluster_provider?: string;
/**
*
* @type {string}
* @memberof DtoCreateClusterRequest
*/
docker_image?: string;
/**
*
* @type {string}
* @memberof DtoCreateClusterRequest
*/
docker_tag?: string;
/** /**
* *
* @type {string} * @type {string}
@@ -63,6 +76,9 @@ export function DtoCreateClusterRequestFromJSONTyped(
return { return {
cluster_provider: cluster_provider:
json["cluster_provider"] == null ? undefined : json["cluster_provider"], json["cluster_provider"] == null ? undefined : json["cluster_provider"],
docker_image:
json["docker_image"] == null ? undefined : json["docker_image"],
docker_tag: json["docker_tag"] == null ? undefined : json["docker_tag"],
name: json["name"] == null ? undefined : json["name"], name: json["name"] == null ? undefined : json["name"],
region: json["region"] == null ? undefined : json["region"], region: json["region"] == null ? undefined : json["region"],
}; };
@@ -84,6 +100,8 @@ export function DtoCreateClusterRequestToJSONTyped(
return { return {
cluster_provider: value["cluster_provider"], cluster_provider: value["cluster_provider"],
docker_image: value["docker_image"],
docker_tag: value["docker_tag"],
name: value["name"], name: value["name"],
region: value["region"], region: value["region"],
}; };

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
import type { DtoJWK } from "./DtoJWK"; import type { DtoJWK } from "./DtoJWK";
import {DtoJWKFromJSON, DtoJWKToJSON,} from "./DtoJWK"; import {
DtoJWKFromJSON,
DtoJWKFromJSONTyped,
DtoJWKToJSON,
DtoJWKToJSONTyped,
} from "./DtoJWK";
/** /**
* *

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
import type { DtoJobStatus } from "./DtoJobStatus"; import type { DtoJobStatus } from "./DtoJobStatus";
import {DtoJobStatusFromJSON, DtoJobStatusToJSON,} from "./DtoJobStatus"; import {
DtoJobStatusFromJSON,
DtoJobStatusFromJSONTyped,
DtoJobStatusToJSON,
DtoJobStatusToJSONTyped,
} from "./DtoJobStatus";
/** /**
* *

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,14 +12,35 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
import type { DtoTaintResponse } from "./DtoTaintResponse"; import type { DtoTaintResponse } from "./DtoTaintResponse";
import {DtoTaintResponseFromJSON, DtoTaintResponseToJSON,} from "./DtoTaintResponse"; import {
DtoTaintResponseFromJSON,
DtoTaintResponseFromJSONTyped,
DtoTaintResponseToJSON,
DtoTaintResponseToJSONTyped,
} from "./DtoTaintResponse";
import type { DtoLabelResponse } from "./DtoLabelResponse"; import type { DtoLabelResponse } from "./DtoLabelResponse";
import {DtoLabelResponseFromJSON, DtoLabelResponseToJSON,} from "./DtoLabelResponse"; import {
DtoLabelResponseFromJSON,
DtoLabelResponseFromJSONTyped,
DtoLabelResponseToJSON,
DtoLabelResponseToJSONTyped,
} from "./DtoLabelResponse";
import type { DtoServerResponse } from "./DtoServerResponse"; import type { DtoServerResponse } from "./DtoServerResponse";
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse"; import {
DtoServerResponseFromJSON,
DtoServerResponseFromJSONTyped,
DtoServerResponseToJSON,
DtoServerResponseToJSONTyped,
} from "./DtoServerResponse";
import type { DtoAnnotationResponse } from "./DtoAnnotationResponse"; import type { DtoAnnotationResponse } from "./DtoAnnotationResponse";
import {DtoAnnotationResponseFromJSON, DtoAnnotationResponseToJSON,} from "./DtoAnnotationResponse"; import {
DtoAnnotationResponseFromJSON,
DtoAnnotationResponseFromJSONTyped,
DtoAnnotationResponseToJSON,
DtoAnnotationResponseToJSONTyped,
} from "./DtoAnnotationResponse";
/** /**
* *

View File

@@ -12,8 +12,14 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
import type { DtoJob } from "./DtoJob"; import type { DtoJob } from "./DtoJob";
import {DtoJobFromJSON, DtoJobToJSON,} from "./DtoJob"; import {
DtoJobFromJSON,
DtoJobFromJSONTyped,
DtoJobToJSON,
DtoJobToJSONTyped,
} from "./DtoJob";
/** /**
* *

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export
@@ -24,6 +25,18 @@ export interface DtoUpdateClusterRequest {
* @memberof DtoUpdateClusterRequest * @memberof DtoUpdateClusterRequest
*/ */
cluster_provider?: string; cluster_provider?: string;
/**
*
* @type {string}
* @memberof DtoUpdateClusterRequest
*/
docker_image?: string;
/**
*
* @type {string}
* @memberof DtoUpdateClusterRequest
*/
docker_tag?: string;
/** /**
* *
* @type {string} * @type {string}
@@ -63,6 +76,9 @@ export function DtoUpdateClusterRequestFromJSONTyped(
return { return {
cluster_provider: cluster_provider:
json["cluster_provider"] == null ? undefined : json["cluster_provider"], json["cluster_provider"] == null ? undefined : json["cluster_provider"],
docker_image:
json["docker_image"] == null ? undefined : json["docker_image"],
docker_tag: json["docker_tag"] == null ? undefined : json["docker_tag"],
name: json["name"] == null ? undefined : json["name"], name: json["name"] == null ? undefined : json["name"],
region: json["region"] == null ? undefined : json["region"], region: json["region"] == null ? undefined : json["region"],
}; };
@@ -84,6 +100,8 @@ export function DtoUpdateClusterRequestToJSONTyped(
return { return {
cluster_provider: value["cluster_provider"], cluster_provider: value["cluster_provider"],
docker_image: value["docker_image"],
docker_tag: value["docker_tag"],
name: value["name"], name: value["name"],
region: value["region"], region: value["region"],
}; };

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

View File

@@ -12,6 +12,7 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
import { mapValues } from "../runtime";
/** /**
* *
* @export * @export

Some files were not shown because too many files have changed in this diff Show More