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 для директорий.