Я пытаюсь определить статический медиа-сервер, который использует общий макет веб-сайта (например, с каталогами etc/
, log/
, html/
и т. д.), а также конфигурацию nginx, которая будет включена в конфигурацию nginx для всего хоста. Конфигурация nginx сайта должна использовать корень документа, который определяется объявленным layouts::website
ресурс.
Итак, я хотел бы сделать что-то вроде этого:
class sites::static ($sites_dir) {
$domain = "static.example.com"
layouts::website {$domain:
base_dir => $sites_dir,
name => $domain,
}
nginx::siteconfig {$domain:
domain => $domain,
doc_root => $layouts::website[$domain]::doc_root,
}
}
Что затем можно использовать, объявив:
class {'sites::static': sites_dir => "/opt/sites"}
Однако это не удается, потому что $layouts::website[$domain]::doc_root
часть недействительна. Я пробовал здесь разные альтернативы, но безуспешно.
Это возможно? Если нет, как вы посоветуете мне достичь заявленной цели использования базового макета, который затем должен использоваться различными битами, которые будут заполнять контент в этом базовом макете?
Насколько я знаю, вы не можете получить доступ к переменным внутри определенных ресурсов.
Я бы подошел к этому, переупорядочив определения типов ресурсов и поместив nginx::siteconfig
пункт внутри layouts::website
определение. (Если при каждом использовании layouts::website
также должен иметь nginx::siteconfig
тоже, то вложение одного в другой - хороший способ СУХОЙ.) Если вам нужно иметь некоторые случаи, когда использование layouts::website
также не имеет определения nginx, вам нужно будет добавить параметр в layouts::website
, что-то вроде $nginx = true
.
Также следующие фрагменты кода:
layouts::website {$domain:
name => $domain,
}
nginx::siteconfig {$domain:
domain => $domain,
}
для меня пахнет ненужным повторением. Имя веб-сайта и домен nginx кажутся идеальными кандидатами на роль именных переменных, поэтому в большинстве случаев вы можете опустить этот параметр.