Tôi có một Playbook Ansible để triển khai một ứng dụng Java như một init.d daemon hay không.Kiểm tra xem dịch vụ có tồn tại với Ansible
Là người mới bắt đầu trong cả Ansible và Linux Tôi gặp sự cố khi thực thi các tác vụ có điều kiện trên máy chủ dựa trên trạng thái của máy chủ.
Cụ thể tôi có một số máy chủ có dịch vụ đã có mặt và đang chạy nơi tôi muốn dừng dịch vụ trước khi thực hiện bất kỳ điều gì khác. Và sau đó có thể có máy chủ mới, chưa có dịch vụ. Vì vậy, tôi không thể chỉ đơn giản sử dụng service: name={{service_name}} state=stopped
, bởi vì điều này sẽ không thành công trên máy chủ lưu trữ mới.
Tôi làm cách nào để đạt được điều này? Dưới đây là những gì tôi có cho đến thời điểm này:
- name: Check if Service Exists
shell: "if chkconfig --list | grep -q my_service; then echo true; else echo false; fi;"
register: service_exists
# This should only execute on hosts where the service is present
- name: Stop Service
service: name={{service_name}} state=stopped
when: service_exists
register: service_stopped
# This too
- name: Remove Old App Folder
command: rm -rf {{app_target_folder}}
when: service_exists
# This should be executed on all hosts, but only after the service has stopped, if it was present
- name: Unpack App Archive
unarchive: src=../target/{{app_tar_name}} dest=/opt
bạn cũng có thể sử dụng' ignore_errors', đặc biệt là với các đăng ký, để Det ect này. – tedder42
Vâng, tôi đã tránh xa những kẻ bỏ qua, bởi vì tôi sợ những âm bản sai lầm do lỗi chính tả và như vậy. Ngoài ra, tôi đang cố gắng thuyết phục nhóm của mình đầu tư vào việc tự động hóa việc quản lý cấu hình của chúng tôi và không muốn điều đầu tiên hiển thị chúng giống như một loại hack nào đó. :) – EagleBeak
giải pháp cũng hoạt động trên ubuntu, và có lẽ nên làm việc trên hầu hết các bản phân phối Linux. –