哪个Chef资源可以使用Chef的sensititve属性执行多行BASH代码?

时间:2018-05-01 19:13:57

标签: chef chef-recipe

我想在运行带有模板的BASH代码以及可能包含带有敏感数据的变量的配方时阻止向Chef客户端输出任何内容。

在我的情况下,我自动创建一个MySQL用户,它从加密数据包中获取一个变量,以及手动保护/加强MySQL安装(通过命令行)。当我运行chef-client时,它会向用户显示变量输出,包括MySQL密码。

'执行'允许敏感属性,但是这个问题涉及一个多次使用变量的bash脚本,而不仅仅是一行。我可以使用&符号&&&'的延续来完成它,但是当脚本获得的时间越长,这看起来就会变得混乱。

'脚本'和' bash'不要让敏感的'用作属性,并返回未初始化的常量'错误。这种情况很糟糕,因为这将是一个很棒的功能。

关于如何保持脚本变量对chef-client输出隐藏的想法?

dbag = data_bag_item('pass', 'mysql')
db_pass = dbag["mysqlpass"]

bash 'install_mysql' do
  sensitive True
  code <<-EOC
    systemctl start mysqld.service && systemctl enable mysqld.service
    mysqladmin -u root password #{db_pass}
    # automate secure mysql install
    mysql -u root -p#{db_pass} -e "UPDATE mysql.user SET Password=PASSWORD('#{db_pass}') WHERE User='root'"
    mysql -u root -p#{db_pass} -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
    mysql -u root -p#{db_pass} -e "DELETE FROM mysql.user WHERE User=''"
    mysql -u root -p#{db_pass} -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
    mysql -u root -p#{db_pass} -e "FLUSH PRIVILEGES"
    # create mysql user, and pass
    mysql -e "CREATE DATABASE mysqldb;" -u root -p#{db_pass}
    mysql -e "GRANT ALL PRIVILEGES ON mysqldb.* TO "mysqluser"@"localhost" IDENTIFIED BY '#{db_pass}';" -u root -p#{db_pass}
    mysql -e 'FLUSH PRIVILEGES;' -u root -p#{db_pass}
  EOC
end

我也尝试过:

script 'install_mysql' do
  sensitive True
  ...
end

cookbook_file '/tmp/install_mysql.sh'
  source install_mysql.sh
  ...
end

execute 'install_mysql' do
  sensitive True
  command "/tmp/install_mysql.sh"
end

1 个答案:

答案 0 :(得分:1)

在评论中回答,truefalse在Ruby中是小写的。使用True使Ruby尝试寻找一个不存在的const。