Sunday, October 6, 2024

[Ansible] Kiểm tra port trên Linux

-

Để thực hiện kiểm tra và tăng giá trị cổng (port) cho 1 dịch vụ cho đến khi tìm được một cổng không sử dụng, bạn có thể sử dụng vòng lặp trong Ansible. Dưới đây là một ví dụ playbook mẫu để thực hiện điều này:

- name: Update port if it's not available
  shell: |
    port_available={{ item }}
    while nc -z localhost $port_available; do
      port_available=$((port_available+1))
    done
    echo $port_available
  loop:
    - "{{ prometheus_port }}"
    - "{{ pushgateway_port }}"
    - "{{ alertmanager_port1 }}"
    - "{{ alertmanager_port2 }}"
    - "{{ alertmanager_bot_port }}"
    - "{{ snmp_exporter_port_tcp }}"
    - "{{ snmp_exporter_port_udp }}"
    - "{{ grafana_port }}"
  register: port_available_result

- name: Set fact for port values
  set_fact:
    "port_{{ item.item }}_available": "{{ item.stdout }}"
  with_items: "{{ port_available_result.results }}"

- name: Set new fact for port availability
  set_fact:
    prometheus_port: "{{ port_available_result.results[0].stdout }}"
    pushgateway_port: "{{ port_available_result.results[1].stdout }}"
    alertmanager_port1: "{{ port_available_result.results[2].stdout }}"
    alertmanager_port2: "{{ port_available_result.results[3].stdout }}"
    alertmanager_bot_port: "{{ port_available_result.results[4].stdout }}"
    snmp_exporter_port_tcp: "{{ port_available_result.results[5].stdout }}"
    snmp_exporter_port_udp: "{{ port_available_result.results[6].stdout }}"
    grafana_port: "{{ port_available_result.results[7].stdout }}"

- name: Print registered port values
  debug:
    var: item
  with_items:
    - "{{ prometheus_port }}"
    - "{{ pushgateway_port }}"
    - "{{ alertmanager_port1 }}"
    - "{{ alertmanager_port2 }}"
    - "{{ alertmanager_bot_port }}"
    - "{{ snmp_exporter_port_tcp }}"
    - "{{ snmp_exporter_port_udp }}"
    - "{{ grafana_port }}"

Đoạn playbook trên có các task sau:

  1. Task 1: “Update port if it’s not available”
  • Sử dụng module shell để chạy lệnh update port cho các service.
  • Vòng lặp loop sẽ lặp qua các biến được lưu trữ trong các biến jinja được định nghĩa, bao gồm prometheus_port, pushgateway_port, alertmanager_port1, alertmanager_port2, alertmanager_bot_port, snmp_exporter_port_tcp, snmp_exporter_port_udp và grafana_port.
  • Task này cũng sử dụng module register để lưu trữ kết quả của các lệnh update port trong biến port_available_result.
  1. Task 2: “Set fact for port values”
  • Sử dụng module set_fact để tạo một fact mới với tên được định dạng theo dạng “port_{{ item.item }}_available” và giá trị của nó là kết quả stdout của task trước đó.
  • Vòng lặp with_items được sử dụng để lặp qua các phần tử trong biến port_available_result.results.
  1. Task 3: “Set new fact for port availability”
  • Sử dụng module set_fact để tạo một fact mới cho mỗi port đã được cập nhật bằng cách sử dụng giá trị stdout của các task trước đó trong biến port_available_result.results.
  • Giá trị của các port này được đặt lại cho các biến jinja đã được định nghĩa trong task trước đó.
  1. Task 4: “Print registered port values”
  • Sử dụng module debug để in ra giá trị của các biến jinja prometheus_port, pushgateway_port, alertmanager_port1, alertmanager_port2, alertmanager_bot_port, snmp_exporter_port_tcp, snmp_exporter_port_udp và grafana_port.
  • Vòng lặp with_items được sử dụng để lặp qua các phần tử trong danh sách các biến jinja này.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories