Spec-Zone.ru › Ansible

community.general.deploy_helper модуль – Управляет некоторыми шагами, общими при развертывании проектов

Примечание

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

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

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

Для использования в книге задач укажите: community.general.deploy_helper.

  • Обзор
  • Параметры
  • Атрибуты
  • Примечания
  • Примеры

Обзор

  • Модуль 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"

END_OF_DOCUMENT_MARKER

state

string

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

query будет только собирать факты.

present будет создавать проект root папку, а в ней папки releases и shared.

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

clean удалит неудачные и старые релизы.

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

Варианты:

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

unfinished_filename

string

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

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

unsafe_writes

boolean

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

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

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

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

Варианты:

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

Атрибуты

Атрибут

Поддержка

Описание

check_mode

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

Может работать в режиме check_mode и возвращать прогноз статуса изменений без модификации цели.

diff_mode

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

Возвращает подробности о том, что изменилось (или, возможно, нуждается в изменении в check_mode), когда используется режим diff.

Примечания

Примечание

  • Факты возвращаются только для 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–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/collections/community/general/deploy_helper_module.html

Spec-Zone.ru

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