Как редактировать ресурс pulumi после того, как он был объявлен - PullRequest
0 голосов
/ 23 января 2020

Я объявил развертывание kubernetes как:

const ledgerDeployment = new k8s.extensions.v1beta1.Deployment("ledger", {
  spec: {
    template: {
      metadata: {
        labels: {name: "ledger"},
        name: "ledger",
        // namespace: namespace,
      },
      spec: {
        containers: [
          ...
        ],

        volumes: [

          {
            emptyDir: {},
            name: "gunicorn-socket-dir"
          }
        ]
      }
    }
  }
});

Позже в моем index.ts я хочу условно изменить volumes развертывания. Я думаю, что это изворотливость pulumi, я не обернул голову вокруг, но вот моя текущая попытка:

if(myCondition) {
  ledgerDeployment.spec.template.spec.volumes.apply(volumes =>
    volumes.push(
    {
      name: "certificates",
      secret: {
        items: [
          {key: "tls.key", path: "proxykey"},
          {key: "tls.crt", path: "proxycert"}],
        secretName: "star.builds.qwil.co"
      }
    })
  )
)

Когда я делаю это, я получаю следующую ошибку: Property 'mode' is missing in type '{ key: string; path: string; }' but required in type 'KeyToPath'

Я подозреваю, что я неправильно использую apply. Когда я пытаюсь напрямую изменить ledgerDeployment.spec.template.spec.volumes.push(), я получаю сообщение об ошибке Property 'push' does not exist on type 'Output<Volume[]>'.

Каков шаблон для изменения ресурсов в Пулюми? Как добавить новый том в мое развертывание?

1 Ответ

1 голос
/ 23 января 2020

Невозможно изменить входные данные ресурса после его создания. Вместо этого вы должны поместить все логи c, которые определяют форму входных данных, прежде чем вызывать конструктор.

В вашем примере это может быть:

let volumes = [
  {
    emptyDir: {},
    name: "gunicorn-socket-dir"
  }
]
if (myCondition) {
  volumes.push({...});
}
const ledgerDeployment = new k8s.extensions.v1beta1.Deployment("ledger", {
  // <-- use `volumes` here
});
...