Назад | Перейти на главную страницу

доступ к переменной в ранее объявленном экземпляре определенного типа

Я пытаюсь определить статический медиа-сервер, который использует общий макет веб-сайта (например, с каталогами 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 кажутся идеальными кандидатами на роль именных переменных, поэтому в большинстве случаев вы можете опустить этот параметр.