Files
k3s-ansible/roles/k3s-deploy-test/tasks/main.yml
T
2025-10-22 10:25:38 +02:00

170 lines
5.7 KiB
YAML

---
- name: Wait for k3s to be fully ready
wait_for:
port: 6443
host: "{{ hostvars[groups['master'][0]]['ansible_host'] }}"
delay: 5
timeout: 300
delegate_to: localhost
run_once: true
- name: Check if kubectl is available locally
command: which kubectl
register: kubectl_check
delegate_to: localhost
run_once: true
failed_when: false
changed_when: false
- name: Install kubectl locally if not present
get_url:
url: "https://dl.k8s.io/release/{{ k3s_version | regex_replace('\\+k3s.*$', '') }}/bin/{{ ansible_system | lower }}/{{ 'arm64' if ansible_architecture == 'aarch64' else 'amd64' }}/kubectl"
dest: /tmp/kubectl
mode: '0755'
delegate_to: localhost
run_once: true
when: kubectl_check.rc != 0
- name: Set kubectl path
set_fact:
kubectl_bin: "{{ '/tmp/kubectl' if kubectl_check.rc != 0 else 'kubectl' }}"
delegate_to: localhost
run_once: true
- name: Verify kubeconfig exists
stat:
path: "{{ playbook_dir }}/kubeconfig"
register: kubeconfig_file
delegate_to: localhost
run_once: true
- name: Fail if kubeconfig not found
fail:
msg: "Kubeconfig not found at {{ playbook_dir }}/kubeconfig. Please run the k3s-server role first."
when: not kubeconfig_file.stat.exists
delegate_to: localhost
run_once: true
- name: Wait for all nodes to be ready
shell: |
{{ kubectl_bin }} --kubeconfig={{ playbook_dir }}/kubeconfig get nodes --no-headers | grep -v Ready | wc -l
register: nodes_not_ready
until: nodes_not_ready.stdout | int == 0
retries: 30
delay: 10
delegate_to: localhost
run_once: true
changed_when: false
- name: Deploy nginx test application
shell: |
{{ kubectl_bin }} --kubeconfig={{ playbook_dir }}/kubeconfig apply -f {{ playbook_dir }}/manifests/nginx-test-deployment.yaml
register: deploy_result
delegate_to: localhost
run_once: true
changed_when: "'created' in deploy_result.stdout or 'configured' in deploy_result.stdout"
- name: Wait for nginx deployment to be ready
shell: |
{{ kubectl_bin }} --kubeconfig={{ playbook_dir }}/kubeconfig wait --for=condition=available --timeout=300s deployment/nginx-test -n default
register: deployment_ready
delegate_to: localhost
run_once: true
changed_when: false
- name: Get deployment status
shell: |
{{ kubectl_bin }} --kubeconfig={{ playbook_dir }}/kubeconfig get deployment nginx-test -n default -o wide
register: deployment_status
delegate_to: localhost
run_once: true
changed_when: false
- name: Get pods status
shell: |
{{ kubectl_bin }} --kubeconfig={{ playbook_dir }}/kubeconfig get pods -l app=nginx-test -n default -o wide
register: pods_status
delegate_to: localhost
run_once: true
changed_when: false
- name: Get service details
shell: |
{{ kubectl_bin }} --kubeconfig={{ playbook_dir }}/kubeconfig get service nginx-test -n default
register: service_status
delegate_to: localhost
run_once: true
changed_when: false
- name: Get ingress details
shell: |
{{ kubectl_bin }} --kubeconfig={{ playbook_dir }}/kubeconfig get ingress nginx-test -n default
register: ingress_status
delegate_to: localhost
run_once: true
changed_when: false
- name: Get master node IP for ingress access
set_fact:
master_ip: "{{ hostvars[groups['master'][0]]['ansible_host'] }}"
delegate_to: localhost
run_once: true
- name: Display deployment information
debug:
msg: |
========================================================================
✓ NGINX Test Deployment Successful!
========================================================================
📦 DEPLOYMENT STATUS:
{{ deployment_status.stdout }}
🔄 PODS STATUS:
{{ pods_status.stdout }}
🌐 SERVICE:
{{ service_status.stdout }}
🔀 INGRESS:
{{ ingress_status.stdout }}
========================================================================
🚀 HOW TO ACCESS YOUR APPLICATION
========================================================================
STEP 1: Add to your /etc/hosts file
───────────────────────────────────────────────────────────────────────
{{ master_ip }} nginx-test.local nginx.pi.local
STEP 2: Access in your browser
───────────────────────────────────────────────────────────────────────
→ http://nginx-test.local
→ http://nginx.pi.local
STEP 3: Or test with curl
───────────────────────────────────────────────────────────────────────
curl -H "Host: nginx-test.local" http://{{ master_ip }}
========================================================================
📝 USEFUL COMMANDS
========================================================================
Scale deployment:
kubectl --kubeconfig={{ playbook_dir }}/kubeconfig scale deployment nginx-test --replicas=10
Delete deployment:
kubectl --kubeconfig={{ playbook_dir }}/kubeconfig delete -f {{ playbook_dir }}/manifests/nginx-test-deployment.yaml
View logs:
kubectl --kubeconfig={{ playbook_dir }}/kubeconfig logs -l app=nginx-test --tail=50
Watch pods:
kubectl --kubeconfig={{ playbook_dir }}/kubeconfig get pods -l app=nginx-test -w
========================================================================
delegate_to: localhost
run_once: true