CentOS 6.6 — Puppet Dashboard Install

В одной из предыдущих статей я описал процесс установки и настройки Puppet Server (он же Puppetmaster). Сейчас же хочу написать небольшую заметку по установке и настройке Puppet Dashboard — это весьма приятное дополнение к Puppet. Представляет из себя WEB-консоль для мониторинга применения манифестов и визуализации конфигурации вцелом.
Устанавливать буду на том же сервере где настраивал Puppetmaster. Поехали?

Репозитарий Puppet Labs у меня уже добавлен, тем кто настраивает на отдельном сервере — его нужно добавить. Повторюсь на всяк случай:

puppet:~$ sudo rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

Это не единственный необходимый репозиторий, забегая наперед скажу что нам нужен еще и mysql-server. Я предпочитаю mariadb вариант, но в официальных репах CentOS 6.6 он слегка «протухший», поэтому я добавил еще один репозитарий — для MariaDB. Если вас не напрягает протухлость mysql из оф реп CentOS — пропустите данный шаг. Итак, сначала создаем файлик /etc/yum.repos.d/mariadb-55.repo:

puppet:~$ sudo touch /etc/yum.repos.d/mariadb-55.repo

Открываем данный файл любым текстовым редактором (vi, vim, nano, mcedit …) и добавляем вот что:

# MariaDB 5.5 CentOS repository list - created 2015-03-30 10:48 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Теперь установим все необходимые пакеты:

puppet:~$ sudo yum install MariaDB-server puppet-dashboard

Все пакеты установлены, начинаем настройку. Начнем с mariadb.
Копируем заготовку конфига mysql:

puppet:~$ sudo cp /usr/share/mysql/my-medium.cnf /etc/my.cnf.d/server.cnf

Тюнинг mysql под разные задачи — это отдельная тема. В данном случае нам нужно только добавить вот такую опцию в конфиг /etc/my.cnf.d/server.cnf:

max_allowed_packet      = 32M

Добавляем в автозагрузку и стартуем сервис:

puppet:~$ sudo systemctl enable mariadb
puppet:~$ sudo systemctl start mariadb

Задаем пароль учетки root в mysql:

puppet:~$ sudo mysqladmin -u root password '_my_root_mysql_pass_here_'

Заходим в mysql и готовим базу:

puppet:~$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.41-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE dashboard CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER 'dashboard'@'localhost' IDENTIFIED BY 'dash_pass_here';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON dashboard.* TO 'puppet_dashboard'@'localhost';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye
puppet:~$

На этом MySQL можно считать подготовленным. Мы имеем базу, пользователя и пароль для базы.
Настройка подключения дашборда к этой базе:

puppet:~$ cd /usr/share/puppet-dashboard

Тут нас интересует файлик config/database.yml Это конфиг подключения Puppet Dashboard к MySQL DB. Заполняем согласно только что созданной БД ( проще говоря прописываем название, имя пользователя, пароль для подключения к базе mysql)
Меня интересует только секция produclion. Разработкой я заниматься не собираюсь, в любом случае добавить в будущем данные базы не составит труда.
Итак, что у меня получилось с данным конфигом:

production:
  database: dashboard
  username: dashboard
  password: dash_pass_here
  encoding: utf8
  adapter: mysql

Что дальше? Пробуем проинитить базу:

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate

Ха! Поймал ошибку! У меня mysql datadir не стандартный, поэтому вот (если у вас все стандартно — то команда отработает на ура, пропустите следующий шаг):

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate --trace
(in /usr/share/puppet-dashboard)
config.gem: Unpacked gem daemons-1.0.10 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem json_pure-1.7.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem factory_girl-1.3.3 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rdoc-3.6.1 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem haml-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-rails-1.3.4 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem will_paginate-2.3.15 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem mocha-0.9.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rack-1.1.6 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem thoughtbot-shoulda-2.10.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-1.3.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem sass-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:620:in `real_connect'
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:620:in `connect'
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:203:in `initialize'
...

Пробуем прописать в конфиг … вот что:

production:
  database: dashboard
  username: dashboard
  password: dash_pass_here
  encoding: utf8
  adapter: mysql
  socket: /var/lib/mysql/data/mysql.sock

И еще раз init базы:

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate
(in /usr/share/puppet-dashboard)
.......
Preparing to delete from resource_events
2015-03-31 10:29:13: Deleting 0 orphaned records from resource_events
Deleting       100% |#########################################################################################################################| Time: 00:00:00

-- execute("ALTER TABLE reports ADD CONSTRAINT fk_reports_node_id FOREIGN KEY (node_id) REFERENCES nodes(id) ON DELETE CASCADE;")
   -> 0.0033s
-- execute("ALTER TABLE resource_events ADD CONSTRAINT fk_resource_events_resource_status_id FOREIGN KEY (resource_status_id) REFERENCES resource_statuses(id) ON DELETE CASCADE;")
   -> 0.0029s
-- execute("ALTER TABLE resource_statuses ADD CONSTRAINT fk_resource_statuses_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0031s
-- execute("ALTER TABLE report_logs ADD CONSTRAINT fk_report_logs_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0029s
-- execute("ALTER TABLE metrics ADD CONSTRAINT fk_metrics_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0027s
==  AddReportForeignKeyConstraints: migrated (0.0304s) ========================

==  RemoveUrlFromNodes: migrating =============================================
-- remove_column(:nodes, :url)
   -> 0.0028s
==  RemoveUrlFromNodes: migrated (0.0030s) ====================================

** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
puppet:/usr/share/puppet-dashboard$

Отработала командочка отлично!
Пробуем запустить сервис puppet-dashboard:

puppet:/usr/share/puppet-dashboard$ sudo service puppet-dashboard start
Starting Puppet Dashboard: config.gem: Unpacked gem daemons-1.0.10 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem json_pure-1.7.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem factory_girl-1.3.3 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rdoc-3.6.1 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem haml-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-rails-1.3.4 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem will_paginate-2.3.15 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem mocha-0.9.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rack-1.1.6 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem thoughtbot-shoulda-2.10.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-1.3.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem sass-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
=> Booting WEBrick
=> Rails 2.3.17 application starting on http://0.0.0.0:3000            [  OK  ]
puppet:/usr/share/puppet-dashboard$

Поидее запустилась, слушается ли порт 3000?

puppet:/usr/share/puppet-dashboard$ sudo netstat -lnp |grep 3000
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN      12269/ruby          
puppet:/usr/share/puppet-dashboard$

Слушается! Если есть firewall — добавляем правило для порта TCP/3000:

# Puppet Dashboard
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT

если нет просто пробуем браузером зайти на puppet-server порт 3000, в моем случае URL выглядит так: http://puppet.intranet:3000/
Должны увидеть вот что:

Puppet Dashboard - First Start

Как видим никакой статистики тут пока нет, все по нулям. Для того чтобы связать puppetserver и puppet agents/dashboard нужно подправить их конфиги.
1. На puppetmaster в конфиге /etc/puppet/puppet.conf, точнее в секции [master] указать:

[master]
    reports = store, http
    reporturl = http://puppet.intranet:3000/reports/upload

и перегрузить puppetmaster:

puppet:~$ sudo service puppetmaster restart

2. Еще перегрузим сервисы dashboard и puppet-dashboard-workers:

puppet:~$ sudo service puppet-dashboard-workers start
puppet:~$ sudo service puppet-dashboard restart

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

puppet:~$ sudo chkconfig puppet-dashboard on
puppet:~$ sudo chkconfig puppet-dashboard-workers on

Теперь дополнительный параметр для puppet agent.
1. В конфиге /etc/puppet/puppet.conf, точнее в секции [agent] каждого puppet agent-a указываем:

[agent]
    report = true

2. перегружаем puppet agent:

agent01:~$ sudo service puppet restart
Stopping puppet agent:                                     [  OK  ]
Starting puppet agent:                                     [  OK  ]
agent01:~$

Ну вот, сервисы подстроили …
Пробуем зайти еще раз по URL http://puppet.intranet:3000/ Поидее увидим уже и кой какую статистику с добавленными нодами:

Puppet Dashboard - Working

Фух … радуемся 🙂

Хай щастить!

  1. Комментов пока нет

  1. Трэкбэков пока нет.

Why ask?