Я бы хотел запретить вывод на клиентский шеф-повар при запуске кода BASH с шаблонами и рецептов, которые могут содержать переменные с конфиденциальными данными.
В моем случае я автоматизирую созданного пользователя MySQL, который берет переменную из пакета с зашифрованными данными, а также вручную защищает / укрепляет установку MySQL (через командную строку). Когда я запускаю chef-client, он показывает переменную, выводимую пользователю, включая пароль MySQL.
«execute» разрешает чувствительное свойство, но эта проблема связана со сценарием bash, который использует переменную (-и) несколько раз, а не только одну строку. Я мог бы сделать это, используя продолжение амперсандов '&&', но это выглядело бы грязно, чем дольше сценарий получался.
'script' и 'bash' не позволяют использовать 'Sensitive' в качестве свойства, и возвращает ошибку 'неинициализированная константа'. Этот вид отстой, так как это было бы такой замечательной возможностью здесь.
Мысли о том, как скрыть переменные скрипта от вывода chef-клиента?
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