크레이그 던 (Craig Dunn)과 URL https://docs.puppet.com/pe/2016.4/r_n_p_full_example.html에서 설명한 역할/프로필 패턴을 https://docs.puppet.com/guides/module_guides/bgtm.html에 지정된 규칙으로 빌드 한 모듈에 적용하고 싶습니다.Puppet Roles/Profiles 및 init.pp 클래스 전용 매개 변수
이러한 규칙에 따라 모든 구성 요소 모듈 (예 : Apache, OpenLDAP)은 매개 변수화 된 init.pp 클래스 만 유지합니다. 그런데, 난 보통 역할을 사용
#
# Component classes.
#
class apache ($logfile = '.log', $backend = $::apache::params::backend) inherits ::apache::params {
#
# This is the unique parametrized class.
#
}
class apache::log inherits ::apache {
#
# This class inherits the params.
#
}
은/등 - 포함 또는 컴포넌트 클래스 리소스 사용 형 선언 (프로필 :: 아파치 프로필 :: OpenLDAP를 추천) 클래스 프로필.
상위 프로필 클래스 (예 : profile :: apache)에서 리소스와 비슷한 선언을 사용하고 상속 된 프로필 (예 : profile :: apache :: openssh 또는 profile :: apache :: openldap)을 사용하여 새 기능, 부모 구성 요소를 재정의해야하지만 Puppet v4를 사용하면 상위 프로필 (클래스 [:: apache] {backend => 'ldap'})에 선언 된 구성 요소 클래스를 재정의하거나 리소스 수집기 (클래스 < | name == ':: apache'|> {백엔드 => 'ldap'}).
#
# Profile classes.
#
class profile::apache {
class { ::apache:
logfile => '.my_log',
}
}
class profile::apache::openldap inherits profile::apache {
include ::openldap
# Doesn't work with Puppet 4.
Class[::apache] {
backend => 'ldap'
}
#
# OR...
#
# Also, doesn't work with Puppet 4.
Class <| name=='::apache'|> {
backend => 'ldap'
}
}
는 과거에 나는 매개 변수화 구성 요소 클래스를 사용하고 자식 프로필 클래스에 나는 직접적인 방법의 구성 요소 클래스를 호출하지 않고 구성 요소 클래스의 init.pp의 PARAMS를 오버라이드 (override) 할 수있다.
이 내 오래된 approch입니다 :
class apache::backend ($backend) inherits ::apache {
#
# Do stuff.
#
}
class profile::apache::openldap inherits profile::apache {
include ::openldap
class { ::apache::backend:
backend => 'ldap'
}
}
class profile::apache::mysql inherits profile::apache {
include ::mysql
class { ::apache::backend:
backend => 'mysql'
}
}
그래서, 코딩의 나의 새로운 스타일로, 내가 사용하는 경우 내가 역할/프로필 패턴을 적용 할 수있는 방법 구성 요소 클래스는 매개 변수화 만 init.pp?
질문이 업데이트되었습니다. 하지만 External 데이터 조회 만 사용할 수 있습니까? 다른 방법은 없습니까? 이런 식으로 어떻게하면 profile :: apache :: openldap 또는 profile :: apache :: mysql을 정의 할 수 있습니까?이 클래스가 최종 사용자의 포함에 따라 component :: apache 클래스의 param 'backend'를 편집 할 수 있어야합니다. ? – BnG
@ BnG이 답변 외에도 프로필과 모듈의 디자인 패턴이 혼란스럽고 복잡합니다. LAMP 프로파일을 만들고 싶다면 내부에 필요한 클래스가있는 LAMP 프로파일을 만드십시오. 자신이해야 할 것보다 어렵게 만들지 마십시오. –
@BnG, 내가 편집 한 내용으로 인해 내가 이미 대답 한 것과 다른 결과를 가져 오는 것은 아무것도 없습니다. –