2012-03-01 26 views
5

Tôi có nút này.pp và tôi tự hỏi làm thế nào con rối sẽ thực hiện nó.Luồng thực hiện con rối

node 'agent.puppet.demo' { 
    include ssh 
    include postfix 
    include mysql 
    include apache 
} 

Trên nút đại lý, khi tôi chạy này:

$ puppetd -t -d 

Các con rối không thực hiện nó liên tục ý nghĩa, nó không thực hiện ssh đầu tiên, sau đó postfix, ...

Có ai biết tại sao điều này? Có phải vì nó được gọi là 'ngôn ngữ khai báo' trong đó thứ tự thực hiện không thực sự quan trọng?

Nếu đây là trường hợp, thì tôi có thể chỉ theo một cách nào đó, tuyên bố những gì tôi muốn và con rối sẽ tìm ra cách để thực hiện nó?

Trả lời

17

Tuyên bố từ chối trách nhiệm: Tôi là một trong những nhà phát triển của Puppet.

Nó sẽ thực thi nó theo thứ tự nhất quán nhưng không thể đoán trước, ngoại trừ bất kỳ phụ thuộc rõ ràng hoặc ngầm định nào trong mã. Phụ thuộc rõ ràng là những thứ bạn chỉ định với các metaparameters subscribe hoặc require. Phụ thuộc ngầm xuất phát từ tính năng tự động yêu cầu tự động yêu cầu, những việc như tự động áp dụng tài nguyên tệp theo thứ tự hợp lý.

Lý do cho điều này không phải là quá nhiều mà ngôn ngữ là khai báo, mà đúng hơn là ngôn ngữ được khai báo vì thứ tự không quan trọng đối với hầu hết mọi thứ trong không gian vấn đề cơ bản. Ví dụ, thực sự không có nhiều kết nối giữa quản lý ssh và quản lý postfix cho hầu hết mọi người - bạn có thể thực hiện công việc theo thứ tự, hoặc thậm chí cùng một lúc và mọi thứ sẽ hoạt động như cũ.

Điều đó giúp chúng tôi cải thiện mọi thứ theo nhiều cách mà "mọi thứ đều theo thứ tự tuyến tính" thì không. Ví dụ, chúng tôi đang làm việc để cài đặt gói hàng loạt trong khi vẫn tôn trọng các phụ thuộc rõ ràng bên ngoài các gói.

Vì vậy, thứ tự thực thi và phụ thuộc tuân theo vấn đề cơ bản và chúng tôi đã bảo toàn thuộc tính đó để có thể làm những điều tuyệt vời hơn.

Mục đích chính xác là những gì bạn nói ở phần cuối: bạn khai báo những gì bạn muốn và chúng tôi sẽ xử lý mọi chi tiết của việc nhận nó ở đó. Trong thời gian chúng tôi hy vọng sẽ thông minh hơn nhiều về phụ thuộc hợp lý, vì vậy bạn phải nói thậm chí ít hơn để có được điều đó, quá.

+2

Bạn có thể vui lòng xác định thứ tự * nhất quán nhưng không thể đoán trước được không? Chúng tôi đang gặp nhiều vấn đề khi Puppet 2.6 chỉ cần thực hiện các bước đơn đặt hàng và do một số phụ thuộc bị thiếu mà nó không thành công. Điều này là không thể thực hiện được. Tôi có thể buộc một số loại shuffle để chúng tôi có thể kiểm tra nó đúng không? Tôi cũng đã nghe phiên bản mới cung cấp cho nó thứ tự cố định.Ví dụ: – lzap

+0

Ví dụ: tôi có gói cài đặt phụ thuộc vào kho lưu trữ hiện có trong yum.repos.d. Làm thế nào tôi có thể thực thi việc cài đặt kho lưu trữ trước khi nó cố cài đặt gói? – Mojo

3

Tuyên bố từ chối trách nhiệm: Tôi vẫn còn khá mới đối với con rối :)

Điều quan trọng là nghĩ về mọi thứ về phụ thuộc. Đối với các phụ thuộc lớp, tôi thích sử dụng cú pháp Class ['a'] -> Class ['b']. Giả sử bạn có một lớp tomcat yêu cầu một lớp jdk tải xuống/cài đặt jdk mặt trời từ oracle. Trong lớp tomcat của bạn, bạn có thể chỉ định điều này với

Class [ 'jdk'] -> Class [ 'tomcat']

Hoặc bạn có thể khai báo một lớp học với một yêu cầu thông số meta hơn là sử dụng bao gồm.

+0

Vì vậy, tôi đoán tôi phải thêm các dòng sau để đảm bảo phụ thuộc được áp dụng chính xác. Lớp ['apache'] -> Lớp ['mysql'] -> Lớp ['postfix'] -> Lớp ['ssh'] Có cách tiếp cận khác để thực hiện thứ tự tuần tự mà không làm cho các mô-đun độc lập phụ thuộc lẫn nhau bằng cách sử dụng Yêu cầu nội bộ => Lớp học ... – Maverick

+0

Bạn có điều đó ngược. Lớp ['a'] -> Lớp ['b'] nghĩa là Lớp b yêu cầu Lớp a. Cách tôi muốn làm là, mỗi gói trong mô-đun riêng của nó. Mỗi mô-đun chỉ định phụ thuộc của riêng nó trên các lớp khác. Tôi thích sử dụng một lớp uber cơ bản cho những thứ như ssh được yêu cầu bởi mọi thứ. Đối với điều đó tôi sử dụng các giai đoạn chạy để đảm bảo nó luôn luôn chạy đầu tiên. – czervik

+0

@czervik bạn có phiền không cho thấy cách bạn bao gồm lớp uber của bạn cho những thứ như ssh để nó được bao gồm bởi mọi lớp khác? – memyself

Các vấn đề liên quan