Объединение заданных задач в одно задание с одним определением «изменено» - PullRequest
0 голосов
/ 25 мая 2018

В рамках развертывания я хочу выполнить небольшую компиляцию на хосте.Это состоит из перемещения исходных файлов, компиляции программы и удаления исходных файлов.Я хотел бы, чтобы это работало так, чтобы это приводило только к ok, а не changed, если программа не изменилась.

Это точно описало бы ситуацию, потому что, если программа не измениласьзатем, запустив playbook, можно создать (предположительно) несуществующий каталог, выполнить команду, в результате чего какой-то файл будет перемещен туда, где была идентичная копия, а затем исходные файлы будут удалены, а созданный каталог будет один разопять не существует.

Конкретно, задачи будут выглядеть примерно так:

- copy:
    src: src/
    dest: /tmp/my_program_src/
- shell: my_compiler -o /usr/local/bin/my_program /tmp/my_program_src/main.file
  become: true
- file:
    path: /tmp/my_program_src/
    state: absent

Конечно, в действительности все три отчета «изменились»;потому что для оболочки я должен был бы определить changed_when сам, а copy, а также file что-то изменить, хотя они взаимно отменяют друг друга.

Могу ли я сгруппировать это вместе в одну задачу, которая сообщает ok если /usr/local/bin/my_program не изменилось?Если да, то как?Если нет, то каков был бы «правильный» способ сделать что-то подобное?

1 Ответ

0 голосов
/ 25 мая 2018

ИМХО, я рекомендую сделать Ansible таким способом.Другой вариант - создать скрипт и вызвать его по command:.Затем проверяем sha1 с помощью Ansible, но мне не нравится эта опция.

---
- name: Example
  hosts: localhost
  gather_facts: False
  connection: local

  tasks:

    - name: Get cksum of my program
      stat:
        path : "/usr/local/bin/my_program"
      register: myprogram1

    - name: Current SHA1
      set_fact:
        mp1sha1: "{{ myprogram1.stat.checksum }}"

    - name: Copy File
      copy:
        src: src/
        dest: /tmp/my_program_src/
      changed_when: False

    - name: Compile
      shell: my_compiler -o /usr/local/bin/my_program /tmp/my_program_src/main.file
      become: true
      changed_when: False

    - name: Remove src
      file:
        path: /tmp/my_program_src/
        state: absent
      changed_when: False

    - name: Get cksum of my program
      stat:
        path : "/usr/local/bin/my_program"
      register: myprogram2

    - name: Current SHA1
      set_fact:
        mp2sha1: "{{ myprogram2.stat.checksum }}"

    - name: Compilation Changed
      debug:
        msg: "Check Compilation"
      changed_when:  mp2sha1 == mp1sha1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...