If you liked what you've learned so far, dive in!
Subscribe to get access to this tutorial plus
video, code and script downloads.
With a Subscription, click any sentence in the script to jump to that part of the video!
Login SubscribeHow could we handle sensitive variables - like a database password? Well, committing them to our playbook is probably not a good idea. Nope, we need something better!
First, let's reorganize a little bit! Create a new vars/
directory with a vars.yml
file inside. Now, copy all of the variables, add the ---
, paste them here, and - you know the drill - un-indent them:
symfony_root_dir: /var/www/project | |
symfony_web_dir: "{{ symfony_root_dir }}/web" | |
symfony_var_dir: "{{ symfony_root_dir }}/var" | |
symfony_console_path: "{{ symfony_root_dir }}/bin/console" |
Ansible gives us a way to import variables from a file... called vars_files
. Point it to ./vars/vars.yml
:
- hosts: vb | |
vars_files: | |
- ./vars/vars.yml | |
... lines 6 - 170 |
Cool! Believe it or not, we're one step closer to being able to handle sensitive configuration.
In your VM move to /var/www/project
:
cd /var/www/project
I want to look at the app/config/parameters.yml
file:
cat app/config/parameters.yml
This file holds config for the Symfony project, like the database password. Notice one is called secret
. This is supposed to be a unique string that's used for creating some random strings. Right now ours is... not so secret: that's the default value from Symfony.
Let's set this for real! In the vars.yml file, create a new variable: symfony_secret
set to udderly secret $tring
:
... lines 2 - 5 | |
symfony_secret: "udderly secret $tring" |
Now, in symfony-bootstrap.yml
, we can use that variable to modify parameters.yml
. Create a new task: "Set Symfony secret in parameters.yml". Use our favorite lineinfile
module with dest
set to {{ symfony_root_dir }}
- that's a variable from our vars file - {{ symfony_root_dir }}/app/config/parameters.yml
:
... lines 2 - 20 | |
- name: Set Symfony secret in parameters.yml | |
lineinfile: | |
dest: "{{ symfony_root_dir }}/app/config/parameters.yml" | |
... lines 24 - 58 |
For regexp
, use ^ secret:
. Yep, we're looking for 4 spaces then secret:
. For line
, 4 spaces again then secret: {{ symfony_secret }}
:
... lines 2 - 20 | |
- name: Set Symfony secret in parameters.yml | |
lineinfile: | |
dest: "{{ symfony_root_dir }}/app/config/parameters.yml" | |
regexp: "^ secret:" | |
line: " secret: {{ symfony_secret }}" | |
tags: | |
- deploy | |
... lines 28 - 58 |
Don't forget to give this the deploy
tag!
This will work... but don't even try it! Nope, we need to go further: having sensitive keys committed to my vars.yml
file is not a good solution. We need the vault.
Hey Daskifjraewiofj,
Oh, nice! Thanks for sharing this with others! I wonder, how is that \1 called? Any links to the docs where you found this example? Sounds really cool :)
Cheers!
// composer.json
{
"require": {
"php": ">=5.5.9",
"symfony/symfony": "3.1.*", // v3.1.4
"doctrine/orm": "^2.5", // v2.7.2
"doctrine/doctrine-bundle": "^1.6", // 1.6.4
"doctrine/doctrine-cache-bundle": "^1.2", // 1.3.0
"symfony/swiftmailer-bundle": "^2.3", // v2.3.11
"symfony/monolog-bundle": "^2.8", // 2.11.1
"symfony/polyfill-apcu": "^1.0", // v1.2.0
"sensio/distribution-bundle": "^5.0", // v5.0.12
"sensio/framework-extra-bundle": "^3.0.2", // v3.0.16
"incenteev/composer-parameter-handler": "^2.0", // v2.1.2
"doctrine/doctrine-migrations-bundle": "^1.2", // v1.2.0
"snc/redis-bundle": "^2.0", // 2.0.0
"predis/predis": "^1.1", // v1.1.1
"composer/package-versions-deprecated": "^1.11" // 1.11.99
},
"require-dev": {
"sensio/generator-bundle": "^3.0", // v3.0.8
"symfony/phpunit-bridge": "^3.0", // v3.1.4
"doctrine/data-fixtures": "^1.1", // 1.3.3
"hautelook/alice-bundle": "^1.3" // v1.4.1
}
}
Better replacement, this will work regardless of identation and even preserve it: