Con rối - Kiểu mã hóa
Trong Puppet, kiểu mã hóa xác định tất cả các tiêu chuẩn mà người ta cần tuân theo trong khi cố gắng chuyển đổi cơ sở hạ tầng trên cấu hình máy thành mã. Con rối hoạt động và thực hiện tất cả các nhiệm vụ xác định của nó bằng cách sử dụng tài nguyên.
Định nghĩa ngôn ngữ của Puppet giúp xác định tất cả các tài nguyên theo cách có cấu trúc, được yêu cầu để quản lý bất kỳ máy mục tiêu nào cần được quản lý. Puppet sử dụng Ruby làm ngôn ngữ mã hóa của nó, có nhiều tính năng có sẵn giúp hoàn thành công việc rất dễ dàng với một cấu hình đơn giản về mặt mã.
Đơn vị cơ bản
Puppet sử dụng nhiều kiểu mã hóa cơ bản, dễ hiểu và dễ quản lý. Sau đây là danh sách một vài.
Tài nguyên
Trong Puppet, tài nguyên được gọi là đơn vị mô hình cơ bản được sử dụng để quản lý hoặc sửa đổi bất kỳ hệ thống đích nào. Tài nguyên bao gồm tất cả các khía cạnh của một hệ thống như tệp, dịch vụ và gói. Con rối đi kèm với một khả năng tích hợp, trong đó nó cho phép người dùng hoặc nhà phát triển phát triển các tài nguyên tùy chỉnh, giúp quản lý bất kỳ đơn vị cụ thể nào của máy
Trong Puppet, tất cả các tài nguyên được tổng hợp lại với nhau bằng cách sử dụng “define” hoặc là “classes”. Các tính năng tổng hợp này giúp tổ chức một mô-đun. Sau đây là tài nguyên mẫu bao gồm nhiều loại, tiêu đề và danh sách các thuộc tính mà Con rối có thể hỗ trợ nhiều thuộc tính. Mỗi tài nguyên trong Puppet đều có giá trị mặc định riêng, có thể bị ghi đè khi cần thiết.
Tài nguyên con rối mẫu cho tệp
Trong lệnh sau, chúng tôi đang cố gắng chỉ định một quyền cho một tệp cụ thể.
file {
'/etc/passwd':
owner => superuser,
group => superuser,
mode => 644,
}
Bất cứ khi nào lệnh trên được thực thi trên bất kỳ máy nào, nó sẽ xác minh rằng tệp mật khẩu trong hệ thống được cấu hình như mô tả. Tệp trước: dấu hai chấm là tiêu đề của tài nguyên, có thể được gọi là tài nguyên trong các phần khác của cấu hình Con rối.
Chỉ định tên địa phương để bổ sung cho tiêu đề
file { 'sshdconfig':
name => $operaSystem ? {
solaris => '/usr/local/etc/ssh/sshd_config',
default => '/etc/ssh/sshd_config',
},
owner => superuser,
group => superuser,
mode => 644,
}
Bằng cách sử dụng tiêu đề, luôn giống nhau, rất dễ dàng để tham khảo tài nguyên tệp trong cấu hình mà không cần phải lặp lại logic liên quan đến hệ điều hành.
Một ví dụ khác có thể là sử dụng một dịch vụ phụ thuộc vào một tệp.
service { 'sshd':
subscribe => File[sshdconfig],
}
Với sự phụ thuộc này, sshd dịch vụ sẽ luôn khởi động lại sau khi sshdconfigthay đổi tệp. Điểm cần nhớ ở đây làFile[sshdconfig] là một khai báo dưới dạng Tệp như trong trường hợp viết thường nhưng nếu chúng ta thay đổi nó thành FILE[sshdconfig] thì nó sẽ là một tài liệu tham khảo.
Một điểm cơ bản mà người ta cần ghi nhớ khi khai báo tài nguyên là, nó chỉ có thể được khai báo một lần cho mỗi tệp cấu hình. Việc khai báo cùng một tài nguyên nhiều lần sẽ gây ra lỗi. Thông qua khái niệm cơ bản này, Puppet đảm bảo rằng cấu hình được mô hình hóa tốt.
Chúng tôi thậm chí có khả năng quản lý sự phụ thuộc tài nguyên, điều này giúp quản lý nhiều mối quan hệ.
service { 'sshd':
require => File['sshdconfig', 'sshconfig', 'authorized_keys']
}
Metaparameters
Metaparameters được gọi là tham số toàn cục trong Puppet. Một trong những tính năng chính của máy đo ẩn là, nó hoạt động với bất kỳ loại tài nguyên nào trong Puppet.
Tài nguyên mặc định
Khi cần xác định một giá trị thuộc tính tài nguyên mặc định, Puppet cung cấp một bộ cú pháp để lưu trữ nó, sử dụng một đặc tả tài nguyên viết hoa không có tiêu đề.
Ví dụ, nếu chúng ta muốn đặt đường dẫn mặc định của tất cả các tệp thực thi, nó có thể được thực hiện bằng lệnh sau.
Exec { path => '/usr/bin:/bin:/usr/sbin:/sbin' }
exec { 'echo Testing mataparamaters.': }
Trong lệnh trên, câu lệnh đầu tiên Exec sẽ đặt giá trị mặc định cho tài nguyên thực thi. Tài nguyên thực thi yêu cầu một đường dẫn đủ điều kiện hoặc một đường dẫn trông giống như một tệp thực thi. Với điều này, người ta có thể xác định một đường dẫn mặc định duy nhất cho toàn bộ cấu hình. Mặc định hoạt động với bất kỳ loại tài nguyên nào trong Puppet.
Tuy nhiên, giá trị mặc định không phải là giá trị toàn cục, chúng chỉ ảnh hưởng đến phạm vi mà chúng được xác định hoặc chính biến tiếp theo của nó. Nếu ai đó muốn xác địnhdefault để có cấu hình hoàn chỉnh, sau đó chúng tôi xác định default và lớp học trong phần tiếp theo.
Bộ sưu tập tài nguyên
Tổng hợp là phương pháp thu thập mọi thứ lại với nhau. Con rối hỗ trợ một khái niệm tập hợp rất mạnh mẽ. Trong Puppet, tập hợp được sử dụng để nhóm tài nguyên là đơn vị cơ bản của Puppet với nhau. Khái niệm tổng hợp này trong Puppet đạt được bằng cách sử dụng hai phương pháp mạnh mẽ được gọi làclasses và definition.
Lớp và Định nghĩa
Các lớp chịu trách nhiệm mô hình hóa các khía cạnh cơ bản của nút. Họ có thể nói nút là một máy chủ web và nút cụ thể này là một trong số đó. Trong Puppet, các lớp lập trình là các lớp đơn và chúng có thể được đánh giá một lần cho mỗi nút.
Mặt khác, định nghĩa có thể được sử dụng nhiều lần trên một nút duy nhất. Chúng hoạt động tương tự như một người đã tạo ra loại Con rối của riêng mình bằng ngôn ngữ. Chúng được tạo ra để sử dụng nhiều lần với các đầu vào khác nhau mỗi lần. Điều này có nghĩa là người ta có thể chuyển các giá trị biến vào định nghĩa.
Sự khác biệt giữa Lớp và Định nghĩa
Sự khác biệt chính duy nhất giữa lớp và định nghĩa là trong khi xác định cấu trúc xây dựng và phân bổ tài nguyên, lớp chỉ được đánh giá một lần cho mỗi nút, trong đó mặt khác, một định nghĩa được sử dụng nhiều lần trên cùng một nút.
Các lớp học
Các lớp trong Puppet được giới thiệu bằng cách sử dụng từ khóa class và nội dung của lớp cụ thể đó được bao bọc bên trong dấu ngoặc nhọn như trong ví dụ sau.
class unix {
file {
'/etc/passwd':
owner => 'superuser',
group => 'superuser',
mode => 644;
'/etc/shadow':
owner => 'vipin',
group => 'vipin',
mode => 440;
}
}
Trong ví dụ sau, chúng tôi đã sử dụng một số bàn tay ngắn tương tự như ở trên.
class unix {
file {
'/etc/passwd':
owner => 'superuser',
group => 'superuser',
mode => 644;
}
file {'/etc/shadow':
owner => 'vipin',
group => 'vipin',
mode => 440;
}
}
Kế thừa trong các lớp múa rối
Trong Puppet, khái niệm kế thừa OOP được hỗ trợ theo mặc định, trong đó các lớp có thể mở rộng chức năng của lớp trước đó mà không cần sao chép và dán lại bit mã hoàn chỉnh trong lớp mới được tạo. Kế thừa cho phép lớp con ghi đè cài đặt tài nguyên được xác định trong lớp cha. Một điều quan trọng cần lưu ý khi sử dụng kế thừa là, một lớp chỉ có thể kế thừa các tính năng từ một lớp cha, không nhiều hơn một.
class superclass inherits testsubclass {
File['/etc/passwd'] { group => wheel }
File['/etc/shadow'] { group => wheel }
}
Nếu cần hoàn tác một số logic được chỉ định trong lớp cha, chúng ta có thể sử dụng undef command.
class superclass inherits testsubcalss {
File['/etc/passwd'] { group => undef }
}
Cách sử dụng kế thừa thay thế
class tomcat {
service { 'tomcat': require => Package['httpd'] }
}
class open-ssl inherits tomcat {
Service[tomcat] { require +> File['tomcat.pem'] }
}
Lớp lồng nhau trong con rối
Puppet hỗ trợ khái niệm lồng các lớp trong đó nó cho phép sử dụng các lớp lồng nhau có nghĩa là một lớp bên trong lớp kia. Điều này giúp đạt được mô-đun và phạm vi.
class testclass {
class nested {
file {
'/etc/passwd':
owner => 'superuser',
group => 'superuser',
mode => 644;
}
}
}
class anotherclass {
include myclass::nested
}
Các lớp được tham số hóa
Trong Puppet, các lớp có thể mở rộng chức năng của chúng để cho phép truyền các tham số vào một lớp.
Để truyền một tham số trong một lớp, người ta có thể sử dụng cấu trúc sau:
class tomcat($version) {
... class contents ...
}
Một điểm chính cần nhớ trong Puppet là, các lớp có tham số không được thêm vào bằng cách sử dụng hàm include, thay vào đó, lớp kết quả có thể được thêm vào dưới dạng định nghĩa.
node webserver {
class { tomcat: version => "1.2.12" }
}
Giá trị mặc định dưới dạng tham số trong lớp
class tomcat($version = "1.2.12",$home = "/var/www") {
... class contents ...
}
Các giai đoạn chạy
Puppet hỗ trợ khái niệm về giai đoạn chạy, có nghĩa là người dùng có thể thêm nhiều giai đoạn theo yêu cầu để quản lý bất kỳ tài nguyên cụ thể nào hoặc nhiều tài nguyên. Tính năng này rất hữu ích khi người dùng muốn phát triển một danh mục phức tạp. Trong một danh mục phức tạp, người ta có một số lượng lớn tài nguyên cần được biên dịch trong khi lưu ý rằng không nên tác động đến các yếu tố phụ thuộc giữa các tài nguyên được xác định.
Giai đoạn chạy rất hữu ích trong việc quản lý các phụ thuộc tài nguyên. Điều này có thể được thực hiện bằng cách thêm các lớp trong các giai đoạn xác định, trong đó một lớp cụ thể chứa một tập hợp các tài nguyên. Với giai đoạn chạy, Puppet đảm bảo rằng các giai đoạn đã xác định sẽ chạy theo thứ tự có thể dự đoán được chỉ định mỗi khi danh mục chạy và được áp dụng trên bất kỳ nút Puppet nào.
Để sử dụng điều này, người ta cần khai báo các giai đoạn bổ sung ngoài các giai đoạn đã có và sau đó Puppet có thể được định cấu hình để quản lý từng giai đoạn theo một thứ tự được chỉ định bằng cách sử dụng cùng một cú pháp quan hệ tài nguyên trước khi yêu cầu. “->” và “+>”. Mối quan hệ sau đó sẽ đảm bảo thứ tự của các lớp liên kết với mỗi giai đoạn.
Khai báo các giai đoạn bổ sung với cú pháp khai báo con rối
stage { "first": before => Stage[main] }
stage { "last": require => Stage[main] }
Khi các giai đoạn đã được khai báo, một lớp có thể được liên kết với giai đoạn khác với giai đoạn chính bằng cách sử dụng giai đoạn.
class {
"apt-keys": stage => first;
"sendmail": stage => main;
"apache": stage => last;
}
Tất cả các tài nguyên được liên kết với apt-key của lớp sẽ chạy trước. Tất cả các tài nguyên trong Sendmail sẽ là lớp chính và các tài nguyên liên kết với Apache sẽ là lớp cuối cùng.
Các định nghĩa
Trong Puppet, việc thu thập tài nguyên trong bất kỳ tệp kê khai nào được thực hiện bởi các lớp hoặc định nghĩa. Các định nghĩa rất giống với một lớp trong Puppet tuy nhiên chúng được giới thiệu vớidefine keyword (not class)và họ ủng hộ lập luận không kế thừa. Chúng có thể chạy nhiều lần trên cùng một hệ thống với các thông số khác nhau.
Ví dụ, nếu người ta muốn tạo một định nghĩa kiểm soát các kho mã nguồn nơi người ta đang cố gắng tạo nhiều kho lưu trữ trên cùng một hệ thống, thì người ta có thể sử dụng định nghĩa not class.
define perforce_repo($path) {
exec {
"/usr/bin/svnadmin create $path/$title":
unless => "/bin/test -d $path",
}
}
svn_repo { puppet_repo: path => '/var/svn_puppet' }
svn_repo { other_repo: path => '/var/svn_other' }
Điểm quan trọng cần lưu ý ở đây là cách một biến có thể được sử dụng với một định nghĩa. Chúng tôi sử dụng ($) biến dấu đô la. Ở trên, chúng tôi đã sử dụng $ title. Định nghĩa có thể có cả $ title và $ name mà tên và tiêu đề có thể được đại diện. Theo mặc định, $ title và $ name được đặt thành cùng một giá trị, nhưng người ta có thể đặt thuộc tính title và chuyển tên khác làm tham số. $ title và $ name chỉ hoạt động trong định nghĩa, không hoạt động trong lớp hoặc tài nguyên khác.
Mô-đun
Một mô-đun có thể được định nghĩa là một tập hợp tất cả các cấu hình sẽ được sử dụng bởi Puppet master để áp dụng các thay đổi cấu hình trên bất kỳ nút Puppet cụ thể nào (tác nhân). Chúng còn được gọi là tập hợp di động của các loại cấu hình khác nhau, được yêu cầu để thực hiện một tác vụ cụ thể. Ví dụ, một mô-đun có thể chứa tất cả các tài nguyên cần thiết để cấu hình Postfix và Apache.
Điểm giao
Các nút là bước còn lại rất đơn giản, đó là cách chúng ta khớp những gì chúng ta đã xác định (“máy chủ web trông như thế nào”) với máy nào được chọn để thực hiện các hướng dẫn đó.
Định nghĩa nút trông giống hệt như các lớp, bao gồm cả phần thừa kế hỗ trợ, tuy nhiên chúng đặc biệt đến mức khi một nút (một máy tính được quản lý chạy một máy khách con rối) kết nối với daemon chủ Puppet, tên của nó sẽ được tìm trong danh sách các nút đã xác định. Thông tin được xác định sẽ được đánh giá cho nút, và sau đó nút sẽ gửi cấu hình đó.
Tên nút có thể là tên máy chủ lưu trữ ngắn gọn hoặc tên miền đủ điều kiện (FQDN).
node 'www.vipin.com' {
include common
include apache, squid
}
Định nghĩa trên tạo một nút có tên là www.vipin.com và bao gồm chung, Apache và Squid classe
Chúng tôi có thể gửi cùng một cấu hình đến các nút khác nhau bằng cách phân tách từng nút bằng dấu phẩy.
node 'www.testing.com', 'www.testing2.com', 'www3.testing.com' {
include testing
include tomcat, squid
}
Biểu thức chính quy cho các nút phù hợp
node /^www\d+$/ {
include testing
}
Kế thừa nút
Node hỗ trợ một mô hình kế thừa hạn chế. Giống như các lớp, các nút chỉ có thể kế thừa từ một nút khác.
node 'www.testing2.com' inherits 'www.testing.com' {
include loadbalancer
}
Trong đoạn mã trên, www.testing2.com kế thừa tất cả các chức năng từ www.testing.com ngoài một lớp loadbalancer bổ sung.
Các tính năng được hỗ trợ nâng cao
Quoting- Trong hầu hết các trường hợp, chúng ta không cần trích dẫn một chuỗi trong Puppet. Bất kỳ chuỗi số alpha nào bắt đầu bằng một chữ cái sẽ được để lại mà không cần trích dẫn. Tuy nhiên, cách tốt nhất là trích dẫn một chuỗi cho bất kỳ giá trị không âm nào.
Nội suy biến với báo giá
Cho đến nay chúng ta đã đề cập đến biến về mặt định nghĩa. Nếu một người cần sử dụng các biến đó với một chuỗi, hãy sử dụng dấu ngoặc kép, không phải dấu nháy đơn. Chuỗi dấu ngoặc kép sẽ không thực hiện bất kỳ phép nội suy biến nào, chuỗi dấu ngoặc kép sẽ thực hiện. Biến có thể được đặt trong ngoặc{} điều này giúp chúng dễ sử dụng cùng nhau và dễ hiểu hơn.
$value = "${one}${two}"
Cách tốt nhất là sử dụng dấu ngoặc kép cho tất cả các chuỗi không yêu cầu nội suy chuỗi.
viết hoa
Viết hoa là một quá trình được sử dụng để tham chiếu, kế thừa và thiết lập các thuộc tính mặc định của một tài nguyên cụ thể. Về cơ bản có hai cách cơ bản để sử dụng nó.
Referencing- Là cách tham chiếu đến một tài nguyên đã được tạo sẵn. Nó chủ yếu được sử dụng cho các mục đích phụ thuộc, người ta phải viết hoa tên của tài nguyên. Ví dụ: request => file [sshdconfig]
Inheritance- Khi ghi đè cài đặt cho lớp cha từ lớp con, hãy sử dụng phiên bản viết hoa của tên tài nguyên. Sử dụng phiên bản chữ thường sẽ dẫn đến lỗi.
Setting Default Attribute Value - Việc sử dụng tài nguyên được viết hoa không có tiêu đề có tác dụng thiết lập mặc định của tài nguyên.
Mảng
Puppet cho phép sử dụng các mảng trong nhiều lĩnh vực [Một, hai, ba].
Một số thành viên kiểu, chẳng hạn như bí danh trong định nghĩa máy chủ lưu trữ chấp nhận các mảng trong giá trị của chúng. Một tài nguyên máy chủ có nhiều bí danh sẽ giống như sau.
host { 'one.vipin.com':
alias => [ 'satu', 'dua', 'tiga' ],
ip => '192.168.100.1',
ensure => present,
}
Đoạn mã trên sẽ thêm một máy chủ ‘one.brcletest.com’ vào danh sách máy chủ lưu trữ với ba bí danh ‘satu’ ‘dua’ ‘tiga’. Nếu một người muốn thêm nhiều tài nguyên vào một tài nguyên, nó có thể được thực hiện như trong ví dụ sau.
resource { 'baz':
require => [ Package['rpm'], File['testfile'] ],
}
Biến
Puppet hỗ trợ nhiều biến giống như hầu hết các ngôn ngữ lập trình khác. Các biến con rối được biểu thị bằng$.
$content = 'some content\n'
file { '/tmp/testing': content => $content }
Như đã nói trước đó Puppet là một ngôn ngữ khai báo, có nghĩa là phạm vi và quy tắc gán của nó khác với ngôn ngữ mệnh lệnh. Sự khác biệt cơ bản là người ta không thể thay đổi biến trong một phạm vi đơn lẻ, vì chúng dựa vào thứ tự trong tệp để xác định giá trị của một biến. Thứ tự không quan trọng trong ngôn ngữ khai báo.
$user = root
file {
'/etc/passwd':
owner => $user,
}
$user = bin
file {
'/bin':
owner => $user,
recurse => true,
}
Phạm vi biến đổi
Phạm vi biến xác định nếu tất cả các biến được xác định là hợp lệ. Cũng như các tính năng mới nhất, Puppet hiện đang được định phạm vi động, theo thuật ngữ Con rối có nghĩa là tất cả các biến được xác định sẽ được đánh giá trên phạm vi của chúng chứ không phải vị trí mà chúng được xác định.
$test = 'top'
class Testclass {
exec { "/bin/echo $test": logoutput => true }
}
class Secondtestclass {
$test = 'other'
include myclass
}
include Secondtestclass
Biến đủ điều kiện
Puppet hỗ trợ việc sử dụng các biến đủ điều kiện bên trong một lớp hoặc một định nghĩa. Điều này rất hữu ích khi người dùng muốn sử dụng cùng một biến trong các lớp khác mà anh ta đã xác định hoặc sắp định nghĩa.
class testclass {
$test = 'content'
}
class secondtestclass {
$other = $myclass::test
}
Trong đoạn mã trên, giá trị của $ biến khác đánh giá nội dung.
Điều kiện
Điều kiện là các tình huống khi người dùng muốn thực hiện một tập hợp các câu lệnh hoặc mã khi điều kiện xác định hoặc điều kiện bắt buộc được thỏa mãn. Con rối hỗ trợ hai loại điều kiện.
Điều kiện bộ chọn chỉ có thể được sử dụng trong các tài nguyên đã xác định để chọn giá trị chính xác của máy.
Điều kiện tuyên bố là các điều kiện được sử dụng rộng rãi hơn trong tệp kê khai giúp bao gồm các lớp bổ sung mà người dùng muốn đưa vào cùng một tệp kê khai. Xác định một nhóm tài nguyên riêng biệt trong một lớp hoặc đưa ra các quyết định cấu trúc khác.
Bộ chọn
Bộ chọn hữu ích khi người dùng muốn chỉ định một thuộc tính tài nguyên và các biến khác với các giá trị mặc định dựa trên các dữ kiện hoặc các biến khác. Trong Puppet, chỉ mục bộ chọn hoạt động giống như một toán tử ba chiều nhiều giá trị. Bộ chọn cũng có khả năng xác định các giá trị mặc định tùy chỉnh mà không có giá trị nào được xác định trong tệp kê khai và khớp với điều kiện.
$owner = $Sysoperenv ? {
sunos => 'adm',
redhat => 'bin',
default => undef,
}
Trong các phiên bản mới hơn của Puppet 0,25.0, các bộ chọn có thể được sử dụng làm biểu thức chính quy.
$owner = $Sysoperenv ? {
/(Linux|Ubuntu)/ => 'bin',
default => undef,
}
Trong ví dụ trên, bộ chọn $Sysoperenv giá trị khớp với Linux hoặc Ubuntu, thì bin sẽ là kết quả được chọn, nếu không người dùng sẽ được đặt là không xác định.
Điều kiện tuyên bố
Câu lệnh điều kiện là một loại câu lệnh điều kiện khác trong Puppet, rất giống với điều kiện trường hợp chuyển đổi trong tập lệnh Shell. Trong đó, một tập hợp nhiều câu lệnh trường hợp được xác định và các giá trị đầu vào đã cho được khớp với từng điều kiện.
Câu lệnh case phù hợp với điều kiện đầu vào đã cho sẽ được thực thi. Điều kiện câu lệnh trường hợp này không có bất kỳ giá trị trả lại nào. Trong Puppet, một trường hợp sử dụng rất phổ biến cho câu lệnh điều kiện là chạy một tập hợp các bit mã dựa trên hệ điều hành cơ bản.
case $ Sysoperenv {
sunos: { include solaris }
redhat: { include redhat }
default: { include generic}
}
Case Statement cũng có thể chỉ định nhiều điều kiện bằng cách phân tách chúng bằng dấu phẩy.
case $Sysoperenv {
development,testing: { include development } testing,production: { include production }
default: { include generic }
}
Câu lệnh If-Else
Con rối hỗ trợ khái niệm hoạt động dựa trên điều kiện. Để đạt được điều đó, câu lệnh If / else cung cấp các tùy chọn phân nhánh dựa trên giá trị trả về của điều kiện. Như trong ví dụ sau:
if $Filename {
file { '/some/file': ensure => present }
} else {
file { '/some/other/file': ensure => present }
}
Phiên bản mới nhất của Puppet hỗ trợ biểu thức biến trong đó câu lệnh if cũng có thể phân nhánh dựa trên giá trị của một biểu thức.
if $machine == 'production' {
include ssl
} else {
include nginx
}
Để đạt được sự đa dạng hơn trong mã và thực hiện các hoạt động có điều kiện phức tạp, Puppet hỗ trợ câu lệnh if / else lồng nhau như thể hiện trong đoạn mã sau.
if $ machine == 'production' {
include ssl
} elsif $ machine == 'testing' {
include nginx
} else {
include openssl
}
Tài nguyên ảo
Tài nguyên ảo là những tài nguyên không được gửi đến máy khách trừ khi được nhận ra.
Sau đây là cú pháp sử dụng tài nguyên ảo trong Puppet.
@user { vipin: ensure => present }
Trong ví dụ trên, vipin người dùng được định nghĩa hầu như để nhận ra định nghĩa mà người dùng có thể sử dụng trong bộ sưu tập.
User <| title == vipin |>
Bình luận
Chú thích được sử dụng trong bất kỳ bit mã nào để tạo một nút bổ sung về tập hợp các dòng mã và chức năng của nó. Trong Puppet, hiện có hai loại bình luận được hỗ trợ.
- Nhận xét về kiểu shell Unix. Chúng có thể nằm trên dòng riêng của chúng hoặc dòng tiếp theo.
- Nhiều dòng bình luận kiểu c.
Sau đây là một ví dụ về nhận xét kiểu shell.
# this is a comment
Sau đây là một ví dụ về bình luận nhiều dòng.
/*
This is a comment
*/
ưu tiên điều hành
Mức độ ưu tiên của toán tử Con rối tuân theo mức độ ưu tiên tiêu chuẩn trong hầu hết các hệ thống, từ cao nhất đến thấp nhất.
Sau đây là danh sách các biểu thức
- ! = không
- / = lần và chia
- - + = trừ, cộng
- << >> = dịch trái và dịch phải
- ==! = = không bằng nhau, bằng nhau
- > = <=> <= lớn hơn bằng, nhỏ hơn hoặc bằng, lớn hơn, nhỏ hơn
Biểu thức so sánh
Biểu thức so sánh được sử dụng khi người dùng muốn thực hiện một tập hợp các câu lệnh khi điều kiện đã cho được thỏa mãn. Biểu thức so sánh bao gồm các bài kiểm tra tính bình đẳng bằng cách sử dụng biểu thức ==.
if $environment == 'development' {
include openssl
} else {
include ssl
}
Ví dụ không bình đẳng
if $environment != 'development' {
$otherenvironment = 'testing'
} else {
$otherenvironment = 'production'
}
Biểu thức số học
$one = 1
$one_thirty = 1.30
$two = 2.034e-2 $result = ((( $two + 2) / $one_thirty) + 4 * 5.45) -
(6 << ($two + 4)) + (0×800 + -9)
Biểu thức Boolean
Biểu thức boolean có thể sử dụng hoặc, và, & không.
$one = 1
$two = 2
$var = ( $one < $two ) and ( $one + 1 == $two )
Biểu hiện thông thường
Con rối hỗ trợ so khớp biểu thức chính quy bằng cách sử dụng = ~ (khớp) và! ~ (Không khớp).
if $website =~ /^www(\d+)\./ {
notice('Welcome web server #$1')
}
Giống như trường hợp và bộ chọn đối sánh regex tạo ra biến phạm vi giới hạn cho mỗi regex.
exec { "Test":
command => "/bin/echo now we don’t have openssl installed on machine > /tmp/test.txt",
unless => "/bin/which php"
}
Tương tự như vậy, chúng ta có thể sử dụng trừ khi, trừ khi thực hiện lệnh mọi lúc, trừ lệnh dưới, trừ khi thoát thành công.
exec { "Test":
command => "/bin/echo now we don’t have openssl installed on machine > /tmp/test.txt",
unless => "/bin/which php"
}
Làm việc với các mẫu
Các mẫu được sử dụng khi một người muốn có một cấu trúc được xác định trước sẽ được sử dụng trên nhiều mô-đun trong Puppet và các mô-đun đó sẽ được phân phối trên nhiều máy. Bước đầu tiên để sử dụng mẫu là tạo một mẫu hiển thị nội dung mẫu bằng các phương pháp mẫu.
file { "/etc/tomcat/sites-available/default.conf":
ensure => "present",
content => template("tomcat/vhost.erb")
}
Puppet đưa ra một số giả định khi xử lý các tệp cục bộ để thực thi tổ chức và mô đun. Con rối tìm kiếm mẫu vhost.erb bên trong thư mục apache / templates, bên trong thư mục mô-đun.
Dịch vụ xác định và kích hoạt
Trong Puppet, nó có một tài nguyên gọi là dịch vụ có khả năng quản lý vòng đời của tất cả các dịch vụ đang chạy trên bất kỳ máy hoặc môi trường cụ thể nào. Tài nguyên dịch vụ được sử dụng để đảm bảo các dịch vụ được khởi tạo và kích hoạt. Chúng cũng được sử dụng để khởi động lại dịch vụ.
Ví dụ, trong mẫu trước của tomcat mà chúng ta có nơi chúng ta đặt máy chủ ảo apache. Nếu muốn đảm bảo apache được khởi động lại sau khi thay đổi máy chủ ảo, chúng ta cần tạo tài nguyên dịch vụ cho dịch vụ apache bằng lệnh sau.
service { 'tomcat':
ensure => running,
enable => true
}
Khi xác định tài nguyên, chúng tôi cần bao gồm tùy chọn thông báo để kích hoạt khởi động lại.
file { "/etc/tomcat/sites-available/default.conf":
ensure => "present",
content => template("vhost.erb"),
notify => Service['tomcat']
}