Как запустить функцию оболочки в виде команды в Ansible playbook? - PullRequest
1 голос
/ 14 апреля 2020

У меня есть функция в скрипте оболочки, и я хочу использовать ее в моей ansible playbook

скрипте моей оболочки -

wait_for_apt_locks () {
    while sudo fuser /var/{lib/cache/apt/archives}/{lock,lock-frontend} >/dev/null 2>&1; do
        echo "Waiting for apt locks"
        sleep 1
    done

Я хочу использовать эту функцию wait_for_apt_locks в моем playbook wait.yml

ниже ли правильный способ его использования?

- name: source /tmp/function.sh
      shell: |
        source /tmp/functions.sh
        wait_for_apt_locks 

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Если вы создаете сценарий оболочки с единственной целью вызвать его здесь, вы можете пропустить файл сценария и просто выполнить logi c inline. В конце дня, если он работает, он работает.

- name: Run a shell command inline
  become: true
  command: >
    while fuser {lib/cache/apt/archives}/{lock,lock-frontend} >/dev/null 2>&1; do
      echo "Waiting for apt locks";
      sleep 1;
    done
  ignore_errors: no
  args:
    chdir: /var

Документация

1 голос
/ 14 апреля 2020

У меня нет предложений по загрузке bash функций - если ваш пример работает, то он работает!

Но учтите, что Ansible имеет wait_for модуль, используемый для мониторинга портов или файлов.

Возможно, это более нативное решение для работы с файлами блокировки Ansible.

С https://docs.ansible.com/ansible/latest/modules/wait_for_module.html#examples:

- name: Wait until the lock file is removed
  wait_for:
    path: /var/lock/file.lock
    state: absent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...