Установка PowerShell 7 с помощью Ansible

Ansible позволяет массово развернуть PowerShell 7 на множестве Linux-систем без установки агентов — достаточно подготовить инвентори и плейбук. В статье показано, как настроить структуру каталогов, написать универсальный playbook для Ubuntu, Fedora и RedHat, а также даны чек-листы, распространённые ошибки и улучшенные сниппеты для продакшн-использования.
Быстрые ссылки
Установка Ansible на Windows и Linux
Настройка Ansible
Создание плейбука
Запуск плейбука
Заключение
Введение
PowerShell 7 — это мощная оболочка и язык сценариев. Так как PowerShell теперь кросс-платформенный, системным администраторам важно уметь автоматически разворачивать его на множестве систем. Ansible — удобный инструмент для написания плейбуков, который позволяет автоматически устанавливать PowerShell 7 на целевые узлы.
Краткое определение: Ansible — декларативный инструмент автоматизации, который выполняет команды на удалённых хостах по SSH/Shell, без установки дополнительных агентов.
Установка Ansible на Windows и Linux
На Linux Ansible обычно устанавливается через системный менеджер пакетов. Обычные команды:
sudo apt install ansiblesudo yum install ansiblesudo dnf install ansibleWindows: Ansible как нативный пакет для Windows недоступен. Рекомендуемый путь — установить Windows Subsystem for Linux (WSL) и внутри него выполнить установку Ansible теми же командами.
Важно: для управления Linux-хостами Ansible использует SSH. Для управления Windows — WinRM. В этой статье мы фокусируемся на развёртывании PowerShell 7 на Linux-системах.
Настройка Ansible
Для удобства работы организуйте простую структуру каталога репозитория с Ansible:
inventoriesplaybooksvars
В директории inventories создайте файл hosts с перечнем целевых систем. Пример простой группы production с комментариями:
[production]
# test-system-01
100.100.10.10
# test-system-02
100.100.10.11
# test-system-03
100.100.10.12
# test-system-04
100.100.10.13Хост может состоять в нескольких группах — это удобно для группировки и таргетинга.
Совет: храните конфиденциальные данные (пароли, ключи) в Ansible Vault.
Создание плейбука
Создайте папку playbooks/deploy-powershell и файл main.yml. Ниже — базовый пример для Ubuntu с добавлением ключа и репозитория Microsoft, затем установки пакета:
---
- name: Install PowerShell 7
hosts: all
become: yes
tasks:
- name: Download and Add Powershell Key to Apt-Get Keyring
apt_key:
url: "https://packages.microsoft.com/keys/microsoft.asc"
state: present
- name: Add Powershell Repository into /etc/apt/sources.list - Bionic
apt_repository:
repo: 'deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main'
state: present
- name: Install Powershell
apt:
pkg: powershell
state: latest
force: yesПояснения: используем become: yes чтобы выполнять действия от имени root; apt_key и apt_repository добавляют доверенные ключи и репозиторий; apt устанавливает пакет.
Расширение плейбука для других дистрибутивов
Добавим условную логику по значению ansible_distribution для поддержки Ubuntu, RedHat и Fedora. Также добавим обновление кэша пакетов где нужно и обработчик (handler) для обновления APT.
---
- name: Install PowerShell 7
hosts: all
become: yes
vars:
ms_repo_rhel7: "https://packages.microsoft.com/config/rhel/7/prod.repo"
ms_repo_ubuntu_bionic: "deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main"
tasks:
- name: Ensure apt cache is updated
apt:
update_cache: yes
when: ansible_os_family == 'Debian'
- name: Download and Add Powershell Key to Apt-Get Keyring
apt_key:
url: "https://packages.microsoft.com/keys/microsoft.asc"
state: present
when: ansible_distribution == 'Ubuntu'
- name: Add Powershell Repository into /etc/apt/sources.list - Ubuntu
apt_repository:
repo: "{{ ms_repo_ubuntu_bionic }}"
state: present
when: ansible_distribution == 'Ubuntu'
- name: Add repository - RHEL-based
yum_repository:
name: microsoft
description: Microsoft Repository
baseurl: "{{ ms_repo_rhel7 }}"
when: ansible_os_family == 'RedHat'
- name: Install PowerShell package on Debian/Ubuntu
apt:
pkg: powershell
state: latest
force: yes
when: ansible_os_family == 'Debian'
- name: Install PowerShell package on RHEL/CentOS
yum:
name: powershell
state: latest
when: ansible_os_family == 'RedHat'
- name: Install PowerShell package on Fedora
dnf:
name: powershell
state: latest
when: ansible_distribution == 'Fedora'
handlers:
- name: apt-get update
apt:
update_cache: yesСоветы по идемпотентности: используйте модули Ansible (apt, yum, dnf), а не shell/command без необходимости. Это позволяет Ansible корректно определять изменения.
Запуск плейбука
Для запуска используйте:
ansible-playbook /path/to/main.yml -i /path/to/hostsВы увидите вывод по каждому узлу: success/changed/failed/ok/skipped. Условные задачи, не соответствующие дистрибутиву, будут помечены как skipped.
Важно: при первом подключении Ansible может попросить подтвердить ключ хоста SSH. Для автоматизации можно настроить опцию host_key_checking = False в ansible.cfg, но это снижает безопасность.
Критерии приёмки
- PowerShell 7 успешно установлен и запускается командой
pwshна всех целевых хостах. - На хосте установлен пакет в версии, равной или новее, чем указанная в репозитории.
- Конфигурация репозиториев и ключей присутствует и имеет корректные права доступа.
- Ansible-run завершился без ошибок (status 0) и с ожидаемым количеством изменений.
Распространённые ошибки и когда это не сработает
- Системы без доступа в интернет: репозитории и ключи не будут доступны. Решение: локальный прокси или внутренний репозиторий.
- Блокировка менеджера пакетов (dpkg/apt/dnf): задача установится с ошибкой. Решение: обеспечить отсутствие lock-файлов перед запуском.
- Неподдерживаемая архитектура (например arm64 без пакета): пакет может не существовать.
- Неправильные права sudo/без
become: задачи, требующие прав root, завершатся ошибкой.
Альтернативные подходы
- Использовать пакеты контейнеров: доставлять PowerShell как контейнерный образ для приложений.
- Использовать скрипты установки (bash/sh) и запускать их через Ansible module
script— полезно для простых одноразовых задач, но хуже с идемпотентностью. - Для Windows можно использовать Chocolatey или MSI-пакеты и модуль win_package/winget для Ansible Windows-инвентаря.
- Для больших инфраструктур рассмотреть Salt/Puppet/Chef — они дают другой уровень управления состоянием и инфраструктуры.
Чек-лист ролей (кто что делает)
Администратор сети:
- Обеспечить доступ к репозиториям и прокси.
- Открыть необходимые firewall-порты (HTTP/HTTPS).
DevOps-инженер:
- Подготовить инвентори и плейбук.
- Настроить CI для запуска Ansible-run.
Секьюрити-инженер:
- Проверить ключи репозиториев.
- Контролировать Vault для секретов.
Snippet: минимальный production-ready плейбук
---
- name: Deploy PowerShell 7 to production group
hosts: production
become: yes
serial: 10
max_fail_percentage: 20
vars_files:
- ../vars/credentials.yml
roles:
- deploy-powershellКомментарий: использование serial и max_fail_percentage позволяет контролировать развертывание и снижать blast radius.
Decision flow: какой модуль пакета использовать
flowchart TD
A{ansible_os_family == 'Debian'?} -->|yes| B[Использовать apt module]
A -->|no| C{ansible_os_family == 'RedHat'?}
C -->|yes| D[Использовать yum или dnf]
C -->|no| E[Проверить дистрибутив / использовать shell script]Тонкости безопасности
- Подписывайте и проверяйте репозитории; не отключайте проверку ключей.
- Храните секреты в Ansible Vault или интегрируйте HashiCorp Vault.
- Не отключайте host_key_checking в продакшне без веской причины.
Проверки и тесты приёмки
- Тест: выполнить
pwsh -vна нескольких хостах через Ansible ad-hoc и проверить код возврата 0. - Тест: подтвердить, что репозиторий Microsoft присутствует в конфигурации менеджера пакетов.
- Тест: проверить, что команда
ansible-playbookвозвращает ожидаемое число changed/ok/failed.
Шаблоны и короткие подсказки (cheat sheet)
- Запуск на одной группе:
ansible-playbook main.yml -i inventories/hosts --limit production - Проверка подключения:
ansible all -m ping -i inventories/hosts - Просмотр фактов хоста:
ansible host1 -m setup
Заключение
Ansible — удобный и гибкий инструмент для массовой установки PowerShell 7. Путём использования условных задач, переменных и ролей вы получите переносимый и управляемый процесс установки. Для продакшн-развертывания добавьте контроль версий, CI-пайплайн и продуманную стратегию обработки ошибок.
Важно: комбинируя Ansible и PowerShell, вы получаете возможность централизованно разворачивать и конфигурировать оболочку на сотнях хостов с минимальными усилиями.
Ресурсы и дальнейшие шаги
- Рассмотрите добавление роли в Galaxy для повторного использования.
- Автоматизируйте тестирование с помощью Molecule для ролей Ansible.
Ключевые термины (оглавление)
- Ansible — инструмент автоматизации конфигурации и оркестрации по SSH.
- Playbook — YAML-файл с задачами и ролями для Ansible.
- Inventory — список целевых узлов для Ansible.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента