ansible | remover link | avançado

2

Eu quero alcançar o seguinte - em um diretório 'sites-enabled' para ter apenas os links simbólicos presentes que estão definidos em uma lista {{sites_enabled}}

Especificamente a dificuldade é com - como posso fazer Ansible ter apenas o definido nos links da lista presentes, e o que não está na lista - removido.

Eu encontrei a seguinte solução, que é sub-ótima:

# 3. Disable all links (clean plate)
- name: Disable all enabled vhosts.
  file: path="{{ remote_enabled_cfg_dir }}/{{ item }}" state=absent
  with_fileglob:
    - "{{ remote_enabled_cfg_dir }}/*"

# 4. Enable only the approved vhosts / Create Link from sites-available to sites-enabled
- name: Enable only allowed vhosts
  file:
    src: "{{ remote_cfg_dir }}/{{ item }}"
    dest: "{{ remote_enabled_cfg_dir }}/{{ item }}"
    owner: root
    group: wheel
    state: link
  with_items: "{{ sites_enabled }}"
  notify: reload nginx

no entanto, eu não gosto de remover todos os links simbólicos válidos apenas para recriá-los um momento depois e ter que recarregar o nginx em cada jogo. (Eu preferiria que se não houvesse mudança desde a última jogada, nenhuma ação a ser tomada pela Ansible) Existe uma maneira mais inteligente de atingir esse objetivo?

    
por Nikolai Alexandrov Georgiev 08.11.2017 / 17:40

1 resposta

0

Eu uso o filtro diferença para esse fim. Adicione uma tarefa para listar o conteúdo do seu diretório de configuração e registre o resultado em uma variável. Em seguida, adicione uma tarefa que remove itens inválidos do diretório de configuração encontrando a diferença entre sua lista de arquivos válidos e aqueles encontrados na etapa anterior:

- name: Get contents of config directory
  command: ls "{{ remote_cfg_dir }}"
  register: cfg_dir_contents
- name: Remove invalid files from config directory
  file:
    dest: "{{ remote_cfg_dir }}/{{ item }}"
    state: absent
  loop: "{{ cfg_dir_contents.stdout_lines | difference(sites_enabled) }}"

(assume que 'sites_enabled' é simplesmente uma lista de nomes de arquivos que devem existir em 'remote_cfg_dir')

    
por 01.12.2018 / 12:54

Tags