* modify the template file to highlight optional host that stores WAC files * numerically reorder the tcp ports - fix the 404's on the documentation * add a configuration file - this allows automatic selection of inventory directory * provide better examples on documentation
		
			
				
	
	
		
			430 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			430 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| ---
 | |
| # by default this playbook will add the ip address of your endpoint
 | |
| # pass '-e host_name="my-domain.example.edu"' for it to work best
 | |
| #
 | |
| - name: deploy microk8s 
 | |
|   gather_facts: true
 | |
|   hosts: "{{ host_ip | default('inventory_hostname') }}"
 | |
|   remote_user: "{{ your_user }}"
 | |
|   become: true
 | |
|   vars_files:
 | |
|     - ../group_vars/microk8s/main.yml
 | |
| 
 | |
|   tasks:
 | |
|   # ===========================================
 | |
|   # Install pre-requisites (RedHat)
 | |
|   #
 | |
|   - name: microk8s | enable epel-release (RedHat)
 | |
|     ansible.builtin.dnf:
 | |
|       name: "{{ item }}"
 | |
|       state: present
 | |
|     loop:
 | |
|       - git
 | |
|       - epel-release
 | |
|       - python3
 | |
|       - python3-pip
 | |
|       - python3-firewall
 | |
|     become: true
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.dependencies
 | |
|       - microk8s.dependencies.apt
 | |
| 
 | |
|   - name: microk8s | set permissive selinux (RedHat)
 | |
|     ansible.builtin.command: /usr/sbin/setenforce 0
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
|     become: true
 | |
| 
 | |
|   - name: microk8s | allow permissive to persist (RedHat)
 | |
|     ansible.posix.selinux:
 | |
|       policy: targeted
 | |
|       state: permissive
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
|     become: true
 | |
| 
 | |
|   - name: microk8s | open microk8s web service
 | |
|     ansible.posix.firewalld:
 | |
|       service: "{{ item }}"
 | |
|       permanent: true
 | |
|       immediate: true
 | |
|       state: enabled
 | |
|     loop:
 | |
|       - https
 | |
|       - http
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
| 
 | |
|   - name: microk8s | open microk8s firewall ports
 | |
|     ansible.posix.firewalld:
 | |
|       port: "{{ item }}"
 | |
|       permanent: true
 | |
|       immediate: true
 | |
|       state: enabled
 | |
|     loop:
 | |
|       - 10250/tcp
 | |
|       - 10255/tcp
 | |
|       - 10257/tcp
 | |
|       - 10259/tcp
 | |
|       - 12379/tcp
 | |
|       - 16443/tcp
 | |
|       - 19001/tcp
 | |
|       - 25000/tcp
 | |
|       - 4789/udp
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
| 
 | |
|   # ===========================================
 | |
|   # Install microk8s
 | |
|   #
 | |
|   - name: microk8s | ensure dependencies are installed (Debian)
 | |
|     ansible.builtin.apt:
 | |
|       name:
 | |
|         - snapd
 | |
|         - fuse
 | |
|         - udev
 | |
|       state: present
 | |
|       update_cache: true
 | |
|       cache_valid_time: "{{ microk8s_cache_valid_time }}"
 | |
|     when:
 | |
|       - ansible_os_family == "Debian"
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.dependencies
 | |
|       - microk8s.dependencies.apt
 | |
| 
 | |
|   - name: microk8s | ensure dependencies are installed (RedHat)
 | |
|     ansible.builtin.dnf:
 | |
|       name:
 | |
|         - snapd
 | |
|         - fuse
 | |
|         - udev
 | |
|       state: present
 | |
|       update_cache: true
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.dependencies
 | |
|       - microk8s.dependencies.apt
 | |
| 
 | |
|   - name: microk8s | start and enable services
 | |
|     ansible.builtin.service:
 | |
|       name: "{{ microk8s_service }}"
 | |
|       state: started
 | |
|       enabled: true
 | |
|     loop:
 | |
|       - snapd
 | |
|     loop_control:
 | |
|       loop_var: microk8s_service
 | |
|       label: "{{ microk8s_service }}"
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.dependencies
 | |
|       - microk8s.dependencies.services
 | |
| 
 | |
|   - name: microk8s | start and enable services (Debian)
 | |
|     ansible.builtin.service:
 | |
|       name: "{{ microk8s_service }}"
 | |
|       state: started
 | |
|       enabled: true
 | |
|     loop:
 | |
|       - udev
 | |
|     loop_control:
 | |
|       loop_var: microk8s_service
 | |
|       label: "{{ microk8s_service }}"
 | |
|     when:
 | |
|       - ansible_os_family == "Debian"
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.dependencies
 | |
|       - microk8s.dependencies.services
 | |
| 
 | |
|   - name: microk8s | create symlinks (RedHat)
 | |
|     ansible.builtin.file:
 | |
|       src: /var/lib/snapd/snap
 | |
|       dest: /snap
 | |
|       state: link
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.dependencies
 | |
|       - microk8s.dependencies.services
 | |
| 
 | |
|   - name: microk8s | create new snap file (RedHat)
 | |
|     ansible.builtin.file:
 | |
|       path: /etc/profile.d/snap.sh
 | |
|       state: touch
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
| 
 | |
|   - name: microk8s | create new path (RedHat)
 | |
|     ansible.builtin.set_fact:
 | |
|       snap_path: "export PATH=$PATH:/var/lib/snapd/snap/bin"
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
| 
 | |
|   - name: microk8s | create config for file (RedHat)
 | |
|     ansible.builtin.copy:
 | |
|       content: "{{ snap_path }}"
 | |
|       dest: /etc/profile.d/snap.sh
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
| 
 | |
|   - name: microk8s | source environment (RedHat)
 | |
|     ansible.builtin.shell: source /etc/profile.d/snap.sh
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
| 
 | |
|   - name: microk8s | Install microk8s
 | |
|     community.general.snap:
 | |
|       name: microk8s
 | |
|       classic: true
 | |
|       channel: "{{ microk8s_channel }}"
 | |
|     notify: microk8s ready
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.install
 | |
| 
 | |
|   - name: microk8s | create kubectl alias
 | |
|     ansible.builtin.command:
 | |
|       cmd: snap alias microk8s.kubectl kubectl
 | |
|     changed_when: false
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.alias
 | |
|       - microk8s.alias.kubectl
 | |
| 
 | |
|   - name: microk8s | create helm3 alias
 | |
|     ansible.builtin.command:
 | |
|       cmd: snap alias microk8s.helm3 helm
 | |
|     changed_when: false
 | |
|     when:
 | |
|       - microk8s_plugins is defined
 | |
|       - microk8s_plugins.helm3 is defined
 | |
|       - microk8s_plugins.helm3
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.alias
 | |
|       - microk8s.alias.helm
 | |
| 
 | |
|   - name: microk8s | create dir for microk8s certificates
 | |
|     ansible.builtin.file:
 | |
|       path: /usr/share/ca-certificates/extra
 | |
|       state: directory
 | |
|       mode: 0755
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.certs
 | |
|       - microk8s.certs.dir
 | |
| 
 | |
|   - name: microk8s | Disable snap autoupdate
 | |
|     ansible.builtin.blockinfile:
 | |
|       dest: /etc/hosts
 | |
|       marker: "# {mark} ANSIBLE MANAGED: microk8s Disable snap autoupdate"
 | |
|       content: |
 | |
|         127.0.0.1 api.snapcraft.io        
 | |
|     when:
 | |
|       - (microk8s_disable_snap_autoupdate | bool)
 | |
|     tags:
 | |
|       - microk8s
 | |
|       - microk8s.disable_autoupdate
 | |
| 
 | |
|   # ===========================================
 | |
|   # Configure microk8s user and group
 | |
|   - name: microk8s user group | create {{ microk8s_user }} group
 | |
|     ansible.builtin.group:
 | |
|       name: "{{ microk8s_user }}"
 | |
|       state: present
 | |
| 
 | |
|   - name: microk8s user group | add user to group
 | |
|     ansible.builtin.user:
 | |
|       name: "{{ microk8s_user }}"
 | |
|       group: "{{ microk8s_user }}"
 | |
|       groups: microk8s
 | |
|       append: true
 | |
| 
 | |
|   - name: microk8s user group | Create .kube folder for the user
 | |
|     ansible.builtin.file:
 | |
|       path: "{{ microk8s_user_home }}/.kube"
 | |
|       state: directory
 | |
|       owner: '{{ microk8s_user }}'
 | |
|       group: '{{ microk8s_user }}'
 | |
|       mode: 0750
 | |
| 
 | |
|   - name: microk8s user group | create kubectl config
 | |
|     ansible.builtin.shell:
 | |
|       cmd: microk8s config > {{ microk8s_user_home }}/.kube/config
 | |
|     args:
 | |
|       executable: /bin/bash
 | |
|       creates: "{{ microk8s_user_home }}/.kube/config"
 | |
|     environment:
 | |
|       PATH: '${PATH}:/snap/bin/'
 | |
| 
 | |
|   - name: microk8s user group | check permissions on config directory
 | |
|     ansible.builtin.file:
 | |
|       path: "{{ microk8s_user_home }}/.kube"
 | |
|       state: directory
 | |
|       owner: '{{ microk8s_user }}'
 | |
|       group: '{{ microk8s_user }}'
 | |
|       recurse: true
 | |
| 
 | |
|   - name: microk8s user group | check permission on config file
 | |
|     ansible.builtin.file:
 | |
|       path: "{{ microk8s_user_home }}/.kube/config"
 | |
|       state: file
 | |
|       owner: '{{ microk8s_user }}'
 | |
|       group: '{{ microk8s_user }}'
 | |
|       mode: 0600
 | |
| 
 | |
|   # ===========================================
 | |
|   # Configure plugins
 | |
|   - name: microk8s plugins | enable plugins
 | |
|     ansible.builtin.command:
 | |
|       cmd: "microk8s.enable {{ microk8s_plugin.key }}"
 | |
|     with_dict: "{{ microk8s_plugins }}"
 | |
|     loop_control:
 | |
|       loop_var: microk8s_plugin
 | |
|       label: "{{ microk8s_plugin.key }}"
 | |
|     when:
 | |
|       - microk8s_plugins is defined
 | |
|       - microk8s_plugin.value
 | |
|       - microk8s_plugin.key != "registry"
 | |
|       - microk8s_plugin.key != "dns"
 | |
|     register: microk8s_cmd_result
 | |
|     changed_when:
 | |
|       - "'Addon {{ microk8s_plugin.key }} is already enabled'
 | |
|         not in microk8s_cmd_result.stdout"
 | |
| 
 | |
|   - name: microk8s plugins | disable plugins
 | |
|     ansible.builtin.command:
 | |
|       cmd: "microk8s.disable {{ microk8s_plugin.key }}"
 | |
|     with_dict: "{{ microk8s_plugins | default({}) }}"
 | |
|     loop_control:
 | |
|       loop_var: microk8s_plugin
 | |
|       label: "{{ microk8s_plugin.key }}"
 | |
|     register: microk8s_cmd_result
 | |
|     changed_when:
 | |
|       - "'Addon {{ microk8s_plugin.key }} is already disabled'
 | |
|         not in microk8s_cmd_result.stdout"
 | |
|     when:
 | |
|       - microk8s_plugins is defined
 | |
|       - not (microk8s_plugin.value | bool)
 | |
|       - microk8s_plugin.key != "registry"
 | |
| 
 | |
|   - name: microk8s plugins | Enable registry
 | |
|     ansible.builtin.command:
 | |
|       cmd: "microk8s.enable registry:size={{ microk8s_registry_size }}"
 | |
|     register: microk8s_cmd_result
 | |
|     changed_when:
 | |
|       - "'Addon registry is already enabled' not in microk8s_cmd_result.stdout"
 | |
|     when:
 | |
|       - microk8s_plugins is defined
 | |
|       - microk8s_plugins.registry is defined
 | |
|       - (microk8s_plugins.registry | bool)
 | |
| 
 | |
|   - name: microk8s plugins | Disable registry
 | |
|     ansible.builtin.command:
 | |
|       cmd: "microk8s.disable registry:size={{ microk8s_registry_size }}"
 | |
|     register: microk8s_cmd_result
 | |
|     changed_when:
 | |
|       - "'Addon registry is already disabled' not in microk8s_cmd_result.stdout"
 | |
|     when:
 | |
|       - microk8s_plugins is defined
 | |
|       - microk8s_plugins.registry is defined
 | |
|       - not (microk8s_plugins.registry | bool)
 | |
| 
 | |
|   - name: microk8s plugins | Enable DNS
 | |
|     ansible.builtin.command:
 | |
|       cmd: 'microk8s.enable dns:{{ microk8s_dns_servers | join(",") }}'
 | |
|     register: microk8s_cmd_result
 | |
|     changed_when:
 | |
|       - "'Addon dns is already enabled' not in microk8s_cmd_result.stdout"
 | |
|     when:
 | |
|       - microk8s_plugins is defined
 | |
|       - microk8s_plugins.dns is defined
 | |
|       - (microk8s_plugins.dns | bool)
 | |
|   
 | |
|   # ===========================================
 | |
|   # deploy browsertrix
 | |
|   - name: microk8s deploy | create browsertrix repo
 | |
|     ansible.builtin.git:
 | |
|       repo: "https://github.com/webrecorder/browsertrix-cloud"
 | |
|       dest: "{{ browsertrix_cloud_home }}"
 | |
|       clone: true
 | |
|       update: true
 | |
|       force: true
 | |
|       version: main
 | |
|     tags:
 | |
|       - helm_upgrade
 | |
| 
 | |
|   - name: microk8s deploy | Make repos git safe
 | |
|     ansible.builtin.command: git config --global --add safe.directory "{{ browsertrix_cloud_home }}"
 | |
|     become: true
 | |
|     changed_when: false
 | |
|     tags:
 | |
|       - helm_upgrade
 | |
| 
 | |
|   - name: microk8s deploy | grant permissions on deploy user
 | |
|     ansible.builtin.file:
 | |
|       path: "{{ browsertrix_cloud_home }}"
 | |
|       state: directory
 | |
|       owner: '{{ microk8s_user }}'
 | |
|       group: '{{ microk8s_user }}'
 | |
|       follow: false
 | |
|       recurse: true
 | |
|       mode: 0775
 | |
|     tags:
 | |
|       - helm_upgrade
 | |
| 
 | |
|   - name: micork8s deploy | helm | output values yaml
 | |
|     ansible.builtin.template:
 | |
|       src: ../group_vars/microk8s/btrix_values.j2
 | |
|       dest: "{{ microk8s_user_home }}/values.yaml"
 | |
|       mode: u+rw
 | |
|     tags:
 | |
|       - helm_upgrade
 | |
| 
 | |
|   - name: microk8s deploy | helm | deploy btrix (Debian)
 | |
|     ansible.builtin.command: helm upgrade --install -f ./chart/values.yaml -f {{ microk8s_user_home }}/values.yaml btrix ./chart/
 | |
|     args:
 | |
|       chdir: "{{ browsertrix_cloud_home }}"
 | |
|     register: helm_result
 | |
|     become: true
 | |
|     become_user: "{{ microk8s_user }}"
 | |
|     changed_when: helm_result.rc == 0
 | |
|     when:
 | |
|       - ansible_os_family == "Debian"
 | |
|     tags:
 | |
|       - helm_upgrade
 | |
| 
 | |
|   - name: microk8s deploy | helm | deploy btrix (RedHat)
 | |
|     ansible.builtin.command: /var/lib/snapd/snap/bin/helm upgrade --install -f ./chart/values.yaml -f {{ microk8s_user_home }}/values.yaml btrix ./chart/
 | |
|     args:
 | |
|       chdir: "{{ browsertrix_cloud_home }}"
 | |
|     register: helm_result
 | |
|     become: true
 | |
|     become_user: "{{ microk8s_user }}"
 | |
|     changed_when: helm_result.rc == 0
 | |
|     when:
 | |
|       - ansible_os_family == "RedHat"
 | |
|     tags:
 | |
|       - helm_upgrade
 | |
| 
 | |
|   handlers:
 | |
|     - name: Reboot System
 | |
|       ansible.builtin.reboot:
 | |
|       when:
 | |
|         - skip_handlers | default("false") == "false"
 | |
| 
 | |
|     - name: microk8s ready
 | |
|       ansible.builtin.command:
 | |
|         cmd: microk8s.status --wait-ready
 | |
|       changed_when: false
 | |
|       when:
 | |
|         - skip_handlers | default("false") == "false"
 |