在ansible中使用连字符

rob*_*ams 7 configuration-management ansible ansible-playbook devops

我正在学习Ansible但是我很困惑何时使用连字符以及何时不在剧本中使用连字符.据我所知,连字符用于Ansible中的列表.

例如,

--- # my first playbook
      - hosts: webservers  ( why did we use hyphen here it is not a list)
        tasks: 
          - name: installing httpd
            yum: name=httpd state=installed ( why we shouldn't use hyphen here).
Run Code Online (Sandbox Code Playgroud)

从Ansible文档中可以看出,连字符是用于列表的,例如:

fruits:
  - apple
  - grapes
  - orange
Run Code Online (Sandbox Code Playgroud)

所以,我很困惑什么时候使用连字符和何时不使用.

tas*_*oor 8

连字符-用于指定列表项,冒号:用于指定字典项或键值对.我认为使用另一种语言(例如Python)的类似示例将使这一点清楚.假设你有一个my_list这样的列表:

my_list = ['foo', 'bar']
Run Code Online (Sandbox Code Playgroud)

在Ansible中,您将使用连字符指定此列表项:

my_list:
  - foo
  - bar
Run Code Online (Sandbox Code Playgroud)

现在让我们说你有一个像这样的键值对或字典:

my_dict = {
    'key_foo': 'value_foo', 
    'key_bar': 'value_bar'
}
Run Code Online (Sandbox Code Playgroud)

在Ansible中,您将使用冒号而不是连字符作为键值对或字典:

my_dict:
  key_foo: value_foo
  key_bar: value_bar
Run Code Online (Sandbox Code Playgroud)

在剧本中你有一个剧本列表,在每个剧本中你都有一个任务列表.由于tasks是一个列表,每个任务项都使用如下连字符启动:

tasks:
  - task_1

  - task_2
Run Code Online (Sandbox Code Playgroud)

现在每个任务本身都是字典或键值对.您的示例任务包含两个键,nameyum.yum本身是另一个字典的钥匙name,state

因此,要指定任务列表,请使用连字符,但由于每个任务都是字典,因此它们包含冒号.

  • 一个小的修正:一个剧本由列表中的一个或多个剧本组成,而不是任务. (2认同)