Как удалить ansible centos

Обновлено: 04.07.2024

Ansible – это современный инструмент управления конфигурацией, который облегчает задачу настройки и обслуживания удаленных серверов.

Этот мануал написан в виде шпаргалки. По сути это краткий справочник по командам и методам, обычно используемым при работе с Ansible. Краткий обзор Ansible и инструкции по установке и настройке вы найдете в руководстве Установка и настройка Ansible в Ubuntu 18.04.

Как пользоваться этим мануалом:

  • Найдите раздел, который описывает интересующую вас задачу.
  • Выделенный текст в командах – условные данные, которые нужно заменить своими данными. Обычно это хосты, имена пользователей и IP-адреса из вашего инвентаря.

Краткий словарь терминов Ansible

В этом руководстве широко используются такие термины Ansible:

  • Control Machine (или Node): ведущая система, в которой установлен Ansible и откуда он может подключаться к нодам и выполнять на них команды.
  • Нода: сервер, управляемый Ansible.
  • Файл инвентаря: файл, который содержит информацию о серверах, которыми управляет Ansible, обычно находится в /etc/ansible/hosts.
  • Плейбук (Playbook): файл, содержащий серию задач, которые нужно выполнить на удаленном сервере.
  • Роль: коллекция плейбуков и других файлов, которые имеют отношение к цели (например, к установке веб-сервера).
  • Play: полный набор инструкций Ansible. В play может быть несколько плейбуков и ролей, включенных в один плейбук, который служит точкой входа.

Если вы хотите попрактиковаться с командами, используемыми в этом руководстве, на рабочем плейбуке Ansible, Используйте плейбук из мануала Автоматизация начальной настройки сервера с помощью Ansible в Ubuntu 18.04. Вам понадобится как минимум один удаленный сервер в качестве ноды.

Проверка подключения к нодам

Чтобы убедиться, что Ansible может подключаться к нодам и запускать команды и плейбуки, вы можете использовать следующую команду:

ansible all -m ping

Модуль ping проверит, есть ли у вас валидные учетные данные для подключения к нодам, определенным в файле инвентаря, и может ли Ansible запускать сценарии Python на удаленном сервере. Ответ pong означает, что Ansible готов запускать команды и плейбуки на этой ноде.

Подключение с помощью другого пользователя

По умолчанию Ansible пытается подключиться к нодам в качестве текущего пользователя системы через соответствующую пару ключей SSH. Чтобы подключиться как другой пользователь, добавьте команду с флагом -u и именем нового пользователя:

ansible all -m ping -u 8host

То же самое относится и к ansible-playbook:

ansible-playbook myplaybook.yml -u 8host

Настройка пользовательского ключа SSH

ansible all -m ping --private-key=

Эта опция также работает для ansible-playbook:

ansible-playbook myplaybook.yml --private-key=

Настойка парольной аутентификации

Это заставит Ansible запросить у вас пароль пользователя на удаленном сервере, к которому вы пытаетесь подключиться:

ansible all -m ping --ask-pass

Эта опция также действительна для ansible-playbook:

ansible-playbook myplaybook.yml --ask-pass

Использование пароля sudo

ansible all -m ping --ask-become-pass

Эта опция также действительна для ansible-playbook:

ansible-playbook myplaybook.yml --ask-become-pass

Пользовательский файл инвентаря

Файл инвентаря по умолчанию обычно находится в /etc/ansible/hosts, но вы можете использовать опцию -i для указания пользовательских файлов при запуске команд и плейбуков Ansible. Это удобный способ настройки индивидуального инвентаря для каждого проекта, который можно включить в системы контроля версий, такие как Git:

ansible all -m ping -i my_custom_inventory

Такая опция действительна и для ansible-playbook:

ansible-playbook myplaybook.yml -i my_custom_inventory

Динамический файл инвентаря

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

Вы можете найти ряд скриптов с открытым исходным кодом в официальном репозитории Ansible GitHub. После загрузки требуемого сценария на Ansible control machine и настройки необходимых параметров (например, учетных данных API) вы можете запустить исполняемый файл в качестве пользовательского инвентаря с любой командой Ansible, которая поддерживает эту опцию.

Следующая команда использует скрипт инвентаря my_inventory.py с командой ping для проверки подключения ко всем текущим активным серверам:

ansible all -m ping -i my_inventory.py

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

Запуск специальных команд

Чтобы выполнить любую команду на ноде, используйте параметр -a, а затем укажите нужную команду в кавычках.

Например, следующая команда выполнит uname -a на всех нодах в вашем инвентаре:

ansible all -a "uname -a"

Также с помощью опции -m можно запускать модули Ansible. Следующая команда установит пакет vim на server1 из вашего инвентаря:

ansible server1 -m apt -a "name=vim"

ansible server1 -m apt -a "name=vim" --check

Запуск плейбуков

Чтобы запустить плейбук и выполнить все определенные в нем задачи, используйте команду ansible-playbook:

Чтобы перезаписать в плейбуке опцию hosts по умолчанию и ограничить выполнение определенной группой или хостом, включите в команду опцию -l:

ansible-playbook -l server1 myplaybook.yml

Запрос информации о play

ansible-playbook myplaybook.yml --list-tasks

Точно так же можно запросить все хосты, которые будут затронуты выполнением play, без запуска каких-либо задач на удаленных серверах:

ansible-playbook myplaybook.yml --list-hosts

ansible-playbook myplaybook.yml --list-tags

Управление выполнением плейбука

ansible-playbook myplaybook.yml --tags= mysql,nginx

ansible-playbook myplaybook.yml --skip-tags= mysql

Ansible Vault для хранения конфиденциальных данных

Если ваши плейбуки Ansible содержат конфиденциальные данные, такие как пароли, ключи API и учетные данные, важно обеспечить их безопасность с помощью шифрования. Ansible предоставляет ansible-vault для шифрования файлов и переменных.

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

Создание нового зашифрованного файла

Вы можете создать новый зашифрованный файл Ansible с помощью:

ansible-vault create credentials.yml

Эта команда выполнит следующие действия:

  1. Сначала вам будет предложено ввести новый пароль. Вам нужно будет указывать этот пароль при каждом доступе к содержимому файла, будь то редактирование, просмотр или просто запуск плейбука (или команд с использованием его значений).
  2. Затем откроется редактор командной строки по умолчанию, чтобы вы могли заполнить файл требуемым содержимым.
  3. Наконец, когда вы закончите редактирование, ansible-vault сохранит файл как зашифрованный.

Шифрование существующего файла Ansible

Чтобы зашифровать существующий файл Ansible, вы можете использовать следующую команду:

ansible-vault encrypt credentials.yml

Эта команда запросит у вас пароль, который вам нужно будет вводить при каждом доступе к файлу credentials.yml.

Просмотр содержимого зашифрованного файла

Если вы хотите просмотреть содержимое файла, который ранее был зашифрован с помощью ansible-vault, и вам не нужно изменять его содержимое, вы можете использовать команду:

ansible-vault view credentials.yml

Она предложит вам указать пароль, который вы выбрали при первом шифровании файла с помощью ansible-vault.

Редактирование зашифрованного файла

Чтобы изменить содержимое файла, который ранее был зашифрован с помощью Ansible Vault, выполните:

ansible-vault edit credentials.yml

Эта команда предложит вам указать пароль, который вы выбрали при первом шифровании файла credentials.yml. После проверки пароля откроется редактор командной строки по умолчанию с незашифрованным содержимым файла, что позволит вам внести нужные изменения. По завершении вы можете сохранить и закрыть файл, как обычно, и обновленное содержимое будет сохранено и зашифровано.

Расшифровка файлов

Если вы хотите навсегда расшифровать файл, ранее зашифрованный с помощью ansible-vault, вы можете сделать это с помощью следующего синтаксиса:

ansible-vault decrypt credentials.yml

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

Использование нескольких паролей

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

ansible-vault create --vault-id dev@prompt credentials_dev.yml

Это создаст новый идентификатор по имени dev, который использует prompt для получения пароля. Комбинируя этот метод с файлами переменных группы, вы сможете создать отдельные хранилища для каждой среды приложения:

ansible-vault create --vault-id prod@prompt credentials_prod.yml

Мы использовали dev и prod в качестве идентификаторов хранилищ, чтобы продемонстрировать, как вы можете создавать отдельные хранилища для каждой среды. Самостоятельно вы можете создать столько хранилищ, сколько захотите, и использовать любой ID.

Теперь, чтобы просмотреть, отредактировать или расшифровать эти файлы, вам необходимо предоставить тот же ID хранилища и источник пароля вместе с командой ansible-vault:

ansible-vault edit credentials_dev.yml --vault-id dev@prompt

Использование файла паролей

Если вам нужно автоматизировать процесс инициализации серверов в Ansible с помощью стороннего инструмента, вам потребуется способ ввода пароля хранилища без его запроса. Вы можете сделать это, используя файл паролей через ansible-vault.

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

Чтобы применить файл паролей в ansible-vault, необходимо указать путь к файлу паролей при выполнении любой из команд vault:

ansible-vault create --vault-id dev @ path/to/passfile credentials_dev.yml

Ansible не различает контент, который был зашифрован с помощью prompt, и простой файл пароля при условии, что входной пароль один и тот же. С практической точки зрения это означает, что файл можно зашифровать, используя prompt, а затем создать файл пароля для хранения того же пароля, который использовался в методе prompt. Также верно и обратное: вы можете зашифровать содержимое, используя файл паролей, а затем использовать метод prompt, предоставляя тот же пароль при запросе Ansible.

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

Запуск плейбука с зашифрованными данными

Каждый раз, когда вы запускаете плейбук, в котором используются данные, ранее зашифрованные с помощью ansible-vault, вам нужно будет указывать пароль хранилища в команде playbook.

ansible-playbook myplaybook.yml --ask-vault-pass

ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py

Если вы используете данные, зашифрованные с помощью ID, вам нужно указать тот же ID хранилища и источник пароля, который вы использовали при первом шифровании данных:

ansible-playbook myplaybook.yml --vault-id dev @prompt

Если вы используете файл пароля с ID, вы должны указать метку, а затем полный путь к файлу пароля в качестве источника:

ansible-playbook myplaybook.yml --vault-id dev @ vault_password.py

ansible-playbook myplaybook.yml --vault-id dev @ vault_password.py --vault-id test @prompt --vault-id ci@prompt

Устранение неполадок

Если вы сталкиваетесь с ошибками при выполнении команд и плейбуков, рекомендуется увеличить детализацию вывода, чтобы получить больше информации о проблеме. Вы можете сделать это, включив в команду параметр -v:

ansible-playbook myplaybook.yml -v

Если вам нужно больше деталей, вы можете использовать -vvv, и это увеличит детализацию вывода. Если вы не можете подключиться к удаленным нодам через Ansible, используйте -vvvv для получения информации об отладке соединения:

ansible-playbook myplaybook.yml -vvvv

Заключение

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

Существует еще много вариантов команд и флагов, которые могут пригодиться вам в работе с Ansible. Чтобы получить обзор всех доступных опций, вы можете использовать команду help:

Если вы хотите получить более полное представление об Ansible и всех его доступных командах и функциях, обратитесь к официальной документации Ansible.

Is there a way to cleanly uninstall Ansible that does not involve sifting through my directory tree and deleting?

The aim is to reinstall Ansible version 1.9 instead of the latest 2.1.0


2,556 1 1 gold badge 16 16 silver badges 38 38 bronze badges


445 1 1 gold badge 4 4 silver badges 15 15 bronze badges

5 Answers 5

Your best bet is to install checkinstall, run the install again under checkinstalls control, and then use dpkg to remove things.


12.3k 4 4 gold badges 42 42 silver badges 47 47 bronze badges

There is a directory list in the source code repo telling you which directories ( and files ) are created. This is used to build the .deb package, but you can easily use it the other way around:

if you have installed on redhat centos based systems you can do below to uninstall ansible cleanly and similar command for ubuntu debian based systems

rpm -qa | grep ansible | xargs rpm -e

rpm -qa | grep -i epel | xargs rpm -e

else yum remove ansible


As I see you cloned ansible from git. Try to remove ansible folder, but first, go to cloned folder and write

and dependent folders, files for example '/etc/ansible' folder.

12.6k 9 9 gold badges 33 33 silver badges 51 51 bronze badges

I had built ansible 2.1.1 from source then wanted to downgrade to 2.1.0 using yum. The trick i learned was to go to /lib/python2.7/site-packages and deleting the ansible-2.1.1.0-py2.7.egg-info directory. In my case, using yum properly added files to /etc/ansible and /usr/bin, but as long as the old (newer version number) egg was there, then ansible --version continued to show the newer version number.


Обычно удаление пакета с использованием системы управления пакетами YUM приведет к удалению этого пакета вместе со своими зависимостями.

Однако некоторые зависимости не будут удалены в системе, это то, что мы можем назвать «неиспользуемыми зависимостями» или (так называемыми «leaf пакетами» в соответствии с справочной страницей YUM).

В этой инструкции будет рассмотрено два способа удаления пакета вместе со своими зависимостями с помощью диспетчера пакетов YUM в CentOS 7.

2. Решение задачи.

2.1. Использование опции Autoremove YUM.

Этот метод требует, чтобы вы добавили директиву clean_requirements_on_remove в главный файл конфигурации YUM /etc/yum.conf .

Вы можете использовать свой любимый редактор командной строки, чтобы открыть его для редактирования, как показано ниже:

Затем добавьте следующую строку в файл /etc/yum.conf , как показано на следующем рисунке.

Значение один означает, что директива включена, а ноль означает иначе.

Сохраните изменения и выйдите из файла.

Теперь, каждый раз, когда вы удаляете пакеты, YUM просматривает зависимости каждого пакета и удаляет их, если они больше не нужны никаким другим пакетам.

2.2. Использование плагина yum-plugin-remove-with-leaves.

Это расширение удаляет любые неиспользуемые зависимости, которые были добавлены в установочный пакет, но не будет удаляться автоматически.

Он также поможет вам очистить систему от неиспользуемых библиотек и пакетов.

Если вы установили расширение, каждый раз, когда вы хотите удалить пакет, добавьте, например, флаг --remove-leaves .

Если не требуется удалять список пакетов, содержащих исполняемые бинарные файлы используется параметр --leaves-exclude-bin .

Для использования данного плагина по умолчанию, необходимо внести изменения в файл /etc/yum/pluginconf.d/remove-with-leaves.conf .

Привести его содержание к следующему виду:

То есть снять комментирование со строки содержащей опцию remove_always .

Теперь при выполнении команды деинсталляции пакета:

Будет проведена проверка зависимостей, выведен список зависимых пакетов помеченных для удаления и получив подтверждения удалит их.

Без длинных списков проверяемых и удаляемых пакетов, вывод будет иметь примерно следующее содержание:

Для получения дополнительной информации ознакомьтесь с справочной страницей YUM:

Системы управления конфигурациями предназначены для контроля настроек и операций большого количества серверов. Они позволяют централизованно управлять различными системами в автоматическом режиме. Существует множество систем управления конфигурациями, предназначенных для Linux (например, Chef или Puppet), но они довольно сложные. Ansible – простое альтернативное решение, не требующее большого количества ресурсов.

Ansible настраивает клиентские машины с компьютера, на котором установлены все компоненты программы. Ansible извлекает данные с удалённых машин, выполняет команды и копирует файлы по обычным каналам SSH. Потому для корректной работы системы Ansible не требуется дополнительного программного обеспечения на клиентах. Любой сервер с открытым SSH-портом можно добавить в систему Ansible.

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

Конфигурационные файлы в основном записываются в формате YAML. Ansible может взаимодействовать с клиентами через инструменты командной строки или с помощью сценариев (которые также называются Playbooks).

Данное руководство поможет установить Ansible на сервер CentOS 7 и разобраться в базовых настройках.

Требования

  • Сервер CentOS 7 (инструкции по начальной настройке можно найти здесь).
  • Пользователь с доступом к sudo.

1: Установка Ansible

Установите пакет Ansible на машину, которая будет использоваться для централизованного управления.

Используйте для установки репозиторий EPEL. Чтобы добавить EPEL в CentOS 7, введите:

sudo yum install epel-release

Затем установите Ansible:

sudo yum install ansible

2: Настройка хостов Ansible

Ansible отслеживает все серверы, указанные в файле hosts. Чтобы система Ansible могла взаимодействовать с остальными машинами, нужно отредактировать этот файл.

Откройте его в текстовом редакторе:

sudo vi /etc/ansible/hosts

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

Файл hosts довольно гибкий. В данном случае используйте такой синтаксис:

[group_name] alias ansible_ssh_host=your_server_ip

Тег group_name позволяет ссылаться сразу на несколько серверов; alias задаёт имя сервера.

Предположим, в данной настройке есть три сервера, которые нужно добавить в Ansible. Ansible взаимодействует с серверами по SSH. Чтобы получить доступ к этим серверам с сервера Ansible, введите:

При этом система не должна запрашивать паролей. Потому нужно настроить аутентификацию на основе SSH-ключей.

Предположим, серверы называются host1, host2 и host3 и имеют следующие IP-адреса: 192.0.2.1, 192.0.2.2 и 192.0.2.3 соответственно. Группа будет называться servers.

Чтобы настроить управление этими серверами, нужно добавить в файл такие настройки:

[servers] host1 ansible_ssh_host=192.0.2.1
host2 ansible_ssh_host=192.0.2.2
host3 ansible_ssh_host=192.0.2.3

Хосты можно делить на несколько групп, каждая из которых будет использовать разные параметры настроек.

По умолчанию Ansible пытается подключиться к удалённым хостам как текущий пользователь системы. Если такого пользователя на удалённых хостах не существует, Ansible вернёт ошибку:

host1 | UNREACHABLE! => "changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
>

Настройте Ansible для подключения к группе servers с помощью пользователя demo. Создайте в структуре Ansible каталог group_vars:

sudo mkdir /etc/ansible/group_vars

В нем нужно создать YAML-файлы для каждой группы хостов.

sudo nano /etc/ansible/group_vars/servers

Добавьте в файл такой код:

Сохраните и закройте файл. Теперь Ansible будет подключаться к группе servers как пользователь demo.

В файле /etc/ansible/group_vars/all можно указать параметры конфигурации для каждого сервера независимо от группы. Индивидуальные настройки хостов можно поместить в каталог /etc/ansible/host_vars.

3: Простые команды Ansible

Теперь хосты настроены и готовы к работе. Попробуйте запустить первую команду, например, ping

ansible -m ping all

host1 | SUCCESS => "changed": false,
"ping": "pong"
>
host3 | SUCCESS => "changed": false,
"ping": "pong"
>
host2 | SUCCESS => "changed": false,
"ping": "pong"
>

Этот базовый тест позволяет убедиться в том, что Ansible взаимодействует со всеми хостами.

Параметры команды -m ping указывают, что система Ansible должна использовать модуль ping. Эти команды можно запускать на удалённых хостах. Модуль ping в большинстве случаев работает как обычная утилита Linux, но в системе Ansible он проверяет взаимодействие между серверами.

Параметр all значит «все хосты». Вместо него можно задать группу:

ansible -m ping servers

Также можно задать отдельный хост:

ansible -m ping host1

или несколько хостов (разделите их с помощью двоеточий).

ansible -m ping host1:host2

Модуль shell позволяет отправлять команды на удалённый хост и получать вывод. К примеру, чтобы узнать уровень использования памяти на машине host1, нужно ввести. Чтобы задать аргумент, используется флаг –a:

ansible -m shell -a 'free -m' host1
host1 | SUCCESS | rc=0 >>
total used free shared buffers cached
Mem: 3954 227 3726 0 14 93
-/+ buffers/cache: 119 3834
Swap: 0 0 0

Заключение

Теперь сервер Ansible взаимодействует с другими серверами и может управлять ими с помощью команд.

К сожалению, данное руководство не охватывает одной важной функции Ansible – использования сценариев Playbooks. Информацию об этом можно найти в таких статьях:

Читайте также: