在第一次尝试失败的情况下,Terraform重试local-exec。
示例在这里,我尝试使用az vm run-command在Azure Linux VM上安装python。我没有对VM的ssh访问权限,因此我正在使用az cli在https上使用Azure API调用。由于网络问题,有时下载软件包或二进制文件失败,需要重新运行。使用terraform时,如果出现此类问题,它将失败。在ansible中,我们可以选择重试,但是我无法找到terraform的解决方案
支持重试的Ansible代码
可用的代码:
- hosts: 127.0.0.1 connection: local tasks: name: Install App shell: | yum install myapp register: task_result until: task_result.rc == 0 retries: 2 delay: 5 ignore_errors: yes
Terraform code
enter code here
#Install python27-python-pip
resource "null_resource" "prerequisites" {
depends_on = [ "null_resource.zipfile" ]
provisioner "local-exec" {
command = "az vm run-command invoke -g
'${azurerm_virtual_machine.myserver.resource_group_name}' -n
'${azurerm_virtual_machine.myserver.resource_group_name}' --
command-id RunShellScript --scripts 'yum -y install python27-python-
pip && scl enable python27 bash >> /tmp/install.log'"
on_failure = "fail"
}
}
答案 0 :(得分:0)
Ansible和Terraform做了两个非常不同的事情。
理想情况下,您将同时使用。使用Terraforms local-exec运行Ansible剧本。因此,基础设施和软件最终都处于您想要的状态。 Right tool right job
。