Где ставить (-) дефис в yaml ansible play books? - PullRequest
0 голосов
/ 16 июня 2020

Я очень запутался, в книге игр, где на самом деле мы ставим одиночный дефис (-). Я нашел здесь похожие темы, но все еще запутался, поэтому решил создать одну новую. Я прочитал, что он будет использоваться для обозначения начала элемента списка. снова мне трудно понять, где начало списка, а где начало словаря. Могут ли некоторые эксперты объяснить мне, где я должен поставить дефис в приведенном ниже коде. и почему так?

---
  connection: local
  gather_facts: false
  hosts: rtr
  tasks:
      name: "read configs"
      read_csv:
        path: "{{ aws_config }}"
      register: aws_requests
      run_once: true

      debug:
        msg: "{{ aws_requests.list }}"
      name: "display awsconfigs requests"
      run_once: true

      name: "set awsconfigs requests"
      run_once: true
      set_fact:
        aws_configs: "{{ aws_requests.list }}"

      name: "build template"
      template:
        dest: "{{ config_filename }}"
        lstrip_blocks: true
        src: "{{ template }}"

1 Ответ

1 голос
/ 16 июня 2020

Я рекомендую вам прочитать « Введение в playbooks », которое должно ответить на ваши вопросы, но ниже приведено резюме.

Как вы правильно заметили, дефисы являются элементами списка в YAML . Документы YAML начинаются с ---, поэтому в начале файла есть дефисы .

Отправной точкой для любого Ansible playbook является playbook сам в файле. Сам файл playbook может содержать один или несколько так называемых « plays », каждый в качестве своего собственного элемента списка . Каждая пьеса обычно содержит партии hosts и tasks. Во многих playbooks есть только одна "игра", поэтому ваш типичный минимальный playbook выглядит так:

---
- hosts: webservers
  tasks:
  - name: Task 1
    ...

Как вы можете видеть выше, каждая "play" затем имеет список задач , каждый из которых начинается с дефиса. Итак, в следующем примере есть две задачи, каждая с name и модулем (yum и service в данном случае):

---
- hosts: webservers
  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: ensure apache is running
    service:
      name: httpd
      state: started

Каждый модуль Ansible имеет разные аргументы, поэтому вам нужно будет проверить документацию по модулям для каждого из них, как указать эти аргументы.

Итак, правильная версия для вашего плейбука выше будет выглядеть следующим образом:

---
- connection: local
  gather_facts: false
  hosts: rtr
  tasks:
  - name: "read configs"
    read_csv:
      path: "{{ aws_config }}"
    register: aws_requests
    run_once: true

  - name: "display awsconfigs requests"
    debug:
      msg: "{{ aws_requests.list }}"
    run_once: true

  - name: "set awsconfigs requests"
    run_once: true
    set_fact:
      aws_configs: "{{ aws_requests.list }}"

  - name: "build template"
    template:
      dest: "{{ config_filename }}"
      lstrip_blocks: true
      src: "{{ template }}"
...