1.0.0 Release IaaS
This commit is contained in:
29
ansible/roles/console/tasks/node/load_secret_vars.yaml
Normal file
29
ansible/roles/console/tasks/node/load_secret_vars.yaml
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
- name: Check sops installation (Prerequisite)
|
||||
ansible.builtin.shell: |
|
||||
command -v sops
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
register: "is_sops_installed"
|
||||
ignore_errors: true
|
||||
|
||||
- name: Failure when sops is missing
|
||||
ansible.builtin.fail:
|
||||
msg: "sops is not installed. Please install sops manually as described in README.md before running this playbook"
|
||||
when: is_sops_installed.rc != 0
|
||||
|
||||
- name: Decrypt secret values in console
|
||||
environment:
|
||||
SOPS_AGE_KEY: "{{ hostvars['console']['age_key'] }}"
|
||||
ansible.builtin.command: |
|
||||
sops -d --output-type yaml {{ hostvars['console']['node']['config_path'] }}/secrets/secrets.yaml
|
||||
changed_when: false
|
||||
register: "decrypted_secrets"
|
||||
run_once: true
|
||||
no_log: true
|
||||
|
||||
- name: Load decrypted secret vaules in console
|
||||
ansible.builtin.set_fact:
|
||||
"{{ item.key }}": "{{ item.value }}"
|
||||
loop: "{{ decrypted_secrets.stdout | from_yaml | dict2items }}"
|
||||
no_log: true
|
||||
109
ansible/roles/console/tasks/node/set_ssh_client.yaml
Normal file
109
ansible/roles/console/tasks/node/set_ssh_client.yaml
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
- name: Create ssh id_console
|
||||
ansible.builtin.copy:
|
||||
content: "{{ hostvars['console']['ssh']['console']['key'] }}"
|
||||
dest: "/etc/secrets/{{ node['uid'] }}/id_console"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "root"
|
||||
mode: "0400"
|
||||
become: true
|
||||
no_log: true
|
||||
|
||||
- name: Create ssh id_console.pub
|
||||
ansible.builtin.copy:
|
||||
content: "{{ hostvars['console']['ssh']['console']['pub'] }}"
|
||||
dest: "/etc/secrets/{{ node['uid'] }}/id_console.pub"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "root"
|
||||
mode: "0400"
|
||||
become: true
|
||||
no_log: true
|
||||
|
||||
- name: Create ssh_known_hosts
|
||||
become: true
|
||||
ansible.builtin.copy:
|
||||
content: |
|
||||
@cert-authority *.ilnmors.internal {{ hostvars['console']['ssh']['ca']['pub'] }}
|
||||
dest: "/etc/ssh/ssh_known_hosts"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
mode: "0644"
|
||||
no_log: true
|
||||
|
||||
- name: Check id_console-cert.pub
|
||||
ansible.builtin.stat:
|
||||
path: "/etc/secrets/{{ node['uid'] }}/id_console-cert.pub"
|
||||
register: "is_signed_console_key"
|
||||
|
||||
- name: Get current id_console-cert.pub allow users
|
||||
ansible.builtin.shell: |
|
||||
set -o pipefail
|
||||
ssh-keygen -L -f /etc/secrets/{{ node['uid'] }}/id_console-cert.pub | \
|
||||
sed -n '/Principals:/,/Critical Options:/p' | \
|
||||
sed '1d;$d' | \
|
||||
sed 's/^[[:space:]]*//'
|
||||
when: is_signed_console_key.stat.exists
|
||||
changed_when: false
|
||||
register: "current_allow_users"
|
||||
no_log: true
|
||||
|
||||
- name: Set key informations
|
||||
ansible.builtin.set_fact:
|
||||
current_user_list: "{{ current_allow_users.stdout_lines }}"
|
||||
when: is_signed_console_key.stat.exists
|
||||
no_log: true
|
||||
|
||||
- name: Compare key values between current information and defined information
|
||||
ansible.builtin.set_fact:
|
||||
is_certificate_info_different: true
|
||||
when: (current_user_list | default([])) != (node['ssh_users'].split(',') | map('trim') | list)
|
||||
|
||||
- name: Get SSH CA and signing
|
||||
when: not is_signed_console_key.stat.exists or (is_certificate_info_different | default(false))
|
||||
block:
|
||||
- name: Get SSH CA
|
||||
ansible.builtin.copy:
|
||||
content: |
|
||||
{{ hostvars['console']['ssh']['ca']['key'] }}
|
||||
dest: "/run/user/{{ node['uid'] }}/local_ssh_ca_private_key"
|
||||
owner: "console"
|
||||
group: "svadmins"
|
||||
mode: "0400"
|
||||
no_log: true
|
||||
- name: Sign on ssh console key (pub file)
|
||||
ansible.builtin.command: |
|
||||
ssh-keygen -s /run/user/{{ node['uid'] }}/local_ssh_ca_private_key \
|
||||
-I "{{ node['name'] }}" \
|
||||
-n "{{ node['ssh_users'] }}" \
|
||||
/etc/secrets/{{ node['uid'] }}/id_console.pub
|
||||
become: true
|
||||
changed_when: not is_signed_console_key.stat.exists or (is_certificate_info_different | default(false))
|
||||
no_log: true
|
||||
always:
|
||||
- name: Clean temporary files
|
||||
ansible.builtin.file:
|
||||
path: "/run/user/{{ node['uid'] }}/local_ssh_ca_private_key"
|
||||
state: "absent"
|
||||
no_log: true
|
||||
|
||||
- name: Create .ssh directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ node['home_path'] }}/.ssh"
|
||||
state: "directory"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "svadmins"
|
||||
mode: "0700"
|
||||
|
||||
- name: Create ssh config file
|
||||
ansible.builtin.copy:
|
||||
content: |
|
||||
{% for host in groups['all'] if host != 'console' %}
|
||||
Host {{ host }}
|
||||
HostName {{ hostvars[host]['ansible_host'] }}
|
||||
User {{ hostvars[host]['ansible_user'] }}
|
||||
IdentityFile /etc/secrets/{{ node['uid'] }}/id_console
|
||||
{% endfor %}
|
||||
dest: "{{ node['home_path'] }}/.ssh/config"
|
||||
owner: "{{ ansible_user }}"
|
||||
group: "svadmins"
|
||||
mode: "0600"
|
||||
Reference in New Issue
Block a user