Skip to main content

Ansible role luôn chạy trước task

Ansible là công cụ tự động hóa "đơn giản", "dễ dùng". Trong một ansible play, có thể dùng tasks, hoặc roles, hoặc cả hai. Thứ tự chạy của chúng có chút bất ngờ.

Thứ tự role và task khi trong cùng play

Playbook order.yml

- hosts: all
  tasks:
    - name: task1
      debug:
        msg: "This is task1"
  roles:
    - role: pika

Role pika: roles/pika/tasks/main.yml:

- name: task in role
  debug:
    msg: this is task in a role

Output:

$ uvx --from 'ansible-core>2.19' ansible-playbook -K -i localhost, order.yml 
BECOME password: 

PLAY [all] **************************************************************************
...
TASK [pika : task in role] **********************************************************
ok: [localhost] => {
    "msg": "this is task in a role"
}

TASK [task1] ************************************************************************
ok: [localhost] => {
    "msg": "This is task1"
}

PLAY RECAP **************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Thấy role chạy trước task, mặc dù trong order.yml tasks viết trước roles. Lý do bởi thứ tự này được quy định trong tài liệu:

When you use the roles option at the play level, Ansible treats the roles as static imports and processes them during playbook parsing. Ansible executes each play in this order: ... - Each role listed in roles:, in the order listed. Any role dependencies defined in the role's meta/main.yml run first, subject to tag filtering and conditionals. See :ref:role_dependencies for more details. - Any tasks defined in the play.

Một giải pháp để tasks chạy trước role là include role vào 1 task tiếp theo:

- hosts: all
  tasks:
    - name: task1
      debug:
        msg: "This is task1"
    - name: task run role
      include_role:
        name: pika

Output:

TASK [task1] ************************************************************************
ok: [localhost] => {
    "msg": "This is task1"
}

TASK [task run role] ****************************************************************
included: pika for localhost

TASK [pika : task in role] **********************************************************
ok: [localhost] => {
    "msg": "this is task in a role"
}

Kết luận

Bình thường Ansible chạy từ trên xuống dưới, ngoại trừ các trường hợp ngoại lệ, như khi tasks gặp roles.

Hết.

HVN at https://pymi.vn and https://www.familug.org.

Ủng hộ tác giả 🍺

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG