Usando o Puppet para instalar, iniciar e iniciar o banco de dados Postgres

1

Estamos tentando escrever um Puppet para provisionar a máquina virtual. Uma das tarefas é instalar e preencher o banco de dados Postgres com dados.

Podemos decompor essa tarefa em algumas tarefas menores:

  1. instalar
  2. initdb
  3. iniciar
  4. preenche o banco de dados com dados (pg_dump do banco de dados de produção)

Parece que Puppet será responsável pela Etapa 1: instalar.

Devemos usar o Puppet para realizar os passos 2, 3, 4 também?

    
por Mingyu 31.05.2013 / 08:18

2 respostas

2

Um padrão comum ao usar o fantoche é gerenciar a instalação, a configuração e o status do serviço de um pacote. Sua última etapa também pode ser obtida desde que você garanta a idempotência. Um esqueleto (muito) simples para esse tipo de tarefa:


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'
  }
}

Além disso, verifique o Puppet Forge para código já existente que faz o que você quer.

    
por 31.05.2013 / 08:42
2

Os primeiros três passos estão definitivamente dentro do reino de Puppet. A instalação é um recurso package , o initdb pode ser feito com exec se o pacote não for ele mesmo, e iniciar o serviço é um recurso service .

Mas o preenchimento do banco de dados provavelmente não é um bom uso do Puppet. Você provavelmente poderia fazer isso com muito código personalizado (por exemplo, um tipo de recurso separado para uma tabela, uma função, etc.), mas seria muito trabalho e um território um pouco incerto. Eu sugiro que você procure uma maneira diferente de fazer isso.

    
por 31.05.2013 / 15:12