在ansible中使用连字符

时间:2016-06-18 05:34:28

标签: ansible ansible-playbook devops configuration-management

我正在学习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).

来自Ansible文档,据说连字符用于列表,例如:

fruits:
  - apple
  - grapes
  - orange

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

3 个答案:

答案 0 :(得分:7)

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

my_list = ['foo', 'bar']

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

my_list:
  - foo
  - bar

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

my_dict = {
    'key_foo': 'value_foo', 
    'key_bar': 'value_bar'
}

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

my_dict:
  key_foo: value_foo
  key_bar: value_bar

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

tasks:
  - task_1

  - task_2

现在每个任务本身都是字典或键值对。您的示例任务包含两个键nameyumyum本身是另一个包含密钥namestate等的字典。

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

答案 1 :(得分:0)

任何连字符都表示列表中有一个新项,就像“-主机:Web服务器”中的情况一样。 没有hypen的任何项目都属于其以hypen为前缀的父项。也就是说,在您的示例中,“ yum:name = httpd state = installed”属于“-name”。

答案 2 :(得分:0)

如果我在剧本上面进行转换,这是否等效于python语法?

[ hosts,
        tasks:[
                name,{ yum: { 
                                name:httpd, state:installed
                                }   
                        }   
                ]   
]

如果我错了,请纠正我。