diff --git a/playbooks/dhcp.yml b/playbooks/dhcp.yml
new file mode 100644
index 0000000..9a89db8
--- /dev/null
+++ b/playbooks/dhcp.yml
@@ -0,0 +1,6 @@
+- name: Configure DHCP
+  hosts: all
+  tasks:
+  - name: Configure services to install in the server
+    import_role:
+      name: dhcp
\ No newline at end of file
diff --git a/roles/db/defaults/main.yaml b/roles/db/defaults/main.yaml
index b26beb7..b1818b7 100644
--- a/roles/db/defaults/main.yaml
+++ b/roles/db/defaults/main.yaml
@@ -29,8 +29,8 @@ required_mariabackup_files_and_scripts:
   - { src: scripts/check-memory.sh, dest: /root/scripts/check-memory.sh, mode: u=rwx,g=rx,o=rx }
   - { src: scripts/export-privs.sh, dest: /root/scripts/export-privs.sh, mode: u=rwx,g=rx,o=rx }
   - { src: scripts/mysqltuner.pl, dest: /root/scripts/mysqltuner.pl, mode: u=rwx,g=rx,o=rx }
-  - { src: scripts/promote-master.sh, dest: /root/scripts/promote-master.sh, mode: u=rwx,g=rx,o=rx }
-  - { src: scripts/promote-slave.sh, dest: /root/scripts/promote-slave.sh, mode: u=rwx,g=rx,o=rx }
+  - { src: scripts/events-promote.sh, dest: /root/scripts/events-promote.sh, mode: u=rwx,g=rx,o=rx }
+  - { src: scripts/events-demote.sh, dest: /root/scripts/events-demote.sh, mode: u=rwx,g=rx,o=rx }
   - { src: scripts/README.md, dest: /root/scripts/README.md, mode: u=rw,g=r,o=r }
   - { src: scripts/scheduler-log.sh, dest: /root/scripts/scheduler-log.sh, mode: u=rwx,g=rx,o=rx }
 downloads:
diff --git a/roles/db/files/mariabackup/bacula-after.sh b/roles/db/files/mariabackup/bacula-after.sh
index 53e37bb..6857ed7 100755
--- a/roles/db/files/mariabackup/bacula-after.sh
+++ b/roles/db/files/mariabackup/bacula-after.sh
@@ -5,8 +5,7 @@ myDir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
 . "$myDir/config.sh"
 . "$myDir/apply.config.sh"
 
-todayDir=$(date +%Y-%m-%d)
-pattern="$baculaDir/mnt/local-backup/${todayDir}_??-??_full.gz"
+pattern="$baculaDir/mnt/local-backup/*_full.gz"
 files=($pattern)
 backupFile="${files[0]}"
 
@@ -31,19 +30,23 @@ mysql < "$myDir/apply.sql"
 echo "Upgrading tables."
 mysql_upgrade
 
-echo "Applying repository changes."
-curl --silent --request POST --location --user "$jenkinsAuth" "$jenkinsUrl/build?delay=0sec"
 
-echo "Waiting for Jenkins job to end."
-jobResult=null
-while [ "$jobResult" = "null" ]; do
-	sleep 10
-	jobResult=$(curl --silent --location --user "$jenkinsAuth" "$jenkinsUrl/lastBuild/api/json" | jq --raw-output ".result")
-done
-echo "Job result: $jobResult"
+if [ -n "$jenkinsUrl" ]; then
+	echo "Applying repository changes."
+	curl --silent --request POST --location --user "$jenkinsAuth" "$jenkinsUrl/build?delay=0sec"
 
-echo "Promoting to master."
-"/root/scripts/promote-master.sh"
+	echo "Waiting for Jenkins job to end."
+	jobResult=null
+	while [ "$jobResult" = "null" ]; do
+		sleep 10
+		jobResult=$(curl --silent --location --user "$jenkinsAuth" "$jenkinsUrl/lastBuild/api/json" | jq --raw-output ".result")
+	done
+	echo "Job result: $jobResult"
+fi
+
+
+echo "Promoting Events."
+"/root/scripts/events-promote.sh"
 
 for node in "${dbClusterSiblings[@]}"; do
 	ssh root@$node service mysql start
diff --git a/roles/db/files/scripts/promote-slave.sh b/roles/db/files/scripts/events-demote.sh
similarity index 100%
rename from roles/db/files/scripts/promote-slave.sh
rename to roles/db/files/scripts/events-demote.sh
diff --git a/roles/db/files/scripts/promote-master.sh b/roles/db/files/scripts/events-promote.sh
similarity index 100%
rename from roles/db/files/scripts/promote-master.sh
rename to roles/db/files/scripts/events-promote.sh
diff --git a/roles/db/tasks/mariadb.yml b/roles/db/tasks/mariadb.yml
index 2f67be8..a3980ce 100644
--- a/roles/db/tasks/mariadb.yml
+++ b/roles/db/tasks/mariadb.yml
@@ -13,7 +13,7 @@
 
 - name: Run MariaDB repository setup script
   command:
-    cmd: "/bin/bash /tmp/mariadb_repo_setup --mariadb-server-version=10.11.10"
+    cmd: "/bin/bash /tmp/mariadb_repo_setup --mariadb-server-version={{ db.version | default('10.11.10') }}"
     creates: "/etc/apt/sources.list.d/mariadb.list"
 
 - name: Install Percona repository package
diff --git a/roles/db/templates/mariabackup/apply.config.sh b/roles/db/templates/mariabackup/apply.config.sh
index f4e6c1c..a175dd8 100755
--- a/roles/db/templates/mariabackup/apply.config.sh
+++ b/roles/db/templates/mariabackup/apply.config.sh
@@ -15,5 +15,7 @@ dbClusterSiblings=()
 # Jenkins authentication string
 jenkinsAuth=jenkins:{{ lookup(passbolt, 'jenkinsAuth', folder_parent_id=passbolt_folder).password }}
 
+{% if db.jenkinsUrl is defined %}
 # Jenkins job URL
-jenkinsUrl=https://jenkins.verdnatura.es/job/Scheduler/job/db-apply-changes-{{ db.branch }}
+jenkinsUrl={{ db.jenkinsUrl }}
+{% endif %}
diff --git a/roles/dhcp/handlers/main.yml b/roles/dhcp/handlers/main.yml
new file mode 100644
index 0000000..88fd9c8
--- /dev/null
+++ b/roles/dhcp/handlers/main.yml
@@ -0,0 +1,4 @@
+- name: restart-dhcp
+  systemd:
+    name: isc-dhcp-server
+    state: restarted
diff --git a/roles/dhcp/tasks/dhcp.yml b/roles/dhcp/tasks/dhcp.yml
new file mode 100644
index 0000000..a230c8a
--- /dev/null
+++ b/roles/dhcp/tasks/dhcp.yml
@@ -0,0 +1,56 @@
+- name: Install DHCP packages
+  apt:
+    name: isc-dhcp-server
+    state: present
+    install_recommends: no
+- name: Set DHCP configurations from templates
+  template:
+    src: "{{ item }}"
+    dest: "/etc/dhcp/{{ item }}"
+    owner: root
+    group: root
+    mode: "u=rw,g=r,o=r"
+  loop:
+    - dhcpd.conf
+    - partner.conf
+  notify: restart-dhcp
+- name: Set rndc.key from template
+  template:
+    src: rndc.key
+    dest: /etc/dhcp/rndc.key
+    owner: root
+    group: root
+    mode: u=rw,g=r,o=
+  notify: restart-dhcp
+- name: Ensure that the directories exist
+  file:
+    path: "/etc/dhcp/subnets"
+    state: directory
+    owner: root
+    group: root
+    mode: "0755"
+- name: Map subnets
+  copy:
+    content: "{{ item.value }}"
+    dest: "/etc/dhcp/subnets/{{ item.key }}"
+    owner: root
+    group: root
+    mode: "0644"
+  loop: "{{ subnets_files | dict2items }}"
+- name: Get default IPv4 interface
+  command: ip -o -4 route show default
+  register: default_route
+- name: Extract interface default name
+  set_fact:
+    active_interface: "{{ default_route.stdout.split()[-1] }}"
+- name: Disable IPv6
+  replace:
+    path: /etc/default/isc-dhcp-server
+    regexp: '^INTERFACESv6="(.*)"'
+    replace: '#INTERFACESv6="\1"'
+- name: Set interface IPv4 
+  lineinfile:
+    path: /etc/default/isc-dhcp-server
+    regexp: '^INTERFACESv4='
+    line: 'INTERFACESv4="{{ active_interface }}"'
+    state: present
\ No newline at end of file
diff --git a/roles/dhcp/tasks/main.yml b/roles/dhcp/tasks/main.yml
new file mode 100644
index 0000000..34b7778
--- /dev/null
+++ b/roles/dhcp/tasks/main.yml
@@ -0,0 +1,3 @@
+- import_tasks: dhcp.yml
+  tags: dhcp
+
diff --git a/roles/dhcp/templates/dhcpd.conf b/roles/dhcp/templates/dhcpd.conf
new file mode 100644
index 0000000..47f5af2
--- /dev/null
+++ b/roles/dhcp/templates/dhcpd.conf
@@ -0,0 +1,58 @@
+include "/etc/dhcp/rndc.key";
+
+omapi-port 7911;
+omapi-key rndc-key;
+
+#++++++++++++++++++++++++++++++++++++++++++++++ Global
+
+authoritative;
+log-facility local7;
+update-static-leases on;
+use-host-decl-names on;
+default-lease-time 86400;
+max-lease-time 86400;
+
+option domain-name "{{ domain_name.name }}";
+option domain-name-servers {{ domain_name.servers }};
+option ntp-servers {{ ntp_servers }};
+
+# DHCP daemon uses default time zone UTC
+db-time-format local;
+
+# Allow each client to have exactly one lease, and expire
+# old leases if a new DHCPDISCOVER occurs
+one-lease-per-client true;
+
+# This checking cause just 1s time delay in responding DHCPDISCOVER messages
+# but it may help to abandone old leases from db
+ping-check true;
+
+#++++++++++++++++++++++++++++++++++++++++++++++ DNS
+
+ddns-update-style interim;
+ddns-updates on;
+
+deny client-updates;
+deny duplicates;
+deny declines;
+
+zone 10.in-addr.arpa. {
+	primary {{ domain_name.server_primary }};
+	key rndc-key;
+}
+zone 16.172.in-addr.arpa. {
+	primary {{ domain_name.server_primary }};
+	key rndc-key;
+}
+zone 168.192.in-addr.arpa. {
+	primary {{ domain_name.server_primary }};
+	key rndc-key;
+}
+
+on commit {
+	log (concat("Host registered: ", config-option host-name));
+}
+
+#++++++++++++++++++++++++++++++++++++++++++++++ Subnets
+
+{{ subnets }}
diff --git a/roles/dhcp/templates/partner.conf b/roles/dhcp/templates/partner.conf
new file mode 100644
index 0000000..ab3b952
--- /dev/null
+++ b/roles/dhcp/templates/partner.conf
@@ -0,0 +1 @@
+{{ partner }}
\ No newline at end of file
diff --git a/roles/dhcp/templates/rndc.key b/roles/dhcp/templates/rndc.key
new file mode 100644
index 0000000..5ed1d24
--- /dev/null
+++ b/roles/dhcp/templates/rndc.key
@@ -0,0 +1,4 @@
+key "rndc-key" {
+	algorithm hmac-md5;
+	secret "{{ lookup(passbolt, 'rndc-key', folder_parent_id=passbolt_folder).password }}";
+};
\ No newline at end of file
diff --git a/roles/services/tasks/main.yml b/roles/services/tasks/main.yml
index c86c5c8..4f5bbea 100644
--- a/roles/services/tasks/main.yml
+++ b/roles/services/tasks/main.yml
@@ -2,3 +2,4 @@
   tags: timeserver
 - import_tasks: adsamba.yml
   tags: adsamba
+