From 63f060b4ada87e0d068f869a8da6665af28c0839 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:07:45 +0000 Subject: [PATCH 01/32] init --- tasks/main.yml | 8 ++++++++ templates/settings.php.j2 | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 tasks/main.yml create mode 100644 templates/settings.php.j2 diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..03ed7f9 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,8 @@ +--- +- name: Create settings files + template: + src: settings.php.j2 + dest: '{{ item.0.project_dir }}/shared/web/sites/{{ item.1.name|default(''default'') }}/local.settings.php' + with_subelements: + - '{{ drupal_settings }}' + - sites diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 new file mode 100644 index 0000000..7c05d96 --- /dev/null +++ b/templates/settings.php.j2 @@ -0,0 +1,22 @@ + '{{ values.driver }}', + 'host' => '{{ values.host }}', + 'database' => '{{ values.database }}', + 'username' => '{{ values.username }}', + 'password' => '{{ values.password }}', +]; + +{% endfor %} + +{% if item.1.settings.base_url %} +$base_url = '{{ item.1.settings.base_url }}'; +{% endif %} + +{% if item.1.settings.extra_parameters is defined %} + {{ item.1.settings.extra_parameters|indent(0) }} +{% endif %} From 92883eafb559c705a21723d94f97e9e8fc5b8c7f Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:10:17 +0000 Subject: [PATCH 02/32] Make base URL optional --- templates/settings.php.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 7c05d96..d767025 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -13,7 +13,7 @@ $databases['{{ name }}']['default'] = [ {% endfor %} -{% if item.1.settings.base_url %} +{% if item.1.settings.base_url is defined %} $base_url = '{{ item.1.settings.base_url }}'; {% endif %} From 33313acba72762ce32a2d18a701f03b2351b647e Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:15:01 +0000 Subject: [PATCH 03/32] Make filename configurable --- tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/main.yml b/tasks/main.yml index 03ed7f9..7415f98 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -2,7 +2,7 @@ - name: Create settings files template: src: settings.php.j2 - dest: '{{ item.0.project_dir }}/shared/web/sites/{{ item.1.name|default(''default'') }}/local.settings.php' + dest: '{{ item.0.project_dir }}/shared/web/sites/{{ item.1.name|default(''default'') }}/{{ item.1.filename|default("settings.php") }}' with_subelements: - '{{ drupal_settings }}' - sites From bb4392b5dff46623153dbcafe6e7c207f0649c8e Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:18:02 +0000 Subject: [PATCH 04/32] Add defaults/main.yml --- defaults/main.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 defaults/main.yml diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..cfd76d5 --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,2 @@ +--- +drupal_settings: [] From 12dcec42a4ec17e4a6449e841ba9d9812f3c2e8f Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:31:35 +0000 Subject: [PATCH 05/32] Rename name to key --- templates/settings.php.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index d767025..4a0d6fb 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -2,8 +2,8 @@ // {{ ansible_managed }} -{% for name, values in item.1.settings.databases.iteritems() %} -$databases['{{ name }}']['default'] = [ +{% for key, values in item.1.settings.databases.iteritems() %} +$databases['{{ key }}']['default'] = [ 'driver' => '{{ values.driver }}', 'host' => '{{ values.host }}', 'database' => '{{ values.database }}', From e28a65c221dbccf6aa081b62c4a23efe6e69e9f3 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:40:10 +0000 Subject: [PATCH 06/32] Add additional level for target value --- templates/settings.php.j2 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 4a0d6fb..e9864fb 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -3,7 +3,8 @@ // {{ ansible_managed }} {% for key, values in item.1.settings.databases.iteritems() %} -$databases['{{ key }}']['default'] = [ +{% for target, values in values.iteritems() %} +$databases['{{ key }}']['{{ target }}'] = [ 'driver' => '{{ values.driver }}', 'host' => '{{ values.host }}', 'database' => '{{ values.database }}', @@ -11,6 +12,7 @@ $databases['{{ key }}']['default'] = [ 'password' => '{{ values.password }}', ]; +{% endfor %} {% endfor %} {% if item.1.settings.base_url is defined %} From 7d3d206254986d012ca60d11a40b61e01d65afd0 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:41:22 +0000 Subject: [PATCH 07/32] Rename project_dir to drupal_root, simplify path --- tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/main.yml b/tasks/main.yml index 7415f98..5931644 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -2,7 +2,7 @@ - name: Create settings files template: src: settings.php.j2 - dest: '{{ item.0.project_dir }}/shared/web/sites/{{ item.1.name|default(''default'') }}/{{ item.1.filename|default("settings.php") }}' + dest: '{{ item.0.drupal_root }}/sites/{{ item.1.name|default("default") }}/{{ item.1.filename|default("settings.php") }}' with_subelements: - '{{ drupal_settings }}' - sites From 9b332361d380a799812a1d95a66c93c5d8629545 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:43:53 +0000 Subject: [PATCH 08/32] Add defaults for driver and host --- templates/settings.php.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index e9864fb..319f412 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -5,8 +5,8 @@ {% for key, values in item.1.settings.databases.iteritems() %} {% for target, values in values.iteritems() %} $databases['{{ key }}']['{{ target }}'] = [ - 'driver' => '{{ values.driver }}', - 'host' => '{{ values.host }}', + 'driver' => '{{ values.driver|default('mysql') }}', + 'host' => '{{ values.host|default('localhost') }}', 'database' => '{{ values.database }}', 'username' => '{{ values.username }}', 'password' => '{{ values.password }}', From 567563c969f22c84e381a3be2f111aac45d4b807 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:47:04 +0000 Subject: [PATCH 09/32] Add README.md --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..b5f5164 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# Ansible Role: Drupal settings + +```yaml +drupal_settings: + - drupal_root: /var/www/web + sites: + - name: default + filename: settings.php # Optional, defaults to 'settings.php' + settings: + databases: + foo: + bar: + driver: mysql # Optional, defaults to 'mysql' + host: localhost # Optional, defaults to 'localhost' + database: mydatabase + username: user + password: secret +``` From ae089383670bc312f183dd85f3150c465cabd04e Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:54:37 +0000 Subject: [PATCH 10/32] Add ability to add trusted hosts --- README.md | 5 +++++ templates/settings.php.j2 | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/README.md b/README.md index b5f5164..764f441 100644 --- a/README.md +++ b/README.md @@ -15,4 +15,9 @@ drupal_settings: database: mydatabase username: user password: secret + trusted_hosts: # Optional + - '^example\.com$' + - '^.+\.example\.com$' + - '^example\.org$' + - '^.+\.example\.org$' ``` diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 319f412..b756d5b 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -19,6 +19,14 @@ $databases['{{ key }}']['{{ target }}'] = [ $base_url = '{{ item.1.settings.base_url }}'; {% endif %} +{% if item.1.settings.trusted_hosts is defined %} +$settings['trusted_host_patterns'] = array( +{% for host in item.1.settings.trusted_hosts %} + '{{ host }}', +{% endfor %} +); +{% endif %} + {% if item.1.settings.extra_parameters is defined %} {{ item.1.settings.extra_parameters|indent(0) }} {% endif %} From bb9000c1cc3cb60547430cd557fb926f181c8d6f Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 02:59:40 +0000 Subject: [PATCH 11/32] Update database example --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 764f441..85ab3af 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,8 @@ drupal_settings: filename: settings.php # Optional, defaults to 'settings.php' settings: databases: - foo: - bar: + default: # The database key + default: # The database target driver: mysql # Optional, defaults to 'mysql' host: localhost # Optional, defaults to 'localhost' database: mydatabase From 13ee79633d960f3bd68a4ec693aa58f6a98f61fc Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 03:02:32 +0000 Subject: [PATCH 12/32] Change array syntax --- templates/settings.php.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index b756d5b..647f6c4 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -4,13 +4,13 @@ {% for key, values in item.1.settings.databases.iteritems() %} {% for target, values in values.iteritems() %} -$databases['{{ key }}']['{{ target }}'] = [ +$databases['{{ key }}']['{{ target }}'] = array( 'driver' => '{{ values.driver|default('mysql') }}', 'host' => '{{ values.host|default('localhost') }}', 'database' => '{{ values.database }}', 'username' => '{{ values.username }}', 'password' => '{{ values.password }}', -]; +); {% endfor %} {% endfor %} From 641ebf1119a5242d17d187489f31fb41dc81f48b Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 03:08:27 +0000 Subject: [PATCH 13/32] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..53f4980 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Oliver Davies + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From c5e4f104782e3ed23b54f7abc9ee6f7e3b9751df Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Mon, 28 Jan 2019 23:41:29 +0000 Subject: [PATCH 14/32] Specify Drupal version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 85ab3af..1e61222 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ drupal_settings: database: mydatabase username: user password: secret - trusted_hosts: # Optional + trusted_hosts: # Optional, Drupal 8 - '^example\.com$' - '^.+\.example\.com$' - '^example\.org$' From ed24f4f363316b314e0229faf7dfd26b0fc59af6 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Mon, 28 Jan 2019 23:44:53 +0000 Subject: [PATCH 15/32] Add base_url --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1e61222..8fccb14 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ drupal_settings: - name: default filename: settings.php # Optional, defaults to 'settings.php' settings: + base_url: https://www.example.com # Optional, Drupal 7 databases: default: # The database key default: # The database target From 2b15cc6ff226989c3082cf03d295a596c831e2c3 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 24 Jan 2019 03:06:37 +0000 Subject: [PATCH 16/32] Add hash_salt --- README.md | 1 + templates/settings.php.j2 | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index 8fccb14..8c8529e 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ drupal_settings: filename: settings.php # Optional, defaults to 'settings.php' settings: base_url: https://www.example.com # Optional, Drupal 7 + hash_salt: '' # Optional databases: default: # The database key default: # The database target diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 647f6c4..2bbd658 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -19,6 +19,10 @@ $databases['{{ key }}']['{{ target }}'] = array( $base_url = '{{ item.1.settings.base_url }}'; {% endif %} +{% if item.1.settings.hash_salt is defined %} +$settings['hash_salt'] = '{{ item.1.settings.hash_salt }}'; +{% endif %} + {% if item.1.settings.trusted_hosts is defined %} $settings['trusted_host_patterns'] = array( {% for host in item.1.settings.trusted_hosts %} From 036a6755814d01be50135fa4948d3f972159e09f Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Tue, 5 Feb 2019 20:49:26 +0000 Subject: [PATCH 17/32] Add ability to configure config directories Fixes #2 --- README.md | 2 ++ templates/settings.php.j2 | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 8c8529e..f3cd913 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ drupal_settings: database: mydatabase username: user password: secret + config_directories: # Optional, Drupal 8 + sync: path/to/config trusted_hosts: # Optional, Drupal 8 - '^example\.com$' - '^.+\.example\.com$' diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 2bbd658..7b7fc0e 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -23,6 +23,12 @@ $base_url = '{{ item.1.settings.base_url }}'; $settings['hash_salt'] = '{{ item.1.settings.hash_salt }}'; {% endif %} +{% if item.1.settings.config_directories is defined %} +{% for name, value in item.1.settings.config_directories.iteritems() %} +$cconfig_directories['{{ name }}'] = '{{ value }}'; +{% endfor %} +{% endif %} + {% if item.1.settings.trusted_hosts is defined %} $settings['trusted_host_patterns'] = array( {% for host in item.1.settings.trusted_hosts %} From 53521f0e93a865536ffc73b456d33d25c3a69f83 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 2 May 2019 18:14:53 +0100 Subject: [PATCH 18/32] init --- .yamllint | 11 +++++ README.md | 48 ++++++++++++++++++++ defaults/main.yml | 2 + handlers/main.yml | 2 + meta/main.yml | 58 ++++++++++++++++++++++++ molecule/default/Dockerfile.j2 | 14 ++++++ molecule/default/INSTALL.rst | 22 +++++++++ molecule/default/molecule.yml | 18 ++++++++ molecule/default/playbook.yml | 5 ++ molecule/default/tests/test_default.py | 14 ++++++ molecule/default/tests/test_default.pyc | Bin 0 -> 1129 bytes tasks/main.yml | 2 + vars/main.yml | 2 + 13 files changed, 198 insertions(+) create mode 100644 .yamllint create mode 100644 README.md create mode 100644 defaults/main.yml create mode 100644 handlers/main.yml create mode 100644 meta/main.yml create mode 100644 molecule/default/Dockerfile.j2 create mode 100644 molecule/default/INSTALL.rst create mode 100644 molecule/default/molecule.yml create mode 100644 molecule/default/playbook.yml create mode 100644 molecule/default/tests/test_default.py create mode 100644 molecule/default/tests/test_default.pyc create mode 100644 tasks/main.yml create mode 100644 vars/main.yml diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..ad0be76 --- /dev/null +++ b/.yamllint @@ -0,0 +1,11 @@ +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + line-length: disable + truthy: disable diff --git a/README.md b/README.md new file mode 100644 index 0000000..555d701 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role should +be mentioned here. For instance, if the role uses the EC2 module, it may be a +good idea to mention in this section that the boto package is required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, including +any variables that are in defaults/main.yml, vars/main.yml, and any variables +that can/should be set via parameters to the role. Any variables that are read +from other roles and/or the global scope (ie. hostvars, group vars, etc.) should +be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in +regards to parameters that may need to be set for other roles, or variables that +are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables +passed in as parameters) is always nice for users too: + + - hosts: servers + roles: + - { role: opdavies.drupal-settings, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or a +website (HTML is not allowed). diff --git a/defaults/main.yml b/defaults/main.yml new file mode 100644 index 0000000..336678f --- /dev/null +++ b/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for opdavies.drupal-settings diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..90858c5 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for opdavies.drupal-settings diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..ba43fdd --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,58 @@ +--- +galaxy_info: + author: your name + description: your description + company: your company (optional) + + # If the issue tracker for your role is not on github, uncomment the + # next line and provide a value + # issue_tracker_url: http://example.com/issue/tracker + + # Some suggested licenses: + # - BSD (default) + # - MIT + # - GPLv2 + # - GPLv3 + # - Apache + # - CC-BY + license: license (GPLv2, CC-BY, etc) + + min_ansible_version: 1.2 + + # If this a Container Enabled role, provide the minimum Ansible Container version. + # min_ansible_container_version: + + # Optionally specify the branch Galaxy will use when accessing the GitHub + # repo for this role. During role install, if no tags are available, + # Galaxy will use this branch. During import Galaxy will access files on + # this branch. If Travis integration is configured, only notifications for this + # branch will be accepted. Otherwise, in all cases, the repo's default branch + # (usually master) will be used. + # github_branch: + + # + # platforms is a list of platforms, and each platform has a name and a list of versions. + # + # platforms: + # - name: Fedora + # versions: + # - all + # - 25 + # - name: SomePlatform + # versions: + # - all + # - 1.0 + # - 7 + # - 99.99 + + galaxy_tags: [] + # List tags for your role here, one per line. A tag is a keyword that describes + # and categorizes the role. Users find roles by searching for tags. Be sure to + # remove the '[]' above, if you add tags to this list. + # + # NOTE: A tag is limited to a single word comprised of alphanumeric characters. + # Maximum 20 tags per role. + +dependencies: [] +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 new file mode 100644 index 0000000..e6aa95d --- /dev/null +++ b/molecule/default/Dockerfile.j2 @@ -0,0 +1,14 @@ +# Molecule managed + +{% if item.registry is defined %} +FROM {{ item.registry.url }}/{{ item.image }} +{% else %} +FROM {{ item.image }} +{% endif %} + +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ + elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ + elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ + elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ + elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi diff --git a/molecule/default/INSTALL.rst b/molecule/default/INSTALL.rst new file mode 100644 index 0000000..6a44bde --- /dev/null +++ b/molecule/default/INSTALL.rst @@ -0,0 +1,22 @@ +******* +Docker driver installation guide +******* + +Requirements +============ + +* Docker Engine + +Install +======= + +Please refer to the `Virtual environment`_ documentation for installation best +practices. If not using a virtual environment, please consider passing the +widely recommended `'--user' flag`_ when invoking ``pip``. + +.. _Virtual environment: https://virtualenv.pypa.io/en/latest/ +.. _'--user' flag: https://packaging.python.org/tutorials/installing-packages/#installing-to-the-user-site + +.. code-block:: bash + + $ pip install 'molecule[docker]' diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..65faca2 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,18 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint +platforms: + - name: instance + image: centos:7 +provisioner: + name: ansible + lint: + name: ansible-lint +verifier: + name: testinfra + lint: + name: flake8 diff --git a/molecule/default/playbook.yml b/molecule/default/playbook.yml new file mode 100644 index 0000000..673d26e --- /dev/null +++ b/molecule/default/playbook.yml @@ -0,0 +1,5 @@ +--- +- name: Converge + hosts: all + roles: + - role: opdavies.drupal-settings diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py new file mode 100644 index 0000000..eedd64a --- /dev/null +++ b/molecule/default/tests/test_default.py @@ -0,0 +1,14 @@ +import os + +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') + + +def test_hosts_file(host): + f = host.file('/etc/hosts') + + assert f.exists + assert f.user == 'root' + assert f.group == 'root' diff --git a/molecule/default/tests/test_default.pyc b/molecule/default/tests/test_default.pyc new file mode 100644 index 0000000000000000000000000000000000000000..982560deef278f60065e4e1a6ed68d3706ece713 GIT binary patch literal 1129 zcmZSn%*%D><*Art1}I==U|?`yU|=ZrVqjoMVPHsMWXNG)h=Q{j8KRgNQkfXCm>IHI z7_wLyQW+Ss*cein7$ln+8M4?JQkWT<85yED7*bdmS{N9jI6+1PYp^mfFl7G!|Np;V zi8uoTgRj4jt8=K2YrLmln5$oie^6w+o2QR!3CQ}yoSbAv1_lNuD0T)p$A^J|p@xAW z3+$q1Muu8Oh8jkOEJlW6IffD@h9(G?8RU>`CWc~TBtaIKpa)big@GYh17wq5F&6^^ zgMMmBvVKN>aY=Cr3j+f~QGR|2*tuX{T4qja2^#|gLuy4PNCh7Q1A}96acWUXW`3S) zQBi&oSXn7Z1mwr`qWsbV4Up5p;vi#7K%Pm{00l6ZDE}t8z`(#DJx@PGzaX Date: Thu, 2 May 2019 18:39:22 +0100 Subject: [PATCH 19/32] Ensure that Drupal site directories are present --- defaults/main.yml | 2 +- molecule/default/playbook.yml | 5 +++++ molecule/default/tests/test_default.py | 10 ++++------ tasks/main.yml | 8 +++++++- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/defaults/main.yml b/defaults/main.yml index 336678f..cfd76d5 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,2 +1,2 @@ --- -# defaults file for opdavies.drupal-settings +drupal_settings: [] diff --git a/molecule/default/playbook.yml b/molecule/default/playbook.yml index 673d26e..9bf8514 100644 --- a/molecule/default/playbook.yml +++ b/molecule/default/playbook.yml @@ -1,5 +1,10 @@ --- - name: Converge hosts: all + vars: + drupal_settings: + - root: /var/www/test + sites: + - name: default roles: - role: opdavies.drupal-settings diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py index eedd64a..6597435 100644 --- a/molecule/default/tests/test_default.py +++ b/molecule/default/tests/test_default.py @@ -5,10 +5,8 @@ import testinfra.utils.ansible_runner testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') +def test_drupal_site_directory_exists(host): + directory = host.file('/var/www/test/sites/default') -def test_hosts_file(host): - f = host.file('/etc/hosts') - - assert f.exists - assert f.user == 'root' - assert f.group == 'root' + assert directory.exists + assert directory.is_directory diff --git a/tasks/main.yml b/tasks/main.yml index 7e18612..fb395ec 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,2 +1,8 @@ --- -# tasks file for opdavies.drupal-settings +- name: Ensure that Drupal site directories are present + file: + state: directory + path: '{{ item.0.root }}/sites/{{ item.1.name|default("default") }}' + with_subelements: + - '{{ drupal_settings }}' + - sites From dbbb8b225f3181876bea0b80ceaa74e1f5fe5296 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 2 May 2019 18:44:06 +0100 Subject: [PATCH 20/32] Ignore __pycache__ directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..146d41c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/molecule/default/tests/__pycache__/ From a11d7b65b7a70b2e76df2c7953bcfdec5aba5af6 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 2 May 2019 19:11:07 +0100 Subject: [PATCH 21/32] Ensure that Drupal settings files are present --- molecule/default/tests/test_default.py | 6 ++++++ tasks/main.yml | 8 ++++++++ templates/settings.php.j2 | 0 3 files changed, 14 insertions(+) create mode 100644 templates/settings.php.j2 diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py index 6597435..9f53467 100644 --- a/molecule/default/tests/test_default.py +++ b/molecule/default/tests/test_default.py @@ -10,3 +10,9 @@ def test_drupal_site_directory_exists(host): assert directory.exists assert directory.is_directory + +def test_drupal_settings_file_exists(host): + file = host.file('/var/www/test/sites/default/settings.php') + + assert file.exists + assert file.is_file diff --git a/tasks/main.yml b/tasks/main.yml index fb395ec..f855a20 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -6,3 +6,11 @@ with_subelements: - '{{ drupal_settings }}' - sites + +- name: Ensure that Drupal settings files are present + template: + src: settings.php.j2 + dest: '{{ item.0.root }}/sites/{{ item.1.name|default("default") }}/settings.php + with_subelements: + - '{{ drupal_settings }}' + - sites diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 new file mode 100644 index 0000000..e69de29 From 26ad8e735b6da197fbf21a72725174eeef1d6b04 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 2 May 2019 19:49:39 +0100 Subject: [PATCH 22/32] Make filename configurable --- molecule/default/playbook.yml | 1 + molecule/default/tests/test_default.py | 2 +- tasks/main.yml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/molecule/default/playbook.yml b/molecule/default/playbook.yml index 9bf8514..afffe11 100644 --- a/molecule/default/playbook.yml +++ b/molecule/default/playbook.yml @@ -6,5 +6,6 @@ - root: /var/www/test sites: - name: default + filename: settings.test.php roles: - role: opdavies.drupal-settings diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py index 9f53467..3bf2b01 100644 --- a/molecule/default/tests/test_default.py +++ b/molecule/default/tests/test_default.py @@ -12,7 +12,7 @@ def test_drupal_site_directory_exists(host): assert directory.is_directory def test_drupal_settings_file_exists(host): - file = host.file('/var/www/test/sites/default/settings.php') + file = host.file('/var/www/test/sites/default/settings.test.php') assert file.exists assert file.is_file diff --git a/tasks/main.yml b/tasks/main.yml index f855a20..fbc23b4 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -10,7 +10,7 @@ - name: Ensure that Drupal settings files are present template: src: settings.php.j2 - dest: '{{ item.0.root }}/sites/{{ item.1.name|default("default") }}/settings.php + dest: '{{ item.0.root }}/sites/{{ item.1.name|default("default") }}/{{ item.1.filename|default("settings.php") }}' with_subelements: - '{{ drupal_settings }}' - sites From cc935e81f6decf5ab745c2f8c340fb89c33bd4d3 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 2 May 2019 19:58:27 +0100 Subject: [PATCH 23/32] Update meta information --- meta/main.yml | 73 +++++++++++++-------------------------------------- 1 file changed, 18 insertions(+), 55 deletions(-) diff --git a/meta/main.yml b/meta/main.yml index ba43fdd..a4c0a1d 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,58 +1,21 @@ --- galaxy_info: - author: your name - description: your description - company: your company (optional) - - # If the issue tracker for your role is not on github, uncomment the - # next line and provide a value - # issue_tracker_url: http://example.com/issue/tracker - - # Some suggested licenses: - # - BSD (default) - # - MIT - # - GPLv2 - # - GPLv3 - # - Apache - # - CC-BY - license: license (GPLv2, CC-BY, etc) - + author: Oliver Davies + description: Automatically generate Drupal settings files. + license: MIT min_ansible_version: 1.2 - - # If this a Container Enabled role, provide the minimum Ansible Container version. - # min_ansible_container_version: - - # Optionally specify the branch Galaxy will use when accessing the GitHub - # repo for this role. During role install, if no tags are available, - # Galaxy will use this branch. During import Galaxy will access files on - # this branch. If Travis integration is configured, only notifications for this - # branch will be accepted. Otherwise, in all cases, the repo's default branch - # (usually master) will be used. - # github_branch: - - # - # platforms is a list of platforms, and each platform has a name and a list of versions. - # - # platforms: - # - name: Fedora - # versions: - # - all - # - 25 - # - name: SomePlatform - # versions: - # - all - # - 1.0 - # - 7 - # - 99.99 - - galaxy_tags: [] - # List tags for your role here, one per line. A tag is a keyword that describes - # and categorizes the role. Users find roles by searching for tags. Be sure to - # remove the '[]' above, if you add tags to this list. - # - # NOTE: A tag is limited to a single word comprised of alphanumeric characters. - # Maximum 20 tags per role. - -dependencies: [] -# List your role dependencies here, one per line. Be sure to remove the '[]' above, -# if you add dependencies to this list. + platforms: + - name: GenericUNIX + versions: + - all + - any + - name: GenericBSD + versions: + - all + - any + - name: GenericLinux + versions: + - all + - any + galaxy_tags: + - drupal From da31cccb8e1292dbf75ec7586ec345c0640a682d Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Sat, 23 Nov 2019 23:26:42 +0000 Subject: [PATCH 24/32] Prevent logging of sensitive data --- tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/main.yml b/tasks/main.yml index 5931644..103962f 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -6,3 +6,4 @@ with_subelements: - '{{ drupal_settings }}' - sites + no_log: True From 40d9add7eb48ce587c3caf3026a08080f8220687 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 7 Feb 2020 17:36:29 +0000 Subject: [PATCH 25/32] Ensure that the site directory exists --- tasks/main.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tasks/main.yml b/tasks/main.yml index 103962f..71ebba5 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,4 +1,13 @@ --- +- name: Ensure directory exists + file: + state: directory + path: '{{ item.0.drupal_root }}/sites/{{ item.1.name|default("default") }}' + with_subelements: + - '{{ drupal_settings }}' + - sites + no_log: true + - name: Create settings files template: src: settings.php.j2 @@ -6,4 +15,4 @@ with_subelements: - '{{ drupal_settings }}' - sites - no_log: True + no_log: true From 7a1ef40d1d03c4af9ebfc76f90fd8a41a46ed505 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 7 Feb 2020 17:38:00 +0000 Subject: [PATCH 26/32] Use items instead of iteritems --- templates/settings.php.j2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 7b7fc0e..0e64e0f 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -2,8 +2,8 @@ // {{ ansible_managed }} -{% for key, values in item.1.settings.databases.iteritems() %} -{% for target, values in values.iteritems() %} +{% for key, values in item.1.settings.databases.items() %} +{% for target, values in values.items() %} $databases['{{ key }}']['{{ target }}'] = array( 'driver' => '{{ values.driver|default('mysql') }}', 'host' => '{{ values.host|default('localhost') }}', @@ -24,8 +24,8 @@ $settings['hash_salt'] = '{{ item.1.settings.hash_salt }}'; {% endif %} {% if item.1.settings.config_directories is defined %} -{% for name, value in item.1.settings.config_directories.iteritems() %} $cconfig_directories['{{ name }}'] = '{{ value }}'; +{% for name, value in item.1.settings.config_directories.items() %} {% endfor %} {% endif %} From 52288892417ff5b29ca42a5f794e6faee6777fdd Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 7 Feb 2020 17:38:08 +0000 Subject: [PATCH 27/32] Fix typo --- templates/settings.php.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 0e64e0f..22c4344 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -24,8 +24,8 @@ $settings['hash_salt'] = '{{ item.1.settings.hash_salt }}'; {% endif %} {% if item.1.settings.config_directories is defined %} -$cconfig_directories['{{ name }}'] = '{{ value }}'; {% for name, value in item.1.settings.config_directories.items() %} +$config_directories['{{ name }}'] = '{{ value }}'; {% endfor %} {% endif %} From cfb136bda5daa96dca32fe80eb3da1e953a1cce8 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 7 Feb 2020 20:19:06 +0000 Subject: [PATCH 28/32] Add Galaxy metadata --- meta/main.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 meta/main.yml diff --git a/meta/main.yml b/meta/main.yml new file mode 100644 index 0000000..08a4bc2 --- /dev/null +++ b/meta/main.yml @@ -0,0 +1,16 @@ +--- +galaxy_info: + role_name: drupal-settings-files + author: opdavies + description: Automatically generates settings files for Drupal applications + license: MIT + platforms: + - name: EL + versions: [all] + - name: Debian + versions: [all] + - name: Ubuntu + versions: [all] + galaxy_tags: [drupal, php, cms, web, development] + +dependencies: [] From 2cf2b919e20271fe4cd33c9f2661ed98453ac59b Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Wed, 19 Feb 2020 00:25:31 +0000 Subject: [PATCH 29/32] Copy molecule tests from next branch Add more tests in follow-up PRs. Fixes #6 --- .yamllint | 11 +++++++++++ molecule/default/Dockerfile.j2 | 14 ++++++++++++++ molecule/default/INSTALL.rst | 22 ++++++++++++++++++++++ molecule/default/molecule.yml | 18 ++++++++++++++++++ molecule/default/playbook.yml | 11 +++++++++++ molecule/default/tests/test_default.py | 18 ++++++++++++++++++ molecule/default/tests/test_default.pyc | Bin 0 -> 1129 bytes 7 files changed, 94 insertions(+) create mode 100644 .yamllint create mode 100644 molecule/default/Dockerfile.j2 create mode 100644 molecule/default/INSTALL.rst create mode 100644 molecule/default/molecule.yml create mode 100644 molecule/default/playbook.yml create mode 100644 molecule/default/tests/test_default.py create mode 100644 molecule/default/tests/test_default.pyc diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..ad0be76 --- /dev/null +++ b/.yamllint @@ -0,0 +1,11 @@ +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + line-length: disable + truthy: disable diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 new file mode 100644 index 0000000..e6aa95d --- /dev/null +++ b/molecule/default/Dockerfile.j2 @@ -0,0 +1,14 @@ +# Molecule managed + +{% if item.registry is defined %} +FROM {{ item.registry.url }}/{{ item.image }} +{% else %} +FROM {{ item.image }} +{% endif %} + +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python*-dnf bash && dnf clean all; \ + elif [ $(command -v yum) ]; then yum makecache fast && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ + elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml && zypper clean -a; \ + elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ + elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi diff --git a/molecule/default/INSTALL.rst b/molecule/default/INSTALL.rst new file mode 100644 index 0000000..6a44bde --- /dev/null +++ b/molecule/default/INSTALL.rst @@ -0,0 +1,22 @@ +******* +Docker driver installation guide +******* + +Requirements +============ + +* Docker Engine + +Install +======= + +Please refer to the `Virtual environment`_ documentation for installation best +practices. If not using a virtual environment, please consider passing the +widely recommended `'--user' flag`_ when invoking ``pip``. + +.. _Virtual environment: https://virtualenv.pypa.io/en/latest/ +.. _'--user' flag: https://packaging.python.org/tutorials/installing-packages/#installing-to-the-user-site + +.. code-block:: bash + + $ pip install 'molecule[docker]' diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..65faca2 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,18 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint +platforms: + - name: instance + image: centos:7 +provisioner: + name: ansible + lint: + name: ansible-lint +verifier: + name: testinfra + lint: + name: flake8 diff --git a/molecule/default/playbook.yml b/molecule/default/playbook.yml new file mode 100644 index 0000000..afffe11 --- /dev/null +++ b/molecule/default/playbook.yml @@ -0,0 +1,11 @@ +--- +- name: Converge + hosts: all + vars: + drupal_settings: + - root: /var/www/test + sites: + - name: default + filename: settings.test.php + roles: + - role: opdavies.drupal-settings diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py new file mode 100644 index 0000000..3bf2b01 --- /dev/null +++ b/molecule/default/tests/test_default.py @@ -0,0 +1,18 @@ +import os + +import testinfra.utils.ansible_runner + +testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') + +def test_drupal_site_directory_exists(host): + directory = host.file('/var/www/test/sites/default') + + assert directory.exists + assert directory.is_directory + +def test_drupal_settings_file_exists(host): + file = host.file('/var/www/test/sites/default/settings.test.php') + + assert file.exists + assert file.is_file diff --git a/molecule/default/tests/test_default.pyc b/molecule/default/tests/test_default.pyc new file mode 100644 index 0000000000000000000000000000000000000000..982560deef278f60065e4e1a6ed68d3706ece713 GIT binary patch literal 1129 zcmZSn%*%D><*Art1}I==U|?`yU|=ZrVqjoMVPHsMWXNG)h=Q{j8KRgNQkfXCm>IHI z7_wLyQW+Ss*cein7$ln+8M4?JQkWT<85yED7*bdmS{N9jI6+1PYp^mfFl7G!|Np;V zi8uoTgRj4jt8=K2YrLmln5$oie^6w+o2QR!3CQ}yoSbAv1_lNuD0T)p$A^J|p@xAW z3+$q1Muu8Oh8jkOEJlW6IffD@h9(G?8RU>`CWc~TBtaIKpa)big@GYh17wq5F&6^^ zgMMmBvVKN>aY=Cr3j+f~QGR|2*tuX{T4qja2^#|gLuy4PNCh7Q1A}96acWUXW`3S) zQBi&oSXn7Z1mwr`qWsbV4Up5p;vi#7K%Pm{00l6ZDE}t8z`(#DJx@PGzaX Date: Tue, 18 Feb 2020 23:36:33 +0000 Subject: [PATCH 30/32] Start updating the README https://github.com/opdavies/ansible-role-drupal-settings/issues/1 --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index f3cd913..c453cc9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Ansible Role: Drupal settings +A role for automatically generating `settings.php` files for Drupal 7 and 8 applications. + +## Example + ```yaml drupal_settings: - drupal_root: /var/www/web From 6a12b176e7621533913ab43971d3a0e0f9349636 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Tue, 16 Mar 2021 09:04:14 +0000 Subject: [PATCH 31/32] Allow for configuring the MySQL port number Fixes #9 --- templates/settings.php.j2 | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/settings.php.j2 b/templates/settings.php.j2 index 22c4344..bd7ad99 100644 --- a/templates/settings.php.j2 +++ b/templates/settings.php.j2 @@ -7,6 +7,7 @@ $databases['{{ key }}']['{{ target }}'] = array( 'driver' => '{{ values.driver|default('mysql') }}', 'host' => '{{ values.host|default('localhost') }}', + 'port' => '{{ values.port|default('3306') }}', 'database' => '{{ values.database }}', 'username' => '{{ values.username }}', 'password' => '{{ values.password }}', From ca95b34514510a28aec822ca2f3fddb0b8b65f05 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Tue, 16 Mar 2021 09:05:18 +0000 Subject: [PATCH 32/32] Document adding the port number References #9 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c453cc9..9348d55 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ drupal_settings: default: # The database target driver: mysql # Optional, defaults to 'mysql' host: localhost # Optional, defaults to 'localhost' + port: 3306 # Optional database: mydatabase username: user password: secret