Назад | Перейти на главную страницу

Использование Puppet для установки, initdb и запуска базы данных Postgres

Мы пытаемся написать марионетку для подготовки виртуальной машины. Одна из задач - установить и заполнить базу данных Postgres данными.

Мы можем разделить эту задачу на несколько более мелких задач:

  1. установить
  2. initdb
  3. Начало
  4. заполнить базу данных данными (pg_dump из производственной базы данных)

Кажется, Puppet будет отвечать за шаг 1: установка.

Должны ли мы использовать Puppet для выполнения шагов 2, 3, 4?

Первые три шага определенно относятся к сфере Puppet. Установка - это package ресурс, initdb может быть выполнен с exec если пакет не делает этого сам, и запуск службы service ресурс.

Но заполнение базы данных, вероятно, не лучший вариант использования Puppet. Вероятно, вы могли бы сделать это с большим количеством пользовательского кода (например, с отдельным типом ресурса для таблицы, функции и т. Д.), Но это потребовало бы много работы и несколько неизведанной территории. Я предлагаю вам поискать другой способ сделать это.

Распространенным шаблоном при использовании марионетки является управление установкой, настройкой и статусом обслуживания пакета. Ваш последний шаг также может быть достигнут, если вы обеспечите идемпотентность. (Очень) простой скелет для такого рода задач:


class foo (
  $some_param_in_hiera,
  ){

  package {
    'foo_pkg':
      ensure => installed,
  }

  service {
    'foo_svc':
      ensure    => running,
      enable    => true,
      hasstatus => true,
      require   => Package['foo_pkg'];
  }

  file {
    '/etc/foo/some.conf':
      mode    => '0644',
      owner   => root,
      group   => root,
      source  => 'puppet:///modules/foo/some.conf',
      #content => template('foo/some.conf.erb'),
      require => Package['foo_pkg'],
      notify  => Service['foo_svc'];
  }

  exec {
    'some_task':
      command     => 'echo 'foo bar baz'',
      refreshonly => true,
      creates     => '/some/file/to/ensure/idempotency'
  }
}

Также проверьте Марионеточная кузница для уже существующего кода, который делает то, что вы хотите.