是否可以将状态用于ansible?

时间:2020-10-06 21:15:09

标签: ansible terraform

您可能不明白我要在问题中说什么。在说明问题之前,我将举一个例子来进一步理解。

让我们以terraform为例。

想象一下,我们使用Terraform在aws中启动EC2实例。因此,我们目前将状态存储在本地。假设我们需要向tag实例中添加一个ec2

所以我们要做的是,添加这个小块以实现目标。

tags = {
    Name = "HelloWorld"
  }

没什么复杂的,只是简单而已。因此,当我们添加标签时,terraform将查找状态的任何变化,并且当发现已添加标签时,它就会运行,并且仅添加标签而不会重新创建整个实例。 (在其他情况下,需要重新创建实例,但让我们暂时将其保留)

因此,正如我提到的,terraform不会重新创建用于添加标签的实例。如果我们要添加另一个标签,它将添加标签而不重新创建实例。就这么简单。 不管我们运行terraform apply有多少次,除非我们在terraform文件中进行了任何操作,否则它都不会对现有资源进行任何更改。

所以,现在让我们提出一个真正的问题。

假设我们要使用httpd安装ansible。所以我写了一个有趣的剧本。它将使用yum软件包并安装,然后启动并启用该服务。

好吧,很简单。

假设我们第二次运行相同的剧本,现在将尝试从头开始执行相同的命令,而无需先检查它是否曾经执行过此剧本?

我有几次尝试安装某些服务的经验,当我再次尝试执行同一本剧本时,它会失败。

是否可以像在ansible中一样保留terraform中的状态,因此它总是仅执行更新的更改,而不是从第二次运行开始执行 >?

1 个答案:

答案 0 :(得分:3)

您似乎在描述idempotence

幂等性是数学和计算机科学中某些运算的属性,因此可以多次应用它们,而不会超出初始应用范围而改变结果。

由您来确定您的剧本在ansible中是幂等的。您可以使用packageservice模块作为示例。

- name: Setup Apache
  hosts: webservers
  tasks:
    - name: Install Apache
      package:
        name: httpd
        state: present
    - name: Start and enable Apache
      service:
        name: httpd
        state: started
        enabled: yes

Ansible无法通过保留控制器上的状态来实现幂等。每个模块都应检查其正在操作的主机的状态,以确定需要进行哪些更改才能达到剧本指定的状态。如果它确定不需要进行任何更改,则应将其报告给控制器。

相关问题