Merge pull request #165 from crutonjohn/feat/air-gap

Feature: Air Gap Installation
This commit is contained in:
Xan Manning 2022-01-02 20:38:59 +00:00 committed by GitHub
commit 3be75a8296
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 44 additions and 4 deletions

View file

@ -63,6 +63,7 @@ consistency. These are generally cluster-level configuration.
|--------------------------------------|--------------------------------------------------------------------------------------------|--------------------------------|
| `k3s_state` | State of k3s: installed, started, stopped, downloaded, uninstalled, validated. | installed |
| `k3s_release_version` | Use a specific version of k3s, eg. `v0.2.0`. Specify `false` for stable. | `false` |
| `k3s_airgap` | Boolean to enable air-gapped installations | `false` |
| `k3s_config_file` | Location of the k3s configuration file. | `/etc/rancher/k3s/config.yaml` |
| `k3s_build_cluster` | When multiple play hosts are available, attempt to cluster. Read notes below. | `true` |
| `k3s_registration_address` | Fixed registration address for nodes. IP or FQDN. | NULL |
@ -324,6 +325,10 @@ k3s_server_pod_manifests_urls:
```
#### Important note about `k3s_airgap`
When deploying k3s in an air gapped environment you should provide the `k3s` binary in `./files/`. The binary will not be downloaded from Github and will subsequently not be verified using the provided sha256 sum, nor able to verify the version that you are running. All risks and burdens associated are assumed by the user in this scenario.
## Dependencies
No dependencies on other roles.

View file

@ -0,0 +1,15 @@
---
- name: Ensure installation directory exists
ansible.builtin.file:
path: "{{ k3s_install_dir }}"
state: directory
mode: 0755
- name: Copy local k3s binary to target host
ansible.builtin.copy:
src: k3s
# TODO: allow airgap to bypass version post-fix
dest: "{{ k3s_install_dir }}/k3s-{{ k3s_release_version }}"
mode: 0755
become: "{{ k3s_become_for_install_dir | ternary(true, false, k3s_become_for_all) }}"

View file

@ -1,5 +1,6 @@
---
# TODO: Prevent or circumvent versioning when k3s_airgap
- name: Ensure k3s_release_version is set to default if false
ansible.builtin.set_fact:
k3s_release_version: "{{ k3s_release_channel }}"

View file

@ -1,6 +1,12 @@
---
- import_tasks: build/get-version.yml
when: k3s_release_version is not defined or not k3s_release_version
when:
- k3s_release_version is not defined or not k3s_release_version
- not k3s_airgap
- import_tasks: build/download-k3s.yml
when: not k3s_airgap
- import_tasks: build/airgap-k3s.yml
when: k3s_airgap

View file

@ -5,9 +5,11 @@
- import_tasks: teardown/drain-and-remove-nodes.yml
- import_tasks: build/get-version.yml
when: k3s_release_version is not defined
or not k3s_release_version
or k3s_release_version is not regex('\\+k3s[1-9]$')
when:
- k3s_release_version is not defined
or not k3s_release_version
or k3s_release_version is not regex('\\+k3s[1-9]$')
- not k3s_airgap
- import_tasks: validate/main.yml
when: not k3s_skip_validation
@ -33,6 +35,12 @@
meta: flush_handlers
- import_tasks: build/download-k3s.yml
when:
- not k3s_airgap
- import_tasks: build/airgap-k3s.yml
when:
- k3s_airgap
- import_tasks: build/preconfigure-k3s-auto-deploying-manifests.yml
when:

View file

@ -6,6 +6,7 @@
- (k3s_release_version | replace('v', '')) is version_compare(k3s_min_version, '>=')
success_msg: "{{ k3s_release_version }} is supported by this role."
fail_msg: "{{ k3s_release_version }} is not supported by this role, please use xanmanning.k3s v1.x."
when: not k3s_airgap
- name: Check configuration in k3s_server and k3s_agent that needs alternate configuration
ansible.builtin.assert:
@ -34,6 +35,7 @@
{% endif %}
loop: "{{ k3s_deprecated_config }}"
when:
- not k3s_airgap
- (item.when is not defined
or (item.when is defined and (k3s_release_version | replace('v', '')) is version_compare(item.when, '>=')))
- not k3s_use_unsupported_config

View file

@ -55,6 +55,9 @@ k3s_api_releases: "{{ k3s_api_url }}/v1-release/channels"
# Download location for releases
k3s_github_download_url: "{{ k3s_github_url }}/releases/download"
# Install K3s in Air Gapped scenarios
k3s_airgap: false
# Generate a runtime config dictionary for validation
k3s_runtime_config: "{{ (k3s_server | default({})) | combine (k3s_agent | default({})) }}"