mirror of
https://github.com/GlueOps/autoglue.git
synced 2026-02-14 13:20:05 +01:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d37a6363f | ||
|
|
1dbdd04808 | ||
|
|
45b55015ac | ||
|
|
6b191089a5 | ||
|
|
d2e6ff9812 | ||
|
|
98a6cf7e51 | ||
|
|
fb4af74e3c | ||
|
|
1021e06655 | ||
|
|
c6be7bf8eb | ||
|
|
1429c40b2b | ||
|
|
73c4904a42 | ||
|
|
40df22c166 | ||
|
|
500a8d1095 | ||
|
|
eff69ff4ce |
41
cmd/serve.go
41
cmd/serve.go
@@ -115,6 +115,47 @@ var serveCmd = &cobra.Command{
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("failed to enqueue bootstrap_bastion: %v", err)
|
log.Printf("failed to enqueue bootstrap_bastion: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_, err = jobs.Enqueue(
|
||||||
|
context.Background(),
|
||||||
|
uuid.NewString(),
|
||||||
|
"prepare_cluster",
|
||||||
|
bg.ClusterPrepareArgs{IntervalS: 120},
|
||||||
|
archer.WithMaxRetries(3),
|
||||||
|
archer.WithScheduleTime(time.Now().Add(60*time.Second)),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("failed to enqueue prepare_cluster: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = jobs.Enqueue(
|
||||||
|
context.Background(),
|
||||||
|
uuid.NewString(),
|
||||||
|
"cluster_setup",
|
||||||
|
bg.ClusterSetupArgs{
|
||||||
|
IntervalS: 120,
|
||||||
|
},
|
||||||
|
archer.WithMaxRetries(3),
|
||||||
|
archer.WithScheduleTime(time.Now().Add(60*time.Second)),
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("failed to enqueue cluster setup: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = jobs.Enqueue(
|
||||||
|
context.Background(),
|
||||||
|
uuid.NewString(),
|
||||||
|
"cluster_bootstrap",
|
||||||
|
bg.ClusterBootstrapArgs{
|
||||||
|
IntervalS: 120,
|
||||||
|
},
|
||||||
|
archer.WithMaxRetries(3),
|
||||||
|
archer.WithScheduleTime(time.Now().Add(60*time.Second)),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("failed to enqueue cluster bootstrap: %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
@@ -96,6 +96,10 @@ 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:
|
||||||
@@ -129,6 +133,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 +721,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:
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -26,7 +26,7 @@ require (
|
|||||||
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.45.0
|
||||||
golang.org/x/oauth2 v0.33.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
|
||||||
|
|||||||
72
go.sum
72
go.sum
@@ -10,62 +10,45 @@ 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.39.6 h1:2JrPCVgWJm7bm83BDwY5z8ietmeJUbh3O2ACnn+Xsqk=
|
github.com/aws/aws-sdk-go-v2 v1.40.1 h1:difXb4maDZkRH0x//Qkwcfpdg1XQVXEAEs2DdXldFFc=
|
||||||
github.com/aws/aws-sdk-go-v2 v1.39.6/go.mod h1:c9pm7VwuW0UPxAEYGyTmyurVcNrbF6Rt/wixFqDhcjE=
|
|
||||||
github.com/aws/aws-sdk-go-v2 v1.40.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
|
github.com/aws/aws-sdk-go-v2 v1.40.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
|
||||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.3 h1:DHctwEM8P8iTXFxC/QK0MRjwEpWQeM9yzidCRjldUz0=
|
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.3/go.mod h1:xdCzcZEtnSTKVDOmUZs4l/j3pSV6rpo1WXl5ugNsL8Y=
|
|
||||||
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.31.20 h1:/jWF4Wu90EhKCgjTdy1DGxcbcbNrjfBHvksEL79tfQc=
|
github.com/aws/aws-sdk-go-v2/config v1.32.3 h1:cpz7H2uMNTDa0h/5CYL5dLUEzPSLo2g0NkbxTRJtSSU=
|
||||||
github.com/aws/aws-sdk-go-v2/config v1.31.20/go.mod h1:95Hh1Tc5VYKL9NJ7tAkDcqeKt+MCXQB1hQZaRdJIZE0=
|
|
||||||
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.3/go.mod h1:srtPKaJJe3McW6T/+GMBZyIPc+SeqJsNPJsd4mOYZ6s=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.18.24 h1:iJ2FmPT35EaIB0+kMa6TnQ+PwG5A1prEdAw+PsMzfHg=
|
github.com/aws/aws-sdk-go-v2/credentials v1.19.3 h1:01Ym72hK43hjwDeJUfi1l2oYLXBAOR8gNSZNmXmvuas=
|
||||||
github.com/aws/aws-sdk-go-v2/credentials v1.18.24/go.mod h1:U91+DrfjAiXPDEGYhh/x29o4p0qHX5HDqG7y5VViv64=
|
|
||||||
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.3/go.mod h1:55nWF/Sr9Zvls0bGnWkRxUdhzKqj9uRNlPvgV1vgxKc=
|
||||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.13 h1:T1brd5dR3/fzNFAQch/iBKeX07/ffu/cLu+q+RuzEWk=
|
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.13/go.mod h1:Peg/GBAQ6JDt+RoBf4meB1wylmAipb7Kg2ZFakZTlwk=
|
|
||||||
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.15/go.mod h1:hW6zjYUDQwfz3icf4g2O41PHi77u10oAzJ84iSzR/lo=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.13 h1:a+8/MLcWlIxo1lF9xaGt3J/u3yOZx+CdSveSNwjhD40=
|
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.13/go.mod h1:oGnKwIYZ4XttyU2JWxFrwvhF6YKiK/9/wmE3v3Iu9K8=
|
|
||||||
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.15/go.mod h1:K+/1EpG42dFSY7CBj+Fruzm8PsCGWTXJ3jdeJ659oGQ=
|
||||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.13 h1:HBSI2kDkMdWz4ZM7FjwE7e/pWDEZ+nR95x8Ztet1ooY=
|
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.13/go.mod h1:YE94ZoDArI7awZqJzBAZ3PDD2zSfuP7w6P2knOzIn8M=
|
|
||||||
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.15/go.mod h1:3I4oCdZdmgrREhU74qS1dK9yZ62yumob+58AbFR4cQA=
|
||||||
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.13 h1:eg/WYAa12vqTphzIdWMzqYRVKKnCboVPRlvaybNCqPA=
|
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.13/go.mod h1:/FDdxWhz1486obGrKKC1HONd7krpk38LBt+dutLcN9k=
|
|
||||||
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.15/go.mod h1:Z803iB3B0bc8oJV8zH2PERLRfQUJ2n2BXISpsA4+O1M=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.3 h1:x2Ibm/Af8Fi+BH+Hsn9TXGdT+hKbDd5XOTZxTMxDk7o=
|
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.3/go.mod h1:IW1jwyrQgMdhisceG8fQLmQIydcT/jWY21rFhzgaKwo=
|
|
||||||
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.4 h1:NvMjwvv8hpGUILarKw7Z4Q0w1H9anXKsesMxtw++MA4=
|
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.4/go.mod h1:455WPHSwaGj2waRSpQp7TsnpOnBfw8iDfPfbwl7KPJE=
|
|
||||||
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.6/go.mod h1:5KYaMG6wmVKMFBSfWoyG/zH8pWwzQFnKgpoSRlXHKdQ=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.13 h1:kDqdFvMY4AtKoACfzIGD8A0+hbT41KTKF//gq7jITfM=
|
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.13/go.mod h1:lmKuogqSU3HzQCwZ9ZtcqOc5XGMqtDK7OIc2+DxiUEg=
|
|
||||||
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.15/go.mod h1:4Zkjq0FKjE78NKjabuM4tRXKFzUJWXgP0ItEZK8l7JU=
|
||||||
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.13 h1:zhBJXdhWIFZ1acfDYIhu4+LCzdUS2Vbcum7D01dXlHQ=
|
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.13/go.mod h1:JaaOeCE368qn2Hzi3sEzY6FgAZVCIYcC2nwbro2QCh8=
|
|
||||||
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.15/go.mod h1:I7sditnFGtYMIqPRU1QoHZAUrXkGp4SczmlLwrNPlD0=
|
||||||
github.com/aws/aws-sdk-go-v2/service/route53 v1.59.5 h1:4Uy8lhrh4E9jS/MtmzjuEuvX7zOZTbNuPe+zkvtvRRU=
|
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.59.5/go.mod h1:TUbfYOisWZWyT2qjmlMh93ERw1Ry8G4q/yT2Q8TsDag=
|
|
||||||
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.61.1/go.mod h1:JRqmldxIPU6uck5bcFS8ExwwG2mUwfy+jiUmismOxJs=
|
||||||
github.com/aws/aws-sdk-go-v2/service/s3 v1.90.2 h1:DhdbtDl4FdNlj31+xiRXANxEE+eC7n8JQz+/ilwQ8Uc=
|
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.90.2/go.mod h1:+wArOOrcHUevqdto9k1tKOF5++YTe9JEcPSc9Tx2ZSw=
|
|
||||||
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.0/go.mod h1:/sJLzHtiiZvs6C1RbxS/anSAFwZD6oC6M/kotQzOiLw=
|
||||||
|
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.3/go.mod h1:fQ7E7Qj9GiW8y0ClD7cUJk3Bz5Iw8wZkWDHsTe8vDKs=
|
github.com/aws/aws-sdk-go-v2/service/signin v1.0.3/go.mod h1:fQ7E7Qj9GiW8y0ClD7cUJk3Bz5Iw8wZkWDHsTe8vDKs=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sso v1.30.3 h1:NjShtS1t8r5LUfFVtFeI8xLAHQNTa7UI0VawXlrBMFQ=
|
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.3/go.mod h1:fKvyjJcz63iL/ftA6RaM8sRCtN4r4zl4tjL3qw5ec7k=
|
|
||||||
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.6/go.mod h1:8WYg+Y40Sn3X2hioaaWAAIngndR8n1XFdRPPX+7QBaM=
|
||||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.7 h1:gTsnx0xXNQ6SBbymoDvcoRHL+q4l/dAFsQuKfDWSaGc=
|
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.7/go.mod h1:klO+ejMvYsB4QATfEOIXk8WAEwN4N0aBfJpvC+5SZBo=
|
|
||||||
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.11/go.mod h1:qyWHz+4lvkXcr3+PoGlGHEI+3DLLiU6/GdrFfMaAhB0=
|
||||||
github.com/aws/aws-sdk-go-v2/service/sts v1.40.2 h1:HK5ON3KmQV2HcAunnx4sKLB9aPf3gKGwVAf7xnx0QT0=
|
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.40.2/go.mod h1:E19xDjpzPZC7LS2knI9E6BaRFDK43Eul7vd6rSq2HWk=
|
|
||||||
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.3/go.mod h1:T270C0R5sZNLbWUe8ueiAF42XSZxxPocTaGSgs5c/60=
|
||||||
github.com/aws/smithy-go v1.23.2 h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM=
|
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
|
||||||
github.com/aws/smithy-go v1.23.2/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
|
|
||||||
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=
|
||||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
@@ -77,8 +60,7 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
|
|||||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
|
github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M=
|
||||||
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
|
github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU=
|
||||||
github.com/coreos/go-oidc/v3 v3.16.0 h1:qRQUCFstKpXwmEjDQTIbyY/5jF00+asXzSkmkoa/mow=
|
github.com/coreos/go-oidc/v3 v3.17.0 h1:hWBGaQfbi0iVviX4ibC7bk8OKT5qNr4klBaCHVNvehc=
|
||||||
github.com/coreos/go-oidc/v3 v3.16.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8=
|
|
||||||
github.com/coreos/go-oidc/v3 v3.17.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8=
|
github.com/coreos/go-oidc/v3 v3.17.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8=
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||||
@@ -248,8 +230,7 @@ github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDc
|
|||||||
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
|
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
|
||||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||||
github.com/sosedoff/pgweb v0.16.2 h1:1F1CWlCLSEgSctMva+nYuUibdhyiCUzlXyU5MQUJbFM=
|
github.com/sosedoff/pgweb v0.17.0 h1:2WSPajNyqStS5oulvfdKIBaWQTy/qNBREBp51h4yiLU=
|
||||||
github.com/sosedoff/pgweb v0.16.2/go.mod h1:ER7fsBddI3h7MQKO5RsUPi7Q/PWZYSKcI61kTp369Rw=
|
|
||||||
github.com/sosedoff/pgweb v0.17.0/go.mod h1:fY82HStJ/n/JCvzHsJmVT6BDYiWxSQG6CvqH+biuUbM=
|
github.com/sosedoff/pgweb v0.17.0/go.mod h1:fY82HStJ/n/JCvzHsJmVT6BDYiWxSQG6CvqH+biuUbM=
|
||||||
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
|
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
|
||||||
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
|
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
|
||||||
@@ -257,8 +238,7 @@ github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
|
|||||||
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
|
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
|
||||||
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
|
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
|
||||||
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
|
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
|
||||||
github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s=
|
github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=
|
||||||
github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0=
|
|
||||||
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
|
github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=
|
||||||
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
|
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
|
||||||
@@ -310,8 +290,7 @@ 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.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
|
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
|
||||||
golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
|
|
||||||
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
|
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
|
||||||
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=
|
||||||
@@ -323,11 +302,12 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
|||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
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.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
|
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
|
||||||
golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
|
|
||||||
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 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
|
||||||
golang.org/x/oauth2 v0.33.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
|
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/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=
|
||||||
|
|||||||
@@ -107,6 +107,28 @@ func NewJobs(gdb *gorm.DB, dbUrl string) (*Jobs, error) {
|
|||||||
archer.WithInstances(1),
|
archer.WithInstances(1),
|
||||||
archer.WithTimeout(2*time.Minute),
|
archer.WithTimeout(2*time.Minute),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
c.Register(
|
||||||
|
"prepare_cluster",
|
||||||
|
ClusterPrepareWorker(gdb, jobs),
|
||||||
|
archer.WithInstances(1),
|
||||||
|
archer.WithTimeout(2*time.Minute),
|
||||||
|
)
|
||||||
|
|
||||||
|
c.Register(
|
||||||
|
"cluster_setup",
|
||||||
|
ClusterSetupWorker(gdb, jobs),
|
||||||
|
archer.WithInstances(1),
|
||||||
|
archer.WithTimeout(2*time.Minute),
|
||||||
|
)
|
||||||
|
|
||||||
|
c.Register(
|
||||||
|
"cluster_bootstrap",
|
||||||
|
ClusterBootstrapWorker(gdb, jobs),
|
||||||
|
archer.WithInstances(1),
|
||||||
|
archer.WithTimeout(60*time.Minute),
|
||||||
|
)
|
||||||
|
|
||||||
return jobs, nil
|
return jobs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
121
internal/bg/cluster_bootstrap.go
Normal file
121
internal/bg/cluster_bootstrap.go
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
package bg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"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 ClusterBootstrapArgs struct {
|
||||||
|
IntervalS int `json:"interval_seconds,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ClusterBootstrapResult struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Processed int `json:"processed"`
|
||||||
|
Ready int `json:"ready"`
|
||||||
|
Failed int `json:"failed"`
|
||||||
|
ElapsedMs int `json:"elapsed_ms"`
|
||||||
|
FailedIDs []uuid.UUID `json:"failed_cluster_ids"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClusterBootstrapWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
|
||||||
|
return func(ctx context.Context, j job.Job) (any, error) {
|
||||||
|
args := ClusterBootstrapArgs{IntervalS: 120}
|
||||||
|
jobID := j.ID
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
|
_ = j.ParseArguments(&args)
|
||||||
|
if args.IntervalS <= 0 {
|
||||||
|
args.IntervalS = 120
|
||||||
|
}
|
||||||
|
|
||||||
|
var clusters []models.Cluster
|
||||||
|
if err := db.
|
||||||
|
Preload("BastionServer.SshKey").
|
||||||
|
Where("status = ?", clusterStatusProvisioning).
|
||||||
|
Find(&clusters).Error; err != nil {
|
||||||
|
log.Error().Err(err).Msg("[cluster_bootstrap] query clusters failed")
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
proc, ready, failCount := 0, 0, 0
|
||||||
|
var failedIDs []uuid.UUID
|
||||||
|
|
||||||
|
perClusterTimeout := 60 * time.Minute
|
||||||
|
|
||||||
|
for i := range clusters {
|
||||||
|
c := &clusters[i]
|
||||||
|
proc++
|
||||||
|
|
||||||
|
if c.BastionServer.ID == uuid.Nil || c.BastionServer.Status != "ready" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
logger := log.With().
|
||||||
|
Str("job", jobID).
|
||||||
|
Str("cluster_id", c.ID.String()).
|
||||||
|
Str("cluster_name", c.Name).
|
||||||
|
Logger()
|
||||||
|
|
||||||
|
logger.Info().Msg("[cluster_bootstrap] running make bootstrap")
|
||||||
|
|
||||||
|
runCtx, cancel := context.WithTimeout(ctx, perClusterTimeout)
|
||||||
|
out, err := runMakeOnBastion(runCtx, db, c, "bootstrap")
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
failCount++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
logger.Error().Err(err).Str("output", out).Msg("[cluster_bootstrap] make bootstrap failed")
|
||||||
|
_ = setClusterStatus(db, c.ID, clusterStatusFailed, fmt.Sprintf("make bootstrap: %v", err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// you can choose a different terminal status here if you like
|
||||||
|
if err := setClusterStatus(db, c.ID, clusterStatusReady, ""); err != nil {
|
||||||
|
failCount++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
logger.Error().Err(err).Msg("[cluster_bootstrap] failed to mark cluster ready")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ready++
|
||||||
|
logger.Info().Msg("[cluster_bootstrap] cluster marked ready")
|
||||||
|
}
|
||||||
|
|
||||||
|
res := ClusterBootstrapResult{
|
||||||
|
Status: "ok",
|
||||||
|
Processed: proc,
|
||||||
|
Ready: ready,
|
||||||
|
Failed: failCount,
|
||||||
|
ElapsedMs: int(time.Since(start).Milliseconds()),
|
||||||
|
FailedIDs: failedIDs,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info().
|
||||||
|
Int("processed", proc).
|
||||||
|
Int("ready", ready).
|
||||||
|
Int("failed", failCount).
|
||||||
|
Msg("[cluster_bootstrap] reconcile tick ok")
|
||||||
|
|
||||||
|
// self-reschedule
|
||||||
|
next := time.Now().Add(time.Duration(args.IntervalS) * time.Second)
|
||||||
|
_, _ = jobs.Enqueue(
|
||||||
|
ctx,
|
||||||
|
uuid.NewString(),
|
||||||
|
"cluster_bootstrap",
|
||||||
|
args,
|
||||||
|
archer.WithScheduleTime(next),
|
||||||
|
archer.WithMaxRetries(1),
|
||||||
|
)
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
120
internal/bg/cluster_setup.go
Normal file
120
internal/bg/cluster_setup.go
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
package bg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"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 ClusterSetupArgs struct {
|
||||||
|
IntervalS int `json:"interval_seconds,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ClusterSetupResult struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Processed int `json:"processed"`
|
||||||
|
Provisioning int `json:"provisioning"`
|
||||||
|
Failed int `json:"failed"`
|
||||||
|
ElapsedMs int `json:"elapsed_ms"`
|
||||||
|
FailedCluster []uuid.UUID `json:"failed_cluster_ids"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClusterSetupWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
|
||||||
|
return func(ctx context.Context, j job.Job) (any, error) {
|
||||||
|
args := ClusterSetupArgs{IntervalS: 120}
|
||||||
|
jobID := j.ID
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
|
_ = j.ParseArguments(&args)
|
||||||
|
if args.IntervalS <= 0 {
|
||||||
|
args.IntervalS = 120
|
||||||
|
}
|
||||||
|
|
||||||
|
var clusters []models.Cluster
|
||||||
|
if err := db.
|
||||||
|
Preload("BastionServer.SshKey").
|
||||||
|
Where("status = ?", clusterStatusPending).
|
||||||
|
Find(&clusters).Error; err != nil {
|
||||||
|
log.Error().Err(err).Msg("[cluster_setup] query clusters failed")
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
proc, prov, failCount := 0, 0, 0
|
||||||
|
var failedIDs []uuid.UUID
|
||||||
|
|
||||||
|
perClusterTimeout := 30 * time.Minute
|
||||||
|
|
||||||
|
for i := range clusters {
|
||||||
|
c := &clusters[i]
|
||||||
|
proc++
|
||||||
|
|
||||||
|
if c.BastionServer.ID == uuid.Nil || c.BastionServer.Status != "ready" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
logger := log.With().
|
||||||
|
Str("job", jobID).
|
||||||
|
Str("cluster_id", c.ID.String()).
|
||||||
|
Str("cluster_name", c.Name).
|
||||||
|
Logger()
|
||||||
|
|
||||||
|
logger.Info().Msg("[cluster_setup] running make setup")
|
||||||
|
|
||||||
|
runCtx, cancel := context.WithTimeout(ctx, perClusterTimeout)
|
||||||
|
out, err := runMakeOnBastion(runCtx, db, c, "setup")
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
failCount++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
logger.Error().Err(err).Str("output", out).Msg("[cluster_setup] make setup failed")
|
||||||
|
_ = setClusterStatus(db, c.ID, clusterStatusFailed, fmt.Sprintf("make setup: %v", err))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := setClusterStatus(db, c.ID, clusterStatusProvisioning, ""); err != nil {
|
||||||
|
failCount++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
logger.Error().Err(err).Msg("[cluster_setup] failed to mark cluster provisioning")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
prov++
|
||||||
|
logger.Info().Msg("[cluster_setup] cluster moved to provisioning")
|
||||||
|
}
|
||||||
|
|
||||||
|
res := ClusterSetupResult{
|
||||||
|
Status: "ok",
|
||||||
|
Processed: proc,
|
||||||
|
Provisioning: prov,
|
||||||
|
Failed: failCount,
|
||||||
|
ElapsedMs: int(time.Since(start).Milliseconds()),
|
||||||
|
FailedCluster: failedIDs,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info().
|
||||||
|
Int("processed", proc).
|
||||||
|
Int("provisioning", prov).
|
||||||
|
Int("failed", failCount).
|
||||||
|
Msg("[cluster_setup] reconcile tick ok")
|
||||||
|
|
||||||
|
// self-reschedule
|
||||||
|
next := time.Now().Add(time.Duration(args.IntervalS) * time.Second)
|
||||||
|
_, _ = jobs.Enqueue(
|
||||||
|
ctx,
|
||||||
|
uuid.NewString(),
|
||||||
|
"cluster_setup",
|
||||||
|
args,
|
||||||
|
archer.WithScheduleTime(next),
|
||||||
|
archer.WithMaxRetries(1),
|
||||||
|
)
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
510
internal/bg/prepare_cluster.go
Normal file
510
internal/bg/prepare_cluster.go
Normal file
@@ -0,0 +1,510 @@
|
|||||||
|
package bg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/dyaksa/archer"
|
||||||
|
"github.com/dyaksa/archer/job"
|
||||||
|
"github.com/glueops/autoglue/internal/models"
|
||||||
|
"github.com/glueops/autoglue/internal/utils"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
"golang.org/x/crypto/ssh"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ClusterPrepareArgs struct {
|
||||||
|
IntervalS int `json:"interval_seconds,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ClusterPrepareFailure struct {
|
||||||
|
ClusterID uuid.UUID `json:"cluster_id"`
|
||||||
|
Step string `json:"step"`
|
||||||
|
Reason string `json:"reason"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ClusterPrepareResult struct {
|
||||||
|
Status string `json:"status"`
|
||||||
|
Processed int `json:"processed"`
|
||||||
|
MarkedPending int `json:"marked_pending"`
|
||||||
|
Failed int `json:"failed"`
|
||||||
|
ElapsedMs int `json:"elapsed_ms"`
|
||||||
|
FailedIDs []uuid.UUID `json:"failed_cluster_ids"`
|
||||||
|
Failures []ClusterPrepareFailure `json:"failures"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Alias the status constants from models to avoid string drift.
|
||||||
|
const (
|
||||||
|
clusterStatusPrePending = models.ClusterStatusPrePending
|
||||||
|
clusterStatusPending = models.ClusterStatusPending
|
||||||
|
clusterStatusProvisioning = models.ClusterStatusProvisioning
|
||||||
|
clusterStatusReady = models.ClusterStatusReady
|
||||||
|
clusterStatusFailed = models.ClusterStatusFailed
|
||||||
|
)
|
||||||
|
|
||||||
|
func ClusterPrepareWorker(db *gorm.DB, jobs *Jobs) archer.WorkerFn {
|
||||||
|
return func(ctx context.Context, j job.Job) (any, error) {
|
||||||
|
args := ClusterPrepareArgs{IntervalS: 120}
|
||||||
|
jobID := j.ID
|
||||||
|
start := time.Now()
|
||||||
|
|
||||||
|
_ = j.ParseArguments(&args)
|
||||||
|
if args.IntervalS <= 0 {
|
||||||
|
args.IntervalS = 120
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load all clusters that are pre_pending; we’ll filter for bastion.ready in memory.
|
||||||
|
var clusters []models.Cluster
|
||||||
|
if err := db.
|
||||||
|
Preload("BastionServer.SshKey").
|
||||||
|
Preload("CaptainDomain").
|
||||||
|
Preload("ControlPlaneRecordSet").
|
||||||
|
Preload("NodePools.Servers.SshKey").
|
||||||
|
Where("status = ?", clusterStatusPrePending).
|
||||||
|
Find(&clusters).Error; err != nil {
|
||||||
|
log.Error().Err(err).Msg("[cluster_prepare] query clusters failed")
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
proc, ok, fail := 0, 0, 0
|
||||||
|
var failedIDs []uuid.UUID
|
||||||
|
var failures []ClusterPrepareFailure
|
||||||
|
|
||||||
|
perClusterTimeout := 8 * time.Minute
|
||||||
|
|
||||||
|
for i := range clusters {
|
||||||
|
c := &clusters[i]
|
||||||
|
proc++
|
||||||
|
|
||||||
|
// bastion must exist and be ready
|
||||||
|
if c.BastionServer == nil || c.BastionServerID == nil || *c.BastionServerID == uuid.Nil || c.BastionServer.Status != "ready" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
clusterLog := log.With().
|
||||||
|
Str("job", jobID).
|
||||||
|
Str("cluster_id", c.ID.String()).
|
||||||
|
Str("cluster_name", c.Name).
|
||||||
|
Logger()
|
||||||
|
|
||||||
|
clusterLog.Info().Msg("[cluster_prepare] starting")
|
||||||
|
|
||||||
|
if err := validateClusterForPrepare(c); err != nil {
|
||||||
|
fail++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
failures = append(failures, ClusterPrepareFailure{
|
||||||
|
ClusterID: c.ID,
|
||||||
|
Step: "validate",
|
||||||
|
Reason: err.Error(),
|
||||||
|
})
|
||||||
|
clusterLog.Error().Err(err).Msg("[cluster_prepare] validation failed")
|
||||||
|
_ = setClusterStatus(db, c.ID, clusterStatusFailed, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
allServers := flattenClusterServers(c)
|
||||||
|
keyPayloads, sshConfig, err := buildSSHAssetsForCluster(db, c, allServers)
|
||||||
|
if err != nil {
|
||||||
|
fail++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
failures = append(failures, ClusterPrepareFailure{
|
||||||
|
ClusterID: c.ID,
|
||||||
|
Step: "build_ssh_assets",
|
||||||
|
Reason: err.Error(),
|
||||||
|
})
|
||||||
|
clusterLog.Error().Err(err).Msg("[cluster_prepare] build ssh assets failed")
|
||||||
|
_ = setClusterStatus(db, c.ID, clusterStatusFailed, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
payloadJSON, err := json.MarshalIndent(c, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
fail++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
failures = append(failures, ClusterPrepareFailure{
|
||||||
|
ClusterID: c.ID,
|
||||||
|
Step: "marshal_payload",
|
||||||
|
Reason: err.Error(),
|
||||||
|
})
|
||||||
|
clusterLog.Error().Err(err).Msg("[cluster_prepare] json marshal failed")
|
||||||
|
_ = setClusterStatus(db, c.ID, clusterStatusFailed, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
runCtx, cancel := context.WithTimeout(ctx, perClusterTimeout)
|
||||||
|
err = pushAssetsToBastion(runCtx, db, c, sshConfig, keyPayloads, payloadJSON)
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fail++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
failures = append(failures, ClusterPrepareFailure{
|
||||||
|
ClusterID: c.ID,
|
||||||
|
Step: "ssh_push",
|
||||||
|
Reason: err.Error(),
|
||||||
|
})
|
||||||
|
clusterLog.Error().Err(err).Msg("[cluster_prepare] failed to push assets to bastion")
|
||||||
|
_ = setClusterStatus(db, c.ID, clusterStatusFailed, err.Error())
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := setClusterStatus(db, c.ID, clusterStatusPending, ""); err != nil {
|
||||||
|
fail++
|
||||||
|
failedIDs = append(failedIDs, c.ID)
|
||||||
|
failures = append(failures, ClusterPrepareFailure{
|
||||||
|
ClusterID: c.ID,
|
||||||
|
Step: "set_pending",
|
||||||
|
Reason: err.Error(),
|
||||||
|
})
|
||||||
|
clusterLog.Error().Err(err).Msg("[cluster_prepare] failed to mark cluster pending")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
ok++
|
||||||
|
clusterLog.Info().Msg("[cluster_prepare] cluster marked pending")
|
||||||
|
}
|
||||||
|
|
||||||
|
res := ClusterPrepareResult{
|
||||||
|
Status: "ok",
|
||||||
|
Processed: proc,
|
||||||
|
MarkedPending: ok,
|
||||||
|
Failed: fail,
|
||||||
|
ElapsedMs: int(time.Since(start).Milliseconds()),
|
||||||
|
FailedIDs: failedIDs,
|
||||||
|
Failures: failures,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info().
|
||||||
|
Int("processed", proc).
|
||||||
|
Int("pending", ok).
|
||||||
|
Int("failed", fail).
|
||||||
|
Msg("[cluster_prepare] reconcile tick ok")
|
||||||
|
|
||||||
|
next := time.Now().Add(time.Duration(args.IntervalS) * time.Second)
|
||||||
|
_, _ = jobs.Enqueue(
|
||||||
|
ctx,
|
||||||
|
uuid.NewString(),
|
||||||
|
"prepare_cluster",
|
||||||
|
args,
|
||||||
|
archer.WithScheduleTime(next),
|
||||||
|
archer.WithMaxRetries(1),
|
||||||
|
)
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- helpers ----------
|
||||||
|
|
||||||
|
func validateClusterForPrepare(c *models.Cluster) error {
|
||||||
|
if c.BastionServer == nil || c.BastionServerID == nil || *c.BastionServerID == uuid.Nil {
|
||||||
|
return fmt.Errorf("missing bastion server")
|
||||||
|
}
|
||||||
|
if c.BastionServer.Status != "ready" {
|
||||||
|
return fmt.Errorf("bastion server not ready (status=%s)", c.BastionServer.Status)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CaptainDomain is a value type; presence is via *ID
|
||||||
|
if c.CaptainDomainID == nil || *c.CaptainDomainID == uuid.Nil {
|
||||||
|
return fmt.Errorf("missing captain domain for cluster")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ControlPlaneRecordSet is a pointer; presence is via *ID + non-nil struct
|
||||||
|
if c.ControlPlaneRecordSetID == nil || *c.ControlPlaneRecordSetID == uuid.Nil || c.ControlPlaneRecordSet == nil {
|
||||||
|
return fmt.Errorf("missing control_plane_record_set for cluster")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(c.NodePools) == 0 {
|
||||||
|
return fmt.Errorf("cluster has no node pools")
|
||||||
|
}
|
||||||
|
|
||||||
|
hasServer := false
|
||||||
|
for i := range c.NodePools {
|
||||||
|
if len(c.NodePools[i].Servers) > 0 {
|
||||||
|
hasServer = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !hasServer {
|
||||||
|
return fmt.Errorf("cluster has no servers attached to node pools")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func flattenClusterServers(c *models.Cluster) []*models.Server {
|
||||||
|
var out []*models.Server
|
||||||
|
for i := range c.NodePools {
|
||||||
|
for j := range c.NodePools[i].Servers {
|
||||||
|
s := &c.NodePools[i].Servers[j]
|
||||||
|
out = append(out, s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
type keyPayload struct {
|
||||||
|
FileName string
|
||||||
|
PrivateKeyB64 string
|
||||||
|
}
|
||||||
|
|
||||||
|
// build ssh-config for all servers + decrypt keys.
|
||||||
|
// ssh-config is intended to live on the bastion and connect via *private* IPs.
|
||||||
|
func buildSSHAssetsForCluster(db *gorm.DB, c *models.Cluster, servers []*models.Server) (map[uuid.UUID]keyPayload, string, error) {
|
||||||
|
var sb strings.Builder
|
||||||
|
keys := make(map[uuid.UUID]keyPayload)
|
||||||
|
|
||||||
|
for _, s := range servers {
|
||||||
|
// Defensive checks
|
||||||
|
if strings.TrimSpace(s.PrivateIPAddress) == "" {
|
||||||
|
return nil, "", fmt.Errorf("server %s missing private ip", s.ID)
|
||||||
|
}
|
||||||
|
if s.SshKeyID == uuid.Nil {
|
||||||
|
return nil, "", fmt.Errorf("server %s missing ssh key relation", s.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// de-dupe keys: many servers may share the same ssh key
|
||||||
|
if _, ok := keys[s.SshKeyID]; !ok {
|
||||||
|
priv, err := utils.DecryptForOrg(
|
||||||
|
s.OrganizationID,
|
||||||
|
s.SshKey.EncryptedPrivateKey,
|
||||||
|
s.SshKey.PrivateIV,
|
||||||
|
s.SshKey.PrivateTag,
|
||||||
|
db,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", fmt.Errorf("decrypt key for server %s: %w", s.ID, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fname := fmt.Sprintf("%s.pem", s.SshKeyID.String())
|
||||||
|
keys[s.SshKeyID] = keyPayload{
|
||||||
|
FileName: fname,
|
||||||
|
PrivateKeyB64: base64.StdEncoding.EncodeToString([]byte(priv)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ssh config entry per server
|
||||||
|
keyFile := keys[s.SshKeyID].FileName
|
||||||
|
|
||||||
|
hostAlias := s.Hostname
|
||||||
|
if hostAlias == "" {
|
||||||
|
hostAlias = s.ID.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.WriteString(fmt.Sprintf("Host %s\n", hostAlias))
|
||||||
|
sb.WriteString(fmt.Sprintf(" HostName %s\n", s.PrivateIPAddress))
|
||||||
|
sb.WriteString(fmt.Sprintf(" User %s\n", s.SSHUser))
|
||||||
|
sb.WriteString(fmt.Sprintf(" IdentityFile ~/.ssh/autoglue/keys/%s\n", keyFile))
|
||||||
|
sb.WriteString(" IdentitiesOnly yes\n")
|
||||||
|
sb.WriteString(" StrictHostKeyChecking accept-new\n\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
return keys, sb.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func pushAssetsToBastion(
|
||||||
|
ctx context.Context,
|
||||||
|
db *gorm.DB,
|
||||||
|
c *models.Cluster,
|
||||||
|
sshConfig string,
|
||||||
|
keyPayloads map[uuid.UUID]keyPayload,
|
||||||
|
payloadJSON []byte,
|
||||||
|
) error {
|
||||||
|
bastion := c.BastionServer
|
||||||
|
if bastion == nil {
|
||||||
|
return fmt.Errorf("bastion server is nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
if bastion.PublicIPAddress == nil || strings.TrimSpace(*bastion.PublicIPAddress) == "" {
|
||||||
|
return fmt.Errorf("bastion server missing public ip")
|
||||||
|
}
|
||||||
|
|
||||||
|
privKey, err := utils.DecryptForOrg(
|
||||||
|
bastion.OrganizationID,
|
||||||
|
bastion.SshKey.EncryptedPrivateKey,
|
||||||
|
bastion.SshKey.PrivateIV,
|
||||||
|
bastion.SshKey.PrivateTag,
|
||||||
|
db,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("decrypt bastion key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
signer, err := ssh.ParsePrivateKey([]byte(privKey))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("parse bastion private key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
hkcb := makeDBHostKeyCallback(db, bastion)
|
||||||
|
|
||||||
|
config := &ssh.ClientConfig{
|
||||||
|
User: bastion.SSHUser,
|
||||||
|
Auth: []ssh.AuthMethod{ssh.PublicKeys(signer)},
|
||||||
|
HostKeyCallback: hkcb,
|
||||||
|
Timeout: 30 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
host := net.JoinHostPort(*bastion.PublicIPAddress, "22")
|
||||||
|
|
||||||
|
dialer := &net.Dialer{}
|
||||||
|
conn, err := dialer.DialContext(ctx, "tcp", host)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("dial bastion: %w", err)
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
cconn, chans, reqs, err := ssh.NewClientConn(conn, host, config)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("ssh handshake bastion: %w", err)
|
||||||
|
}
|
||||||
|
client := ssh.NewClient(cconn, chans, reqs)
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
|
sess, err := client.NewSession()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("ssh session: %w", err)
|
||||||
|
}
|
||||||
|
defer sess.Close()
|
||||||
|
|
||||||
|
// build one shot script to:
|
||||||
|
// - mkdir ~/.ssh/autoglue/keys
|
||||||
|
// - write cluster-specific ssh-config
|
||||||
|
// - write all private keys
|
||||||
|
// - write payload.json
|
||||||
|
clusterDir := fmt.Sprintf("$HOME/autoglue/clusters/%s", c.ID.String())
|
||||||
|
configPath := fmt.Sprintf("$HOME/.ssh/autoglue/cluster-%s.config", c.ID.String())
|
||||||
|
|
||||||
|
var script bytes.Buffer
|
||||||
|
|
||||||
|
script.WriteString("set -euo pipefail\n")
|
||||||
|
script.WriteString("mkdir -p \"$HOME/.ssh/autoglue/keys\"\n")
|
||||||
|
script.WriteString("mkdir -p " + clusterDir + "\n")
|
||||||
|
script.WriteString("chmod 700 \"$HOME/.ssh\" || true\n")
|
||||||
|
|
||||||
|
// ssh-config
|
||||||
|
script.WriteString("cat > " + configPath + " <<'EOF_CFG'\n")
|
||||||
|
script.WriteString(sshConfig)
|
||||||
|
script.WriteString("EOF_CFG\n")
|
||||||
|
script.WriteString("chmod 600 " + configPath + "\n")
|
||||||
|
|
||||||
|
// keys
|
||||||
|
for id, kp := range keyPayloads {
|
||||||
|
tag := "KEY_" + id.String()
|
||||||
|
target := fmt.Sprintf("$HOME/.ssh/autoglue/keys/%s", kp.FileName)
|
||||||
|
|
||||||
|
script.WriteString("cat <<'" + tag + "' | base64 -d > " + target + "\n")
|
||||||
|
script.WriteString(kp.PrivateKeyB64 + "\n")
|
||||||
|
script.WriteString(tag + "\n")
|
||||||
|
script.WriteString("chmod 600 " + target + "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
// payload.json
|
||||||
|
payloadPath := clusterDir + "/payload.json"
|
||||||
|
script.WriteString("cat > " + payloadPath + " <<'EOF_PAYLOAD'\n")
|
||||||
|
script.Write(payloadJSON)
|
||||||
|
script.WriteString("\nEOF_PAYLOAD\n")
|
||||||
|
script.WriteString("chmod 600 " + payloadPath + "\n")
|
||||||
|
|
||||||
|
// If you later want to always include cluster configs automatically, you can
|
||||||
|
// optionally manage ~/.ssh/config here (kept simple for now).
|
||||||
|
|
||||||
|
sess.Stdin = strings.NewReader(script.String())
|
||||||
|
out, runErr := sess.CombinedOutput("bash -s")
|
||||||
|
|
||||||
|
if runErr != nil {
|
||||||
|
return wrapSSHError(runErr, string(out))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func setClusterStatus(db *gorm.DB, id uuid.UUID, status, lastError string) error {
|
||||||
|
updates := map[string]any{
|
||||||
|
"status": status,
|
||||||
|
"updated_at": time.Now(),
|
||||||
|
}
|
||||||
|
if lastError != "" {
|
||||||
|
updates["last_error"] = lastError
|
||||||
|
}
|
||||||
|
return db.Model(&models.Cluster{}).
|
||||||
|
Where("id = ?", id).
|
||||||
|
Updates(updates).Error
|
||||||
|
}
|
||||||
|
|
||||||
|
// runMakeOnBastion runs `make <target>` from the cluster's directory on the bastion.
|
||||||
|
func runMakeOnBastion(
|
||||||
|
ctx context.Context,
|
||||||
|
db *gorm.DB,
|
||||||
|
c *models.Cluster,
|
||||||
|
target string,
|
||||||
|
) (string, error) {
|
||||||
|
bastion := c.BastionServer
|
||||||
|
if bastion == nil {
|
||||||
|
return "", fmt.Errorf("bastion server is nil")
|
||||||
|
}
|
||||||
|
|
||||||
|
if bastion.PublicIPAddress == nil || strings.TrimSpace(*bastion.PublicIPAddress) == "" {
|
||||||
|
return "", fmt.Errorf("bastion server missing public ip")
|
||||||
|
}
|
||||||
|
|
||||||
|
privKey, err := utils.DecryptForOrg(
|
||||||
|
bastion.OrganizationID,
|
||||||
|
bastion.SshKey.EncryptedPrivateKey,
|
||||||
|
bastion.SshKey.PrivateIV,
|
||||||
|
bastion.SshKey.PrivateTag,
|
||||||
|
db,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("decrypt bastion key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
signer, err := ssh.ParsePrivateKey([]byte(privKey))
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("parse bastion private key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
hkcb := makeDBHostKeyCallback(db, bastion)
|
||||||
|
|
||||||
|
config := &ssh.ClientConfig{
|
||||||
|
User: bastion.SSHUser,
|
||||||
|
Auth: []ssh.AuthMethod{ssh.PublicKeys(signer)},
|
||||||
|
HostKeyCallback: hkcb,
|
||||||
|
Timeout: 30 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
host := net.JoinHostPort(*bastion.PublicIPAddress, "22")
|
||||||
|
|
||||||
|
dialer := &net.Dialer{}
|
||||||
|
conn, err := dialer.DialContext(ctx, "tcp", host)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("dial bastion: %w", err)
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
cconn, chans, reqs, err := ssh.NewClientConn(conn, host, config)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("ssh handshake bastion: %w", err)
|
||||||
|
}
|
||||||
|
client := ssh.NewClient(cconn, chans, reqs)
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
|
sess, err := client.NewSession()
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("ssh session: %w", err)
|
||||||
|
}
|
||||||
|
defer sess.Close()
|
||||||
|
|
||||||
|
clusterDir := fmt.Sprintf("$HOME/autoglue/clusters/%s", c.ID.String())
|
||||||
|
cmd := fmt.Sprintf("cd %s && make %s", clusterDir, target)
|
||||||
|
|
||||||
|
out, runErr := sess.CombinedOutput(cmd)
|
||||||
|
if runErr != nil {
|
||||||
|
return string(out), wrapSSHError(runErr, string(out))
|
||||||
|
}
|
||||||
|
return string(out), nil
|
||||||
|
}
|
||||||
@@ -189,6 +189,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 +264,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 +1557,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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ 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"`
|
||||||
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 +32,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 {
|
||||||
|
|||||||
@@ -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()"`
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
internal/web/dist/assets/index-BRRMZeeQ.js.br
vendored
BIN
internal/web/dist/assets/index-BRRMZeeQ.js.br
vendored
Binary file not shown.
BIN
internal/web/dist/assets/index-BRRMZeeQ.js.gz
vendored
BIN
internal/web/dist/assets/index-BRRMZeeQ.js.gz
vendored
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/index-BwyDjDcq.js.br
vendored
Normal file
BIN
internal/web/dist/assets/index-BwyDjDcq.js.br
vendored
Normal file
Binary file not shown.
BIN
internal/web/dist/assets/index-BwyDjDcq.js.gz
vendored
Normal file
BIN
internal/web/dist/assets/index-BwyDjDcq.js.gz
vendored
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/index-VHZG0dIU.css.gz
vendored
BIN
internal/web/dist/assets/index-VHZG0dIU.css.gz
vendored
Binary file not shown.
4
internal/web/dist/assets/react-B7S5QDrv.js
vendored
4
internal/web/dist/assets/react-B7S5QDrv.js
vendored
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/react-B7S5QDrv.js.br
vendored
BIN
internal/web/dist/assets/react-B7S5QDrv.js.br
vendored
Binary file not shown.
BIN
internal/web/dist/assets/react-B7S5QDrv.js.gz
vendored
BIN
internal/web/dist/assets/react-B7S5QDrv.js.gz
vendored
Binary file not shown.
File diff suppressed because one or more lines are too long
4
internal/web/dist/assets/react-Dt2M6tWj.js
vendored
Normal file
4
internal/web/dist/assets/react-Dt2M6tWj.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.br
vendored
Normal file
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.br
vendored
Normal file
Binary file not shown.
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.gz
vendored
Normal file
BIN
internal/web/dist/assets/react-Dt2M6tWj.js.gz
vendored
Normal file
Binary file not shown.
1
internal/web/dist/assets/react-Dt2M6tWj.js.map
vendored
Normal file
1
internal/web/dist/assets/react-Dt2M6tWj.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
4
internal/web/dist/index.html
vendored
4
internal/web/dist/index.html
vendored
@@ -5,8 +5,8 @@
|
|||||||
<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-BRRMZeeQ.js"></script>
|
<script type="module" crossorigin src="/assets/index-BwyDjDcq.js"></script>
|
||||||
<link rel="modulepreload" crossorigin href="/assets/react-B7S5QDrv.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>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
BIN
internal/web/dist/index.html.br
vendored
BIN
internal/web/dist/index.html.br
vendored
Binary file not shown.
BIN
internal/web/dist/index.html.gz
vendored
BIN
internal/web/dist/index.html.gz
vendored
Binary file not shown.
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
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";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -13,8 +13,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
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";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,16 +12,42 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {DtoDomainResponse} from "./DtoDomainResponse";
|
import { mapValues } from "../runtime";
|
||||||
import {DtoDomainResponseFromJSON, DtoDomainResponseToJSON,} from "./DtoDomainResponse";
|
import type { DtoDomainResponse } from "./DtoDomainResponse";
|
||||||
import type {DtoLoadBalancerResponse} from "./DtoLoadBalancerResponse";
|
import {
|
||||||
import {DtoLoadBalancerResponseFromJSON, DtoLoadBalancerResponseToJSON,} from "./DtoLoadBalancerResponse";
|
DtoDomainResponseFromJSON,
|
||||||
import type {DtoNodePoolResponse} from "./DtoNodePoolResponse";
|
DtoDomainResponseFromJSONTyped,
|
||||||
import {DtoNodePoolResponseFromJSON, DtoNodePoolResponseToJSON,} from "./DtoNodePoolResponse";
|
DtoDomainResponseToJSON,
|
||||||
import type {DtoServerResponse} from "./DtoServerResponse";
|
DtoDomainResponseToJSONTyped,
|
||||||
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse";
|
} from "./DtoDomainResponse";
|
||||||
import type {DtoRecordSetResponse} from "./DtoRecordSetResponse";
|
import type { DtoLoadBalancerResponse } from "./DtoLoadBalancerResponse";
|
||||||
import {DtoRecordSetResponseFromJSON, DtoRecordSetResponseToJSON,} from "./DtoRecordSetResponse";
|
import {
|
||||||
|
DtoLoadBalancerResponseFromJSON,
|
||||||
|
DtoLoadBalancerResponseFromJSONTyped,
|
||||||
|
DtoLoadBalancerResponseToJSON,
|
||||||
|
DtoLoadBalancerResponseToJSONTyped,
|
||||||
|
} from "./DtoLoadBalancerResponse";
|
||||||
|
import type { DtoNodePoolResponse } from "./DtoNodePoolResponse";
|
||||||
|
import {
|
||||||
|
DtoNodePoolResponseFromJSON,
|
||||||
|
DtoNodePoolResponseFromJSONTyped,
|
||||||
|
DtoNodePoolResponseToJSON,
|
||||||
|
DtoNodePoolResponseToJSONTyped,
|
||||||
|
} from "./DtoNodePoolResponse";
|
||||||
|
import type { DtoServerResponse } from "./DtoServerResponse";
|
||||||
|
import {
|
||||||
|
DtoServerResponseFromJSON,
|
||||||
|
DtoServerResponseFromJSONTyped,
|
||||||
|
DtoServerResponseToJSON,
|
||||||
|
DtoServerResponseToJSONTyped,
|
||||||
|
} from "./DtoServerResponse";
|
||||||
|
import type { DtoRecordSetResponse } 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"],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -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"],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,8 +12,14 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {DtoJWK} from "./DtoJWK";
|
import { mapValues } from "../runtime";
|
||||||
import {DtoJWKFromJSON, DtoJWKToJSON,} from "./DtoJWK";
|
import type { DtoJWK } from "./DtoJWK";
|
||||||
|
import {
|
||||||
|
DtoJWKFromJSON,
|
||||||
|
DtoJWKFromJSONTyped,
|
||||||
|
DtoJWKToJSON,
|
||||||
|
DtoJWKToJSONTyped,
|
||||||
|
} from "./DtoJWK";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -12,8 +12,14 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {DtoJobStatus} from "./DtoJobStatus";
|
import { mapValues } from "../runtime";
|
||||||
import {DtoJobStatusFromJSON, DtoJobStatusToJSON,} from "./DtoJobStatus";
|
import type { DtoJobStatus } from "./DtoJobStatus";
|
||||||
|
import {
|
||||||
|
DtoJobStatusFromJSON,
|
||||||
|
DtoJobStatusFromJSONTyped,
|
||||||
|
DtoJobStatusToJSON,
|
||||||
|
DtoJobStatusToJSONTyped,
|
||||||
|
} from "./DtoJobStatus";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,14 +12,35 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {DtoTaintResponse} from "./DtoTaintResponse";
|
import { mapValues } from "../runtime";
|
||||||
import {DtoTaintResponseFromJSON, DtoTaintResponseToJSON,} from "./DtoTaintResponse";
|
import type { DtoTaintResponse } from "./DtoTaintResponse";
|
||||||
import type {DtoLabelResponse} from "./DtoLabelResponse";
|
import {
|
||||||
import {DtoLabelResponseFromJSON, DtoLabelResponseToJSON,} from "./DtoLabelResponse";
|
DtoTaintResponseFromJSON,
|
||||||
import type {DtoServerResponse} from "./DtoServerResponse";
|
DtoTaintResponseFromJSONTyped,
|
||||||
import {DtoServerResponseFromJSON, DtoServerResponseToJSON,} from "./DtoServerResponse";
|
DtoTaintResponseToJSON,
|
||||||
import type {DtoAnnotationResponse} from "./DtoAnnotationResponse";
|
DtoTaintResponseToJSONTyped,
|
||||||
import {DtoAnnotationResponseFromJSON, DtoAnnotationResponseToJSON,} from "./DtoAnnotationResponse";
|
} from "./DtoTaintResponse";
|
||||||
|
import type { DtoLabelResponse } from "./DtoLabelResponse";
|
||||||
|
import {
|
||||||
|
DtoLabelResponseFromJSON,
|
||||||
|
DtoLabelResponseFromJSONTyped,
|
||||||
|
DtoLabelResponseToJSON,
|
||||||
|
DtoLabelResponseToJSONTyped,
|
||||||
|
} from "./DtoLabelResponse";
|
||||||
|
import type { DtoServerResponse } from "./DtoServerResponse";
|
||||||
|
import {
|
||||||
|
DtoServerResponseFromJSON,
|
||||||
|
DtoServerResponseFromJSONTyped,
|
||||||
|
DtoServerResponseToJSON,
|
||||||
|
DtoServerResponseToJSONTyped,
|
||||||
|
} from "./DtoServerResponse";
|
||||||
|
import type { DtoAnnotationResponse } from "./DtoAnnotationResponse";
|
||||||
|
import {
|
||||||
|
DtoAnnotationResponseFromJSON,
|
||||||
|
DtoAnnotationResponseFromJSONTyped,
|
||||||
|
DtoAnnotationResponseToJSON,
|
||||||
|
DtoAnnotationResponseToJSONTyped,
|
||||||
|
} from "./DtoAnnotationResponse";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -12,8 +12,14 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type {DtoJob} from "./DtoJob";
|
import { mapValues } from "../runtime";
|
||||||
import {DtoJobFromJSON, DtoJobToJSON,} from "./DtoJob";
|
import type { DtoJob } from "./DtoJob";
|
||||||
|
import {
|
||||||
|
DtoJobFromJSON,
|
||||||
|
DtoJobFromJSONTyped,
|
||||||
|
DtoJobToJSON,
|
||||||
|
DtoJobToJSONTyped,
|
||||||
|
} from "./DtoJob";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -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"],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { mapValues } from "../runtime";
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @export
|
* @export
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user