Я хотел бы знать, можно ли найти значение другого ресурса Puppet, как в следующем примере:
define foo( $username ) {
$home = User[$username].home
....
}
Приведенный выше синтаксис не работает, но, вероятно, потому, что я недостаточно хорошо знаю Ruby.
Насколько я знаю, это невозможно. Первоначально Puppet использовал динамическую область видимости для переменных, но с версии 2.7.0 он устарел. Смотрите дополнительную информацию Вот о том, что вам следует делать вместо этого.
Однако в данном конкретном случае я не думаю, что простая оценка будет достаточно. На самом деле, я думаю, вам следует использовать либо виртуальные ресурсы или экспортированные ресурсы. На самом деле они оба очень похожи, за исключением того, что экспортируемые ресурсы работают между хостами.
В любом случае, мне кажется, вам просто нужно структурировать свой код совсем не так, как вы хотите. Потратьте некоторое время на изучение сложных модулей марионеток и поймите, как они делают то, что делают.
У Puppet есть свой язык, он не использует Ruby. Вы можете определить ресурс, как показано ниже:
define add_user ( $uid ) {
$username = $title
user { $username:
home => "/home/$username",
shell => "/bin/bash",
uid => $uid
}
}
и назовите его:
add_user { tom:
uid => 501
}
Читать далее...