如何在Chef中管理MySQL用户

时间:2017-01-30 19:31:46

标签: chef chef-recipe

在Chef中,您如何管理MySQL用户?您将如何根据不同的环境设置不同的权限和密码?您会使用数据包还是有其他方法来管理这些?

我们有开发人员的厨师回购和prod的单独回购。

2 个答案:

答案 0 :(得分:2)

  

在Chef中,您如何管理MySQL用户?

为了管理mysql用户,当mysql_database_user未涵盖某些内容时,您可以使用mysql_database资源或query执行mysql_database_user resource

使用mysql_database_user资源

管理用户
mysql_database_user 'app-user' do
  connection mysql_connection_info
  password data_bag_item['password']
  host 'localhost'
  privileges [:all]
  action [:create, :grant]
end

其中data_bag_item['password']是存储在特定数据包中的密码。

使用mysql_database资源管理用户

mysql_database 'create slave user' do
  connection mysql_connection_info
  sql "GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY   '#{slave_password_data_bag_item['password']}'"
  action :query
end

你需要这本食谱https://github.com/chef-cookbooks/database。资源属性可能存在差异,因为这些示例不是最新版本。

  

您将如何根据自己设置不同的权限和密码   不同的环境

为此,您可以在chef中使用env选项和/或将它们与厨师角色结合使用。

要使每个环境专门执行一个资源,您可以使用应用于资源的not_ifonly_if属性:

mysql_database_user 'app-user' do
  not_if { node.environment == 'devel' }
end

并使用帮助器:

ENV_DEV ||= 'dev'

def dev_env?
        node.environment == ENV_DEV
end

mysql_database_user 'app-user' do
  not_if { dev_env? }
end

您可以将其与env_roles结合使用,并为您的环境设置特定角色。这些角色将包括将管理您的凭据的配方。通过这种方式,你将获得not_if和if选项。

有关env和角色的更多信息 - https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-environments-in-chef-to-control-server-configurations

  

您会使用数据包还是有其他方法来管理这些?

是的,我会在库中使用适当的抽象来最小化重复代码,以便从数据库中调出一些内容。

有一种方法可以在Chef日志中隐藏解密输出,这样您的日志就不会包含敏感信息。

  

我们有开发人员的厨师回购和prod的单独回购。

对我来说,可以从一份带有食谱,角色,环境的厨师食谱开始。一个代码库来管理所有节点。

当你的需求达到基础库和更高级的烹饪书时,你可以逐步扩展它,这将使用基本食谱作为依赖。通过这种方式,您将克服大量食谱和大量食谱和库。

答案 1 :(得分:0)

你的问题基本归结为"写下你想写的代码"。您喜欢数据包并且拥有良好的管理工作流程吗?然后冷静,使用那些。想要在食谱代码中存储东西?这太酷了。我建议不要使用属性,但是如果它适用于你那么肯定,为了得到它。

我个人会在食谱代码中这样做,因为它应该与食谱中的其他所有内容一起进行版本化。