167 lines
4.6 KiB
YAML
167 lines
4.6 KiB
YAML
- name: Install K3s
|
|
ansible.builtin.command:
|
|
cmd: ./install.sh
|
|
chdir: /opt/metacluster/k3s
|
|
environment:
|
|
INSTALL_K3S_SKIP_DOWNLOAD: 'true'
|
|
INSTALL_K3S_EXEC: 'server --cluster-init --disable local-storage'
|
|
|
|
- name: Install kubectl tab-completion
|
|
ansible.builtin.shell:
|
|
cmd: kubectl completion bash | tee /etc/bash_completion.d/kubectl
|
|
|
|
- name: Ensure API availability
|
|
ansible.utils.cli_parse:
|
|
command: curl -k https://{{ vapp['guestinfo.ipaddress'] }}:6443/livez?verbose
|
|
parser:
|
|
name: ansible.utils.json
|
|
set_fact: api_readycheck
|
|
ignore_errors: yes
|
|
until: api_readycheck.apiVersion is defined
|
|
retries: 3
|
|
delay: 30
|
|
|
|
- block:
|
|
|
|
- name: Initialize tempfile
|
|
ansible.builtin.tempfile:
|
|
state: file
|
|
register: kubeconfig
|
|
|
|
- name: Retrieve kubeconfig
|
|
ansible.builtin.command:
|
|
cmd: kubectl config view --raw
|
|
register: kubectl_config
|
|
|
|
- name: Store kubeconfig in tempfile
|
|
ansible.builtin.copy:
|
|
dest: "{{ kubeconfig.path }}"
|
|
content: "{{ kubectl_config.stdout }}"
|
|
mode: 0600
|
|
no_log: true
|
|
|
|
- block:
|
|
|
|
- name: Extract container images
|
|
ansible.builtin.unarchive:
|
|
src: /opt/metacluster/container-images/image-tarballs.tgz
|
|
dest: /opt/metacluster/container-images
|
|
list_files: yes
|
|
register: imagetarballs
|
|
|
|
- name: Import container images
|
|
ansible.builtin.command:
|
|
cmd: k3s ctr image import {{ item }}
|
|
chdir: /opt/metacluster/container-images
|
|
loop: "{{ imagetarballs.files }}"
|
|
|
|
- name: Install longhorn chart
|
|
kubernetes.core.helm:
|
|
name: longhorn
|
|
chart_ref: /opt/metacluster/helm-charts/longhorn
|
|
release_namespace: longhorn-system
|
|
create_namespace: yes
|
|
wait: yes
|
|
kubeconfig: "{{ kubeconfig.path }}"
|
|
values:
|
|
defaultSettings:
|
|
defaultDataPath: /mnt/blockstorage
|
|
defaultReplicaCount: 1
|
|
ingress:
|
|
enabled: true
|
|
host: storage.{{ vapp['metacluster.fqdn'] }}
|
|
persistence:
|
|
defaultClassReplicaCount: 1
|
|
|
|
- name: Install harbor chart
|
|
kubernetes.core.helm:
|
|
name: harbor
|
|
chart_ref: /opt/metacluster/helm-charts/harbor
|
|
release_namespace: harbor
|
|
create_namespace: yes
|
|
wait: yes
|
|
kubeconfig: "{{ kubeconfig.path }}"
|
|
values:
|
|
expose:
|
|
ingress:
|
|
hosts:
|
|
core: registry.{{ vapp['metacluster.fqdn'] }}
|
|
externalURL: https://registry.{{ vapp['metacluster.fqdn'] }}
|
|
harborAdminPassword: "{{ vapp['guestinfo.rootpw'] }}"
|
|
notary:
|
|
enabled: false
|
|
|
|
- name: Push images to registry
|
|
ansible.builtin.shell:
|
|
cmd: >-
|
|
skopeo copy \
|
|
--dest-tls-verify=false \
|
|
--dest-creds admin:{{ vapp['guestinfo.rootpw'] }} \
|
|
docker-archive:./{{ item }} \
|
|
docker://registry.{{ vapp['metacluster.fqdn'] }}/library/$( \
|
|
k3s ctr run \
|
|
--rm \
|
|
--mount type=bind,src=$PWD,dst=/data,options=rbind:ro \
|
|
quay.io/skopeo/stable:v1.8.0 skopeo \
|
|
skopeo list-tags docker-archive:/data/{{ item }} | \
|
|
jq -r '.Tags[0]')
|
|
chdir: /opt/metacluster/container-images/
|
|
loop: "{{ imagetarballs.files }}"
|
|
|
|
- name: Delete container image tarballs/archives
|
|
ansible.builtin.file:
|
|
path: /opt/metacluster/container-images
|
|
state: absent
|
|
|
|
- name: Configure K3s node for private registry
|
|
ansible.builtin.template:
|
|
dest: /etc/rancher/k3s/registries.yaml
|
|
src: registries.j2
|
|
|
|
- name: Install gitea chart
|
|
kubernetes.core.helm:
|
|
name: gitea
|
|
chart_ref: /opt/metacluster/helm-charts/gitea
|
|
release_namespace: gitea
|
|
create_namespace: yes
|
|
wait: yes
|
|
kubeconfig: "{{ kubeconfig.path }}"
|
|
values:
|
|
gitea:
|
|
admin:
|
|
username: administrator
|
|
password: "{{ vapp['guestinfo.rootpw'] }}"
|
|
email: admin@{{ vapp['metacluster.fqdn'] }}
|
|
image:
|
|
pullPolicy: IfNotPresent
|
|
ingress:
|
|
enabled: true
|
|
hosts:
|
|
- host: git.{{ vapp['metacluster.fqdn'] }}
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
|
|
- name: Install argo-cd chart
|
|
kubernetes.core.helm:
|
|
name: argo-cd
|
|
chart_ref: /opt/metacluster/helm-charts/argo-cd
|
|
release_namespace: argo-cd
|
|
create_namespace: yes
|
|
wait: yes
|
|
kubeconfig: "{{ kubeconfig.path }}"
|
|
values:
|
|
server:
|
|
extraArgs:
|
|
- --insecure
|
|
ingress:
|
|
enabled: true
|
|
hosts:
|
|
- gitops.{{ vapp['metacluster.fqdn'] }}
|
|
|
|
- name: Cleanup tempfile
|
|
ansible.builtin.file:
|
|
path: "{{ kubeconfig.path }}"
|
|
state: absent
|
|
when: kubeconfig.path is defined
|