summaryrefslogtreecommitdiff
path: root/roles/kubernetes-master/tasks/main.yml
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2018-01-21 21:32:09 +0100
committerChristian Pointner <equinox@spreadspace.org>2018-01-21 21:32:09 +0100
commit266d0b0f06184e2865edf17b00a015a6aa8f050f (patch)
tree33d334eb9207dc688eae2c84fc235676ab528028 /roles/kubernetes-master/tasks/main.yml
parentfix spreadspace-apt repo deps (diff)
adding kubernetes nodes after first run works now
Diffstat (limited to 'roles/kubernetes-master/tasks/main.yml')
-rw-r--r--roles/kubernetes-master/tasks/main.yml89
1 files changed, 62 insertions, 27 deletions
diff --git a/roles/kubernetes-master/tasks/main.yml b/roles/kubernetes-master/tasks/main.yml
index e83bd749..4d6bdd6b 100644
--- a/roles/kubernetes-master/tasks/main.yml
+++ b/roles/kubernetes-master/tasks/main.yml
@@ -1,36 +1,56 @@
---
-- name: generate bootstrap token (1/2)
- command: kubeadm token generate
- changed_when: False
- check_mode: no
- register: kubeadm_token_generate
+- name: check if kubeconfig admin.conf already exists
+ stat:
+ path: /etc/kubernetes/admin.conf
+ register: kubeconfig_admin_stats
-- name: generate bootstrap token (2/2)
- set_fact:
- kube_bootstrap_token: "{{ kubeadm_token_generate.stdout }}"
+### cluster not yet initialized
+
+- name: create new cluster
+ when: kubeconfig_admin_stats.stat.exists == False
+ block:
+
+ - name: generate bootstrap token for new cluster
+ command: kubeadm token generate
+ changed_when: False
+ check_mode: no
+ register: kubeadm_token_generate
-################
-### check if master ist already initialized
+ - name: set up kubernetes master
+ command: "kubeadm init --pod-network-cidr {{ kubernetes.pod_ip_range }} --service-cidr {{ kubernetes.service_ip_range }} {% if kubernetes.api_extra_sans | length > 0 %}--apiserver-cert-extra-sans {{ kubernetes.api_extra_sans | join(',') }}{% endif %} --token '{{ kubeadm_token_generate.stdout }}' --token-ttl 42m --skip-token-print"
+ args:
+ creates: /etc/kubernetes/pki/ca.crt
+ register: kubeadm_init
-# if not
-- name: set up kubernetes master
- command: "kubeadm init --pod-network-cidr {{ kubernetes.pod_ip_range }} --service-cidr {{ kubernetes.service_ip_range }} {% if kubernetes.api_extra_sans | length > 0 %}--apiserver-cert-extra-sans {{ kubernetes.api_extra_sans | join(',') }}{% endif %} --token '{{ kube_bootstrap_token }}' --token-ttl 42m --skip-token-print"
- args:
- creates: /etc/kubernetes/pki/ca.crt
- register: kubeadm_init
+ - name: dump output of kubeadm init to log file
+ when: kubeadm_init.changed
+ copy:
+ content: "{{ kubeadm_init.stdout }}\n"
+ dest: /etc/kubernetes/kubeadm-init.log
-# if it is initialized
+### cluster is already initialized
-## TODO: add bootstrap token (with expiry)
+- name: prepare cluster for new nodes
+ when: kubeconfig_admin_stats.stat.exists == True
+ block:
-###
-################
+ - name: fetch list of current nodes
+ command: kubectl get nodes -o name
+ changed_when: False
+ check_mode: no
+ register: kubectl_node_list
-- name: dump output of kubeadm init to log file
- when: kubeadm_init.changed
- copy:
- content: "{{ kubeadm_init.stdout }}\n"
- dest: /etc/kubernetes/kubeadm-init.log
+ - name: save list of current nodes
+ set_fact:
+ kubernetes_current_nodes: "{{ kubectl_node_list.stdout_lines | map('replace', 'nodes/', '') | list }}"
+
+ - name: create bootstrap token for existing cluster
+ when: kubernetes_nodes | difference(kubernetes_current_nodes) | length > 0
+ command: kubeadm token create --ttl 42m
+ check_mode: no
+ register: kubeadm_token_create
+
+##
- name: check if master is tainted (1/2)
command: "kubectl --kubeconfig /etc/kubernetes/admin.conf get node {{ inventory_hostname }} -o json"
@@ -55,11 +75,26 @@
name: openssl
state: present
-- name: get ca certificate digest (1/2)
+- name: get ca certificate digest
shell: "openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'"
register: kube_ca_openssl
changed_when: False
-- name: get ca certificate digest (2/2)
+- name: set variables needed kubernetes-nodes to join the cluster
set_fact:
+ kube_bootstrap_token: "{% if kubeadm_token_generate.stdout is defined %}{{ kubeadm_token_generate.stdout }}{% elif kubeadm_token_create.stdout is defined %}{{ kubeadm_token_create.stdout }}{% endif %}"
kube_bootstrap_ca_cert_hash: "sha256:{{ kube_ca_openssl.stdout }}"
+
+- debug:
+ var: kube_bootstrap_token
+
+- name: prepare kubectl (1/2)
+ file:
+ name: /root/.kube
+ state: directory
+
+- name: prepare kubectl (2/2)
+ file:
+ dest: /root/.kube/config
+ src: /etc/kubernetes/admin.conf
+ state: link