Por que uma variável em um módulo 'require'd nem sempre está disponível?

2

Eu tenho três manifestos de módulo em arquivos separados (limitados ao essencial):

class users {
  $user = 'foo'

  user { $user:
    ensure => present;
  }
}

class dvcs_cli {
  require users

  file { "/home/${::users::user}/.gitconfig":
    ensure => present,
    source => 'puppet:///modules/dvcs_cli/.gitconfig';
  }
}

class shell {
  require users

  file { "/home/${::users::user}/.bash_aliases":
    ensure => present,
    source => 'puppet:///modules/shell/bash_aliases.sh';
  }
}

.gitconfig é criado em /home/foo conforme o esperado, mas .bash_aliases é criado em /home :

$ sudo /usr/bin/puppet apply --modulepath modules --detailed-exitcodes --hiera_config=hieradata/hiera.yaml manifests/host.pp || [ $? -eq 2 ]
[…]
Notice: /Stage[main]/Shell/File[/home//.bash_aliases]/ensure: defined content as '{md5}[…]'
Notice: /Stage[main]/Shell/File[/home/foo/.gitconfig]/ensure: defined content as '{md5}[…]'

É como se ${::users::user} avaliasse a string vazia em um módulo, mas não na outra. Como isso é possível?

A execução com --debug revelou um possível problema: User[foo] é autorequirido para dvcs_cli , mas não para shell :

$ grep 'Adding autorequire relationship with User' puppet.log | grep -i -e dvcs_cli -e shell
Debug: /Stage[main]/Dvcs_cli/File[/home/pair/.gitconfig]: Adding autorequire relationship with User[pair]

Isso contradiz o manual , que diz:

If Puppet is managing the user or group that owns a file, the file resource will autorequire them.

Isso pode estar relacionado aos "Relacionamentos de pesquisa automática são opacos" , causada pelo fato de que ambos os arquivos estão no mesmo diretório? E não deve ser irrelevante de qualquer maneira, já que ambos os módulos explicitamente require users ?

Rodando

$ puppet --version
4.2.1

em

$ cat /etc/redhat-release 
Fedora release 24 (Twenty Four)
    
por l0b0 05.09.2016 / 17:18

0 respostas

Tags