Olá. Aqui é a Komiya. Preciso explicar dados_bags internamente, então vou escrever aqui também.
O que segue é como usar os dados_bags\ hoje em dia.
- Carregar informações do usuário do sistema operacional para uso do sistema que não são gerenciadas pelo LDAP e adicioná-las como receita 2. Armazenar certificados SSL, carregá-los a partir de receitas e defini-los em templates 3. Carregar informações do servidor NTP e defini-las em templates 4. Gerenciar informações de credenciais AWS e incorporá-las em vários scripts 5. Gerenciar informações de contas, como senhas, como MySQL e LDAP 6. Gerenciar informações como nginx e apache vhosts e upstreams que não se encaixam em funções e ambientes 7. Gerenciar informações na cabeça do Ganglia_node e no cluster_name
0. Explicação preliminar
*Como pré-requisito, no caso do chef-solo, você precisa de uma gema chamada "knife-solo_data_bag", para poder colocá-la. (Se não for uma lista de gemas, por favor, coloque no sistema de instalação ou bundler de gemas.)
Como armazenar e verificar
Se você não quiser criptografá-lo, edite em qualquer editor, como vi, OK chef-repository/data_bags/nome arbitrário de diretório/arbitrary filename.json O conteúdo deve seguir as regras do json, então CHK a sintaxe com json_verify.
cat data_bags/dirname/filename.json |json_verify e veja JSON é válido
Ao criptografar, primeiro você precisa definir a variável de ambiente do EDITOR para ~/.bashrc, e criar e definir uma chave para criptografia. (*A chave é uma imagem diferente para cada projeto, e precisa ser escrita em .gitignore.) Vazamento é estritamente proibido, e se você removê-lo, os dados não serão visíveis. )
exportar EDITOR=vi
vi .chef/knife.rb
------ sem comentários---------------------
encrypted_data_bag_secret "data_bag_key"
-----------------------------------------
*Se você descomentar, mesmo que não especifique a chave, ela sempre será criptografada se você criar com o comando knife, então você precisa criar o arquivo de dados que quer lidar sem criptografia no vi ou comentar antes de criá-lo.
Se precisar de uma chave, crie (*O caminho relativo de .chef/knife.rb significa diretamente abaixo do repositório chef)
openssl rand -base64 512 > data_bag_key
knife solo data bag criar nome do nome do nome do arquivo # Create (*os existentes serão sobrescritos por sobreposição)
knife solo data bag editar nome do dirname nome do arquivo # Editar arquivos no editor
Knife Solo Data Bag mostrar nome do nome do arquivo # JSON conteúdo
Knife Solo Data Bag List # lista de diretórios
・Coisas para ter cuidado→ Você não deve usar bash ou executar recursos o máximo possível. Por favor, use recursos modelo. Quando usado com bash, caracteres especiais colocados nas variáveis a partir de dados_bags\ são expandidos e valores não intencionais são incluídos.
1. Carregar informações do usuário do sistema operacional para aplicações de sistema que não são gerenciadas pelo LDAP e adicioná-las como receitas
Isso não é um grande problema, então me desculpe pelo ponteiro Escrevendo uma receita para um procedimento existente no Chef 2 (criado pelo usuário) | DEVLAB Um padrão que não é criptografado. (Senha criptografada antecipadamente) Usuários individuais gerenciam LDAP, e o chef lida com a distribuição de arquivos de configuração do cliente LDAP, etc.
2. Carregar do armazenamento e receita do certificado SSL e definir no template
Estou fazendo isso com Apache e NGINX, mas vou descrever o caso do NGINX.
Sobre como armazenar certificados SSL, cole o código de nova linha convertido em uma string da seguinte forma. Como é um certificado e uma chave, é claro que ele é criptografado e carregado.
cat cert.pem|perl -pe 's/n/n/g'
knife solo data bag create ssl jenkins
knife solo data bag editar ssl jenkins
Knife Solo Data Bag Show SSL Jenkins
{
"id": "jenkins",
"CRT": "-----INICIAR CERTIFICADO-----nMIIDd~omitido~",
"chave": "~omitido~",
"chave de acesso": "~omitido~",
"senha": "Hogehoge"
}
Como carregar no lado da receita (alguns trechos)
# site de gatos-livros/nginx/receitas/nginx_ssl_client.rb
---
# Eu coloco o nome do data_type (≒role) e o nome do ambiente nas variáveis para que ele seja o nome do arquivo de dados
#role = ("#{node.roles}"[/[w_-]+/])
ambiente = ("#{node.ambiente}"[/w+/])
data_type = nó['nginx']['data_type']
sslclientconf_type = nó['nginx']['sslclientconf_type']
Datafile = "#{data_type}_#{Ambiente}"
# Defina o nome da chave, etc., como uma variável (que é carregada a partir de atributos como função)
sslkeyfile = nó['nginx']['sslkey1']
sslcrtfile = nó['nginx']['sslcrt1']
FileClientCRTF = Nó['nginx']['ClientCRT']
clientcrlfile = nó['nginx']['clientcrl']
sslkeydir = '/etc/nginx'
# Carregando data_bags dados criptografados e definindo-os como uma variável
ssl = Chef::EncryptedDataBagItem.load("ssl", "#{datafile}")
SSLCrtData = SSL["CRT"]
sslkeydata = ssl["key"]
ClientCRTdata = SSL["ClientCRT"]
#clientcrldata = ssl["clientcrl"]
# Esta é uma receita que se ramifica com data_type um se.
se "#{data_type}" == ""
#~Omitido~
senão
# Você pode manter a idempotência usando recursos de modelo
template "#{sslkeydir}/#{sslcrtfile}" do
notifica: reiniciar, 'serviço[nginx]'
fonte: "sslcrtfile.erb"
variables({
:sslcrtdata => sslcrtdata
})
fim
template "#{sslkeydir}/#{sslkeyfile}" do
notifica: reiniciar, 'serviço[nginx]'
fonte: "sslkeyfile.erb"
variables({
:sslkeydata => sslkeydata
})
fim
template "#{sslkeydir}/#{clientcrtfile}" do
notifica: reiniciar, 'serviço[nginx]'
fonte: "clientcrtfile.erb"
variables({
:clientcrtdata => clientcrtdata
})
fim
---
O que acontece com o arquivo template é
# cat site-cookbooks/nginx/templates/default/sslcrtfile.erb
<%= @sslcrtdata %>
# cat-site-cookbooks/nginx/templates/default/sslkeyfile.erb
<%= @sslkeydata %>
# cat site-cookbooks/nginx/templates/default/clientcrtfile.erb
<%= @clientcrtdata %>
Você pode carregar a partir de data_bags onde variáveis é @ e definir o valor na variável.
3. Carregar informações no servidor NTP e defini-las no template
5. Gerencie informações da conta, como senhas, como mysql e ldap
Desculpe por apontar isso também. Registro da personalização de receitas solo por chef | DEVLAB Para sua referência.
4. Gerenciar credenciais AWS e incorporá-las em vários scripts
Claro, criptografe-a. No caso dos certificados SSL, o método de carregamento e o método de embedding não são muito diferentes, então vou omitir.
Crie, edite e verifique da seguinte forma.
# Knife Solo Data Bag Criar AWSKEYS Deploy
# Knife Solo Data Bag Editar AWSKEYS Deploy
# Knife Solo Data Bag Show AWSKEYS Deploy
{
"id": "implantar",
"aws_access_key_id": "Axxxxxxxxxxxxxxxxxx",
"aws_secret_access_key": "oxxxxxxxxxxxxxxxxxx",
"Região": "US-XXXX-2"
}
Por exemplo, o método de carregamento é o seguinte. (Eu passo variáveis para o script sem instalá-lo)
cookbook_file "/usr/local/sbin/renamehost" faz
fonte "renamehost"
dono 'root'
grupo 'raiz'
Modo 0750
fim
Ohai "reload" faz
plugin "Nome do Host"
fim
# Obtenha a conta AWS correspondente no seu ambiente
env_rank = data_bag_item("master_data", "env_rank")
rank_awsaccount = data_bag_item("master_data", "rank_awsaccount")
Ambiente = node.chef_environment
Posto = env_rank[Ambiente]
awsaccount = rank_awsaccount[rank]
# Obtenha as credenciais correspondentes para sua conta
awscredential = Chef::EncryptedDataBagItem.load("awskeys", "deploy_#{awsaccount}")
aws_access_key_id = awscredential["aws_access_key_id"]
aws_secret_access_key = awscredential["aws_secret_access_key"]
aws_region = awscredential["região"]
role = ("#{node.roles}"[/[\w_-]+/])
bash "exec-renamehost" fazer
not_if { node[:hostname] =~ /^#{role}/ }
notifica :reload, "ohai[reload]", :imediatamente
notifica :reiniciar, "service[rsyslog]", :imediatamente
Código <-EOC
/usr/local/sbin/renamehost `echo #{aws_access_key_id} #{aws_secret_access_key} #{aws_region}`
EOC
end
include_recipe "base_setting::hosts"
6. Gerenciar informações como vhost e upstream em nginx e apache que não se encaixam em funções e ambientes
A receita é a seguinte
ngxdata = data_bag_item('nginx',"#{datafile}")
Nome do servidor = ngxdata['nomedo do servidor1']
upstream = ngxdata['upstream1']
upstreamport = ngxdata['upstreamport']
template "/etc/nginx/conf.d/ssl.conf" fazer
Fonte "#{role}/SSL.conf.erb"
caminho '/etc/nginx/conf.d/ssl.conf'
Backup 5
dono 'root'
grupo 'raiz'
modo '0644'
Ação :Criar
notifica: reiniciar, 'serviço[nginx]'
variables({
:nomedo do servidor1 =>nome do servidor,
:upstream1 => upstream,
:upstreamport => upstreamport
})
fim
O arquivo json não é particularmente criptografado (é difícil de ver no git)
# gato data_bags/nginx/nginx-hoge_test1.json
----
{
"id": "nginx-hoge_test1",
"nomedo do servidor1": "exsample.hoge.net",
"upstream1": "internal-ELB-int-hoge-test1-xxxxxxx.us-xxxx-2.elb.amazonaws.com",
"Upport Upstream": "80"
}
----
**Existem muitos papéis e ambientes, e se você não consegue se encaixar em um ou outro, não tem escolha a não ser colocar isso nos dados_bags.
7. Gerencie Informações da Cabeça dos Gânglios_node e do Cluster_name
Isso não é muito diferente do 6, então vou omitir
Referência:
Toda a história do uso de databags (1) - Yohei no Nichiri Seishin [[chef] Como usar data bag | Infraestrutura de TI notebook diverso] (http://tech.blog.piyo.org/2012/06/19/chef-data-bag%E6%B4%BB%E7%94%A8%E6%B3%95/) Registro do uso de Databags para criptografar dados JSON que você não quer publicar no Chef - Adeus Internet Para sua referência. Obrigado por ler. **