From 21fb088a8b3277cc582c1a71b7af8bab80517492 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=94=D0=BE=D0=BB=D0=B3=D0=B8=D0=B9=20=D0=90=D1=80=D1=82?=
 =?UTF-8?q?=D1=91=D0=BC?= <artem@da2001.ru>
Date: Fri, 25 Aug 2023 15:01:42 +0300
Subject: [PATCH] add deploy_second_dc

---
 ansible_deploy_dc/add_samba_clients.yml       |  23 ++--
 ansible_deploy_dc/add_samba_users.yml         |   2 +-
 .../{check_primary_dc.yml => check_dc.yml}    |   2 +-
 ansible_deploy_dc/deploy_primary_dc.yml       |   2 +-
 ansible_deploy_dc/deploy_second_dc.yml        | 125 ++++++++++++++++++
 ansible_deploy_dc/hosts.ini                   |   3 +-
 ansible_deploy_dc/mutable_vars.yml            |   3 +-
 7 files changed, 140 insertions(+), 20 deletions(-)
 rename ansible_deploy_dc/{check_primary_dc.yml => check_dc.yml} (99%)
 create mode 100644 ansible_deploy_dc/deploy_second_dc.yml

diff --git a/ansible_deploy_dc/add_samba_clients.yml b/ansible_deploy_dc/add_samba_clients.yml
index ade69fe..0358b1a 100644
--- a/ansible_deploy_dc/add_samba_clients.yml
+++ b/ansible_deploy_dc/add_samba_clients.yml
@@ -27,24 +27,17 @@
       name: "{{ inventory_hostname }}.{{ dc_details.realm }}"
       use: systemd
 
-  - name: Настройка синхронизации времени с контроллером домена - {{ dc_details.dc_ip }}
-    ansible.builtin.lineinfile:
-      path: /etc/resolvconf.conf
-      regexp: '^server .*'
-      line: server {{ dc_details.dc_ip }}
-  
-  - name: Перезапуск службы синхронизации времени
-    ansible.builtin.systemd:
-      name: "{{ sync_time_daemon }}"
-      enabled: true
-      state: restarted
-      masked: false
-
-  - name: Настройка резолвера на контроллер домена - {{ dc_details.dc_ip }}
+  - name: Настройка резолвера на контроллеры домена - {{ dc_details.dc1_ip }}, {{ dc_details.dc2_ip }}
     ansible.builtin.lineinfile:
       path: /etc/resolvconf.conf
       regexp: '^name_servers'
-      line: name_servers={{ dc_details.dc_ip }}
+      line: name_servers="{{ dc_details.dc1_ip }} {{ dc_details.dc2_ip }}"
+  
+  # - name: Настройка резолвера доменную зону - {{ dc_details.realm }}
+  #   ansible.builtin.lineinfile:
+  #     path: /etc/resolvconf.conf
+  #     regexp: '^search_domains'
+  #     line: search_domains={{ dc_details.realm }}
   
   - name: Обновление конфигурации резолвера
     ansible.builtin.shell: "resolvconf -u"
diff --git a/ansible_deploy_dc/add_samba_users.yml b/ansible_deploy_dc/add_samba_users.yml
index c657a8f..a71793b 100644
--- a/ansible_deploy_dc/add_samba_users.yml
+++ b/ansible_deploy_dc/add_samba_users.yml
@@ -1,7 +1,7 @@
 ---
 
 - name: Создание пользователей контроллера домена
-  hosts: dctest
+  hosts: dctest1
   vars:
     - samba_user_mode: create
   vars_files:
diff --git a/ansible_deploy_dc/check_primary_dc.yml b/ansible_deploy_dc/check_dc.yml
similarity index 99%
rename from ansible_deploy_dc/check_primary_dc.yml
rename to ansible_deploy_dc/check_dc.yml
index 93c8148..cd7d748 100644
--- a/ansible_deploy_dc/check_primary_dc.yml
+++ b/ansible_deploy_dc/check_dc.yml
@@ -1,7 +1,7 @@
 ---
 
 - name: Проверка состояния контроллера домена
-  hosts: dctest
+  hosts: dctest1
   vars_files:
     - vars.yml
     - mutable_vars.yml
diff --git a/ansible_deploy_dc/deploy_primary_dc.yml b/ansible_deploy_dc/deploy_primary_dc.yml
index e3f5beb..210f87d 100644
--- a/ansible_deploy_dc/deploy_primary_dc.yml
+++ b/ansible_deploy_dc/deploy_primary_dc.yml
@@ -1,7 +1,7 @@
 ---
 
 - name: Разворачивание контроллера домена
-  hosts: dctest
+  hosts: dctest1
   vars_files:
     - vars.yml
     - mutable_vars.yml
diff --git a/ansible_deploy_dc/deploy_second_dc.yml b/ansible_deploy_dc/deploy_second_dc.yml
new file mode 100644
index 0000000..e086448
--- /dev/null
+++ b/ansible_deploy_dc/deploy_second_dc.yml
@@ -0,0 +1,125 @@
+---
+
+- name: Разворачивание контроллера домена
+  hosts: dctest2
+  vars_files:
+    - vars.yml
+    - mutable_vars.yml
+
+  tasks:
+  - name: Проверка соответствия ОС
+    ansible.builtin.fail:
+      msg: Операционная система должна быть Альт
+    when: ansible_os_family != "Altlinux"
+
+  - name: Проверка наличия развёрнутого домена на хосте {{ ansible_hostname }}
+    ansible.builtin.shell: "samba-tool domain info {{ ansible_default_ipv4.address }}"
+    register: samba_tool_result
+    ignore_errors: yes
+    
+  - name: Если на хосте развёрнут домен, выполнение прерывается
+    ansible.builtin.fail:
+      msg: На хосте {{ ansible_hostname }} обнаружен развёрнутый домен. Прерываю выполнение
+    when:
+      - samba_tool_result.failed == false
+
+  - name: Обновление системы
+    apt_rpm:
+      update_cache: true
+      dist_upgrade: true
+      clean: true
+  
+  - name: Назначение корректного имени хоста
+    ansible.builtin.hostname:
+      name: "{{ inventory_hostname }}.{{ dc_details.realm }}"
+      use: systemd
+
+  - name: Установка пакетов {{ packages }}
+    apt_rpm:
+      package: "{{ item }}"
+      state: present
+      update_cache: yes
+    loop: "{{ packages }}"
+  
+  - name: Разрешить подключение клиентов для синхронизации времени
+    ansible.builtin.lineinfile:
+      path: /etc/chrony.conf
+      line: allow all
+      create: yes
+
+  - name: Настройка синхронизации времени с контроллером домена - {{ dc_details.dc_ip }}
+    ansible.builtin.lineinfile:
+      path: /etc/resolvconf.conf
+      regexp: '^server .*'
+      line: server {{ dc_details.dc_ip }}
+  
+  - name: Перезапуск службы синхронизации времени
+    ansible.builtin.systemd:
+      name: "{{ sync_time_daemon }}"
+      enabled: true
+      state: restarted
+      masked: false
+
+  - name: Отключение служб, которые будут конфликтовать с контроллером
+    ansible.builtin.systemd:
+      name: "{{ item }}"
+      enabled: false
+      state: stopped
+    loop: "{{ stop_daemons }}"
+    ignore_errors: yes
+
+  - name: Удалить старую конфигурацию Samba
+    ansible.builtin.file:
+      path: "{{ item }}"
+      state: absent
+      force: true
+    loop: "{{ old_config_to_remove }}"
+
+  - name: Создать каталог для хранения групповых политик
+    ansible.builtin.file:
+      path: "{{ gp_folder }}"
+      state: directory
+      mode: '0755'
+
+  - name: Настройка резолвера на контроллер домена - {{ dc_details.dc_ip }}
+    ansible.builtin.lineinfile:
+      path: /etc/resolvconf.conf
+      regexp: '^name_servers'
+      line: name_servers={{ dc_details.dc_ip }}
+  
+  # - name: Настройка резолвера доменную зону - {{ dc_details.realm }}
+  #   ansible.builtin.lineinfile:
+  #     path: /etc/resolvconf.conf
+  #     regexp: '^search_domains'
+  #     line: search_domains={{ dc_details.realm }}
+
+  ################################################################################################
+
+  # !!! Как обратится к первому контроллеру,чтобы добавить в DNS запись о втором контроллере? !!!
+
+  ################################################################################################
+  
+  - name: Обновление конфигурации резолвера
+    ansible.builtin.shell: "resolvconf -u"
+
+  - name: Разворачивание первого контроллера домена
+    ansible.builtin.shell: |
+      samba-tool domain provision --realm={{ dc_details.realm }} --domain={{ dc_details.domain }} \
+        --adminpass='{{ dc_details.adminpass }}' --dns-backend=SAMBA_INTERNAL \
+        --option="dns forwarder={{ dc_details.dns_forwarder }}" --server-role=dc --use-rfc2307
+    register: dc_provision_output
+  - ansible.builtin.debug:
+      msg: dc_provision_output.stdout_lines
+  
+  - name: Включение службы {{ samba_service }}
+    ansible.builtin.systemd:
+      name: "{{ samba_service }}"
+      enabled: true
+      state: restarted
+      masked: false
+
+  - name: Копирование конфигурации Kerberos
+    ansible.builtin.copy:
+      remote_src: true
+      src: /var/lib/samba/private/krb5.conf
+      dest: /etc/krb5.conf
diff --git a/ansible_deploy_dc/hosts.ini b/ansible_deploy_dc/hosts.ini
index f3d86eb..5465932 100644
--- a/ansible_deploy_dc/hosts.ini
+++ b/ansible_deploy_dc/hosts.ini
@@ -6,7 +6,8 @@ alts2 ansible_host=10.1.1.12 ansible_user=root
 alts3 ansible_host=10.1.1.13 ansible_user=root
 
 [test]
-dctest ansible_host=192.168.13.139 ansible_user=root
+dctest1 ansible_host=192.168.13.139 ansible_user=root
+dctest2 ansible_host=192.168.13.155 ansible_user=root
 
 [testws]
 altws ansible_host=192.168.13.152 ansible_user=root
diff --git a/ansible_deploy_dc/mutable_vars.yml b/ansible_deploy_dc/mutable_vars.yml
index 8138490..25820fd 100644
--- a/ansible_deploy_dc/mutable_vars.yml
+++ b/ansible_deploy_dc/mutable_vars.yml
@@ -1,5 +1,6 @@
 dc_details:
-  dc_ip: 192.168.13.139
+  dc1_ip: 192.168.13.139
+  dc2_ip: 192.168.13.155
   realm: alt.lan
   realm_u: ALT.LAN
   domain: alt