Добавление дополнительных репозиториев

Добавление дополнительных репозиториев пакетов (yum или apt) — задача, которую многие администраторы будут делать в первую очередь.

В приведенном ниже сценарии shell мы хотим добавить репозитории EPEL и Remi, чтобы получить пакеты, такие как Node.js или более поздние версии другого программного обеспечения (предполагается, что вы используете RHEL/CentOS 7.x):

# Import Remi GPG key - see: http://rpms.famillecollet.com/RPM-GPG-KEY-remi
wget http://rpms.famillecollet.com/RPM-GPG-KEY-remi -O /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi

# Install Remi repo.
rpm -Uvh --quiet http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

# Install EPEL repo.
yum install epel-release

# Install Node.js (npm plus all its dependencies).
yum --enablerepo=epel install node

Этот shell сценарий использует команду rpm для импорта GPG ключей EPEL и Remi, а затем добавляет репозитории и, наконец, устанавливает Node.js. Было бы неправильно запускать уже выполненные сценарии.

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

Наш playbook будет немного длиннее shell сценария, но он более структурированный и, к тому же работает с перемеными и дополнительными функциями:

- name: Import Remi GPG key.
  rpm_key: "key={{ item }} state=present"
  with_items:
    - "http://rpms.famillecollet.com/RPM-GPG-KEY-remi"

- name: Install Remi repo.
  command: "rpm -Uvh --force {{ item.href }} creates={{ item.creates }}"
  with_items:
    - href: "http://rpms.famillecollet.com/enterprise/remi-release-6.rpm"
      creates: "/etc/yum.repos.d/remi.repo"

- name: Install EPEL repo.
  yum: name=epel-release state=present

- name: Ensure firewalld is stopped (since this is a test server).
  service: name=firewalld state=stopped

- name: Install Node.js and npm.
  yum: name=npm state=present enablerepo=epel

- name: Install Forever (to run our Node.js app).
  npm: name=forever global=yes state=latest

Давайте разберем этот playbook:

  • rpm_key — это модуль Ansible, который принимает и импортирует RPM key из URL-адреса или файла, или key id. Мы импортируем один ключ, для репозитория Remi.
  • Поскольку у ансибле нет встроенного модуля rpm, мы используем команду rpm с помощью модуля command, что позволяет нам делать две вещи:
    • Использовать параметр creates, чтобы создать файл. В случае, если такой файл уже есть, опреация не будет выпонена.
    • Использоватьмногомерный массив элементов (with_items) для определения URL-адресов и результирующих файлов, проверяемых с помощью creates.
  • yum устанавливает репозиторий EPEL.
  • Поскольку сервер используется только для тестирования, мы отключаем firewall, чтобы он не препятствовал тестированию (с помощью модуля service).
  • yum устанавливает Node.js (вместе со всеми необходимыми пакетами для npm), если он отсутствует, то осущетвится поиск в репозитории EPEL с помощью параметра enablerepo (можно также явно отключить репозиторий с помощью disablerepo).
  • Поскольку NPM теперь установлен, мы используем Ansible модуль npm для установки Node.js, forever чтобы запустить наше приложение и сохранить его. Параметр global=yes указывает NPM на установку модуля forever в /usr/lib/node_modules/, поэтому он будет доступен всем пользователям и приложениям Node.js.

results matching ""

    No results matching ""