Điểm:1

máy chủ được chọn trong khoảng không quảng cáo dựa trên tập hợp con tên trong ansible

lá cờ dz

Tôi còn khá mới với ansible nên có lẽ điều này dễ thực hiện.

Chúng tôi có một số lượng lớn thiết bị có quy ước đặt tên nhất quán giữa các môi trường khác nhau.

app0[01:25].dev.domain.com
ứng dụng[01:25].qa.domain.com
ứng dụng[01:25].uat.domain.com
ứng dụng[01:25].prod.domain.com

Các thiết bị khác nhau bên trong các máy chủ ứng dụng đó có các vai trò cụ thể như máy chủ web, máy chủ ứng dụng, máy chủ api, v.v. và nó giống nhau trên mọi môi trường. Vì vậy, app05 là một máy chủ web trong dev, qa, uat, uat, prod.

Hiện tại tôi đang sử dụng group_vars và gán vai trò máy chủ cụ thể cho tên nhóm. Nhưng tôi không muốn phải thiết lập tên nhóm cho từng môi trường (webdev, webqa, webuat, v.v.)

Có một giải pháp đơn giản cho điều này? Tôi nghĩ vai trò sẽ làm phức tạp mọi thứ một chút nhưng có lẽ đó là giải pháp?

Điểm:0
lá cờ cn

Một sơ đồ kiểm kê thiết lập nguồn sự thật sẽ là truy vấn các nhóm này từ một số hệ thống. Một cái gì đó phức tạp hơn chuỗi trong tên DNS.

Ví dụ: hệ thống cơ sở dữ liệu kiểm kê hộp netbox có vai trò thiết bị có thể phù hợp. Không chọn trên netbox, nhưng nó có plugin kiểm kê Ansible và mô hình cơ sở dữ liệu mở nên rất dễ nói về.


Tuy nhiên, có thể một cơ sở dữ liệu đẹp bên ngoài chưa tồn tại. Một sơ đồ đặt tên thông thường như vậy có thể được tạo ra. Với hầu hết các plugin khoảng không quảng cáo Ansible đệ quy đó, trình tạo:

# kho.yml
plugin: máy phát điện
máy chủ:
    tên: "{{ứng dụng}}{{số}}.{{môi trường}}.example.com"
    bố mẹ:
      - tên: "{{ ứng dụng }}_{{ môi trường }}"
        bố mẹ:
          - tên: "{{ ứng dụng }}"
            lọ:
              ứng dụng: "{{ ứng dụng }}"
          - tên: "{{ môi trường }}"
            lọ:
              môi trường }}"
lớp:
    đăng kí:
        - ứng dụng
        - api
    môi trường:
        - nhà phát triển
        - qa
        - uât
        - sản xuất
    con số:
        - "01"
        - "02"
        - "05"

Tên lớp là tùy ý.Với gốc "máy chủ" và ký hiệu "cha mẹ", các tên được thụt lề sâu hơn là các nhóm chứa tên bên ngoài.

ansible-inventory -i inventory.yml --list sẽ in các máy chủ lưu trữ trong tài liệu JSON của Ansible. Đầu ra một phần:

{
    "_meta": {
        "máy chủ": {

           "app05.qa.example.com": {
                "ứng dụng": "ứng dụng",
                "môi trường": "qa"
            }
        }
    },

    "app_qa": {
        "máy chủ": [
            "app01.qa.example.com",
            "app02.qa.example.com",
            "app05.qa.example.com"
        ]
    },

    "ứng dụng": {
        "bọn trẻ": [
            "ứng dụng_dev",
            "app_prod",
            "app_qa",
            "app_uat"
        ]
    },

    "quà": {
        "bọn trẻ": [
            "api_qa",
            "app_qa"
        ]
    },


}

Và tiếp tục cho các kết hợp khác.

Thông báo nó được thực hiện:

  • nhóm "ứng dụng"
  • nhóm môi trường
  • nhóm kết hợp "môi trường ứng dụng"
  • tên máy chủ phù hợp với mẫu tên DNS
  • vars chứa "ứng dụng" và "môi trường" cho mỗi máy chủ

Hạn chế của plugin này bao gồm:

Luôn thực hiện tích cartesian của các tổ hợp lớp. Không thể có nhiều hơn hoặc ít hơn một nhóm nhất định, cũng như không thể bắt đầu các sơ đồ đánh số trên các giá trị khác nhau.

Không có phạm vi máy chủ nhỏ gọn. Cả cú pháp [01:25] lẫn hàm range() đều không hoạt động. Cân nhắc yêu cầu điều đó bằng cách gửi một vấn đề. Như một giải pháp thay thế, hàng tá số trong tệp cấu hình đang hoạt động.

Điểm:0
lá cờ br

Hỏi: "Thiết lập tên nhóm cho từng môi trường (webdev, webqa, webuat, v.v.)"

A: Tạo biến động, ví dụ:

- máy chủ: tất cả
  thu thập_facts: sai
  lọ:
    vi:
      ứng dụng05: web
  nhiệm vụ:
    - bộ_thực tế:
        env_local: "{{ env[_host]|d('none') }}{{ _group }}"
      lọ:
        _arr: "{{inventory_hostname.split('.') }}"
        _host: "{{ _arr.0 }}"
        _group: "{{ _arr.1 }}"
    - gỡ lỗi:
        var: env_local

cho

được rồi: [app01.dev.domain.com] => 
  env_local: nonedev
được rồi: [app02.dev.domain.com] => 
  env_local: nonedev
được rồi: [app03.dev.domain.com] => 
  env_local: nonedev
được rồi: [app04.dev.domain.com] => 
  env_local: nonedev
được rồi: [app05.dev.domain.com] => 
  env_local: webdev

sử dụng mô-đun add_host và tạo các nhóm động. Ví dụ: tạo tệp

vỏ> mèo add_host_to_groups.yml
- thêm_máy chủ:
    tên: "{{ i }}"
    nhóm: "{{ item }}{{ (i.split('.')).1 }}"
  vòng lặp: "{{ _hosts }}"
  loop_control:
    loop_var: tôi

và đưa nó vào vòng lặp của quy tắc gán

- máy chủ: tất cả
  thu thập_facts: sai
  lọ:
    vi:
      web: ứng dụng05
  nhiệm vụ:
    - bao gồm_tác vụ: add_host_to_groups.yml
      vòng lặp: "{{ env.keys()|list }}"
      lọ:
        _hosts: "{{ansible_play_hosts_all|select('match', env[item] ~ '.*') }}"
      run_once: đúng
    - gỡ lỗi:
        var: nhóm
      run_once: đúng

cho

  các nhóm:
    tất cả các:
    - app01.dev.domain.com
    - app02.dev.domain.com
    - app03.dev.domain.com
      ...
    - app25.prod.domain.com
    nhà phát triển web:
    - app05.dev.domain.com
    webprod:
    - app05.prod.domain.com
    webqa:
    - app05.qa.domain.com
    webuat:
    - app05.uat.domain.com

Sử dụng các nhóm trong các lượt chơi liên tiếp, ví dụ:

- máy chủ: webqa
  thu thập_facts: sai
  nhiệm vụ:
    - gỡ lỗi:
        var: ansible_play_hosts_all

cho

  ansible_play_hosts_all:
  - app05.qa.domain.com

Phù hợp với từ điển env nhu cầu của bạn.

flyerhawk avatar
lá cờ dz
VÂNG. Sẽ cần phải xử lý điều này một chút nhưng điều đó có vẻ tuyệt vời. Tôi sẽ quay lại khi tôi tìm ra những gì bạn đang đề xuất ở đây. CƯỜI.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.