2017-06-07 7 views
0

Ich versuche ein Modul zu schreiben, um Sensu auf AWS zu implementieren, der Plan war, Elasticache für Redis zu verwenden, aber jetzt stehe ich vor einem Randfall. Bei einigen unserer VPCs ist die Mandantenfähigkeit auf "dediziert" eingestellt, und wir können dort keinen elastischen Text verwenden (http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AmazonVPC.EC.html). Ich dachte, ich könnte dies umgehen, indem ich unter Verwendung von elasticache oder eines Redis-Clusters in einer ASG vorbereite. Ich habe den Code geschrieben und verwendet:Bedingte Ressourcen mit Terraform erstellen

count = "${replace(replace(var.vpc_instance_tenancy,"/.*dedicated.*/","0"),"/(.*default.*|^$)/","1")}" 

zu entscheiden, ob ich den elasticahe Cluster oder die ASG schaffen soll, das Problem ist, dass ich einen Hostnamen oder die IP-Adresse auf den Sensu Server und api Knoten passieren muß so dass sie zu Redis Verbindung herstellen können, verwenden vorhatte:

redis_host = "${coalesce(aws_elasticache_cluster.redis_cluster.cache_nodes.0.address,aws_elb.redis_lb.dns_name)}" 

aber nicht immer, weil eine der Ressourcen nie erstellt wird, und ich kann es nicht in der coalesce Funktion verweisen. Irgendwelche Ideen?

Antwort

0

ich es geschafft, diese Funktion zu erhalten, sieht aus wie wir inexistent Ressourcen verweisen können, wenn wir die Splat variable Format wie folgt verwenden:

redis_host = "${element(concat(aws_elasticache_cluster.redis_cluster.*.cache_nodes.0.address, aws_elb.redis_lb.*.dns_name), 0)}" 
redis_port = "${element(concat(aws_elasticache_cluster.redis_cluster.*.cache_nodes.0.port, list(var.redis_port)), 0)}" 

so die nicht vorhandene Ressource wird eine leere Liste und die andere zurückkehren wird gebe eine einzelne Elementliste zurück, kombiniere sie beide zusammen und erhalte das erste Element.

Verwandte Themen