Я видел несколько примеров Ansible на github и в доступные документы, например:
---
# this might be in a file like handlers/handlers.yml
- name: restart apache
service: name=apache state=restarted
Следующий пример содержит как комментарий как name
.
# Make sure Jenkins starts, then configure Jenkins.
- name: Ensure Jenkins is started and runs on startup.
service: name=jenkins state=started enabled=yes
Обсуждение
А name
будет достаточно правильно или следует использовать комментарий?
Должно быть:
- name: Symlink RabbitMQ bin to sbin
file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin
или:
#Symlink RabbitMQ bin to sbin
file:
state: link
src: /usr/lib/rabbitmq/binhttp://docs.ansible.com/ansible/YAMLSyntax.html
dest: /usr/lib/rabbitmq/sbin
когда YAML Lint консультируется в соответствии с рекомендациями Документ синтаксиса Ansible YAML оба фрагмента кажутся действительными YAML. Хотя оба фрагмента кажутся действительными YAML, визуальная структура отличается.
Вопросы
name
) или комментарий (#
)?file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin
или следует разделить element by, например state:
Пожалуйста, поймите, я считаю свой ответ очень субъективным. Внутренне моя команда частично согласна с моим мнением по этому поводу. Но мы не разработали никакой «политики форматирования» для playbooks.
- Следует называть (
name
) или комментарий (#
)?
Мы включаем комментарии только в том случае, если полезно объяснить «почему?». конкретной задачи. name
является всегда настоящее время. Значение name
будет отображаться во время выполнения playbook. В случаях, когда роль используется как зависимость, я часто параметризировал name
. Пара примеров.
Параметризованный name
например, из ролей / some_container / meta / main.yml
...
dependencies:
- { role: remove_container, container_name: some_container }
...
роли / remove_container / задачи / main.yml
...
- name: Remove containers - {{ container_name }}
docker_container:
name: "{{ container_name }}"
state: absent
force_kill: true
...
Комментарии как дополнительные к name
. роли / remove_image / задачи / main.yml
# The 'docker_image' module, as of EPEL build 2.1.0.0, does not correctly handle 'tag: *' for removing all image tags.
# Below is not pretty but works on systems where you know all the image names.
- name: Remove images - {{ image_name }}
shell: docker rmi -f $(docker images | grep {{ image_name }} | awk '{print $3}')
register: result
changed_when: "'requires a minimum of 1 argument' not in result.stderr"
failed_when:
- "'requires a minimum of 1 argument' not in result.stderr"
- "result.rc != 0"
- Это должно быть [k = v] или [k: v]?
Я всегда использую синтаксис «k: v». Дополнительно я разбиваю отдельные значения новой строкой. Когда я читаю пьесу, в которой кто-то вставил много «k = v» в одну строчку, мой мозг скручивается. Мне очень сложно манипулировать всеми ключами / значениями, когда я читаю те, которые мне интересны.
Что легче читать? Думаю второй пример.
# 1. Launch container k=v
- name: Start A container
docker_container:
name=containerA image=imageA published_ports='443:8443' exposed_ports=8443 volumes='/some/path:/some/path' links='b:b' env='/some/local.fact' pull=false restart_policy=always state=started
# 2. Launch container k: v
- name: Start api container
docker_container:
name: containerA
image: imageB
published_ports:
- "443:8443"
exposed_ports:
- 8443
volumes:
- /some/path:/some/path
links:
- db:db
env: /some/local.fact
pull: false
restart_policy: always
state: started
Иногда я также разумно использую пустое пространство.
...
# Containers a, b, c comprise 'app d' and can be updated independently.
roles:
- { role: bootstrap_common, tags: bootstrap }
- { role: bootstrap_a, tags: bootstrap }
- { role: bootstrap_b, tags: bootstrap }
- { role: deploy_container_a, tags: a }
- { role: deploy_container_b, tags: b }
- { role: deploy_container_c, tags: c }
...
Это зависит от ваших предпочтений.
Комментарии вроде # Make sure Jenkins starts, then configure Jenkins.
не имеют особого смысла, поскольку не добавляют дополнительной информации.
Inline
синтаксис поддерживается YAML
быть совместимым с JSON
. Outline
однако следует отдавать предпочтение синтаксису, потому что код лучше читается, а изменения кода лучше проверять с помощью команды diff.