自 Ansible 2.0 以来,格式化策略如何?

030*_*030 3 ansible yaml

我在 github 和 ansible docs 中看到了多个 Ansible 示例,例如:

---
# this might be in a file like handlers/handlers.yml
- name: restart apache
  service: name=apache state=restarted
Run Code Online (Sandbox Code Playgroud)

Github 示例

以下示例同时包含注释作为name.

# Make sure Jenkins starts, then configure Jenkins.
- name: Ensure Jenkins is started and runs on startup.
  service: name=jenkins state=started enabled=yes
Run Code Online (Sandbox Code Playgroud)

讨论

Aname将是足够的权利还是应该使用评论?

应该是:

- name: Symlink RabbitMQ bin to sbin
  file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin
Run Code Online (Sandbox Code Playgroud)

或者:

#Symlink RabbitMQ bin to sbin
file: 
  state: link
  src: /usr/lib/rabbitmq/binhttp://docs.ansible.com/ansible/YAMLSyntax.html
  dest: /usr/lib/rabbitmq/sbin
Run Code Online (Sandbox Code Playgroud)

按照 Ansible YAML 语法文档的建议咨询YAML Lint 时,两个片段似乎都是有效的 YAML。尽管两个片段似乎都是有效的 YAML,但视觉结构不同。

问题

  1. 应该使用名称 ( name) 还是注释 ( #)?
  2. 它应该file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin还是应该通过拆分来元素化,例如state:

jsc*_*ott 7

请理解我相信我的回答是非常主观的。在内部,我的团队大致同意我对此的看法。但是我们还没有为剧本起草任何“格式政策”。

  1. 应该使用名称 ( name) 还是注释 ( #)?

如果有助于解释“为什么?”,我们只包含评论。的特定任务。name始终存在。的值name将在剧本运行期间显示。在将角色用作依赖项的情况下,我经常将name. 几个例子。

参数化name示例,来自roles/some_container/meta/main.yml

...
dependencies:
  - { role: remove_container, container_name: some_container }
...
Run Code Online (Sandbox Code Playgroud)

角色/remove_container/tasks/main.yml

...
- name: Remove containers - {{ container_name }}
  docker_container:
    name: "{{ container_name }}"
    state: absent
    force_kill: true
...
Run Code Online (Sandbox Code Playgroud)

评论是免费的name。角色/remove_image/tasks/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"
Run Code Online (Sandbox Code Playgroud)
  1. 应该是 [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
Run Code Online (Sandbox Code Playgroud)

我有时也会明智地使用空白。

...

# 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          }
...
Run Code Online (Sandbox Code Playgroud)


Hen*_*gel 5

这取决于你自己的喜好。

# Make sure Jenkins starts, then configure Jenkins.这样的评论没有多大意义,因为它们没有添加更多信息。

Inline支持语法YAML以与JSON. Outline但是应该首选语法,因为代码可读性更好,并且可以使用 diff 更好地审查代码更改。