Làm thế nào để làm một tập tin / thư mục tồn tại có điều kiện trong Puppet?


17

Tôi đang cố gắng viết một hàm trong con rối sẽ thực hiện failnếu đường dẫn thư mục đã qua không tồn tại.

if File["/some/path"]luôn trả về true và if defined(File["/some/path"])chỉ trả về true nếu tài nguyên được xác định trong con rối, bất kể nó có thực sự tồn tại hay không.

Có cách nào để làm điều này với một iftuyên bố đơn giản ?

Cảm ơn


2
Ghi nhớ: bảng kê khai được biên dịch trên bản gốc. Họ không biết gì về khách hàng ngoại trừ những sự thật mà nó đệ trình. Vì vậy, hãy viết một thực tế có thông tin này, hoặc lùi lại một bước và cho chúng tôi biết những gì bạn đang thực sự cố gắng giải quyết để chúng tôi có thể đưa ra một cách tiếp cận tốt hơn so với tuyên bố if.
Dennis Kaarsemaker

Câu trả lời:


30

Giải pháp cho việc này: chỉ sử dụngif trong một "kiểm tra" thực thi và yêu cầu nó trong hành động bạn muốn thực hiện:

exec {"check_presence":
  command => '/bin/true',
  onlyif => '/usr/bin/test -e /path/must/be/available',
}

whatever {"foo...":
  .....
  require => Exec["check_presence"],
}

5
Ôi thật là ác, tôi thích nó :-)
Dennis Kaarsemaker

1
Có thể đơn giản hơn nữa: exec {"test -e / path / must / be /
Available

1
Cảm ơn. Điều này làm việc tuyệt vời cho một kiểm tra dir duy nhất. Tuy nhiên, tôi đang cố xác thực một mảng các thư mục ... Nếu tôi thêm phần này vào một hàm, tôi gặp lỗi 'không thể xác định lại'.
ddario

6
Ý tưởng tuyệt vời, nhưng điều này có nghĩa là trên mỗi lần chạy rối sẽ có thông báo "Exec [check_presence] / return: được thực hiện thành công", điều này thực sự gây phiền nhiễu! Tốt hơn sẽ là: exec {'check_presence': lệnh => '/ bin / false', trừ khi => '/ usr / bin / test -e / path / must / be / Available',} Điều này sẽ làm tương tự, nhưng sẽ chỉ tạo ra lỗi / thông báo khi đường dẫn thực sự không tồn tại.
S0me0ne

2
Bất cứ điều gì khiến "yêu cầu" không thành công sẽ gây ra lỗi vì bất cứ điều gì có sự phụ thuộc không thành công, dù chỉ sử dụng hay trừ khi ... Vì vậy, về mặt kỹ thuật nó hoạt động nhưng bạn sẽ nhận được rất nhiều lỗi trong nhật ký con rối của mình ...
David Gardner

0

Tôi cũng gặp khó khăn khi tìm cách giữ cho mô-đun không chạy nếu thư mục không có mặt. Đây là những gì tôi tìm thấy làm việc cho tôi.

exec { 'module_name':
   command => "command to run with variables", # Double quotes for Variable interpolation
   path   => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
   onlyif => 'test -d /mydirectory',
   }

Thêm đường dẫn là những gì thực sự đã lừa tôi. Từ một số lý do ngay cả khi tôi đã thêm đường dẫn đến lệnh kiểm tra như /bin/testnó dường như không hoạt động đúng.

Hy vọng điều này sẽ giúp những người khác có thể có cùng một vấn đề.


0

Bạn cũng có thể sử dụng hàm tích hợp find_file () cho nó ... nó trả về undef khi tệp / đường dẫn không tồn tại và một chuỗi nếu nó tồn tại.

https://puppet.com/docs/puppet/5.5/feft.html#findfile


1
Điều này sẽ chỉ chạy trên bản gốc và nó để tìm các tệp trong các mô-đun.
bodgit

Cảm ơn, nhưng bạn cũng có thể sử dụng nó để tìm tệp trên HĐH bằng cách cung cấp đường dẫn đầy đủ cho nó hay không?
Mike

Chỉ trên máy mà danh mục đang được biên dịch, tức là bản gốc.
bodgit

Vâng đúng vậy.
Mike
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.