0

次のパッカー スクリプトでコードの重複を排除したいと考えています。私が望むのは、基本的に同じビルドを実行することです。その結果、異なる名前の 2 つの AMI を期待しています。

これは実際の例の味です:

source "amazon-ebs" "head" {
    profile = "$(var.aws_profile}"
    access_key = "${var.aws_access_key}"
    secret_key = "${var.aws_secret_key}"
    instance_type = "${var.instance_type}"
    region = "${var.aws_region}"
    source_ami_filter {
        filters = {
            virtualization-type = "hvm"
            name = "${var.base_ami_name}"
            root-device-type = "ebs"
        }
        owners = [ "1234567890" ]
        most_recent = true
    }
    launch_block_device_mappings {
            device_name = "/dev/sda1"
            volume_size = "${var.volume_size}"
            volume_type = "gp2"
            delete_on_termination = true
    }
    ssh_username = "centos"
    ami_name = "head-{{timestamp}}"
}


source "amazon-ebs" "worker" {
    profile = "$(var.aws_profile}"
    access_key = "${var.aws_access_key}"
    secret_key = "${var.aws_secret_key}"
    instance_type = "${var.instance_type}"
    region = "${var.aws_region}"
    source_ami_filter {
        filters = {
            virtualization-type = "hvm"
            name = "${var.base_ami_name}"
            root-device-type = "ebs"
        }
        owners = [ "1234567890" ]
        most_recent = true
    }
    launch_block_device_mappings {
            device_name = "/dev/sda1"
            volume_size = "${var.volume_size}"
            volume_type = "gp2"
            delete_on_termination = true
    }
    ssh_username = "centos"
    ami_name = "worker-{{timestamp}}"
}



################
# Builder
################

build {
    #source "amazon-ebs.head" {
    #  name = "worker"
    #}

    sources = ["source.amazon-ebs.head", "source.amazon-ebs.worker"]

明らかに、これは少し長く、ほぼ完全に重複しています。私が欲しいのは、より近いものです:

source "amazon-ebs" "head" {
    profile = "$(var.aws_profile}"
    access_key = "${var.aws_access_key}"
    secret_key = "${var.aws_secret_key}"
    instance_type = "${var.instance_type}"
    region = "${var.aws_region}"
    source_ami_filter {
        filters = {
            virtualization-type = "hvm"
            name = "${var.base_ami_name}"
            root-device-type = "ebs"
        }
        owners = [ "125523088429" ]
        most_recent = true
    }
    launch_block_device_mappings {
            device_name = "/dev/sda1"
            volume_size = "${var.volume_size}"
            volume_type = "gp2"
            delete_on_termination = true
    }
    ssh_username = "centos"
    ami_name = "head-{{timestamp}}"
}


################
# Builder
################

build {
    source "amazon-ebs.head" {
      ami_name = "worker-{{timestamp}}"
    }

    sources = ["source.amazon-ebs.head", ]

またはそれに類似したもの。しかし、私はそれを機能させることができないようです。ami_nameまず、最初のソースから を完全に削除することはできません。これは必須フィールドだからです。{{.Name}}name フィールドをソースに追加してから代わりに explicitを使用するなど、変数を使用しようとすると、エラーが発生しませんami_name

きっと、こんなことができるはずですよね?それともあきらめるべきですか?どうやらドキュメントが示すのと同じくらい簡単なはずですが、同じ例は文字通り私にはうまくいきません....

4

0 に答える 0