Spec-Zone.ru › Ansible

Модуль community.general.deploy_helper — выполняет некоторые стандартные шаги при развертывании проектов

Примечание

Этот модуль входит в коллекцию community.general (версия 12.6.1).

Возможно, эта коллекция уже установлена, если вы используете пакет ansible. Она не входит в состав ansible-core. Чтобы проверить, установлена ли она, выполните ansible-galaxy collection list.

Для установки используйте: ansible-galaxy collection install community.general.

Чтобы использовать модуль в плейбуке, укажите: community.general.deploy_helper.

  • Краткое описание
  • Параметры
  • Атрибуты
  • Примечания
  • Примеры

Краткое описание

  • Помощник развертывания выполняет некоторые стандартные шаги при развертывании программного обеспечения. Он создает структуру каталогов, управляет символической ссылкой на текущий выпуск и удаляет старые выпуски.
  • При запуске с state=query или state=present возвращается факт deploy_helper. project_path — независимо от того, что указано в параметре path, current_path — путь к символической ссылке, указывающей на активный выпуск, releases_path — путь к каталогу для хранения выпусков, shared_path — путь к каталогу для хранения общих ресурсов, unfinished_filename — файл, наличие которого проверяется для обнаружения незавершенных сборок, previous_release — выпуск, на который указывает символическая ссылка «current», previous_release_path — полный путь к цели символической ссылки «current», new_release — либо параметр release, либо сгенерированная метка времени, new_release_path — путь к каталогу нового выпуска (модуль его не создает).

Параметры

Параметр

Комментарии

attributes

псевдонимы: attr

строка

Атрибуты, которые должен иметь создаваемый объект файловой системы.

Список поддерживаемых флагов см. на странице справочного руководства для chattr целевой системы.

Эта строка должна содержать атрибуты в том же порядке, в котором они выводятся командой lsattr.

По умолчанию предполагается оператор =, в противном случае в строке необходимо указать оператор + или -.

clean

логическое значение

Нужно ли выполнять очистку в случае state=finalize.

Варианты:

  • false
  • true ← (по умолчанию)

current_path

путь

Имя символической ссылки, создаваемой после завершения развертывания. Используется в state=finalize и state=clean. Возвращается в факте deploy_helper.current_path.

По умолчанию: "current"

group

строка

Имя группы, которой должен принадлежать объект файловой системы, как если бы оно передавалось команде chown.

Если значение не указано, используется текущая группа текущего пользователя; если вы работаете от имени root, может быть сохранен прежний владелец.

keep_releases

целое число

Количество старых выпусков, которые следует сохранить при очистке. Используется в state=finalize и state=clean. Сначала удаляются все незавершенные сборки, поэтому учитываются только корректные выпуски. Текущая версия не учитывается.

По умолчанию: 5

mode

любой

Разрешения, которые должен иметь создаваемый объект файловой системы.

Если вы привыкли к /usr/bin/chmod, помните, что режимы на самом деле являются восьмеричными числами. Ansible необходимо передать достаточно информации для их правильного разбора. Для получения стабильных результатов заключайте восьмеричные числа в кавычки (например, '644' или '1777'), чтобы Ansible получил строку и преобразовал ее в число самостоятельно. Добавление ведущего нуля (например, 0755) иногда работает, но может не сработать в циклах и некоторых других случаях.

Если передать Ansible число, не соблюдая ни одно из этих правил, оно будет интерпретировано как десятичное, что приведет к неожиданным результатам.

Начиная с Ansible 1.8, режим можно указывать в символьной форме (например, u+rwx или u=rw,g=r,o=r).

Если параметр mode не указан, а целевой объект файловой системы не существует, при установке режима для вновь созданного объекта будет использоваться системное значение umask.

Если параметр mode не указан, а целевой объект файловой системы существует, будет использоваться режим существующего объекта файловой системы.

Указание mode — лучший способ обеспечить создание объектов файловой системы с правильными разрешениями. Подробнее см. CVE-2020-1736.

owner

строка

Имя пользователя, которому должен принадлежать объект файловой системы, как если бы оно передавалось команде chown.

Если значение не указано, используется текущий пользователь; если вы работаете от имени root, может быть сохранен прежний владелец.

Числовое имя пользователя будет считаться идентификатором пользователя, а не именем. Не используйте числовые имена пользователей, чтобы избежать путаницы.

path

псевдонимы: dest

путь / обязательный

Корневой путь проекта. Возвращается в факте deploy_helper.project_path.

release

строка

Версия выпуска, который развертывается. По умолчанию используется формат метки времени %Y%m%d%H%M%S (например, 20141119223359). Этот параметр можно не указывать при state=present, но для state=finalize его необходимо задать явно. Можно использовать сгенерированный факт release={{ deploy_helper.new_release }}.

releases_path

строка

Имя каталога, в котором хранятся выпуски. Путь может быть относительным относительно path или абсолютным. Возвращается в факте deploy_helper.releases_path.

По умолчанию: "releases"

selevel

строка

Уровень в контексте объекта файловой системы SELinux.

Это атрибут MLS/MCS, иногда называемый range.

Если задано значение _default, будет использоваться часть политики level, если она доступна.

serole

строка

Роль в контексте объекта файловой системы SELinux.

Если задано значение _default, будет использоваться часть политики role, если она доступна.

setype

строка

Тип в контексте объекта файловой системы SELinux.

Если задано значение _default, будет использоваться часть политики type, если она доступна.

seuser

строка

Пользователь в контексте объекта файловой системы SELinux.

По умолчанию используется политика system, если это применимо.

Если задано значение _default, будет использоваться часть политики user, если она доступна.

shared_path

путь

Имя каталога, в котором хранятся общие ресурсы. Путь может быть относительным относительно path или абсолютным. Если задана пустая строка, общий каталог не создается. Возвращается в факте deploy_helper.shared_path.

По умолчанию: "shared"

state

строка

Состояние проекта.

query собирает факты.

present создает каталог проекта root, а в нем каталоги releases и shared.

finalize удаляет файл unfinished_filename, создает символическую ссылку на только что развернутый выпуск и при необходимости очищает старые выпуски.

clean удаляет неудачные и старые выпуски.

absent удаляет каталог проекта (аналогично модулю ansible.builtin.file с параметром state=absent).

Варианты:

  • "present" ← (по умолчанию)
  • "finalize"
  • "absent"
  • "clean"
  • "query"

unfinished_filename

строка

Имя файла, указывающего на то, что развертывание не завершено. Все каталоги в releases_path, содержащие этот файл, удаляются при state=finalize с clean=true или state=clean. Этот файл автоматически удаляется из new_release_path во время state=finalize.

По умолчанию: "DEPLOY_UNFINISHED"

unsafe_writes

логическое значение

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

По умолчанию этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованного чтения целевых объектов файловой системы, однако иногда настройки систем или их неисправности не позволяют это делать. Например, объекты файловой системы, подключенные в Docker, нельзя атомарно обновить изнутри контейнера — их можно записать только небезопасным способом.

Этот параметр позволяет Ansible использовать небезопасные методы обновления объектов файловой системы, если атомарные операции завершаются ошибкой (однако он не заставляет Ansible выполнять небезопасную запись).

ВАЖНО! Небезопасная запись подвержена состояниям гонки и может привести к повреждению данных.

Варианты:

  • false ← (по умолчанию)
  • true

Атрибуты

Атрибут

Поддержка

Описание

check_mode

Поддержка: полная

Модуль можно запускать в режиме check_mode. Он возвращает прогноз изменения состояния, не изменяя целевую систему.

diff_mode

Поддержка: нет

В режиме сравнения возвращает сведения об изменениях (или о возможных изменениях в check_mode).

Примечания

Примечание

  • Факты возвращаются только для state=query и state=present. Если вы используете оба варианта, следует передавать переопределенные параметры в оба вызова, иначе второй вызов перезапишет факты первого.
  • При использовании state=clean выпуски упорядочиваются по дате создания. Вы сможете без проблем перейти на новую стратегию именования.
  • Из-за поведения по умолчанию, при котором генерируется факт new_release, этот модуль не является идемпотентным, если не передать собственное имя выпуска с помощью release. С учетом особенностей развертывания программного обеспечения это не должно стать серьезной проблемой.

Примеры

# General explanation, starting with an example folder structure for a project:

# root:
#     releases:
#         - 20140415234508
#         - 20140415235146
#         - 20140416082818
#
#     shared:
#         - sessions
#         - uploads
#
#     current: releases/20140416082818


# The 'releases' folder holds all the available releases. A release is a complete build of the application being
# deployed. This can be a clone of a repository for example, or a sync of a local folder on your filesystem.
# Having timestamped folders is one way of having distinct releases, but you could choose your own strategy like
# git tags or commit hashes.
#
# During a deploy, a new folder should be created in the releases folder and any build steps required should be
# performed. Once the new build is ready, the deploy procedure is 'finalized' by replacing the 'current' symlink
# with a link to this build.
#
# The 'shared' folder holds any resource that is shared between releases. Examples of this are web-server
# session files, or files uploaded by users of your application. It's quite common to have symlinks from a release
# folder pointing to a shared/subfolder, and creating these links would be automated as part of the build steps.
#
# The 'current' symlink points to one of the releases. Probably the latest one, unless a deploy is in progress.
# The web-server's root for the project will go through this symlink, so the 'downtime' when switching to a new
# release is reduced to the time it takes to switch the link.
#
# To distinguish between successful builds and unfinished ones, a file can be placed in the folder of the release
# that is currently in progress. The existence of this file will mark it as unfinished, and allow an automated
# procedure to remove it during cleanup.


# Typical usage
- name: Initialize the deploy root and gather facts
  community.general.deploy_helper:
    path: /path/to/root
- name: Clone the project to the new release folder
  ansible.builtin.git:
    repo: ansible.builtin.git://foosball.example.org/path/to/repo.git
    dest: '{{ deploy_helper.new_release_path }}'
    version: v1.1.1
- name: Add an unfinished file, to allow cleanup on successful finalize
  ansible.builtin.file:
    path: '{{ deploy_helper.new_release_path }}/{{ deploy_helper.unfinished_filename }}'
    state: touch
- name: Perform some build steps, like running your dependency manager for example
  composer:
    command: install
    working_dir: '{{ deploy_helper.new_release_path }}'
- name: Create some folders in the shared folder
  ansible.builtin.file:
    path: '{{ deploy_helper.shared_path }}/{{ item }}'
    state: directory
  with_items:
    - sessions
    - uploads
- name: Add symlinks from the new release to the shared folder
  ansible.builtin.file:
    path: '{{ deploy_helper.new_release_path }}/{{ item.path }}'
    src: '{{ deploy_helper.shared_path }}/{{ item.src }}'
    state: link
  with_items:
    - path: app/sessions
      src: sessions
    - path: web/uploads
      src: uploads
- name: Finalize the deploy, removing the unfinished file and switching the symlink
  community.general.deploy_helper:
    path: /path/to/root
    release: '{{ deploy_helper.new_release }}'
    state: finalize

# Retrieving facts before running a deploy
- name: Run 'state=query' to gather facts without changing anything
  community.general.deploy_helper:
    path: /path/to/root
    state: query
# Remember to set the 'release' parameter when you actually call 'state=present' later
- name: Initialize the deploy root
  community.general.deploy_helper:
    path: /path/to/root
    release: '{{ deploy_helper.new_release }}'
    state: present

# all paths can be absolute or relative (to the 'path' parameter)
- community.general.deploy_helper:
    path: /path/to/root
    releases_path: /var/www/project/releases
    shared_path: /var/www/shared
    current_path: /var/www/active

# Using your own naming strategy for releases (a version tag in this case):
- community.general.deploy_helper:
    path: /path/to/root
    release: v1.1.1
    state: present
- community.general.deploy_helper:
    path: /path/to/root
    release: '{{ deploy_helper.new_release }}'
    state: finalize

# Using a different unfinished_filename:
- community.general.deploy_helper:
    path: /path/to/root
    unfinished_filename: README.md
    release: '{{ deploy_helper.new_release }}'
    state: finalize

# Postponing the cleanup of older builds:
- community.general.deploy_helper:
    path: /path/to/root
    release: '{{ deploy_helper.new_release }}'
    state: finalize
    clean: false
- community.general.deploy_helper:
    path: /path/to/root
    state: clean
# Or running the cleanup ahead of the new deploy
- community.general.deploy_helper:
    path: /path/to/root
    state: clean
- community.general.deploy_helper:
    path: /path/to/root
    state: present

# Keeping more old releases:
- community.general.deploy_helper:
    path: /path/to/root
    release: '{{ deploy_helper.new_release }}'
    state: finalize
    keep_releases: 10
# Or, if you use 'clean=false' on finalize:
- community.general.deploy_helper:
    path: /path/to/root
    state: clean
    keep_releases: 10

# Removing the entire project root folder
- community.general.deploy_helper:
    path: /path/to/root
    state: absent

# Debugging the facts returned by the module
- community.general.deploy_helper:
    path: /path/to/root
- ansible.builtin.debug:
    var: deploy_helper

Авторы

  • Ramon de la Fuente (@ramondelafuente)

Ссылки на коллекцию

  • Отслеживание проблем
  • Репозиторий (исходный код)
  • Задать вопрос
  • Сообщить об ошибке
  • Предложить новую функцию
  • Связь

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/general/deploy_helper_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API