Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions deploy-keytab.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#* This playbook exports the kerberos host keytab from IPA and deploys
#* it on a host to /etc/krb5.keytab.
#* It requires your Ansible user to have SSH access to the IPA server
#* and a valid kerberos ticket with the required export permissions
#* already issued.
#* No arguments are needed.

- name: Export Kerberos keytab from IPA and deploy it on host
hosts: host.Virtual,&os.debian_buster

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't really like this. Should we make a new class host.IPAClient or something? Or any other suggestion how to restrict this to designated hosts?


vars:
deploy_keytab__ipa_host_delegation: "{{ ipa.servers|first | default('ipa.' + ansible_domain) }}"

tasks:
- name: Query keytab
become: True
stat:
path: /etc/krb5.keytab
register: deploy_keytab__register_keytab

- name: Run tasks to install host keytab
block:
- name: Create temporary directory
delegate_to: "{{ deploy_keytab__ipa_host_delegation }}"
tempfile:
state: directory
prefix: "keytab."
register: deploy_keytab__register_tempdir

- name: Export host keytab
delegate_to: "{{ deploy_keytab__ipa_host_delegation }}"
command: >
/usr/sbin/ipa-getkeytab
-s {{ deploy_keytab__ipa_host_delegation }}
-p host/{{ ansible_fqdn }}
-k {{ deploy_keytab__register_tempdir.path }}/krb5.keytab

- name: Fetch keytab from IPA server
delegate_to: "{{ deploy_keytab__ipa_host_delegation }}"
fetch:
src: "{{ deploy_keytab__register_tempdir.path }}/krb5.keytab"
# copy file to playbook directory
dest: "./"

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any dedicated location for temporarily storing files on the Ansible controller? Or should I create a tmpdir there too?

flat: yes

- name: Copy keytab to host
become: True
copy:
src: "krb5.keytab"
dest: "/etc/krb5.keytab"
owner: root
group: root
mode: 0600

- name: Remove temporary directory
delegate_to: "{{ deploy_keytab__ipa_host_delegation }}"
file:
path: "{{ deploy_keytab__register_tempdir.path }}"
state: absent

- name: Remove temporary keytab
delegate_to: localhost
file:
path: "krb5.keytab"
state: absent

when: not deploy_keytab__register_keytab.stat.exists
36 changes: 36 additions & 0 deletions setup-ipa-client.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#* This playbook registers a new host on the IPA domain which will
#* create an internal DNS record and setup user authentication via
#* LDAP/Kerberos.
#* Use '-a' to pass parameters to ansible (as '-e').
#* No arguments are mandatory.

- name: Register host on IPA domain
hosts: host.Virtual,&os.debian_buster

vars:
setup_ipa_client__ipa_host_delegation: "{{ ipa.servers|first | default('ipa.' + ansible_domain) }}"

tasks:
- name: Check IPA server login
delegate_to: "{{ setup_ipa_client__ipa_host_delegation }}"
run_once: true
ping:

- name: Check for valid kerberos ticket
delegate_to: "{{ setup_ipa_client__ipa_host_delegation }}"
changed_when: false
command: klist

- name: Query IPA for host
delegate_to: "{{ setup_ipa_client__ipa_host_delegation }}"
# If host not joined yet, return code 2
failed_when: setup_ipa_client__register__host_show.rc not in [0, 2]
command: ipa host-show "{{ ansible_fqdn }}"
register: setup_ipa_client__register__host_show

- name: Add host to IPA
delegate_to: "{{ setup_ipa_client__ipa_host_delegation }}"
command: "ipa host-add --ip-address={{ ansible_default_ipv4.address }} {{ ansible_fqdn }}"
when: setup_ipa_client__register__host_show.rc != 0

- import_playbook: deploy-keytab.yml