Adicionando um repositório yum ao fantoche antes de fazer qualquer outra coisa

25

Existe uma maneira de forçar o boneco a fazer certas coisas primeiro? Por exemplo, eu preciso instalar um RPM em todos os servidores para adicionar um repositório yum (Comunidade IUS) antes de instalar qualquer um dos pacotes.

    
por Jon Haddad 11.02.2010 / 01:49

7 respostas

35

Se você quiser ter certeza de que um repositório está instalado em todo o seu servidor, então eu sugiro algo como isto

node default {
   include base
}

class base {
   yumrepo { "IUS":
      baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
      descr => "IUS Community repository",
      enabled => 1,
      gpgcheck => 0
   }
}

Então, para qualquer nó que estenda base , você pode dizer

class foo {
   package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}

Isso garantirá que

  • O pacote bar não será instalado, a menos que o repositório IUS esteja definido
  • O pacote não tentará instalar antes de o repositório do IUS ser definido
por 21.02.2010 / 05:52
17

Embora os estágios possam lidar com isso e também com dependências específicas do repositório do yum, melhor é declarar o relacionamento genericamente.

Coloque apenas Yumrepo <| |> -> Package <| provider != 'rpm' |> no seu manifesto de fantoches.

node default {
  Yumrepo <| |> -> Package <| provider != 'rpm' |>
}

Isso faz com que todos os tipos de yumrepo sejam processados antes de qualquer pacote que não tenha 'rpm' como seu provedor. Essa última exclusão é para que eu possa usar o pacote RPM (por exemplo) epel-release para ajudar a instalar o repositório yum.

    
por 31.12.2012 / 02:01
8

(Eu encontrei essa pergunta depois que eu respondi quase o mesmo .. então pensei que a minha resposta se aplica aqui também e vale a pena repetir (é mais seguro ter uma resposta em dois lugares ..)

Tanto quanto eu entendo, isso é exatamente o que estágios são para - eles permitem agrupar e ordenar execuções de classe. Eu uso "estágios" para atualizar e configurar o APT em servidores Debian, o que deve ser muito parecido com o que você fará com o YUM.

Primeiro de tudo, você declara o estágio "yum" no nível superior (acima de "nós"), de modo que as classes no estágio "yum" serão executadas antes das "principais":

stage { 'yum' : before => Stage['main'] }

Em seguida, você atribui o estágio às classes. Você pode fazer isso direito na definição do seu nó:

node default {
  class { 'yumrepos' : stage => yum }

  include packages
}
    
por 06.06.2011 / 14:53
5

Você pode usar Tags . Isso permitiria marcar o instalador do repositório com firstrun ou algo assim,

execute

 puppetd --tags firstrun

e só executaria os módulos / instruções correspondentes à tag.

    
por 11.02.2010 / 09:51
3

A principal coisa que você precisa usar é a exigir palavra-chave - "Avaliar uma ou mais classes, adicionando a classe necessária como uma dependência. "

Um exemplo usando um repositório apt pode ser:

class installcustompackages {
   # make sure we have the repository file and public key
   file { "/etc/apt/sources.list.d/myrepo.list":
      source => "puppet://puppet/files/etc/apt/sources.list.d/myrepo.list",
      ensure => present;
          "/etc/apt/trusted.gpg":
      source => "puppet://puppet/files/etc/apt/trusted.gpg",
   }

   # do an update whenever the list or trusted key file change
   exec { "/usr/bin/apt-get update":
      alias => "aptgetupdate",
      require => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
      subscribe => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ],
      refreshonly => true;
   }

   package { "mypackage":
      ensure => latest,
      require => Exec["aptgetupdate"];
             "mypackage2":
      ensure => latest,
      require => Exec["aptgetupdate"];
   }

   service { "myservice":
      enable => false,
      require => Package[mypackage];
   }
}

(Adaptado de este exemplo de bootstrapping de fantoches ).

Então você pode ver como cada estágio requer que o anterior seja feito primeiro. Deixarei você para descobrir como aplicar isso no yum, já que não estou familiarizado com o local onde ele armazena seus arquivos.

    
por 21.02.2010 / 00:22
0

O Puppet lê a configuração de cima para baixo, então se você incluir uma classe com o yum repo primeiro nessa classe, esse repositório será adicionado antes de qualquer outra coisa.

Se você usar as configurações necessárias em um pacote, você garantirá que o tipo de recurso necessário esteja presente antes de adicionar o pacote, como tal:

node 'yournode.domain.com' {
   package { "bar": ensure => installed, require => Yumrepo["IUS"] }
   yumrepo { "IUS":
      baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture",
      descr => "IUS Community repository",
      enabled => 1,
      gpgcheck => 0
   }
}

Este código acima adicionará o repo antes de adicionar o pacote.

    
por 27.02.2010 / 13:00
0

Algo assim funcionou para mim:

yumrepo { A:
  descr    => "A repo",
  baseurl  => '',
  enabled  => 1,
  gpgcheck => 1,
  gpgkey   => "",
  priority => 3
}

yumrepo { B:
  descr    => "B repo",
  baseurl  => '',
  enabled  => 1,
  gpgcheck => 1,
  gpgkey   => "",
  priority => 3
}

yumrepo { C:
  descr    => "C repo",
  baseurl  => '',
  enabled  => 1,
  gpgcheck => 1,
  gpgkey   => "",
  priority => 3;
}

Package {
  require => [Yumrepo[A], Yumrepo[B], Yumrepo[C]]
}

Eu incluí algo assim em mysite.pp. Desta forma, os seus módulos de fantoches estão livres de referências aos yum repos.

    
por 10.02.2015 / 00:56