3 votes

Comment se présente la politique de formatage depuis Ansible 2.0 ?

J'ai vu de nombreux exemples d'Ansible sur github et dans le site docs ansible , par exemple :

---
# this might be in a file like handlers/handlers.yml
- name: restart apache
  service: name=apache state=restarted

Exemple Github

L'exemple suivant contient à la fois un commentaire et un name .

# Make sure Jenkins starts, then configure Jenkins.
- name: Ensure Jenkins is started and runs on startup.
  service: name=jenkins state=started enabled=yes

Discussion

A name serait suffisant ou faut-il utiliser un commentaire ?

Devrait-il l'être ?

- name: Symlink RabbitMQ bin to sbin
  file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin

ou :

#Symlink RabbitMQ bin to sbin
file: 
  state: link
  src: /usr/lib/rabbitmq/binhttp://docs.ansible.com/ansible/YAMLSyntax.html
  dest: /usr/lib/rabbitmq/sbin

Quand YAML Lint est consulté selon les recommandations de la documentation sur la syntaxe YAML d'Ansible les deux extraits semblent être des YAML valides. Bien que les deux extraits semblent être des YAML valides, la structure visuelle est différente.

Questions

  1. Le nom doit être ( name ) ou un commentaire ( # ) ?
  2. Doit-il être file: state=link src=/usr/lib/rabbitmq/bin dest=/usr/lib/rabbitmq/sbin ou l'élément "by" doit-il être scindé, par exemple state:

7voto

jscott Points 23974

Veuillez comprendre que je pense que ma réponse est très subjective. En interne, mon équipe est plus ou moins d'accord avec mes opinions à ce sujet. Mais nous n'avons pas élaboré de "politique de formatage" pour les playbooks.

  1. Le nom doit être ( name ) ou un commentaire ( # ) ?

Nous n'incluons des commentaires que s'il est utile d'expliquer le "pourquoi" d'une tâche particulière. name es toujours présent. La valeur de name s'affichera lors de l'exécution du cahier de jeu. Dans les cas où un rôle est utilisé comme dépendance, j'ai souvent paramétré name . Quelques exemples.

Paramétré name exemple, à partir de roles/some_container/meta/main.yml

...
dependencies:
  - { role: remove_container, container_name: some_container }
...

roles/remove_container/tasks/main.yml

...
- name: Remove containers - {{ container_name }}
  docker_container:
    name: "{{ container_name }}"
    state: absent
    force_kill: true
...

Commentaires à titre complémentaire name . roles/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"
  1. Faut-il dire [k=v] ou [k : v] ?

J'utilise toujours la syntaxe "k : v". En outre, je sépare les valeurs par une nouvelle ligne. Lorsque je lis une pièce dans laquelle quelqu'un a inséré plusieurs "k=v" sur une seule ligne, mon cerveau s'embrouille. Je trouve qu'il est très difficile de jongler avec toutes les clés/valeurs pendant que je lis pour trouver celles qui m'intéressent.

Lequel est le plus facile à lire ? Je pense que c'est le deuxième exemple.

# 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

J'utilise aussi parfois judicieusement les espaces blancs.

...

# 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          }
...

5voto

Henrik Pingel Points 8426

C'est à vous de décider.

Commentaires comme # Make sure Jenkins starts, then configure Jenkins. n'ont pas beaucoup de sens car elles n'apportent pas d'informations supplémentaires.

Inline est prise en charge par YAML pour être compatible avec JSON . Outline Cependant, la syntaxe devrait être préférée parce que le code est plus lisible et que les changements de code peuvent être mieux examinés avec diff.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X