Ошибка провайдера Terraform k8sraw: произвел неожиданное новое значение для присутствующего, но теперь отсутствует при создании шаблона

Наше развертывание terraform недавно завершилось неудачно с ошибкой:

      Error: Provider produced inconsistent result after apply
When applying changes to k8sraw_yaml.test-template, provider
"registry.terraform.io/-/k8sraw" produced an unexpected new value for was
present, but now absent.
This is a bug in the provider, which should be reported in the provider's own
issue tracker.

Провайдер k8sraw не является официальным провайдером terraform, он был получен с github, адрес этого проекта находится по адресу:https://github.com/nabancard/terraform-provider-kubernetes-yaml

Провайдер работает нормально долгое время, пока неделю назад мы не обнаружили, что с 15 октября 2021 года он вышел из строя с указанной выше ошибкой.

Мы использовали версию terraform 0.12.24.

Продвинутый благодаря подсказкам.

У меня есть пример кода, который использует k8sraw:

  1. main.tf
      terraform {
  required_version = ">= 0.12.0"
  backend "s3" {}
}

provider "local" {
  version = "~> 1.4"
}

provider "template" {
  version = "~> 2.1"
}

provider "kubernetes" {
  version = ">=1.6.2"
  config_path = "~/.kube/kube.conf"
}

provider "k8sraw" {}
data "template_file" "test-template" {
  template = "${file("${path.module}/templates/test-template.yml.tpl")}"

  vars = {
    workflow_template_name     = var.template_ref_name,
    k8s_namespace              = var.k8s_namespace,
  }
}

resource "k8sraw_yaml" "test-template" {
  yaml_body = data.template_file.test-template.rendered
}

data "template_file" "workflow" {
  template = "${file("${path.module}/templates/test-workflow.yml.tpl")}"
  vars = {
    test_template_ref = var.template_ref_name
    service_account = "${var.service_account}",
  }
}

resource "local_file" "test-template-file" {
  filename = "${path.module}/workflow/${var.test_template_file_name}.yaml"
  content  = "${data.template_file.test-template.rendered}"
}
resource "local_file" "workflow" {
  filename = "${path.module}/workflow/${var.test_workflow_file_name}.yaml"
  content  = data.template_file.workflow.rendered
}
  1. variables.tf
      variable "template_ref_name" {
  description = "workflow template name for detector pipeline"
  type        = string
  default     = "test-test-deploy-try-template"
}

variable "k8s_namespace" {
  description = "kubernetes namespace name"
  type        = string
  default     = "default"
}

variable "test_template_name" {
  description = "test workflow template name"
  type        = string
  default     = "test-template"
}
variable "test_workflow_file_name" {
  description = "filename for populated test workflow"
  default     = "test-workflow"
  type        = string
}

variable "test_template_file_name" {
  description = "filename for populated test template"
  default     = "test-template"
  type        = string
}

variable "service_account" {
  description = "workflow service account"
  type = string
  default = "default"
}

variable "env" {
  description = "deployment environment: test, dev, sit. and cit"
  type = string
}
  1. шаблоны / test-workflow.yml.tpl
      apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: test-
spec:
  entrypoint: hellomessage
  serviceAccountName: "${service_account}"
  arguments:
    parameters:
    - name: message
  templates:
  # pipeline steps
  - name: hellomessage
    steps:
    - - name: test-pipeline
        templateRef:
          name: ${test_template_ref}
          template: test-pipeline
        arguments:
          parameters:
          - name: message
            value: "{{workflow.parameters.message}}"
  1. шаблоны / test-template.yml.tpl
      ---
apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: ${workflow_template_name}
  namespace: ${k8s_namespace}
spec:
  templates:
  - name: test-pipeline
    inputs:
      parameters:
      - name: message

    steps:
    - - name: print-message
        template: messageout
        arguments:
          parameters:
          - name: message
            value: "{{inputs.parameters.message}}"
  # individual templates for each step
  - name: messageout
    retryStrategy:
      limit: 3
      backoff:
        duration: "10"       # Must be a string. Default unit is seconds. Could also be a Duration, e.g.: "2m", "6h", "1d"
        factor: 2
        maxDuration: "60m" # Must be a string. Default unit is seconds. Could also be a Duration, e.g.: "2m", "6h", "1d"
      retryPolicy: "Always"   # Retry on errors AND failures. Also available: "OnFailure" (default), "OnError"
    resubmitPendingPods: true
    inputs:
      parameters:
      - name: message
    container:
      image: 'docker/whalesay:latest'
      command: [sh, -c]
      args:
      - >-
        echo -n {{inputs.parameters.message}} > /tmp/hello_world.txt;
        cat /tmp/hello_world.txt
  1. vars / test.tfvars
      k8s_namespace ="test-account"
service_account = "argo"
  1. backend / backend.tfvars
      region = "us-east-1"
bucket = "test"
key = "test/terraform.tfstate"
dynamodb_table = "test"
acl = "private"
  1. Команды Terraform:
        $ terraform init -force-copy -upgrade  -backend-config="backends/backend.tfvars"
  $ terraform workspace select testdeployment || terraform workspace new testdeployment
  $ terraform plan  -var-file="vars/test.tfvars"
  $ terraform apply -auto-approve -var-file="vars/test.tfvars"

1 ответ

Я нашел ответ на другом веб-сайте, поэтому ответ заключается в том, чтобы обновить terraform до 0.14.9 или выше, а затем заменить k8sraw на kubernetes_manifest.

Подробную информацию о том, как изменить, см. по следующей ссылке:https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/manifest и https://www.terraform.io/docs/ язык/функции/yamldecode.html

Ваше здоровье !

Другие вопросы по тегам