1

J'utilise des définitions de terraform pour lancer 10 nœuds sur AWS dans la région de Tokyo (deux AZ). Donc, c'est comme 5 nœuds sont lancés dans chaque AZ.Comment extraire l'ip du nœud de chaque AZ dans Terraform

resource "aws_instance" "test" { 
    count     = "${var.dse_cass_node_count}" 
    ami      = "${var.dse_cass_ami}" 
    instance_type   = "${var.dse_cass_instance_type}" 
    key_name    = "${var.dse_cass_key_name}" 
    subnet_id    = "${element(split(",", var.dse_cass_vpc_subnets), count.index)}" 
    availability_zone  = "${element(split(",", var.dse_cass_azs), count.index)}" 
    vpc_security_group_ids = ["${var.dse_sg_id}"] 

    tags { 
    Name    = "${var.namespace}-${var.env_name}-${var.dse_cluster_name}-node-${count.index}" 
    Environment  = "${var.env_name}" 
    DSE_Cluster_Name = "${var.dse_cluster_name}" 
    } 
} 

Je souhaite que l'adresse IP du noeud soit basée sur AZ en sortie. En ce moment je peux lister toutes les adresses IP de tous les nœuds dans la sortie en utilisant les définitions mentionnées ci-dessous, mais pas en mesure d'obtenir basé sur AZ.

output "cassandra_ips" { 
    value = ["${aws_instance.test.*.private_ip}"] 
} 

output "cassandra_ips1" { 
    value = ["${aws_instance.test.0.private_ip}"] 
} 

output "cassandra_ips2" { 
    value = ["${aws_instance.test.1.private_ip}"] 
} 

Je veux les séparer en fonction des AZ. Est-il possible d'utiliser Terraform? Je voudrais avoir l'IP d'un nœud de chaque AZ. Ce serait bien d'avoir quelques suggestions. Merci d'avance.

Terraform v0.10.5

P.S - Je veux l'IP d'un nœud de chaque AZ à ajouter dans la liste des semences de Cassandra.

Répondre

0

Terraform permet des sorties de cartes. La syntaxe serait quelque chose comme ça, je n'ai pas essayé cela.

valeur (obligatoire) - La valeur de la sortie. Cela peut être une chaîne, liste, ou carte. Cela inclut généralement une interpolation car les sorties statiques ne sont généralement pas utiles.

output "cassandra_ip_map" { 
    value = { 
    "${aws_instance.test.*.availability_zone}" = "${aws_instance.test.*.private_ip}" 
    } 
} 

https://www.terraform.io/docs/configuration/outputs.html

https://www.terraform.io/docs/providers/aws/d/instance.html#availability_zone

+0

Peut-il faire planter de terraform par hasard? Terraform plante après avoir ajouté des lignes au-dessus de la sortie. Panique: reflect.Value.SetMapIndex: la valeur de type [] interface {} n'est pas affectable au type string – Nahush

+0

Il est probable, essayez de lire le journal, "Vous pouvez définir TF_LOG à l'un des niveaux de journal TRACE, DEBUG, INFO , WARN ou ERROR pour changer la verbosité des logs TRACE est le plus bavard et c'est le comportement par défaut si TF_LOG est défini sur autre chose qu'un nom de niveau de journal. " https://www.terraform.io/docs/internals/debugging.html – strongjz

+0

Pouvez-vous poster un lien vers la terraform complète? – strongjz

0

cernées une solution de travail basée sur le commentaire précédent

output "cassandra_ip_zmap" { 
    value = "${ 
    zipmap(
     "${aws_instance.test.*.availability_zone}", "${aws_instance.test.*.private_ip}" 
    ) 
    }" 
}