我想在运行带有模板的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
答案 0 :(得分:1)
在评论中回答,true
和false
在Ruby中是小写的。使用True
使Ruby尝试寻找一个不存在的const。