
나는 꼭두각시를 처음 접했습니다. 따라서 나는 이해 가능한 매니페스트를 설정하는 가장 좋은 방법을 찾기 위해 노력하고 있습니다. DRY(반복하지 않음) 원칙에 따라 하나의 템플릿에 공통 지시문을 로드한 다음 환경과 일치하는 파일에서 환경별 지시문을 로드하려고 합니다. 기본적으로 다음과 같습니다.
# nodes.pp
node base_dev {
$service_env = 'dev'
}
node 'service1.ownij.lan' inherits base_dev {
include global_env_specific
}
class global_env_specific {
include shell::bash
}
# modules/shell/bash.pp
class shell::bash inherits shell {
notify{"Service env: ${service_env}": }
file { '/etc/profile.d/custom_test.sh':
content => template('_global/prefix.erb', 'shell/bash/global.erb', 'shell/bash/$service_env.erb'),
mode => 644
}
}
하지만 puppet을 실행할 때마다 파일을 puppet agent --test
찾을 수 없다고 불평 shell/bash/$service_env.erb
하지만 파일이 존재하는지 다시 확인했습니다. 예상 값을 출력하는 알림 문으로 인해 var에 액세스할 수 있다는 것을 알고 있으므로 허용되지 않는 작업을 수행하고 있는 것으로 의심됩니다.
저는 단일 변수를 갖고 template.erb
템플릿에 변수를 전달할 수 있다는 것을 알고 있습니다. 이 경우 custom.sh 파일이 작고 환경 전반에 걸쳐 변경 사항이 많지 않기 때문에 작동할 것입니다. 그러나 더 복잡한 구성(httpd, solr 등)의 경우에는 환경별 파일에 액세스하는 것을 선호합니다. 또한 환경별 모듈 경로를 지정할 수 있다는 것도 알고 있지만 이름이 비슷한 여러 디렉터리를 사용하는 대신 템플릿 수준에서 이 동작을 처리하는 것을 선호합니다.
감사해요.
답변1
작은 따옴표를 사용하고 있습니다. 'shell/bash/$service_env.erb'
이는 다음을 의미합니다.변수가 보간됩니다. 큰따옴표를 사용해야 합니다.