Файлы Ansible копируют на удаленный сервер
Обновлено: 21.11.2024
Модуль Ansible copy используется для копирования файла с ansible-машины на удаленный сервер.
С модулем ansible copy мы можем делать разные вещи, давайте посмотрим, что мы можем сделать с модулем ansible copy.
В этой статье мы увидим 5 примеров модулей Ansible Copy и как скопировать файлы с Ansible Master на удаленный сервер.
Скопировать файл на удаленный компьютер с относительным путем
В этом примере файл devops.txt на доступном компьютере будет скопирован в место назначения на удаленном сервере.
Но если такой же файл (с тем же именем) уже существует в целевом расположении на удаленном сервере, он будет заменен файлом с доступной машины.
Он не позаботится о том, существует файл или нет в удаленном месте. Вслепую он скопирует файл с доступной машины на удаленный сервер.
– имя: скопировать файл с локального хоста на удаленный хост (относительный путь, ./files/)
copy:
src: devops.txt
dest: $HOME/ devops.txt
Скопировать файл на удаленный компьютер с абсолютным путем
В этом примере файл test_file на доступном компьютере будет скопирован в место назначения на удаленном сервере.
– имя: скопировать файл с локального хоста на удаленный хост (абсолютный путь)
copy:
src: /path/to/ansible/files/test_file
dest: $ ГЛАВНАЯ/test_file
Скопировать несколько файлов на удаленный сервер
мы можем использовать with_items для копирования дополнительных файлов.
Подключаемый модуль Ansible with_items — это широко используемый подключаемый модуль. Мы будем использовать его всякий раз, когда нам понадобится расположение циклов в нашей пьесе, потому что это стандартный поиск, используемый в основном.
Когда мы передаем список элементов в задачу, задача будет выполняться для всех элементов в этом списке.
– имя: Скопируйте бинарные файлы в /etc/init.d
copy:
src: «>»
dest: /etc/init.d
>владелец: root,
группа: root,
режим: 0755,
with_items:
– консул,
– менеджер ключей,
– хранилище,
– tarball.tar .gz
Копировать несколько файлов в несколько мест назначения
Копировать файлы между местоположениями на удаленном хосте
Ansible copy позволяет нам копировать файлы из одного каталога в другой на том же удаленном компьютере. Но это только для файлов, а не для каталогов. мы можем использовать параметр remote_src, чтобы сообщить Ansible о наших намерениях.
– имя: копировать файл между локациями на удаленном хосте
copy:
src: $HOME/test_file
remote_src: true
dest: $HOME/test_file2
Написание простого шаблонного текстового файла
Будет создан файл test_file с содержимым «Привет, >!» на удаленном сервере.
– имя: записать шаблонное текстовое содержимое в файл на удаленном компьютере
copy:
dest: $HOME/test_file
content: «Привет, >!»
Копировать файлы между локальным и удаленным компьютером с помощью одной доступной команды
Мы также можем использовать командную строку для копирования файлов между локальной и удаленной машиной.
Команда ниже скопирует test.txt в /tmp/test.txt.
- ansible test_node -i inventory -m copy -a «src=test.txt dest=/tmp/test.txt»
В этом примере мы видим, что параметр -a имеет ключи src и dest. Значение src относится к файлу на узле управления Ansible, а значение dest — к пути на удаленном узле
мы можем использовать следующую команду для проверки содержимого файла на удаленном хосте.
В Ansible копирование файлов — это обычная задача, которую большинство пользователей выполняют каждый день. Модуль копирования Ansible — это знакомый способ копирования файлов и каталогов с помощью Ansible, но это определенно не единственный способ. Вы выбираете правильный метод?
В этом руководстве вы узнаете, как копировать файлы в Ansible, используя такие методы, как модуль копирования, модуль шаблона, модуль синхронизации и многое другое!
Оглавление
Предпосылки
Если вы хотите продолжить, убедитесь, что у вас есть следующее:
- Не менее 2 серверов Linux. Любой дистрибутив Linux будет работать, если в нем установлен Python 3. Один сервер будет действовать как узел управления Ansible, а другой — как управляемый узел. Хост Ansible будет использовать замещающий IP-адрес X.X.X.X.
- Python 3 и pip установлены на управляющем узле Ansible. Если вам нужна помощь в установке Python 3 или pip, вы можете прочитать эту статью.
- Возможность подключения по SSH к управляющему узлу Ansible и управляемому узлу. Если вам нужна помощь в том, чтобы войти на сервер Linux, вы можете прочитать несколько статей в Интернете.
- Доступ к Sudo на каждом узле для установки необходимого программного обеспечения. В этом руководстве будет использоваться учетная запись пользователя с именем someuser.
Sudo — это команда Linux, которая позволяет запускать команды от имени привилегированного пользователя. Это «Запуск от имени администратора» для Linux.Прочтите эту статью, чтобы узнать больше о команде sudo.
Настройка узла управления Ansible
Если у вас уже установлен Ansible, вы можете пропустить этот раздел.
Прежде чем вы сможете копировать файлы с помощью Ansible, вы должны настроить узел управления Ansible. Узел управления — это место, откуда запускаются все команды Ansible. При выполнении команды управляющий узел подключается к удаленному компьютеру по протоколу SSH и выполняет команды для настройки управляемого хоста.
Установка пакета Ansible
Для первой задачи по настройке узла управления Ansible необходимо сначала установить сам Ansible. Для этого:
<р>1. Откройте свой любимый SSH-клиент и подключитесь к серверу Linux, который будет вашим управляющим узлом Ansible. <р>2. Создайте виртуальную среду Python с именем ansible.<р>3. После создания виртуальной среды выполните приведенную ниже команду, чтобы инициализировать виртуальную среду. Инициализация виртуальной среды устанавливает переменную PATH в Linux для использования вашей изолированной среды Python. Это позволяет устанавливать пакеты Python в изолированной среде, а не затрагивать всю систему. <р>4. Чтобы убедиться, что пакет pip обновлен, выполните приведенную ниже команду, чтобы обновить pip <р>5. Наконец, запустите команду pip, чтобы установить Ansible 2.10.6. Ansible — это пакет Python, который устанавливается с помощью диспетчера пакетов Python, pip.Виртуальная среда — это изолированная среда для Python. Виртуальные среды позволяют устанавливать определенные версии Ansible без использования инструментов упаковки дистрибутива Linux. Вы можете установить Ansible с помощью команды dnf или apt, но устанавливаемая версия Ansible может не совпадать с версией, указанной в руководстве. Более новые версии Ansible могут не работать с этим руководством в будущем.
В этом руководстве используется Ansible 2.10.6. Использование этой версии Ansible гарантирует, что примеры в этом руководстве будут работать должным образом. Другие версии могут работать, но это не гарантируется.
Создание файла инвентаризации Ansible и тестирование подключений
После того как вы установили Ansible, вам нужно определить список управляемых хостов, на которые будет нацелена Ansible. Эти хосты будут машинами, на которые вы будете копировать файлы. В Ansible управляемые хосты определяются в файле инвентаризации.
Предполагая, что вы все еще подключены к узлу, управляемому Ansible, откройте свой инвентарь в своем любимом редакторе и добавьте строку, показанную ниже.
Как только Ansible узнает о ваших управляемых хостах, запустите модуль ping, чтобы проверить соединение между контроллером Ansible и управляемым узлом.
Успешное подключение Ansible
Модуль копирования
Самый распространенный способ копирования файлов с помощью Ansible — через модуль копирования. Этот модуль Ansible служит одной и только одной цели; копировать файлы как есть на управляемые хосты.
Давайте углубимся и рассмотрим использование модуля копирования для копирования файла на управляемый хост.
На узле управления Ansible:
<р>1. Создайте файл с именем text.txt. Ansible скопирует этот исходный файл на управляемый хост. <р>2. Теперь, используя модуль копирования Ansible, скопируйте файл на управляемый хост с помощью приведенной ниже команды.Вы увидите, что параметр -a имеет ключи src и dest. Значение src указывает на файл на узле управления Ansible, а значение dest указывает на путь, по которому Ansible скопирует файл.
После завершения команды вы увидите следующий вывод. Обратите внимание, что текст выделен желтым цветом, а в верхней строке вывода написано «ИЗМЕНЕНО». Эти выходные данные сообщают, что Ansible изменил состояние управляемого хоста (добавил новый файл с именем test.txt в каталог /tmp).
Внесение изменений на управляемом узле с помощью Ansible
<р>3. Нажмите стрелку вверх и повторите команду. Теперь обратите внимание, что текст вывода окрашен в зеленый цвет, а в верхней строке вывода написано «УСПЕХ». Эти выходные данные указывают на то, что на управляемом узле уже есть файл /tmp/test.txt и управляемый хост находится в нужном состоянии.
Никаких изменений в узле Ansible не требуется
Теперь убедитесь, что Ansible действительно скопировал файл на управляемый хост с модулем оболочки, выполнив команду cat на удаленном хосте.
Если все в порядке, вы должны увидеть результат ниже.
Файл скопирован на управляемый узел
Модуль шаблона
Хотя модуль копирования отлично подходит для копирования существующих файлов, что делать с файлами, значения которых необходимо изменить во время выполнения? В этом случае вы можете использовать модуль шаблона.
Модуль шаблона аналогичен модулю копирования, но позволяет определять переменные внутри текстового файла, преобразовывать его, а затем копировать на управляемые хосты.
- Сначала создайте шаблон Jinja2, представляющий собой текстовый файл, содержащий различные переменные. Для этого выполните приведенные ниже команды.
<р>2. Скопируйте шаблон template.txt.j2 на управляемый хост, выполнив приведенную ниже команду, задав для переменной ata_message значение Hello World Template .В файле шаблона Jinja2 обратите внимание на строку, в которой строка ata_message заключена в фигурные скобки. Эта строка является переменной Jinja2 и позволяет изменять содержимое файла во время выполнения.
Хотя приведенная ниже команда выглядит аналогично предыдущему шагу, вы увидите один дополнительный аргумент ( -e ). Аргумент -e обозначает дополнительные переменные и позволяет определять переменные во время выполнения.
Управляемый хост
<р>3. Наконец, снова запустите модуль оболочки, чтобы прочитать файл с помощью команды cat на управляемом хосте.
Выполнить модуль оболочки
Модуль синхронизации
Подобно описанному выше модулю копирования, модуль синхронизации немного отличается. Вместо простого копирования файла модуль синхронизации использует утилиту rsync.
Утилита rsync — отличный вариант для одновременного копирования большого количества файлов. Он использует меньшую пропускную способность и использует протокол удаленного обновления для ускорения передачи файлов.
Чтобы использовать модуль синхронизации, необходимо установить rsync как на контрольном, так и на управляемом узлах.
Чтобы использовать модуль синхронизации Ansible для копирования тестового файла этого руководства, вызовите модуль синхронизации, как показано ниже.
По умолчанию модуль синхронизации использует режим «push» rsync для передачи файлов, который копирует файлы с управляющего узла на управляемый хост. Вы также можете настроить rsync для использования режима «pull». При использовании режима извлечения управляемый узел извлекает файлы с управляющего узла.
Вывод, который вы видите ниже, сильно отличается от вывода модуля копирования. Поскольку модуль синхронизации использует утилиту rsync, выходные данные будут содержать синтаксис утилиты rsync, используемый для копирования файла.
rsync синтаксис утилиты
Модуль get_url
Возможно, файлы, которые вы хотите скопировать с помощью Ansible на управляемые узлы, не находятся на управляющем узле Ansible. Вместо этого файл размещается где-то на веб-сервере и доступен по URL-адресу. В этом случае используйте модуль get_url. Модуль get_url извлекает файл из URL-адреса и копирует его на управляемые хосты.
Модуль get_url
Модуль git
Если у вас есть файлы, хранящиеся в инструменте управления исходным кодом (SCM), таком как Git, и вам нужен Ansible для копирования файлов из этого репозитория на управляемый хост, используйте модуль Git.
Чтобы использовать модуль git, на управляемом узле должен быть установлен Git.
Чтобы продемонстрировать использование модуля Git для копирования файлов на управляемый узел, вызовите модуль Git, как показано ниже. Эта команда вызывает команду git clone на каждом управляемом узле в файле инвентаризации, клонируя репозиторий Ansible GitHub в каталог /tmp/ansible.
модуль git
Теперь просмотрите содержимое репозитория Git на управляемом хосте. Для этого вызовите модуль оболочки, чтобы выполнить команду ls для чтения всех файлов в каталоге /tmp/ansible.В случае успеха вы должны увидеть содержимое репозитория Ansible в выходных данных.
Заключение
Ansible предоставляет несколько способов копирования файлов на удаленный хост. Эти модули обеспечивают декларативное и простое понимание построения вашего рабочего процесса автоматизации, поэтому вы можете легко поделиться им со своей командой или организацией.
Ненавидите рекламу? Хотите поддержать писателя? Получите многие из наших руководств в виде руководства по ATA.
Ещё от ATA Learning & Partners
Резервное копирование Office 365 для чайников
Лучшее руководство по защите данных Microsoft Office 365. Изучите готовые функции безопасности.
Руководства ATA
ATA известна своими высококачественными письменными учебными пособиями в виде сообщений в блогах. Поддержите ATA с помощью электронных книг ATA Guidebook PDF, доступных в автономном режиме и без рекламы!
Атрибуты, которыми должен обладать файл или каталог. Чтобы получить поддерживаемые флаги, просмотрите справочную страницу для chattr в целевой системе. Эта строка должна содержать атрибуты в том же порядке, в котором отображается lsattr.
Создайте файл резервной копии, включив в него информацию о временной метке, чтобы вы могли вернуть исходный файл, если вы каким-то образом стерли его неправильно.
Контрольная сумма SHA1 передаваемого файла. Используется для проверки успешности копирования файла.
При использовании вместо src устанавливает для содержимого файла непосредственно указанное значение. Для чего-то продвинутого или с форматированием также смотрите модуль шаблона.
Удаленный абсолютный путь, куда следует скопировать файл. Если src — это каталог, это тоже должен быть каталог. Если dest — несуществующий путь и если dest оканчивается на «/» или src — это каталог, dest создано. Если src и dest являются файлами, родительский каталог dest не создается: задача не выполняется, если она еще не существует.< /p>
При выполнении рекурсивного копирования установите режим для каталогов. Если это не установлено, мы будем использовать системные значения по умолчанию. Этот режим устанавливается только для вновь созданных каталогов и не влияет на уже существующие.
по умолчанию установлено значение yes , которое заменит удаленный файл, если его содержимое отличается от исходного. Если нет , файл будет передан только в том случае, если место назначения не существует.
Режим, которым должен быть файл или каталог. Для тех, кто привык к /usr/bin/chmod, помните, что режимы на самом деле представляют собой восьмеричные числа (например, 0644 или 01777 ). Отсутствие начального нуля, вероятно, приведет к неожиданным результатам. Начиная с версии 1.8 режим может быть указан как символьный режим (например, u+rwx или u=rw,g=r,o=r ).
Уровень — часть контекста файла SELinux. Это атрибут MLS/MCS, иногда называемый диапазоном. Функция _default работает так же, как и для seuser.
Пользовательская часть контекста файла SELinux. По умолчанию используется системная политика, если применимо. Если установлено значение _default , будет использоваться пользовательская часть политики, если она доступна.
Локальный путь к файлу для копирования на удаленный сервер; может быть абсолютным или относительным. Если путь является каталогом, он копируется рекурсивно. В этом случае, если путь заканчивается на «/», в место назначения копируется только содержимое этого каталога. В противном случае, если он не заканчивается на «/», копируется сам каталог со всем содержимым. Это поведение похоже на Rsync.
Обычно этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованного чтения из целевых файлов, иногда системы настроены или просто повреждены таким образом, чтобы это предотвратить. Одним из примеров являются файлы, смонтированные в Docker, их нельзя обновить атомарно, и это можно сделать только небезопасным способом.
Эта логическая опция позволяет Ansible вернуться к небезопасным методам обновления файлов в тех случаях, когда у вас нет другого выбора. Имейте в виду, что это зависит от условий гонки и может привести к повреждению данных.
Команда проверки для запуска перед копированием на место. Путь к файлу для проверки передается через «%s», который должен присутствовать, как в примере ниже. Команда передается безопасно, поэтому функции оболочки, такие как расширение и каналы, не будут работать.
Как скопировать файл report.txt на удаленные хосты с помощью копирования модуля Ansible.
Как копировать файлы на удаленные хосты?
Я покажу вам живую демонстрацию с простым кодом Ansible. Меня зовут Лука Бертон, и добро пожаловать на сегодняшний выпуск Ansible Pilot
Файлы Ansible копируют на удаленные хосты
Сегодня мы говорим о копировании модуля Ansible. Полное имя — «ansible.builtin.copy», что означает, что это часть набора модулей, «встроенных» в ansible и поставляемых вместе с ним. Этот модуль довольно стабилен и отсутствует годами. Цель состоит в том, чтобы скопировать файлы в удаленные места. Обратите внимание, что модуль выборки Ansible делает обратное. Для цели Windows используйте модуль Ansible win_copy.
Параметры
- dest путь — удаленный путь
- src string — локальный путь
- резервное копирование логическое значение – нет/да
- validate string — команда проверки
- контрольная сумма строка 2.5+
- режим/владелец/группа
- setype/seuser/selevel
Список параметров довольно широк, но я приведу наиболее полезные.
Единственным обязательным параметром является "dest", который указывает удаленный пункт назначения с абсолютным путем.
«Src» указывает исходный файл на хосте контроллера. Это может быть относительный или абсолютный путь. Абсолютно рекомендую.
Логический параметр резервного копирования позволяет создать резервную копию, если утилита перезапишет какой-либо файл.
Если есть какой-либо инструмент для проверки файла, мы могли бы указать его в параметре проверки, что очень полезно для файлов конфигурации.
Позвольте мне также подчеркнуть, что мы также можем указать разрешения и свойства SELinux.
Давайте воспользуемся реальной игрой и скопируем файлы на удаленные хосты с помощью Ansible.
Подведение итогов
Теперь вы знаете, как копировать файлы на удаленные хосты с помощью Ansible. Подпишитесь на канал YouTube, Medium, Website и Twitter, чтобы не пропустить следующий эпизод Ansible Pilot.
Академия
Изучите технологию автоматизации Ansible на реальных примерах из моего
Читайте также: