2015-07-09 3 views
1

Есть ли способ использовать переменную, определенную в каком-либо манифестах с помощью hiera?Puppet - Как использовать переменные, определенные в манифесте с помощью hiera

Это, как я попробовал:

manifest.pp

if $::ipaddress_bond0 { 
    $primary_interface = 'bond0' 
    notify{"$primary_interface":} 
} 
else { 
    $primary_interface = 'eth0' 
    notify{"$primary_interface":} 
} 

hiera.yaml

some_config: 
    server: 
    foo: 
     bar: "%{::primary_interface}" 

ответ

3

Да это possible. Посмотрите на пример:

test.pp

class nodes::test 
{ 
    $value1 = 'abc' 
    $value2 = hiera('test::value2') 
    $value3 = hiera('test::value3') 

    notify{ " v1 ${value1}": } 
    notify{ " v2 ${value2}": } 
    notify{ " v3 ${value3}": } 
} 

include nodes::test 

test.yaml

test::value2: "%{value1}" 
test::value3: "%{value4}" 

испытательный пробег:

puppet apply test.pp 

Примечание: v1 а

Примечание: v2 а

Примечание: v3

Имейте в виде, что использование марионеточных переменных в hiera является really bad practice.

+0

Thx для быстрого ответа и указания на то, что это кажется плохим решением. Причина, по которой я пытаюсь это сделать, - обеспечить, чтобы я всегда получал ipadress из 'eth0' или' bond0' и не должен «надеяться», что значение в '$ :: ipaddress' верное. У вас есть опыт, если '$ :: ipaddress' является безопасным решением для получения IP-адреса' eth0' или 'bond0' вместо случайного ip-адреса, например. 'eth1' иногда? Я не могу использовать '$ :: ipaddress_eth0' или' $ :: ipaddress_bond0', так как это слишком статично для моего случая. – mat1010

+0

В соответствии с описанием: https://docs.puppetlabs.com/facter/2.4/core_facts.html#ipaddress _ "В Unixes выполняется ifconfig и возвращает первый подсети, не содержащий 127.0.0.0/8, который он находит." _ – kkamilpl

+0

Это то, что я также читал, но дело в том, что это может произойти - из-за, например, странные правила udev, что 'eth1' приходит перед' eth0', поскольку, кажется, факзер просто запускает 'Facter :: Util :: IP.exec_ifconfig ([" 2>/dev/null "]' и берет первый не 127.x адрес 'если совпадают, а не /^127\ ./.match(match[1]) ip = совпадение [1] break end' Поскольку в документации рекомендуется лучше использовать пользовательские факты, я создал факт с вышеуказанной логикой, которую я сначала попытался использовать в манифесте. Thx снова для указания меня в правильном направлении. – mat1010

Смежные вопросы