Puppet: Como impor a criação de arquivos na pasta pessoal do root?

1

Estou tentando definir um perfil .vimrc personalizado em todos os servidores no ambiente de produção usando o Puppet.

Eu escrevi o seguinte manifesto:

class vim {
    file { "/etc/skel/.vimrc":
    path    => '/etc/skel/.vimrc',
    ensure  => present,
    mode    => "664",
    source  => "puppet:///modules/vim/.vimrc",
         }
    }

    file { "/root/.vimrc":
    path    => '/root/.vimrc',
    ensure  => present,
    mode    => "664",
    source  => "puppet:///modules/vim/.vimrc",
    }
}

A primeira parte do manifesto funciona como um charme e adiciona um arquivo .vimrc a /etc/skel , mas, por algum motivo, a segunda parte não funciona, mesmo que você possa ver que ela é exatamente a mesma configuração o caminho, o caminho na segunda seção é o diretório inicial do root.

Existe alguma razão pela qual o Puppet ignora esta seção?

É porque tem algumas defesas quando se trata da pasta pessoal do root?

Editar # 1:

[root@sgproxy04 ~]# ls -la /root/
total 2452
dr-xr-x---.  3 root root    4096 2015-02-10 10:53 .
dr-xr-xr-x. 27 root root    4096 2015-01-12 09:31 ..
-rw-------.  1 root root    9423 2013-07-17 14:19 anaconda-ks.cfg
-rw-------   1 root root   14032 2015-02-10 10:55 .bash_history
-rw-r--r--.  1 root root      18 2009-05-20 10:45 .bash_logout
-rw-r--r--   1 root root     196 2014-11-17 12:16 .bash_profile
-rw-r--r--.  1 root root     176 2004-09-23 03:59 .bashrc
-rw-r--r--.  1 root root    9545 2013-07-17 14:21 cobbler.ks
-rw-r--r--.  1 root root     100 2004-09-23 03:59 .cshrc
-rwxr-xr-x.  1 root root     396 2013-07-10 07:33 hosts.sh
-rw-r--r--.  1 root root   17440 2013-07-17 14:19 install.log
-rw-r--r--.  1 root root   12476 2013-07-17 14:19 install.log.syslog
-rw-r--r--.  1 root root 2382545 2013-07-17 14:21 ks-post.log
-rw-r--r--.  1 root root    3572 2013-07-17 14:17 ks-pre.log
drwx------   2 root root    4096 2014-09-15 07:45 .ssh
-rw-r--r--.  1 root root     129 2004-12-03 21:42 .tcshrc
-rw-rw-r--   1 root root       0 2014-12-18 16:14 testfile2.dat
-rw-rw-r--   1 root root       0 2014-12-18 16:14 testfile.dat
-rw-------   1 root root    6757 2015-02-10 10:53 .viminfo
[root@sgproxy04 ~]#

Editar # 2: Ao executar puppet agent -t no cliente, recebo a seguinte saída:

[root@sgproxy04 ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb
Info: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb
Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: syntax error on line 11, col 4: '    ensure  => present,' at /etc/puppet/environments/production/manifests/site.pp:1 on node sgproxy04.sg.company.com
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
[root@sgproxy04 ~]#

Ao verificar o arquivo problemático no servidor Puppet:

[root@foreman fqdns]# cat /etc/puppet/environments/production/manifests/site.pp
hiera_include("classes", [])
Package {  allow_virtual => false, }

node default {
}
[root@foreman fqdns]#

Como você pode ver, há um problema com a linha 11, mas há apenas cinco linhas no arquivo.

    
por Itai Ganot 10.02.2015 / 09:53

2 respostas

1

Como Sven aponta em seu comentário, este é na verdade um erro de sintaxe em seu código - você tem um } extra ao final do seu primeiro recurso file .

Para expandir isso, isso não é realmente considerado uma sintaxe 'inválida' - portanto, por que o Puppet ainda funciona e não reclama. Você está efetivamente terminando a classe com o segundo } , e qualquer coisa depois disso é ignorada pelo Puppet.

Além disso, alguns pontos de estilo:

  • Seu atributo mode precisa ser '0644' [Fonte: Documentos de marionetes ]
  • Você precisa apenas de aspas duplas quando estiver usando uma variável / fato dentro delas (por exemplo, "This is a string quoting ${myvar}." [Fonte: Puppet Lint ]
  • Você pode remover o atributo path totalmente se usar o caminho para o nome do recurso [Origem: Docs de fantoches ]

Tente com este código:

class vim {
    file { '/etc/skel/.vimrc':
        ensure  => file,
        mode    => '0664',
        source  => 'puppet:///modules/vim/.vimrc',
    }

    file { '/root/.vimrc':
        ensure  => file,
        mode    => '0664',
        source  => 'puppet:///modules/vim/.vimrc',
    }
}
    
por 10.02.2015 / 11:42
1

Ok, achei o problema. Eu escrevi erroneamente a classe no arquivo hiera em vez do diretório modules do fantoche. Depois que eu movi o arquivo para a pasta modules/vim/manifests/ e editei o arquivo hiera da seguinte forma:

classes:
 - vim

Começou a funcionar.

Obrigado pela sua ajuda.

    
por 10.02.2015 / 13:04