2017-03-22 3 views
0

私は私がクラウドのinitを使用することはできませんし、私はすべてのマシンパラメータ化テラフォームテンプレート

hostname.tpltのホスト名変更する必要がありますOpenStackの中に99台の仮想マシンを作成するにはテラフォームプロジェクトがあります。

sudo sed -i -e "s/debian[7-9]/${host_name}/g" /etc/hostname 
sudo invoke-rc.d hostname.sh start 

sudo sed -i -e "s/127\.0\.1\.1.*/127.0.1.1\t${host_name}.${domain_name} ${host_name}/g" /etc/hosts 
sudo apt-get update && sudo apt-get -y install dbus && sudo hostnamectl set-hostname ${host_name} 
をmain.tfの

一部:

data "template_file" "hostname_servers" { 
    template = "${file("templates/hostname.tplt")}" 

    vars { 
    host_name = "${format("%s-proxy-%02d", var.prefix_name, count.index+1)}" 
    domain_name = "${var.domain_name}" 
    } 
} 

RESS ource

resource "openstack_compute_instance_v2" "proxy-instance" { 
    count  = "${var.count_proxy}" 
    name  = "${format("%s-proxy-%02d", var.prefix_name, count.index+1)}" 
    image_name = "${var.image}" 
    flavor_name = "${var.flavor_proxy}" 

    network { 
    name = "${format("%s-%s", var.prefix_name, var.network_name)}" 
    } 

    connection { 
    user = "${var.user}" 
    } 

    provisioner "remote-exec" { 
    inline = [ 
     "${data.template_file.hostname_servers.rendered}" 
    ] 
    } 
} 

ユースケース: 私はテラフォームの計画を開始したとき、私は重複して好きではない、それは、プロキシインスタンスのリソースのために動作しますが、私は99台のマシンのためにそれを行う必要があり、 テンプレートデータ99回、 と私はすべてのマシンに適用することができるようにテンプレートをparammetzeどのようにわからない 任意のアイデア?

+1

?彼らはすべて異なっているか、 'host-1.example.com'のようなパターンに従っていますか? – ydaetskcoR

+0

ホスト名はリソース名です。host_name = "$ {format("%s-proxy-%02d "、var.prefix_name、count.index + 1)}" – Inforedaster

+0

現在何が問題なの?持ってる?それは99台までのマシンで正常に動作するようです。 – ydaetskcoR

答えて

0

あなたが複数のリソースに同じ値にcountを設定した場合、あなたはこのように、一つのブロックのインスタンスと別のインスタンス間の対応関係を作成するためにcount.indexを使用することができます:あなたのホスト名がどのように見えるか

data "template_file" "hostname_servers" { 
    count = "${var.count_proxy}" 

    template = "${file("templates/hostname.tplt")}" 

    vars { 
    host_name = "${format("%s-proxy-%02d", var.prefix_name, count.index+1)}" 
    domain_name = "${var.domain_name}" 
    } 
} 

resource "openstack_compute_instance_v2" "proxy-instance" { 
    count = "${var.count_proxy}" 

    name  = "${format("%s-proxy-%02d", var.prefix_name, count.index+1)}" 
    image_name = "${var.image}" 
    flavor_name = "${var.flavor_proxy}" 

    network { 
    name = "${format("%s-%s", var.prefix_name, var.network_name)}" 
    } 

    connection { 
    user = "${var.user}" 
    } 

    provisioner "remote-exec" { 
    inline = [ 
     # use count.index to match the template instance corresponding 
     # to this compute instance instance. 
     "${data.template_file.hostname_servers.*.rendered[count.index]}" 
    ] 
    } 
} 
+0

すべてのリソースに特定の名前がありますので、ソリューションiすべての私のマシンの同じ名前を持っています – Inforedaster

+0

'count.index'の参照は、各サーバが異なるホスト名を取得するように意図されています。 –