在Chef中,您如何管理MySQL用户?您将如何根据不同的环境设置不同的权限和密码?您会使用数据包还是有其他方法来管理这些?
我们有开发人员的厨师回购和prod的单独回购。
答案 0 :(得分:2)
在Chef中,您如何管理MySQL用户?
为了管理mysql用户,当mysql_database_user
未涵盖某些内容时,您可以使用mysql_database
资源或query
执行mysql_database_user resource
。
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 '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_if
或only_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)
你的问题基本归结为"写下你想写的代码"。您喜欢数据包并且拥有良好的管理工作流程吗?然后冷静,使用那些。想要在食谱代码中存储东西?这太酷了。我建议不要使用属性,但是如果它适用于你那么肯定,为了得到它。
我个人会在食谱代码中这样做,因为它应该与食谱中的其他所有内容一起进行版本化。