2015-06-21 16 views
11

Trong Ansible, tôi đang tìm kiếm một kỹ thuật hoạt động tương tự như lineinfile hoặc replace nhưng đối với các tệp XML khi sử dụng mẫu không phải là một tùy chọn. Có vẻ như một nhu cầu rất phổ biến.Thao tác xml ansible tương tự như lineinfile

Tuy nhiên, với tệp XML, cần phải chỉ định xpath để đảm bảo thành phần có mặt/vắng mặt từ đúng vị trí trong DOM.

Giải pháp cần đảm bảo có cơ chế thay thế nút hiện có mà có thể trông hơi khác một chút so với nút đích.

Trivial ví dụ tập tin XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<datasources-configuration xmlns:myns="http://org.someorg.ds/config"> 
    <datasources> 
    <!-- various other xml --> 
    <datasource> 
     <name>MyDS</name> 
     <jdbcUrl>...</jdbcUrl> 
    </datasource> 
    </datasources> 
    <!-- various other xml --> 
</datasources-configuration> 

Tôi muốn để có thể đảm bảo một khối multiline đầy XML được chèn/thay thế vào file đích XML cho một biểu thức xpath nào đó phù hợp. Ví dụ, để thêm nguồn dữ liệu sau đây để datasources:

<datasource> 
     <name>AnotherDS</name> 
     <jdbcUrl>...</jdbcUrl> 
    </datasource> 

Điều tốt nhất mà tôi đã nhìn thấy được mô-đun tùy chỉnh này mà phá vỡ trên ví dụ riêng của nó: https://github.com/cmprescott/ansible-xml

Có một mô-đun như vậy tồn tại hoặc kiến ​​nghị giải pháp?

+1

Tại sao các mẫu không phải là một tùy chọn? Ví dụ của bạn trông rất hợp với tôi. – ydaetskcoR

+1

@ydaetskcoR Tệp này đã được tạo mẫu bởi một điều khoản cơ bản độc lập riêng biệt. Làm hài lòng bởi các vở kịch và vai trò gia tăng mới hơn sẽ thổi bay đường cơ sở. –

+0

Bạn dường như thiếu điểm tạo khuôn mẫu nếu nó không tạo ra tệp đầu ra chính xác như cách bạn muốn cho môi trường. Bạn có thể chia sẻ những gì bạn đang làm trong vở kịch không? tức là vở kịch, mẫu j2 và bất kỳ biến khoảng không quảng cáo cần thiết nào. – ydaetskcoR

Trả lời

8

Tôi chỉ đang xem bản thân mình và phát hiện ra mô-đun ansible-xml trông giống như một tùy chọn tuyệt vời.

+0

Có, tôi đã chỉ ra điều này trong câu hỏi của mình. Mã đó không thành công trên các ví dụ riêng của nó. Nếu bạn có may mắn hơn, hãy chia sẻ kinh nghiệm của bạn. –

+1

Ví dụ nào là vi phạm? Tôi là người duy trì của repo đó. Đây có phải là một trong những vấn đề nổi bật không? – CPrescott

+0

tất cả các sự cố đều nằm trong phần sự cố trên github :) –