Bạn không làm gì sai với mô-đun lineinfile
. Nó làm những gì nó phải. Nó đảm bảo dòng như được định nghĩa trong line
có trong tệp và dòng được xác định bởi regexp
của bạn. Vì vậy, bất kể giá trị cài đặt của bạn đã có, giá trị đó sẽ bị ghi đè bởi line
mới của bạn.
Nếu bạn không muốn ghi đè dòng, trước tiên bạn cần kiểm tra nội dung và sau đó áp dụng điều kiện đó cho mô-đun lineinfile
. Tôi nghĩ rằng không có mô-đun để kiểm tra nội dung của tệp nên bạn có thể cần phải chạy grep
với lệnh shell
và kiểm tra .stdout
cho nội dung. Một cái gì đó như thế này (chưa được kiểm tra):
- name: Test for line
shell: grep "^couchbase.host" /database.properties
register: test_grep
Và sau đó áp dụng các điều kiện để lineinfile
nhiệm vụ của bạn:
- name: add couchbase host to properties
lineinfile: dest=/database.properties line="couchbase.host=127.0.0.1"
when: test_grep.stdout != ""
Các regexp
sau đó có thể được gỡ bỏ từ của bạn đã thực hiện chắc chắn dòng không tồn tại nên nó không bao giờ phù hợp.
Nhưng có thể bạn đang làm mọi thứ trở lại trước. Dòng đó trong tập tin đến từ đâu? Khi bạn quản lý hệ thống của mình với Ansible, sẽ không có cơ chế nào khác có thể can thiệp vào cùng một tệp cấu hình. Có lẽ bạn có thể giải quyết vấn đề này bằng cách thêm một giá trị default
vào vai trò của bạn?
Tôi cần phải thêm một thuộc tính mới vào môi trường triển khai của mình. Điều này bao gồm các máy chủ sản xuất và mô phỏng. chạy ansible tôi trên cron và khi khởi động máy chủ (tôi có thể tạo các máy chủ mô phỏng từ một hình ảnh theo yêu cầu) Giá trị mặc định cho tài sản là localhost, nhưng trên một số máy chủ của tôi sẽ thay đổi nó bằng tay sau đó. Tôi nghĩ rằng ansible là tốt cho xử lý sự thay đổi đó –
Ansible sẽ có thể cung cấp các máy chủ mới của bạn, và cấu hình chúng là tốt. Chỉ trong playbook của bạn, nơi bạn đã sử dụng mô-đun lineinfile, bạn đã chỉ định ansible để luôn có một dòng 'couchbase.host = 127.0.0.1' và ghi đè giá trị trước đó. Đó là cách bạn đã cấu hình nó. – Zasz
Hãy thử sử dụng mệnh đề khi như @udondan nêu – Zasz