2017-10-16 8 views
1

Je souhaite identifier l'adresse IP publique de l'environnement d'exécution terraform et l'ajouter au groupe de sécurité aws entrant pour empêcher l'accès à partir d'autres environnements.Je souhaite identifier l'adresse IP publique de l'environnement d'exécution terraform et l'ajouter au groupe de sécurité

Actuellement, je modifie manuellement les valeurs dans le fichier variables.tf.

variables.tf

variable public_ip_address { 
    default  = "xx" 
} 

Je voudrais exécuter la commande « curl ifconfig.co » sur l'hôte local et définir automatiquement le groupe de sécurité en fonction du résultat

est-il un moyen de faire de telles choses?

Je pourrais le faire en mettant le résultat de local-exec dans une variable mais je ne sais pas comment le faire.

Merci d'avoir lu ma question.

Répondre

0

La solution la plus élégante que je pourrais trouver est d'utiliser le fournisseur de "source de données externe". Ceci a été écrit pour ce genre de but où les gens combinaient local-exec, null-resource et vars pour injecter quelque chose localement.

De toute façon, je suis sûr que vous pouvez le faire sans écrire un petit script. La chose est la "source de données externe" s'attend à lire JSON. Donc, dans mon exemple, je viens de construire une chaîne JSON dans un programme, puis appeler ce programme. Je suis sûr que cela pourrait se faire dans une seule ligne en utilisant l'écho ou JQ ...

Voici mon fichier main.tf:

data "external" "example" { 
    program = ["sh", "test.sh" ] 
} 

output "commandout" { 
    value = "${data.external.example.result}" 
} 

Voici mon script shell (test.sh):

#!/bin/bash 

echo {\"ip\":\""`hostname -I`"\"} 

techniquement une fois que vous avez cette situation, vous pouvez utiliser:

${data.external.example.result} 

en tant que votre entrée var.

Voici mon exemple de travail avec la sortie terraform.

data.external.example: Refreshing state... 

Apply complete! Resources: 0 added, 0 changed, 0 destroyed. 

Outputs: 

commandout = { 
    ip = 10.0.2.15 
} 

Notez que hostname -I est ok si vous avez seulement une carte réseau :) Sinon, utilisez une commande de remplacement ou de couper la sortie pour vos résultats souhaités.

+0

génial !! J'ai une question à propos de main.tf Main.tf est-il exécuté la première fois sur terraform? pourrait-il utiliser n'importe où les paramètres définis dans main.tf? – sukho

+0

Terraform charge * .tf dans l'espace de travail, vos valeurs doivent être disponibles dans l'espace de travail actuel ou importées via des données distantes. –

+0

@AnshuPrateek Pouvez-vous voir ma nouvelle question? Je n'ai pas encore résolu le problème fondamental. le lien est ici. https://stackoverflow.com/questions/47311916/how-to-put-in-varable-tf-to-run-script-with-data-external-in-terraform – sukho