나는독신적인꼭두각시를 이용한 백업 시스템. Dirvish에는 백업 데이터와 백업 대상 및 방법에 대한 구성이 포함된 독립형 디렉터리인 볼트라는 개념이 있습니다. 이러한 볼트는 파일 시스템의 어느 곳에나 있을 수 있으므로 마스터 dirvish 구성 파일에 명시적으로 나열해야 합니다.
제가 Puppet을 사용하여 이 작업을 수행한 방식은 먼저 저장소를 리소스로 생성한 다음 저장소 이름 배열을 마스터 Dirvish 리소스에 전달하여 저장소에 대한 정보를 복제합니다.
# Dirvish vaults, alphabetically sorted
dirvish::vault { 'server-a-full':
client => 'server-a',
tree => '/',
backup_root => $dirvish_backup_root
}
dirvish::vault { 'server-b-example.com':
client => 'server-b',
tree => '/srv/www/vhosts/example.com/backup',
rsync_option => '--copy-unsafe-links',
backup_root => $dirvish_backup_root
}
# TODO - we duplicate the vault definitions here, but I don't
# see a better way right now
class {'dirvish':
backup_root => $dirvish_backup_root,
vaults => ['server-a-full', 'server-b-example.com']
}
수업 dirvish::vault
은 대략 이런 느낌이에요
define dirvish::vault($tree, $client, $exclude = [], $rsync_option = '', $backup_root) {
file {"$backup_root/$name/dirvish/default.conf":
ensure => present,
content => template("dirvish/vault.conf.erb"),
require => File["$backup_root/$name/dirvish"]
}
}
클래스 는 템플릿의 변수를 dirvish
사용합니다.vaults
Runall:
<% vaults.each do |vault| -%>
<%= vault %>
<% end -%>
이 중복을 어떻게 제거할 수 있나요?
답변1
구성 데이터를 Hiera로 이동하면 템플릿은 실제 클래스를 선언하는 모든 클래스와 동일한 데이터를 사용할 수 있습니다 dirvish::vault
.
예를 들어 다음과 같이 사용하기에 적합한 구조를 만듭니다.create_resources:
dirvish_vault_defaults:
backup_root: "<backup-root-value>"
dirvish_vaults:
'server-a-full':
client: 'server-a',
tree: '/',
'server-b-example.com':
client: 'server-b',
tree: '/srv/www/vhosts/example.com/backup',
rsync_option: '--copy-unsafe-links',
그리고 매니페스트에서:
create_resources('dirvish::vault', hiera('dirvish_vaults'), hiera('dirvish_vault_defaults'))
템플릿은 동일한 해시를 로드하고 해당 키 등을 반복할 수 있습니다.
답변2
최선의 선택은 다음과 같은 concat 모듈을 사용하는 것입니다.이것또는 dirvish가 지원하는 경우 일부 분할 구성(각 볼트는 자체 구성 파일을 생성한 다음 기본 구성에 포함됩니다). 카탈로그를 통해 엿볼 수 있습니다.우주선 운영자하지만 이렇게 하면 리소스 간의 순서를 설정하거나 클래스 내부 저장소의 속성을 설정할 수만 있습니다. 와 같은 일을 하는 것은 불가능합니다 $vaults = Dirvish::Vault <| |>
.
최후의 수단으로 Ruby로 무언가를 해킹할 수도 있습니다. 유형 인스턴스는 실행 초기에 카탈로그에 전달된 것으로 보입니다 autorequire
. 그 시점에서 참조를 저장하여 나중에 불쾌한 일을 할 수 있습니다.