Ansible, synchronize и права/владельцы

Способы установки прав/владельцев при использовании ansible.

В последнее время довольно часто юзаю ansible для автоматизации деплоя и наклюнулся интересный вопрос — synchronize эффективно доставляет файлы на хост, но как быть с правами и владельцами файлов/директорий?

Первое что приходит на ум (и это, пожалуй, единственный способ, если у вас нет возможности обновить rsync до версии 3.1), это задать выполнение shell команд после деплоя:

- name: Set directories permissions
  command: find {{ deployment_path }} -type d -exec chmod 0755 {} \;
- name: Set files permissions
  command: find {{ deployment_path }} -type f -exec chmod 0644 {} \;
- name: Set owner/group
  command: chown -R {{ deployment_user }}:{{ deployment_user_group }} {{ deployment_path }}

Этот подход работает, и, возможно, для совсем простых проектов подойдет нормально, но такой метод очень неэффективен, поскольку будет выполнять поиск и выполнение chmod/chown по всем файлам/директориям проекта.

В случае, когда у вас есть возможность обновить rsync, либо на вашей машине уже установлена минимум 3.1 версия, в программе появляются новые возможности, а именно ключи —chown и —chmod, которые можно передать в synchronize:

    - name: Sync env-based configs
      synchronize:
      src: "../env/dev_servers/"
      dest: "{{ deployment_path }}"
      rsync_opts:
        - "--exclude=.git"
        - "--chmod=F0644,D755"
        - "--chown={{ deployment_user }}:{{ deployment_user_group }}"

Синтаксис chmod в rsync принимает префикс для обозначения субъекта выполнения: F для файлов и D для директорий.

Комментарии

comments powered by Disqus
Яндекс.Метрика