O MongoDB oferece suporte ao uso de diretivas de expansão em arquivos de configuração para carregar valores de origem externa. As diretivas de expansão podem carregar valores para opções específicas do arquivo de configuração ou carregar o arquivo de configuração inteiro. As diretivas de expansão ajudam a ocultar informações confidenciais, como certificados de segurança e senhas.
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: __exec: "python /home/user/getIPAddresses.py" type: "string" trim: "whitespace" digest: 85fed8997aac3f558e779625f2e51b4d142dff11184308dc6aca06cff26ee9ad digest_key: 68656c6c30303030307365637265746d796f6c64667269656e64 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __rest: "https://myrestserver.example.net/api/config/myCertKeyFilePassword" type: "string" digest: b08519162ba332985ac18204851949611ef73835ec99067b85723e10113f5c26 digest_key: 6d795365637265744b65795374756666
Para usar diretivas de expansão, você deve especificar a opção de linha de comando --configExpand com a lista completa de diretivas de expansão usadas:
mongod --config "/path/to/config/mongod.conf" --configExpand "rest,exec"
Se você omitir a --configExpand opção ou se não especificar a lista completa de diretivas de expansão usadas no arquivo de configuração, retornará um erro e mongod --configExpand encerrará. Você só pode especificar a opção na linha de comando.
Use a diretiva de expansão __rest
A diretiva de expansão __rest carrega valores do arquivo de configuração de um ponto de extremidade REST. __rest suporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração.
O arquivo de configuração a seguir usa a diretiva de expansão __rest para carregar o valor de configuração net.tls.certificateKeyFilePassword de um endpoint REST externo:
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: 192.51.100.24,127.0.0.1 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __rest: "https://myrestserver.example.net/api/config/myCertKeyFilePassword" type: "string"
- Permissão de arquivo
Se o arquivo de configuração incluir a expansão
__rest, no Linux ou macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas.- Análise de expansão
Para analisar os
__restblocos, inicie omongodcom a--configExpand "rest"opção.O emite uma
mongodGETsolicitação em relação à URL especificada. Se for bem-sucedido,mongodsubstitui o valor decertificateKeyFilePasswordpelo valor retornado. Se a URL não conseguir resolver ou se o ponto deRESTextremidade retornar um valor inválido, lançará um erro emongodencerrará.
O seguinte arquivo de configuração utiliza a diretiva de expansão __rest para carregar o arquivo de configuração de um endpoint REST externo. A diretiva de expansão e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__rest: "https://myrestserver.example.net/api/config/fullConfig" type: "yaml"
- Permissão de arquivo
Se o arquivo de configuração incluir a expansão
__rest, no Linux ou macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas.- Análise de expansão
Para analisar os
__restblocos, inicie omongodcom a--configExpand "rest"opção.O emite uma
mongodGETsolicitação em relação à URL especificada. Se for bem-sucedido, analisa o arquivo de configuraçãomongodretornadoyamle o usa durante a inicialização. Se o URL não conseguir resolver ou retornar umyamlarquivo formatado corretamente, o lançará um erro emongodencerrará.
Importante
O valor retornado pelo REST endpoint especificado não pode incluir nenhuma diretiva de expansão adicional. O mongod não executa processamento adicional nos dados retornados e será encerrado com um código de erro se os dados retornados incluírem diretivas de expansão adicionais.
Use a diretiva de expansão __exec
A diretiva de expansão __exec carrega os valores do arquivo de configuração a partir de um comando shell ou terminal. __exec suporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração.
O exemplo de arquivo de configuração a seguir usa a diretiva de expansão __exec para carregar o valor de configuração net.tls.certificateKeyFilePassword a partir da saída de um comando de shell ou terminal:
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: bindIp: 192.51.100.24,127.0.0.1 tls: mode: requireTLS certificateKeyFile: "/etc/tls/mongod.pem" certificateKeyFilePassword: __exec: "python /home/myUserName/getPEMPassword.py" type: "string"
- Permissão de arquivo
Se o arquivo de configuração incluir a expansão
__exec, no Linux ou macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas.- Análise de expansão
Para analisar os
__execblocos, inicie omongodcom a--configExpand "exec"opção.O
mongodtenta executar a operação especificada. Se o comando for executado com sucesso, omongodsubstitui o valor decertificateKeyFilePasswordpelo valor retornado. Se o comando falhar ou retornar um valor inválido para a configuração do arquivo de configuração, omongodlançará um erro e encerrará.
O arquivo de configuração de exemplo a seguir usa a diretiva de expansão __exec para carregar o arquivo de configuração a partir da saída de um comando de shell ou terminal. A diretiva de expansão __exec e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__exec: "python /home/myUserName/getFullConfig.py" type: "yaml"
- Permissão de arquivo
Se o arquivo de configuração incluir a expansão
__exec, no Linux ou macOS, o acesso de gravação ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processomongodoumongosapenas.- Análise de expansão
Para analisar os
__execblocos, inicie omongodcom a--configExpand "rest"opção.Se o comando for executado com êxito, o analisará o arquivo de configuração
mongodretornadoyamle o utilizará durante a inicialização. Se o comando falhar ou retornar umyamlarquivo inválido, omongodlançará um erro e encerrará.
Importante
Os dados retornados executando a __exec string especificada não podem incluir nenhuma diretiva de expansão adicional. O mongod não executa processamento adicional nos dados retornados e será encerrado com um código de erro se os dados retornados incluírem diretivas de expansão adicionais.
Referência de diretivas de expansão
__restA
__restdiretiva de expansão carrega valores de arquivo de configuração de umRESTendpoint .__restsuporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração. O então começa a usar os valores de origem externa como parte de suamongodconfiguração.A diretiva de expansão
__resttem a seguinte sintaxe:Passo a passo de como especificar um endpoint
RESTpara uma configuração específica ou para configurações específicas no arquivo de configuração:<some configuration file setting>: __rest: "<string>" type: "string" trim: "none|whitespace" digest: "<string>" digest_key: "<string>" Para especificar um ponto de extremidade
RESTpara todo o arquivo de configuração:__rest: "<string>" type: "yaml" trim: "none|whitespace" Se especificar todo o arquivo de configuração por meio do endpoint
REST, a diretiva de expansão e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__restusa os seguintes campos:CampoTipoDescriçãostring
Obrigatório A URL para a qual o emite
mongodumaGETsolicitação de para recuperar o valor de origem externa.Para endpoints
RESTnão localhosts (por exemplo, um endpointRESThospedado em um servidor),__restrequer URLs criptografadas (https://) em que a máquina host e o servidor suportem TLS 1.1 ou posterior.Se o ponto de extremidade
RESTespecificado na URL exigir autenticação, codifique as credenciais na URL com o padrão no formato RFC 3986 Informações do usuário .Para endpoints
RESTde host local (por exemplo, um endpointRESTouvindo na máquina host),__restpossibilita URLs não criptografados (http://).IMPORTANTE: o valor retornado pelo
RESTendpoint especificado não pode incluir nenhuma diretiva de expansão adicional. Omongodnão executa processamento adicional nos dados retornados e será encerrado com um código de erro se os dados retornados incluírem diretivas de expansão adicionais.typestring
Opcional Controla como
__restanalisa o valor retornado a partir da URL especificada.Os valores possíveis são:
trimstring
Opcional Especifique
whitespacepara instruir__resta cortar qualquer espaço em branco à esquerda ou à direita, especificamente as ocorrências de" ","\r","\n","\t","\v"e"\f". O padrão énoneou nenhum corte.string
Opcional. O resumo SHA-256 do resultado da expansão.
Se especificado, você também deve especificar o digest_key.
string
Observação
Para habilitar a análise da
__restdiretiva de expansão, inicie omongodcom a--configExpand "rest"opção.
Para obter exemplos, consulte Usar a diretiva de expansão
__rest.
__execA
__execdiretiva de expansão carrega valores de arquivo de configuração da saída de um comando de shell ou terminal.__execsuporta o carregamento de valores específicos no arquivo de configuração ou o carregamento de todo o arquivo de configuração. O então começa a usar os valores de origem externa como parte de suamongodconfiguração.A diretiva de expansão
__exectem a seguinte sintaxe:Para especificar um comando de terminal ou shell para uma configuração ou configurações específicas do arquivo de configuração:
<some configuration file setting>: __exec: "<string>" type: "string" trim: "none|whitespace" Para especificar um comando shell ou terminal para todo o arquivo de configuração:
__exec: "<string>" type: "yaml" trim: "none|whitespace" Se especificar todo o arquivo de configuração por meio de um comando de terminal ou shell, a diretiva de expansão e suas opções devem ser os únicos valores especificados no arquivo de configuração.
__execusa os seguintes campos:CampoTipoDescrição__execstring
Obrigatório A string que o executa no terminal ou shell para recuperar o valor de origem
mongodexterna.Em hosts Linux e OSX, a execução é tratada via POSIX
popen(). Em hosts Windows, a execução é feita por meio da API de controle de processo.__execabre um pipeline somente leitura como o mesmo usuário que iniciou omongodoumongos.IMPORTANTE: os dados retornados pela execução do comando especificado não podem incluir nenhuma diretiva de expansão adicional. O
mongodnão executa processamento adicional nos dados retornados e será encerrado com um código de erro se os dados retornados incluírem diretivas de expansão adicionais.typestring
Opcional Controla como
__execanalisa o valor retornado pelo comando executado.Os valores possíveis são:
trimstring
Opcional Especifique
whitespacepara instruir__execa cortar qualquer espaço em branco à esquerda ou à direita, especificamente as ocorrências de" ","\r","\n","\t","\v"e"\f". O padrão énoneou nenhum corte.string
Opcional. O resumo SHA-256 do resultado da expansão.
Se especificado, você também deve especificar o digest_key.
string
Observação
Para habilitar a análise das
__execdiretivas de expansão do, inicie omongodcom a--configExpand "exec"opção.
Para obter exemplos, consulte Usar a diretiva de expansão
__exec.
Enviar o arquivo de configuração com valores de diretiva de expansão resolvidos
Você pode testar a saída final de um arquivo de configuração que especifica uma ou mais diretivas de expansão iniciando o mongod com a --outputConfig opção. Um mongod iniciado com envia o documento de configuração YAML resolvido --outputConfig para stdout e interrompe. Se qualquer diretiva de expansão especificada no arquivo de configuração retornar diretivas de expansão adicionais, o lançará um erro e mongod encerrará.
Aviso
A opção --outputConfig retorna os valores resolvidos para qualquer campo usando uma diretiva de expansão. Isso inclui qualquer informação privada ou confidencial anteriormente ocultada pelo uso de uma fonte externa para a opção de configuração.
Por exemplo, o seguinte arquivo de configuração mongod.conf contém uma diretiva de expansão __rest:
storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: __rest: "https://mongoconf.example.net:8080/record/1" type: string
A string registrada na URL especificada é 20128
Se o arquivo de configuração incluir a expansão __rest, no Linux ou macOS, o acesso de leitura ao arquivo de configuração deverá ser limitado ao usuário que estiver executando o processo mongod ou mongos apenas.
Inicie o mongod com as opções --configExpand "rest" e --outputConfig:
mongod -f mongod.conf --configExpand rest --outputConfig
O mongod gera o seguinte para stdout antes de terminar:
config: mongod.conf storage: dbPath: "/var/lib/mongo" systemLog: destination: file path: "/var/log/mongodb/mongod.log" net: port: 20128 outputConfig: true