詳細検索

Escrevendo uma receita para um procedimento existente no Chef 2 (criado pelo usuário)

Avatar
por komi
5 min de leitura

Escrevendo uma receita para um procedimento existente no Chef 2 (criado pelo usuário)
Traduzido do 日本語 • Ver original

Olá. Aqui é a Komiya da plataforma.

Continuando do artigo anterior, peço desculpas pelo artigo do Chef.

Dados_bags\ para preparar o gerenciamento de usuários.

Por enquanto, já escrevi aqui antes, mas acho que seria melhor se as informações relevantes fossem reunidas, então vou repostá-las parcialmente.

data_bags é algo que pode ser gerenciado, como busca de dados com funções semelhantes a LDAP.
Se você usar chef-server, pode se comunicar com o servidor para recuperar dados e refleti-los.
Como este é o Chef-solo, vamos preparar os dados em um arquivo local e refleti-los.

Referência:
Se você tem um grande número de usuários e frequentemente adiciona e troca de contas, seria uma boa ideia usar dados_bags para gerenciar a habilitação e desativação, conforme mostrado no link abaixo.
Como usar chef-data-bag

[shell]# CD ; CD chef-repo/data_bags # usuários de mkdir; usuários de cd # vi xxx-op.json // xxx-op.json { "id" : "xxx-op", "groups": [ "xxx-op", "wheel" ], "uid": 1000, "nome de usuário" : "xxx-op", "home" : "/home/xxx-op", "shell" : "/bin/bash", "senha" : "$1$Ka.Mw69U$TT5HRfSe7xxxxx" }

# vi yyy-op.json // yyy-op.json { "id" : "yyy-op", "groups": [ "yyy-op","wheel" ], "uid": 500, "username" : "yyy-op", "home" : "/home/yyy-op", "shell" : "/bin/bash", "password" : "$1$Ka.Mw69U$TT5HRfSe78Pxxxxx" }

# vi dev.json // dev.json { "id" : "dev", "groups": [ "dev","wheel" ], "uid": 501, "username" : "dev", "home" : "\/home\/dev", "shell" : "\/bin\/bash", "password" : "$1$S/q25RbR$o7pCoAjBWxxxxx" }[/shell]

Crie uma senha com o seguinte comando
[shell]# OPENSSL passwd -1[/shell]

[shell]# knife solo data bag show users[/shell] Certifique-se de que os dados estejam exibidos

  • Criptografar a definição de usuário no MySQL

*Definir senhas em texto simples em arquivos JSON para nós e funções não é seguro, e não é inteligente registrá-las para cada nó.
 Então vamos usar databags que podem ser criptografados usando chaves
 Parece que a criptografia não pode ser usada apenas com knife-solo, mas se você _bag instalar o gem deck-solo_data\, poderá usá-la.

[shell]# openssl rand -base64 512 | tr -d '\r\n' > /etc/chef/encrypted_data_bag_secret # chmod 400 encrypted_data_bag_secret # cd /root/chef-repo # knife solo data bag criar mysqlusers root --secret-file ./encrypted_data_bag_secret o editor vai abrir, digitar o seguinte { "id": "root", "user": "root", "pass": "xxxxxxx", "host": "localhost", "privileges": "all" }

# knife solo data bag criar mysqlusers repl --arquivo secreto ./encrypted_data_bag_secret O editor abrirá, inserirá o seguinte { "id": "repl", "user": "repl", "pass":"xxxxxxx", "host":"172.20.28.%", "privileges": ["\\:replication slave", "\\:replication client"] }

# knife solo data bag criar mysqlusers xxx_admin --secret-file ./encrypted_data_bag_secret O editor abrirá e inserirá o seguinte { "id": "xxx_admin", "user": "xxx_admin", "pass": "xxxxxxx", "host": "172.20.28.%" "privileges": "all" }

# knife solo data bag criar mysqlusers zabbix --secret-file ./encrypted_data_bag_secret O editor abrirá, inserirá o seguinte { "id": "zabbix", "user": "zabbix", "pass": "xxxxxxx", "host": "localhost", "privileges": "all" }

Verifique # knife solo data bag mostrar mysqlusers # knife solo data bag mostrar mysqlusers repl --secret-file ./encrypted_data_bag_secret # knife solo data bag mostrar mysqlusers root --file-secreto ./encrypted_data_bag_secret # knife solo data bag mostrar mysqlusers xxx_admin --secret-file ./encrypted_data_bag_secret # knife solo data bag mostrar mysqlusers zabbix --secret-file ./encrypted_data_bag_secret[/shell] Certifique-se de que os dados estejam exibidos
Outros comandos podem ser encontrados abaixo.
[shell]# knife solo data bag --socorro[/shell]
Parece que é possível passar a chave para databags para o host cliente em um arquivo bootstrap com chef-server,
Talvez por causa do knife-solo_data_bag, parecia que não havia necessidade de especificar o arquivo bootstrap ao usar o nome de host do knife solo.
Eu realmente não sei como fazer isso do lado dos vagabundos.

Em seguida, vamos extrair os dados registrados em data_bags da receita. data_bag('usuários') vai te dar uma lista de IDs dos objetos de dados de usuário colocados no diretório data_bags/users.
Você pode recuperar objetos com o ID especificado em data_bag_item('users', id) do Data Bag.

Referência:
[[chef] uso da bolsa de dados] (http://tech.blog.piyo.org/2012/06/19/chef-data-bag%E6%B4%BB%E7%94%A8%E6%B3%95/)
Automatize a criação de usuários com o Chef's Data Bag

・Escreva uma receita de login_users
[shell]site de CD-livros/login_users/receitas # vi default.rb data_ids = data_bag('usuários')

data_ids.each do |id| u = data_bag_item('usuários', id) usuário u['nome de usuário'] do home u['casa'] shell u['shell'] uid u['uid'] senha u['password'] fim

Grupo 'Roda' Fazer Grupo_name Membros 'Roda' ['Root', 'XXX-Op', 'Yyy-Op', 'Dev'] Ação :Modificar Fim

cookbook_file '/home/dev/.bash_profile' do source 'home/dev/.bash_profile' proprietário 'dev' group 'dev' mode 0644 end[/shell] Não consegui especificar um subgrupo com um recurso de usuário, então usei um recurso de grupo.

[shell]echo "umask 002" >> /home/dev/.bash_profile tail /home/dev/.bash_profile mkdir -p /root/chef-repo/site-cookbooks/login_users/files/default/home/dev cp -p /home/dev/.bash_profile /root/chef-repo/site-cookbooks/login_users/files/default/home/dev/[/shell]

・Criar um usuário para mysql

Nota
Instale o MySQL no ChefComece hoje mesmoGerencieusuários e bancos de dados MySQL no Chef ChefGerencie dados JSON que você não quer que seja exposto no ChefRegistro do uso de DataBags para criptografar dados Gerencie senhas MySQL no Chef

Pensei em tentar pegar o livro de receitas do mysql/banco de dados no opscode, mas
Não funcionou e foi bem difícil identificar erros em receitas que eu mesmo não escrevi, então decidi criticar.

Aqui está o que tentei usar→ manual de recursos do mysql_database_user

A receita é a seguinte
[shell]# site vi Cookbooks/mysqld/recipes/mysql-users.rb #include_recipe "openssl" #include_recipe 'banco de dados::mysql'

#mysql_connection_info = {:host => "localhost", # :username => 'root', # #:p assword => node['mysql']['server_root_password']} # :p assword => ''}

#mysql_database "xxx_db" fazer # conexão mysql_connection_info # ação: criar #end

odbadm_data = Chef::EncryptedDataBagItem.load("mysqlusers","odb_admin") root_data = Chef::EncryptedDataBagItem.load("mysqlusers","root") repl_data = Chef::EncryptedDataBagItem.load("mysqlusers",") repl") myuser_o = odbadm_data["user"] mypass_o =odbadm_data["pass"] myuser_ro = root_data["user"] mypass_ro =root_data["pass"] myuser_re = repl_data["user"] mypass_re =repl_data["pass"] #mysql_database_user "#{user}" fazer # conexão mysql_connection_info # senha "#{password}" # banco de dados_name "*" # host "[#{host}} , %, localhost]" # privilégios [:all] # ação [:create, :grant] #end # mysqlconn = "mysql -u root" script "create_msql_odbadm" não _if "ls /root/.path_to_file" #not_if "#{mysqlconn} -p #{mypass_ro} -e 'select count(*) from mysql.user where user=\'repl\';'" interpretador "bash" user "root" código <-EOL #{mysqlconn} < EOF grant all privileges on *.* to #{myuser_o}@'%' identified by "#{mypass_o}"; grant all privileges on *.* to #{myuser_o}@'10.0.0.%' identified by "#{mypass_o}"; grant all privileges on *.* to #{myuser_o}@'localhost' identified by "#{mypass_o}"; grant all privileges on *.* to #{myuser_ro}@'10.0.0.%' identified by "#{mypass_ro}"; grant all privileges on *.* to #{myuser_ro}@'localhost' identified by "#{mypass_ro}"; grant replication slave, replication client on *.* to #{myuser_re}@'10.0.0.%' identified by "#{mypass_re}"; grant replication slave, replication client on *.* to #{myuser_re}@'localhost' identified by "#{mypass_re}"; drop database test; delete from mysql.user where password=''; flush privileges; EOF EOL end

script "create_pfile" do not_if 'ls /root/.path_to_filed' interpreter "bash" user "root" code <-EOL echo="" "#{mypass_ro}"=""> /root/.path_to_file chown 400 /root/.path_to_file fim de encerramento[/shell]
É só isso por enquanto. Obrigado por assistir.
Da próxima vez é uma receita para servidor web. </-EOL>

Related Articles