Skip to content

Commit 0983d0d

Browse files
author
Martin Jackson
committed
Add Ansible playbook
1 parent 912b510 commit 0983d0d

1 file changed

Lines changed: 90 additions & 0 deletions

File tree

scripts/write-token-kubeconfig.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!env ansible-playbook
2+
---
3+
- name: Test k8s authentication methods
4+
hosts: localhost
5+
connection: local
6+
gather_facts: false
7+
become: false
8+
vars:
9+
kubeconfig_file: '~/.kube/config'
10+
k8s_host: '{{ lookup("env", "K8S_AUTH_HOST") }}'
11+
k8s_validate_certs: '{{ lookup("env", "K8S_AUTH_VERIFY_SSL") | default(false) | bool }}'
12+
k8s_username: '{{ lookup("env", "K8S_AUTH_USERNAME") | default("kubeconfig") }}'
13+
k8s_password: '{{ lookup("env", "K8S_AUTH_PASSWORD") | default(omit) }}'
14+
k8s_api_key: '{{ lookup("env", "K8S_AUTH_TOKEN") | default(omit) }}'
15+
k8s_ca_cert_file: '{{ lookup("env", "K8S_AUTH_SSL_CA_CERT") | default(omit) }}'
16+
tasks:
17+
- name: Check for pre-existing kubeconfig
18+
ansible.builtin.stat:
19+
path: '{{ kubeconfig_file }}'
20+
register: kubeconfig_stat
21+
22+
- name: Exit if kubeconfig found
23+
ansible.builtin.fail:
24+
msg: '{{ kubeconfig_file }} already exists! Exiting'
25+
when: kubeconfig_stat.stat.exists
26+
27+
- name: Get namespaces to test parameters
28+
kubernetes.core.k8s_info:
29+
host: '{{ k8s_host }}'
30+
validate_certs: '{{ k8s_validate_certs }}'
31+
username: '{{ k8s_username }}'
32+
api_key: '{{ k8s_api_key }}'
33+
ca_cert: '{{ k8s_ca_cert_file | default(omit) }}'
34+
kind: namespace
35+
when: k8s_api_key
36+
37+
- name: Login explicitly
38+
when: not k8s_api_key
39+
block:
40+
- name: Login explicitly to get token
41+
kubernetes.core.k8s_auth:
42+
host: '{{ k8s_host }}'
43+
validate_certs: '{{ k8s_validate_certs }}'
44+
username: '{{ k8s_username }}'
45+
password: '{{ k8s_password }}'
46+
ca_cert: '{{ k8s_ca_cert_file | default(omit) }}'
47+
register: auth
48+
49+
- name: Set api_key
50+
ansible.builtin.set_fact:
51+
k8s_api_key: '{{ auth.openshift_auth.api_key }}'
52+
53+
- name: Update username if needed
54+
ansible.builtin.set_fact:
55+
config_k8s_username: 'kube:admin'
56+
when: k8s_username == 'kubeadmin'
57+
58+
- name: Determine clustername
59+
ansible.builtin.set_fact:
60+
config_k8s_clustername: "{{ k8s_host | regex_replace('https://', '') | regex_replace('\\.', '-') }}"
61+
62+
- name: Write config file
63+
ansible.builtin.copy:
64+
content: |-
65+
apiVersion: v1
66+
clusters:
67+
- cluster:
68+
{% if k8s_validate_certs is false %}
69+
insecure-skip-tls-verify: true
70+
{% endif %}
71+
{% if k8s_ca_cert_file -%}
72+
certificate-authority-data: {{ lookup("file", k8s_ca_cert_file) | b64encode }}
73+
{% endif %}
74+
server: {{ k8s_host }}
75+
name: {{ config_k8s_clustername }}
76+
contexts:
77+
- context:
78+
cluster: {{ config_k8s_clustername }}
79+
namespace: default
80+
user: {{ config_k8s_username | default(k8s_username) }}/{{ config_k8s_clustername }}
81+
name: default/{{ config_k8s_clustername }}/{{ config_k8s_username | default(k8s_username) }}
82+
current-context: default/{{ config_k8s_clustername }}/{{ config_k8s_username | default(k8s_username) }}
83+
kind: Config
84+
preferences: {}
85+
users:
86+
- name: {{ config_k8s_username | default(k8s_username) }}/{{ config_k8s_clustername }}
87+
user:
88+
token: {{ k8s_api_key }}
89+
dest: '{{ kubeconfig_file }}'
90+
mode: '0640'

0 commit comments

Comments
 (0)