Làm thế nào để kiểm tra đầu ra Jinja trong Saltstack?


16

Tôi có một templated SLStrong Salt Tôi đang cố gắng xây dựng, nhưng nó phát ra cú pháp không hợp lệ, dẫn đến các lỗi như:

my-minion-id:
    - State 'system' in SLS 'network' is not formed as a list

Về nguyên tắc, bằng cách nào đó , có thể kiểm tra đầu ra của mẫu Jinja trước khi nó cố phân tích đầu ra dưới dạng một SLStệp. Tồn tại một mô-đun Python cho trình kết xuất Jinja salt.renderers.jinja, nhưng nếu tôi cố thực thi nó trên CLI, tôi gặp lỗi:

# salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'salt.renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
# salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code

Làm thế nào tôi có thể thấy đầu ra của mẫu của tôi? Có vẻ vô lý nên khó gỡ lỗi này.

Câu trả lời:


11

Kiểm tra mô-đun slsutil.renderer .

Điều này sẽ làm những gì bạn muốn

salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'

Mô-đun này chỉ gọi hàm compile_template trực tiếp cho bạn.

Chỉnh sửa: /srv/salt/network/init.sls là đường dẫn trên minion, nếu bạn không nhắm mục tiêu chính là minion của mình, có lẽ bạn sẽ cần phải làm như sau.

salt minion-id cp.cache_file salt://network/init.sls
salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls

hoặc trỏ đến bất cứ tập tin nào mà cache_file phun ra.

Nếu bạn đang ở trên 2018.3 hoặc mới hơn, bạn chỉ có thể chỉ định salt://network/init.sls


Nhưng đường dẫn nào là / srv / salt / mạng? Có phải là con đường trên chủ? Các tay sai?
Mrten

Đó là một con đường trên minion. Bạn có thể làm salt minion-id cp.cache_file salt://network/init.slsvà sau đó chạy slsutil.renderer với tệp mà nó đã quay trở lại sau khi được lưu vào bộ nhớ cache hoặc bắt đầu vào năm 2018.3, bạn chỉ có thể chỉ địnhsalt://network/init.sls
gtmanfred

8

Dựa vào bao nhiêu thời gian tôi đã dành nhiều tuần trước để đấu tranh với một vấn đề liên quan chặt chẽ, tôi ước tôi đã tìm ra điều này sớm hơn.

Giải pháp dường như là sử dụng salt.modules.cp.get_templateđể yêu cầu Salt minion lấy tệp, kết xuất nó thông qua công cụ tạo khuôn mẫu và đặt nó ở nơi dễ đọc:

# salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja
my-minion-id:
    /root/network.sls

Từ đó, bạn kết nối với my-minion-idmáy chủ và kiểm tra tệp bạn đã đặt /root/network.sls.

Điều này thật ý nghĩa; salt.renderers.jinjanằm trong salt.rendererskhông gian tên, trong khi các mô-đun bạn có quyền truy cập từ CLI nằm trong salt.moduleskhông gian tên.

Nó cũng có ý nghĩa từ quan điểm hiển thị dữ liệu; kết xuất mẫu xảy ra trên minion , nơi có sẵn các loại ngũ cốc và như vậy, và tôi chưa thấy một mô-đun nào thực thi mã minion trả lại đầu ra tùy ý cho chủ (ví dụ như để xem CLI); dữ liệu trả về luôn có cấu trúc tốt và súc tích. (Có thể có một mô-đun như vậy, nhưng tôi không biết nó là gì. Nó sẽ là một giải pháp tốt hơn để thả các tệp kiểm tra vào một minion.)

chỉnh sửa: câu trả lời của @ gtmanfred tốt hơn nhiều và trực tiếp hơn, và tôi đã chấp nhận câu trả lời đó. Tôi để cái này ở đây cho mục đích thông tin. Đây không phải là giải pháp tốt nhất, nhưng nó vẫn hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.