acessando uma variável dentro de uma instância declarada anteriormente de um tipo definido

3

Estou tentando definir um servidor de mídia estático que usa um layout de site comum (por exemplo, com diretórios etc/ , log/ , html/ , etc.), além de uma configuração nginx que será incluída no uma configuração nginx em todo o host. A configuração do nginx do site precisa fazer uso da raiz do documento que é definida pelo recurso layouts::website declarado.

Então, o que eu gostaria de fazer é algo assim:

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,
    }
}

Que poderia então ser usado declarando:

class {'sites::static': sites_dir => "/opt/sites"}

No entanto, o acima falha porque a parte $layouts::website[$domain]::doc_root é inválida. Eu tentei várias alternativas aqui, sem sucesso.

Isso é possível? Se não, como você sugere que eu realize o objetivo declarado de usar um layout de base que, então, precisa ser usado por vários bits que preencherão o conteúdo dentro desse layout de base?

    
por Gary 20.04.2012 / 03:41

1 resposta

0

Até onde eu sei, você não pode obter variáveis dentro de recursos definidos.

Eu abordaria isso reordenando as definições de tipo de recurso e colocando a cláusula nginx::siteconfig dentro da definição layouts::website . (Se todo uso de layouts::website também deve ter um nginx::siteconfig , então aninhar um no outro é uma boa maneira de DRY.) Se você precisar ter alguns casos em que o uso de layouts::website também não tem uma definição nginx, você terá que adicionar um parâmetro para layouts::website , algo como $nginx = true .

Além disso, os seguintes bits de código:

layouts::website {$domain:
    name => $domain,
}

nginx::siteconfig {$domain:
    domain => $domain,
}

cheira a repetição desnecessária para mim. O nome do site e o domínio nginx parecem candidatos perfeitos para serem namevars, então você pode deixar o parâmetro na maioria dos casos.

    
por 08.05.2013 / 15:04

Tags