Каков наилучший способ изменить контейнеры kubernetes на основе выбранного стека? Я вижу, что типы ввода не могут быть изменены. Я нашел оператор распространения, например:
const ledgerDeployment = new k8s.extensions.v1beta1.Deployment("ledger", {
metadata: {
namespace: ledgerNamespace.metadata.name,
},
spec: {
template: {
metadata: {
labels: {name: "ledger"},
},
spec: {
containers: [
// containers
],
volumes: [
{
//volume 1
},
{
// volume 2
},
// conditional volume based on the stack
...(stack == 'dev' ? [{
name: dbTLS.metadata.name,
secret: {secretName: dbTLS.metadata.name, defaultMode: 256}
}] : [])
]
}
}
}
});
, но это выглядит немного странно и, на мой взгляд, усложняет объявления больших ресурсов (особенно когда условия становятся более сложными). Я попытался вытащить определение контейнера в переменную, но так как я не могу объявить тип переменной, у меня возникли некоторые проблемы с присвоением Output
одному из ключей в переменной:
let apiContainer = {
name: "api",
image: appImage.imageName,
// more stuff ...
volumeMounts: [
{
mountPath: "/app/gunicorn-socket",
name: "gunicorn-socket-dir",
readOnly: false
},
],
}
if (stack != 'local') {
apiContainer.volumeMounts.push({
mountPath: "/etc/secret/db",
name: dbTLS.metadata.name,
readOnly: true
})
}
Выдает ошибку на name
с Type 'Output<string>' is not assignable to type 'string'
.
Похоже, что интерфейс экспортируется на github для тега 1.4.5
, но когда я смотрю интерфейс локально, он не экспортируется:
12:41PM /Users/paymahn/qwil/ledger/pulumi/infra pulumi ⬆ ⬇ ✱ ➜
❯❯❯ rg "interface Container" --no-ignore -g "**/*kube*/**"
node_modules/@pulumi/kubernetes/types/input.d.ts
8424: interface Container {
8575: interface ContainerImage {
8589: interface ContainerPort {
8619: interface ContainerState {
8636: interface ContainerStateRunning {
8645: interface ContainerStateTerminated {
8678: interface ContainerStateWaiting {
8691: interface ContainerStatus {
node_modules/@pulumi/kubernetes/types/output.d.ts
8508: interface Container {
8659: interface ContainerImage {
8673: interface ContainerPort {
8703: interface ContainerState {
8720: interface ContainerStateRunning {
8729: interface ContainerStateTerminated {
8762: interface ContainerStateWaiting {
8775: interface ContainerStatus {
Я подтвердил что я на v1.4.5 локально:
12:37PM /Users/paymahn/qwil/ledger/pulumi/infra ✘ 1 pulumi ⬆ ⬇ ✱ ➜
❯❯❯ npm list "@pulumi/kubernetes"
kubernetes-typescript@ /Users/paymahn/qwil/ledger/pulumi/infra
├── @pulumi/kubernetes@1.4.5
└─┬ @pulumi/kubernetesx@0.1.1
└── @pulumi/kubernetes@1.3.3