【问题标题】:Terraform plan showing changes that already apply显示已应用更改的 Terraform 计划
【发布时间】:2021-12-30 14:37:19
【问题描述】:

我有一个管道可以在 rabbitmq、minio、keycloak 和其他使用 terraform 的应用程序中创建用户,但是在 Minio 中我有一个问题是:我第一次运行 terraform,管道创建存储桶、策略和用户(所以到目前为止,很好),但是当我运行其他时间时,terraform plan 显示不存在的更改,因为我已经运行了管道并且没有任何更改,如图所示:

在我的 Minio terraform 代码下方:

    # Create a bucket.
resource "minio_bucket" "bucket" {
  name = var.namespace
}

resource "minio_user" "user1" {
  access_key = var.namespace
  secret_key = var.password
  policies = [
    minio_canned_policy.policy1.name
    # Note: using a data source here!
    #data.minio_canned_policy.console_admin.name,
  ]
  /*groups = [
    minio_group.group2.name,
  ]*/
  depends_on = [
    minio_canned_policy.policy1,
  ]
}

# Create a policy.
resource "minio_canned_policy" "policy1" {
  name   = "policy1"
  policy = <<EOT
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::${minio_bucket.bucket.name}*"
        },
        {
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::${minio_bucket.bucket.name}"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": ["arn:aws:s3:::${minio_bucket.bucket.name}/*"]
        }
    ]
}
EOT
}

在 rabbitmq 中,例如 keycloak,一切正常。

有人有办法解决这个问题吗?

谢谢!!

【问题讨论】:

    标签: gitlab terraform minio


    【解决方案1】:

    解决方案是为每个资源创建一个操作:

    resource "minio_canned_policy" "policy" {
      name = "policy"
      policy = jsonencode(
        {
          Statement = [
            {
              Action = [
                "s3:GetBucketLocation",
              ]
              Effect = "Allow"
              Resource = [
                "arn:aws:s3:::${minio_bucket.bucket.name}*",
              ]
            },
            {
              Action = [
                "s3:ListAllMyBuckets",
              ]
              Effect = "Allow"
              Resource = [
                "arn:aws:s3:::${minio_bucket.bucket.name}*",
              ]
            },
            {
              Action = [
                "s3:ListBucket",
              ]
              Effect = "Allow"
              Resource = [
                "arn:aws:s3:::${minio_bucket.bucket.name}",
              ]
            },
            {
              Action = [
                "s3:GetObject",
              ]
              Effect = "Allow"
              Resource = [
                "arn:aws:s3:::${minio_bucket.bucket.name}/*",
              ]
            },
            {
              Action = [
                "s3:PutObject",
              ]
              Effect = "Allow"
              Resource = [
                "arn:aws:s3:::${minio_bucket.bucket.name}/*",
              ]
            },
            {
              Action = [
                "s3:DeleteObject",
              ]
              Effect = "Allow"
              Resource = [
                "arn:aws:s3:::${minio_bucket.bucket.name}/*",
              ]
            },
          ]
          Version = "2012-10-17"
        }
      )
    }
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。
    【解决方案2】:

    尝试在这个地方随意使用数组:

    - "Resource": "arn:aws:s3:::${minio_bucket.bucket.name}*"
    + "Resource": ["arn:aws:s3:::${minio_bucket.bucket.name}*"]
    

    也许其他检测到的变化会在那之后消失。如果不是,它看起来像是提供程序中的一个错误。

    【讨论】:

    • 即使这确实解决了它,从技术上讲,它仍然是提供程序中的一个错误,因为提供程序应该区分“真实”更改与只是规范化完成的差异通过远程 API,因此在任何情况下都值得向上游提供程序开发人员报告。
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2021-08-30
    • 2019-08-09
    • 1970-01-01
    • 2020-05-06
    • 2021-10-14
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多