Skip to content

jsonnetでtfstateの参照が一部エラーになる #198

Description

@keitarou-nakano

初めまして。
とても便利に使わせて頂いています。

jsonnetでecscheduleを利用させて頂いているのですが、tfstateを利用する場合一部条件でエラーが発生してしまうようなので報告します。

現象

エラーが出ないパターン

tfstateは一つのみ読み込む。

  plugins: [
    {
      name: "tfstate",
      config: { "url": "s3://dummy-state-bucket/terraform.tfstate" }
    }
  ]

リソースの指定もtfstateで呼び出す。

      network_configuration: {
        awsvpc_configuration: {
          assign_public_ip: "DISABLED",
          security_groups: [],
          subnets: [
            "{{ tfstate `aws_subnet.subnet[0].id` }}",
            "{{ tfstate `aws_subnet.subnet[1].id` }}",
            "{{ tfstate `aws_subnet.subnet[2].id` }}"
          ]
        }
      },

この場合エラーは出ずにecschedule diffは実行できました。

エラーが出るパターン1

複数のtfstateを読み込む。

  plugins: [
    {
      name: "tfstate",
      config: { "url": "s3://dummy-state-bucket_01/terraform.tfstate" },
      func_prefix: "subnet_"
    },
    {
      name: "tfstate",
      config: { "url": "s3://dummy-state-bucket_02/terraform.tfstate" },
      func_prefix: "securitygroups_"
    }
  ]

リソースの指定はpluginを先頭に付与(READMEに記載の通り)。


      network_configuration: {
        awsvpc_configuration: {
          assign_public_ip: "DISABLED",
          security_groups: [
            "{{ plugin `securitygroups_tfstate` `output.ecs_task_common_security_group_id` }}"
          ],
          subnets: [
            "{{ plugin `subnet_tfstate` `aws_subnet.subnet[0].id` }}",
            "{{ plugin `subnet_tfstate` `aws_subnet.subnet[1].id` }}",
            "{{ plugin `subnet_tfstate` `aws_subnet.subnet[2].id` }}"
          ]
        }
      },

この場合ecschedule diffを実行すると下記エラーが発生します。

ecschedule -conf sample02.jsonnet diff -all
[ecschedule] 💢 config parse by template failed: template: conf:39: function "securitygroups_tfstate" not defined

エラーが出るパターン2

複数のtfstateを読み込みつつ、tfstatefを利用する。

  plugins: [
    {
      name: "tfstate",
      config: { "url": "s3://dummy-state-bucket_01/terraform.tfstate" },
      func_prefix: "subnet_"
    },
    {
      name: "tfstate",
      config: { "url": "s3://dummy-state-bucket_02/terraform.tfstate" },
      func_prefix: "securitygroups_"
    }
  ]

tfstatefでキーをセットする。

      network_configuration: {
        awsvpc_configuration: {
          assign_public_ip: "DISABLED",
          security_groups: [
            "{{ plugin `securitygroups_tfstatef` `aws_security_group.security_group['%s'].id` (must_env `ECS_SERVICE`) }}",
          ],
          subnets: [
            "{{ plugin `subnet_tfstate` `aws_subnet.subnet[0].id` }}",
            "{{ plugin `subnet_tfstate` `aws_subnet.subnet[1].id` }}",
            "{{ plugin `subnet_tfstate` `aws_subnet.subnet[2].id` }}"
          ]
        }
      },

この場合ecschedule diffを実行すると下記エラーが発生します。

$ ecschedule -conf sample01.jsonnet diff -all
[ecschedule] 💢 config parse by template failed: template: conf:46: function "securitygroups_tfstatef" not defined

もしかするとplugin周りかと推察しておりましたがいかがでしょうか。
ご確認・ご検討のほどよろしくお願いいたします。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions