Управление темами и плагинами WordPress с помощью Puppet в Ubuntu 14.04

Puppet – это кроссплатформенная система управления конфигурациями, которая позволяет автоматизировать оркестровку инфраструктуры и другие рутинные задачи.

WordPress – одна из самых популярных систем управления контентом. Новые интересные темы и плагины для WordPress появляются почти каждый день.

Данное руководство поможет создать простой манифест Puppet для автоматического управления (установки, удаления, обновления) темами и плагинами WordPress.

Требования

  • Сервер Ubuntu 14.04.
  • Пользователь с доступом к sudo (руководство по управлению пользователями можно найти здесь).
  • Базовые навыки работы с модулями и манифестами Puppet.
  • WordPress 4.1+
  • Puppet 3.7.1+

1: Создание нового модуля

Модуль будет использовать WP-CLI (интерфейс командной строки WordPress) для выполнения большей части операций.

Создайте модуль для взаимодействия с WP-CLI через Puppet.

Откройте каталог модулей:

cd /etc/puppet/modules

Модуль будет называться wordpress_manager. Создайте для него каталог:

sudo mkdir /etc/puppet/modules/wordpress_manager

Создайте каталог manifests для хранения манифестов.

sudo mkdir /etc/puppet/modules/wordpress_manager/manifests

2: Создание класса для установки WP-CLI

Теперь нужно настроить автоматическую установку WP-CLI.

Примечание: WP-CLI нужно устанавливать автоматически, потому что этот инструмент должен присутствовать на каждом сервере инфраструктуры.

Чтобы создать класс:

  • Установите curl.
  • Установите php5-cli.
  • Загрузите WP-CLI с помощью curl в каталог /usr/bin.
  • Сделайте WP-CLI исполняемым, установив режим 775 или a+x.

С помощью nano создайте файл install.pp.

sudo nano /etc/puppet/modules/wordpress_manager/manifests/install.pp

Добавьте в файл следующий код.

class wordpress_manager::install {
# Install curl
package { 'curl':
ensure => latest
}
# Install php5-cli
package { 'php5-cli':
ensure => latest
}
# Download WP-CLI using curl
exec { 'Install WP CLI':
command => "/usr/bin/curl -o /usr/bin/wp-cli -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar",
require => [ Package['curl'], Package['php5-cli'] ],
creates => "/usr/bin/wp-cli"
}
# Change the mode of WP-CLI to a+x
file { '/usr/bin/wp-cli':
mode => "775",
require => Exec['Install WP CLI'] }
}

Атрибут creates команды exec проверяет наличие WP-CLI и устанавливает интерфейс, только если он не был установлен ранее. Без этого атрибута Puppet будет переустанавливать WP-CLI, если интерфейс был установлен ранее.

3: Настройка взаимодействия с WP-CLI

Для управления темами WP-CLI использует команду theme. В манифесте можно использовать её подкоманды: activate, delete, install и update. WP-CLI управляет плагинами с помощью команды plugin; в манифесте будут использоваться подкоманды activate, deactivate, install, uninstall и update.

В манифест нужно добавить такие параметры:

  • $resource_type – значением этой переменной будет plugin или theme.
  • $action – одна из подкоманд.
  • $resource_name – название плагина или темы.
  • $root_directory – задаёт корневой каталог (все команды wp-cli нужно запускать в каталоге, в котором установлена система WordPress).
  • $user – имя пользователя Unix, которому принадлежат права на WordPress.

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

  • Проверит наличие WP-CLI.
  • Создаст и выполнит команду WP-CLI в зависимости от полученных параметров.

Во избежание ошибок добавьте атрибуты unless и onlyif команды exec. Это позволит установить компонент, только если он не был установлен ранее, и выполнить соответствующие команды (activate/deactivate/delete/uninstall/update) только если компонент установлен.

Создайте файл resource.pp.

sudo nano /etc/puppet/modules/wordpress_manager/manifests/resource.pp

Добавьте в него следующий код.

Примечание: По умолчанию модуль использует /var/www в качестве корневого каталога WordPress, а владельцем файлов WordPress является пользователь root. В случае необходимости откорректируйте код, указав свой корневой каталог и владельца WordPress.

define wordpress_manager::resource (
$resource_name,
$resource_type,
$root_directory = "/var/www/",
$action,
$user = "root",
) {
# Make sure WP_CLI is installed
require wordpress_manager::install
$wp_cli = "/usr/bin/wp-cli --allow-root"
# Install the theme or plugin unless it is already installed.
if $action == "install" {
exec { "Install $resource_name":
command => "$wp_cli $resource_type $action $resource_name",
unless => "$wp_cli $resource_type is-installed $resource_name",
cwd => $root_directory,
user => $user
}
}
# Activate or update the theme or plugin only if it is currently installed.
if $action == "activate" or $action == "update" {
exec { "$action $resource_name":
command => "$wp_cli $resource_type $action $resource_name",
onlyif => "$wp_cli $resource_type is-installed $resource_name",
cwd => $root_directory,
user => $user
}
}
# Uninstall or deactivate a plugin only if it is currently installed.
if $resource_type == "plugin" {
if $action == "uninstall" or $action == "deactivate" {
exec { "$action $resource_name":
command => "$wp_cli plugin $action $resource_name",
onlyif => "$wp_cli plugin is-installed $resource_name",
cwd => $root_directory,
user => $user
}
}
}
# Delete a theme only if it is currently installed.
if $action == "delete" and $resource_type == "theme" {
exec { "$action $resource_name":
command => "$wp_cli theme $action $resource_name",
onlyif => "$wp_cli theme is-installed $resource_name",
cwd => $root_directory,
user => $user
}
}
}

Флаг –allow-root позволяет управлять экземплярами WordPress, которые принадлежат пользователю root. Если пропустить этот флаг, при запуске WP-CLI появится ошибка:

Error: YIKES! It looks like you're running this as root. You probably meant to run this as the user that your WordPress install exists under.

Модуль Puppet готов. Ниже приведены примеры его использования.

Пример 1: Добавление новой темы WordPress

Попробуйте добавить новую тему WordPress с помощью модуля Puppet.

По умолчанию WordPress использует тему twentyfifteen.

Попробуйте установить и применить новую тему, например, expound.

Примечание: Больше тем WordPress можно найти здесь.

Создайте файл manage_expound_theme.pp.

nano /tmp/manage_expound_theme.pp

Добавьте в него такой код:

wordpress_manager::resource { 'install expound':
resource_name => "expound",
resource_type => "theme",
action => "install"
}
wordpress_manager::resource { 'activate expound':
resource_name => "expound",
resource_type => "theme",
action => "activate",
require => WordPress_manager::Resource['install expound'] }

Запустите манифест с помощью команды puppet apply.

sudo puppet apply /tmp/manage_expound_theme.pp

Команда вернёт примерно следующий вывод:

Notice: Compiled catalog for zona-virtualbox in environment production in 0.81 seconds
Notice: /Stage[main]/Main/WordPress_manager::Resource[install expound]/Exec[Install expound]/returns: executed successfully
Notice: /Stage[main]/Main/WordPress_manager::Resource[activate expound]/Exec[activate expound]/returns: executed successfully
Notice: Finished catalog run in 13.72 seconds

Теперь посетите свой сайт в браузере. Он должен использовать новую тему.

Пример 2: Удаление темы WordPress

Прежде чем удалить тему, вы должны включить на сайте новую тему. К примеру, чтобы вернуться к стандартной теме twentyfifteen, нужно снова открыть файл manage_expound_theme.pp:

nano /tmp/manage_expound_theme.pp

Удалите из него весь код и вставьте новый код:

wordpress_manager::resource { 'activate twentyfifteen':
resource_name => "twentyfifteen",
resource_type => "theme",
action => "activate"
}
wordpress_manager::resource { 'delete expound':
resource_name => "expound",
resource_type => "theme",
action => "delete",
require => WordPress_manager::Resource['activate twentyfifteen'] }

Чтобы применить манифест, введите:

sudo puppet apply /tmp/manage_expound_theme.pp

Теперь посетите сайт. Он должен использовать тему twentyfifteen.

Пример 3: Включение плагина

Плагин Akismet установлен по умолчанию, но он не включен. Попробуйте включить его с помощью Puppet.

Создайте манифест manage_akismet.pp:

nano /tmp/manage_akismet.pp

Добавьте в него такой код:

wordpress_manager::resource { 'activate akismet':
resource_name => "akismet",
resource_type => "plugin",
action => "activate"
}

Примените манифест:

sudo puppet apply /tmp/manage_akismet.pp

Убедитесь, что плагин Akismet включен; дял этого запросите список плагинов с помощью команды plugin list.

Примечание: По умолчанию в качестве корневого каталога WordPress используется /var/www; при необходимости отредактируйте флаг –path.

wp-cli --allow-root --path=/var/www/ plugin list

Команда вернёт:

+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| akismet | active   | none   | 3.0.4   |
| hello   | inactive | none   | 1.6     |
+---------+----------+--------+---------+

Пример 4: Удаление плагина

WordPress не позволяет удалять включенные плагины. Чтобы удалить плагин, нужно сначала отключить его.

Для примера попробуйте удалить akismet.

Откройте manage_akismet.pp.

nano /tmp/manage_akismet.pp

Замените содержимое файла таким кодом:

wordpress_manager::resource { 'deactivate akismet':
resource_name => "akismet",
resource_type => "plugin",
action => "deactivate"
}
wordpress_manager::resource { 'uninstall akismet':
resource_name => "akismet",
resource_type => "plugin",
action => "uninstall",
require => WordPress_manager::Resource['deactivate akismet'] }

Перезапустите манифест:

sudo puppet apply /tmp/manage_akismet.pp

Теперь снова проверьте список плагинов:

wp-cli --allow-root --path=/var/www/ plugin list

Плагина Akismet не будет в списке:

+---------+----------+--------+---------+
| name    | status   | update | version |
+---------+----------+--------+---------+
| hello   | inactive | none   | 1.6     |
+---------+----------+--------+---------+

Заключение

Теперь вы умеете управлять темами и плагинами WordPress с помощью простого модуля Puppet. Этот модуль можно использовать в качестве шаблона для разработки похожих модулей.

Например, вы можете использовать Puppet для выполнения одной операции на нескольких хостах. Для этого используется режим «агент-мастер». Добавьет wordpress_manager::resource в конфигурации нод. Чтобы обновить Akismet на хостах host1 и host2, добавьте в файл site.pp на мастере Puppet:

node 'host1', 'host2' {
wordpress_manager::resource { 'update akismet':
resource_name => "akismet",
resource_type => "plugin",
action => "update"
}
}

Tags: , ,

Добавить комментарий