Score:1

โฮสต์ที่เลือกในสินค้าคงคลังตามชุดย่อยของชื่อใน ansible

ธง dz

ฉันค่อนข้างใหม่สำหรับ ansible ดังนั้นอาจทำได้ง่าย

เรามีอุปกรณ์จำนวนมากที่มีหลักการตั้งชื่อที่สอดคล้องกันในสภาพแวดล้อมต่างๆ

แอป0[01:25].dev.domain.com
แอป[01:25].qa.domain.com
แอป[01:25].uat.domain.com
แอป[01:25].prod.domain.com

อุปกรณ์ต่าง ๆ ภายในเซิร์ฟเวอร์แอพเหล่านั้นมีบทบาทเฉพาะ เช่น เว็บเซิร์ฟเวอร์ เซิร์ฟเวอร์แอพ เซิร์ฟเวอร์ api และอื่น ๆ และจะเหมือนกันในทุกสภาพแวดล้อม ดังนั้น app05 จึงเป็นเว็บเซิร์ฟเวอร์ใน dev, qa, uat, uat, prod

ตอนนี้ฉันใช้ group_vars และกำหนดบทบาทเซิร์ฟเวอร์เฉพาะให้กับชื่อกลุ่ม แต่ฉันไม่ต้องการตั้งชื่อกลุ่มสำหรับแต่ละสภาพแวดล้อม (webdev, webqa, webuat ฯลฯ )

มีวิธีง่ายๆ สำหรับสิ่งนี้หรือไม่? ฉันคิดว่าบทบาทจะทำให้สิ่งต่าง ๆ ซับซ้อนขึ้นเล็กน้อย แต่นั่นอาจเป็นวิธีแก้ปัญหาหรือไม่

Score:0
ธง cn

รูปแบบสินค้าคงคลังที่สร้างแหล่งที่มาของความจริงคือการสอบถามกลุ่มเหล่านี้จากบางระบบ สิ่งที่ซับซ้อนกว่าสตริงในชื่อ DNS

ตัวอย่างเช่น ระบบฐานข้อมูลสินค้าคงคลัง netbox มีบทบาทอุปกรณ์ที่เหมาะสม ไม่ต้องเลือก netbox แต่มีปลั๊กอินสินค้าคงคลัง Ansible และโมเดลฐานข้อมูลแบบเปิดจึงง่ายต่อการพูดถึง


อย่างไรก็ตาม อาจยังไม่มีฐานข้อมูลภายนอกที่ดี สามารถสร้างรูปแบบการตั้งชื่อปกติได้ ด้วยปลั๊กอินสินค้าคงคลัง Ansible ที่เรียกซ้ำได้มากที่สุด ตัวสร้าง:

# สินค้าคงคลัง.yml
ปลั๊กอิน: เครื่องกำเนิดไฟฟ้า
เจ้าภาพ:
    ชื่อ: "{{ แอปพลิเคชัน }}{{ หมายเลข }}.{{ สภาพแวดล้อม }}.example.com"
    ผู้ปกครอง:
      - ชื่อ: "{{ แอปพลิเคชัน }}_{{ สภาพแวดล้อม }}"
        ผู้ปกครอง:
          - ชื่อ: "{{ แอปพลิเคชัน }}"
            วาร์:
              แอปพลิเคชัน: "{{ แอปพลิเคชัน }}"
          - ชื่อ: "{{ สภาพแวดล้อม }}"
            วาร์:
              สภาพแวดล้อม: "{{ สภาพแวดล้อม }}"
ชั้น:
    แอปพลิเคชัน:
        - แอป
        - เอพีไอ
    สิ่งแวดล้อม:
        - ผู้พัฒนา
        - Qa
        - อวด
        - ผลิตภัณฑ์
    ตัวเลข:
        - "01"
        - "02"
        - "05"

ชื่อเลเยอร์เป็นชื่อตามอำเภอใจกำหนดราก "โฮสต์" และสัญกรณ์ "ผู้ปกครอง" ชื่อที่เยื้องลึกกว่าคือกลุ่มที่มีชื่อภายนอก

ansible-inventory -i สินค้าคงคลัง.yml --list จะพิมพ์โฮสต์ในเอกสาร JSON สินค้าคงคลังของ Ansible เอาต์พุตบางส่วน:

{
    "_meta": {
        "โฮสต์วาร์": {

           "app05.qa.example.com": {
                "แอปพลิเคชัน": "แอปพลิเคชัน",
                "สิ่งแวดล้อม": "qa"
            }
        }
    },

    "app_qa": {
        "โฮสต์": [
            "app01.qa.example.com",
            "app02.qa.example.com",
            "app05.qa.example.com"
        ]
    },

    "แอป": {
        "เด็ก": [
            "app_dev",
            "app_prod",
            "app_qa",
            "app_uat"
        ]
    },

    "กา": {
        "เด็ก": [
            "api_qa",
            "app_qa"
        ]
    },


}

และดำเนินการต่อไปสำหรับชุดค่าผสมอื่น ๆ

สังเกตว่ามันทำ:

  • กลุ่ม "แอปพลิเคชัน"
  • กลุ่ม "สิ่งแวดล้อม"
  • กลุ่มการรวมกัน "สภาพแวดล้อมของแอปพลิเคชัน"
  • ชื่อโฮสต์ที่สอดคล้องกับรูปแบบชื่อ DNS
  • vars ที่มี "แอปพลิเคชัน" และ "สภาพแวดล้อม" สำหรับแต่ละโฮสต์

ข้อจำกัดของปลั๊กอินนี้รวมถึง:

ทำผลิตภัณฑ์คาร์ทีเซียนของการรวมเลเยอร์เสมอ ไม่สามารถมีกลุ่มใดกลุ่มหนึ่งมากหรือน้อยได้ หรือเริ่มโครงร่างการกำหนดหมายเลขด้วยค่าที่แตกต่างกัน

ไม่มีช่วงโฮสต์ที่กะทัดรัด ไวยากรณ์ [01:25] หรือฟังก์ชัน range() ไม่ทำงาน พิจารณาร้องขอโดยยื่นเรื่อง เพื่อเป็นการแก้ปัญหา ตัวเลขหลายสิบตัวในไฟล์ปรับแต่งจะทำงานได้

Score:0
ธง br

ถาม: "ตั้งชื่อกลุ่มสำหรับแต่ละสภาพแวดล้อม (webdev, webqa, webuat ฯลฯ)"

A: สร้างตัวแปรแบบไดนามิก เช่น

- โฮสต์: ทั้งหมด
  Gather_facts: เท็จ
  วาร์:
    สภาพแวดล้อม:
      app05:เว็บ
  งาน:
    - set_fact:
        env_local: "{{ env[_host]|d('ไม่มี') }}{{ _group }}"
      วาร์:
        _arr: "{{ สินค้าคงคลัง_hostname.split('.') }}"
        _host: "{{ _arr.0 }}"
        _group: "{{ _arr.1 }}"
    - แก้ปัญหา:
        var: env_local

ให้

ตกลง: [app01.dev.domain.com] => 
  env_local: nonedev
ตกลง: [app02.dev.domain.com] => 
  env_local: nonedev
ตกลง: [app03.dev.domain.com] => 
  env_local: nonedev
ตกลง: [app04.dev.domain.com] => 
  env_local: nonedev
ตกลง: [app05.dev.domain.com] => 
  env_local: webdev

ใช้โมดูล add_host และสร้างกลุ่มแบบไดนามิก เช่น สร้างไฟล์

เชลล์> แมว add_host_to_groups.yml
- add_host:
    ชื่อ: "{{ ฉัน }}"
    กลุ่ม: "{{ รายการ }}{{ (i.split('.')).1 }}"
  วนซ้ำ: "{{ _hosts }}"
  loop_control:
    loop_var: ผม

และรวมไว้ในลูปของกฎการมอบหมาย

- โฮสต์: ทั้งหมด
  Gather_facts: เท็จ
  วาร์:
    สภาพแวดล้อม:
      เว็บ:app05
  งาน:
    - include_tasks: add_host_to_groups.yml
      วนซ้ำ: "{{ env.keys()|รายการ }}"
      วาร์:
        _hosts: "{{ ansible_play_hosts_all|select('match', env[item] ~ '.*') }}"
      run_once: จริง
    - แก้ปัญหา:
        var: กลุ่ม
      run_once: จริง

ให้

  กลุ่ม:
    ทั้งหมด:
    - app01.dev.domain.com
    - app02.dev.domain.com
    - app03.dev.domain.com
      ...
    - app25.prod.domain.com
    เว็บเดฟ:
    - app05.dev.domain.com
    เว็บโปร:
    - app05.prod.domain.com
    เว็บกา:
    - app05.qa.domain.com
    เว็บ:
    - app05.uat.domain.com

ใช้กลุ่มในการเล่นต่อเนื่องกัน เช่น

- โฮสต์: webqa
  Gather_facts: เท็จ
  งาน:
    - แก้ปัญหา:
        var: ansible_play_hosts_all

ให้

  ansible_play_hosts_all:
  - app05.qa.domain.com

พอดีพจนานุกรม สิ่งแวดล้อม ตามความต้องการของคุณ

flyerhawk avatar
dz flag
ตกลง. จะต้องดำเนินการนี้เล็กน้อย แต่ดูดีมาก ฉันจะกลับมาเมื่อทราบสิ่งที่คุณแนะนำที่นี่ ฮ่าๆ.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา