From 8b4bc3c73682eedfa099a3ca70bc29fa6bb8b810 Mon Sep 17 00:00:00 2001 From: ITQ Date: Tue, 21 Jul 2026 00:13:42 +0300 Subject: [PATCH] feat(roles/salt): added salt role --- roles/salt/defaults/main.yaml | 6 ++++++ roles/salt/handlers/main.yaml | 10 ++++++++++ roles/salt/tasks/main.yaml | 14 +++++++++++++ roles/salt/tasks/master.yaml | 20 +++++++++++++++++++ roles/salt/tasks/minion.yaml | 20 +++++++++++++++++++ roles/salt/tasks/repo.yaml | 36 ++++++++++++++++++++++++++++++++++ roles/salt/templates/master.j2 | 11 +++++++++++ roles/salt/templates/minion.j2 | 5 +++++ 8 files changed, 122 insertions(+) create mode 100644 roles/salt/defaults/main.yaml create mode 100644 roles/salt/handlers/main.yaml create mode 100644 roles/salt/tasks/main.yaml create mode 100644 roles/salt/tasks/master.yaml create mode 100644 roles/salt/tasks/minion.yaml create mode 100644 roles/salt/tasks/repo.yaml create mode 100644 roles/salt/templates/master.j2 create mode 100644 roles/salt/templates/minion.j2 diff --git a/roles/salt/defaults/main.yaml b/roles/salt/defaults/main.yaml new file mode 100644 index 0000000..b5ec77d --- /dev/null +++ b/roles/salt/defaults/main.yaml @@ -0,0 +1,6 @@ +--- +salt_role: minion + +salt_master: salt.example.com +salt_master_id: master +salt_minion_id: "{{ inventory_hostname }}" diff --git a/roles/salt/handlers/main.yaml b/roles/salt/handlers/main.yaml new file mode 100644 index 0000000..441189e --- /dev/null +++ b/roles/salt/handlers/main.yaml @@ -0,0 +1,10 @@ +--- +- name: Restart salt-master + ansible.builtin.service: + name: salt-master + state: restarted + +- name: Restart salt-minion + ansible.builtin.service: + name: salt-minion + state: restarted diff --git a/roles/salt/tasks/main.yaml b/roles/salt/tasks/main.yaml new file mode 100644 index 0000000..9e3c134 --- /dev/null +++ b/roles/salt/tasks/main.yaml @@ -0,0 +1,14 @@ +--- +- name: Validate salt_role + ansible.builtin.assert: + that: + - salt_role in ["master", "minion"] + fail_msg: "salt_role must be either 'master' or 'minion'" + +- import_tasks: repo.yaml + +- import_tasks: master.yaml + when: salt_role == "master" + +- import_tasks: minion.yaml + when: salt_role == "minion" diff --git a/roles/salt/tasks/master.yaml b/roles/salt/tasks/master.yaml new file mode 100644 index 0000000..8857742 --- /dev/null +++ b/roles/salt/tasks/master.yaml @@ -0,0 +1,20 @@ +--- +- name: Install Salt Master + ansible.builtin.package: + name: salt-master + state: present + +- name: Configure Salt Master + ansible.builtin.template: + src: master.j2 + dest: /etc/salt/master + owner: root + group: root + mode: "0644" + notify: Restart salt-master + +- name: Ensure salt-master service is enabled + ansible.builtin.service: + name: salt-master + state: started + enabled: true diff --git a/roles/salt/tasks/minion.yaml b/roles/salt/tasks/minion.yaml new file mode 100644 index 0000000..a425c40 --- /dev/null +++ b/roles/salt/tasks/minion.yaml @@ -0,0 +1,20 @@ +--- +- name: Install Salt Minion + ansible.builtin.package: + name: salt-minion + state: present + +- name: Configure Salt Minion + ansible.builtin.template: + src: minion.j2 + dest: /etc/salt/minion + owner: root + group: root + mode: "0644" + notify: Restart salt-minion + +- name: Ensure salt-minion service is enabled + ansible.builtin.service: + name: salt-minion + state: started + enabled: true diff --git a/roles/salt/tasks/repo.yaml b/roles/salt/tasks/repo.yaml new file mode 100644 index 0000000..cab337d --- /dev/null +++ b/roles/salt/tasks/repo.yaml @@ -0,0 +1,36 @@ +--- +- name: Ensure APT keyrings directory exists + ansible.builtin.file: + path: /etc/apt/keyrings + state: directory + mode: "0755" + +- name: Download Salt public key + ansible.builtin.get_url: + url: https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public + dest: /tmp/salt-public.key + mode: "0644" + +- name: Convert Salt key to keyring + ansible.builtin.command: + cmd: > + gpg --dearmor + --output /etc/apt/keyrings/salt-archive-keyring.pgp + /tmp/salt-public.key + args: + creates: /etc/apt/keyrings/salt-archive-keyring.pgp + +- name: Remove temporary Salt public key + ansible.builtin.file: + path: /tmp/salt-public.key + state: absent + +- name: Install Salt repository + ansible.builtin.get_url: + url: https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.sources + dest: /etc/apt/sources.list.d/salt.sources + mode: "0644" + +- name: Update apt cache + ansible.builtin.apt: + update_cache: true diff --git a/roles/salt/templates/master.j2 b/roles/salt/templates/master.j2 new file mode 100644 index 0000000..4bbde11 --- /dev/null +++ b/roles/salt/templates/master.j2 @@ -0,0 +1,11 @@ +interface: 0.0.0.0 + +auto_accept: False + +file_roots: + base: + - /srv/salt/roots + +pillar_roots: + base: + - /srv/salt/pillar diff --git a/roles/salt/templates/minion.j2 b/roles/salt/templates/minion.j2 new file mode 100644 index 0000000..087c145 --- /dev/null +++ b/roles/salt/templates/minion.j2 @@ -0,0 +1,5 @@ +master: {{ salt_master }} +id: {{ salt_minion_id }} + +grains: + role: {{ salt_role }}