Dependência de recurso de fantoches

1

Olá a todos,

Quando faço uma marionete, recebo o erro:

Warning: Scope(Mod::Cl[title]): Can't load '/tmp/file.yaml' File does not exist!
Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Operator '[]' is not applicable to an Undef Value.

Eu especifico que loadyaml é uma função do módulo stdlib

No entanto, quero executar o recurso de arquivo antes de definir recurso

Alguém pode me ajudar?

class mod::princ (

    file { '/tmp/file.yaml':
        ensure  => file,
        owner   => 'root',
        group   => 'root',
        mode    => '0644',
        source  => "puppet:///modules/othermod/file.yaml",
        before => Mod::Cl["title"],
    }->
    Mod::Cl{ "title" :
        tmp_file => "/tmp/file.yaml",
    }

}

define mod::cl (
    String $tmp_file,
){

    $tmp = loadyaml("$tmp_file")

    $tmp[var].each |Integer $i, Hash[String,String] $var|
    {
      $mark=$var['Mark']
    }

}
    
por souf 21.05.2017 / 06:21

1 resposta

0

Como Dominic mencionou em seu comentário, a função loadyaml é executada em tempo de compilação.

Se você estiver executando o Puppet por meio de um Puppet Master / Server e puppet agent , isso acontece no servidor, antes que o manifesto seja enviado ao cliente, não no próprio cliente.

Além disso, a função loadyaml é executada em compilação , não em execução - então o arquivo precisa existir antes da execução do Puppet acontece.

Eu pergunto por que você está adotando essa abordagem com o seu código Puppet - você não explica realmente para que serve o código ou qual é o estado final pretendido.

Você pode obter os mesmos resultados usando o Hiera.

hieradata / common.yaml

---
mod::princ::data:
  entry:
    foo: bar
  yrtne:
    oof: rab

modules / mod / manifestos / princ.pp

class mod::princ (
  Hash $data
) {

  $data.each |Integer $i, Hash $elem, $var | {
    $mark=$var['Mark']
  }

}
    
por 23.05.2017 / 11:19