У меня возникают проблемы с получением параметризованных классов, работающих в марионетке 2.6.4 (клиент и главный)
######## from /etc/puppet/manifests/nodes.pp
# defining one node to use certain version
#######################################################
node 'dev-internal-000008.domain.com' {
include software($version="dev-2011.02.11")
}
# from /etc/puppet/modules/software/manifests/init.pp class software($version="dev-2011.02.04b") {
File {
links => follow
}
file { "/opt/software_AIR":
ensure => directory
}
file { "/opt/software_AIR/share":
source => "puppet://puppet/software/air/$version",
recurse => "true",
}
}
# ошибки от кукловода
#err: Could not parse for environment production: Syntax error at '='; expected ')' at /etc/puppet/manifests/nodes.pp:10 on node dev-internal-domain.com
# нашел исправление для этого
пытаться
node 'dev-internal-000008.domain.com' {
class { customsoftware:version => "dev-2011.02.04b" }
}
Параметризованные классы не работают с include
, К сожалению. Вы должны использовать новый синтаксис объявления альтернативного класса который был введен одновременно с параметризованными классами:
node 'dev-internal-000008.domain.com' {
# include software($version="dev-2011.02.11") # (doesn't work)
class {'software':
version => "dev-2011.02.11",
} # works
}
Вещи:
file
, service
и т. д.) декларация. include
. Ожидается, что это изменится в 2.7, и, вероятно, будет введен более удобный синтаксис. Вы также можете использовать селектор на основе имени хоста:
class {'software':
version => $::hostname ? {
/hostname1/ => 'dev-2011.02.11',
default => 'dev-2011.02.04b',
},
}