Cách tốt nhất trong Puppet để thêm một đoạn văn bản vào tệp / etc / hosts là gì?


8

Tôi cũng muốn giữ khả năng chỉnh sửa thủ công tệp máy chủ, ít nhất là 10 dòng đầu tiên.

#Public IP's - eth0
192.168.1.103   front-01
192.168.1.106   front-02

#Private IP's - eth1
192.169.40.201  priv0-0
192.169.40.202  priv0-1
192.169.40.207  priv1-0
192.169.40.208  priv1-1

#Virtual IP's - eth0:1
192.169.50.202  vip-01
192.169.50.205  vip-02

Có các mục lưu trữ này ở dưới cùng của / etc / hosts, sẽ là hoàn hảo. Cách tốt nhất để làm việc này là gì? Có cách nào tốt hơn viết 8 bảng kê khai máy chủ không?

# create a simple hostname and ip host entry
host { 'front-01':
    ip => '192.168.1.103',
}

Có thể có các nhóm máy chủ cần IP / tên máy chủ khác nhau trong / etc / hosts của chúng. Tôi sẽ sử dụng một mẫu, nhưng điều đó có nghĩa là mọi người không còn có thể thực hiện các thay đổi thủ công trong / etc / hosts của họ vì họ sẽ bị ghi đè bởi mẫu.

Câu trả lời:


14

Thành thật mà nói, sử dụng hosttài nguyên là cách đơn giản nhất để làm điều này. Bạn chỉ phải xác định các máy chủ bạn muốn điều khiển bằng con rối và bạn vẫn có thể chỉnh sửa phần còn lại của tệp bằng tay (ngay cả khi Puppet rơi vào tiêu đề đó cho bạn biết là không).

Các augeasmô-đun là quá mức cần thiết cho một tập tin host, bởi vì nó chỉ là bản sao các chức năng của hosttài nguyên (mặc dù nó không thêm trong "không chỉnh sửa tập tin này" tiêu đề).

Nếu bạn thực sự muốn một cái gì đó phức tạp hơn hoặc bạn muốn kiểm soát tốt vị trí của các dòng trong tệp, hãy sử dụng mô-đun concat với một nguồn cục bộ cho một trong các đoạn. Có một ví dụ cho loại điều đó (sử dụng tệp motd) trong concattài liệu.

Nhưng thực sự, chỉ cần sử dụng hosttài nguyên cho các máy chủ bạn muốn xác định từ Puppet và chỉnh sửa các tệp máy chủ cục bộ cho bất kỳ thứ gì khác bạn cần.

Cũng lưu ý rằng bạn có thể viết các định nghĩa máy chủ khá gọn trong Puppet:

host {
  # Public IPs - eth0
  'front-01': ip => '192.168.1.103';
  'front-02': ip => '192.168.1.106';

  # Private IPs - eth1
  'priv0-0': ip => '192.169.40.201';
  'priv0-1': ip => '192.169.40.202';
  'priv1-0': ip => '192.169.40.207';
  'priv1-1': ip => '192.169.40.208';

  # Virtual IPs - eth0:1
  'vip-01': ip => '192.169.50.202';
  'vip-02': ip => '192.169.50.205';
}

Câu trả lời này khá hơn một chút so với của tôi :-)
Cian

1

Sử dụng chức năng augeaus được tích hợp vào con rối. Bạn muốn một cái gì đó như

augeas {
  context => "files/etc/hosts"
  changes => [
    "set <ip address> <name>",
  ],
}

0

Một trường hợp trong đó bạn có thể chọn sử dụng augeas cho tệp / etc / hosts, ngoài các loại tài nguyên máy chủ - dành cho các dòng địa chỉ IP trùng lặp.

lưu trữ loại tài nguyên khá vui vẻ cho phép các dòng có cùng địa chỉ IP. (Google nó; trường hợp cực kỳ khó hiểu khi nó có thể là một ý tưởng tốt.)

Nhưng nếu bạn không muốn các địa chỉ IP trùng lặp trong tệp / etc / hosts của mình - thì augeas có thể giúp bạn. máy chủ là không giúp đỡ cho điều đó.


-1

Chỉ là một phương thức, không có mã:

Sử dụng templating hoặc bất cứ điều gì cập nhật một tập tin /etc/hosts.puppetvới dòng bắt đầu và kết thúc rõ ràng

###PUPPETSTART###
## Users: Lines between START and END will be deleted, put your own entries below 

192.168.0.1 host1
###PUPPETEND###

và có một kịch bản shell là phụ thuộc cắt đoạn này ra /etc/hostsvà thay thế nó bằng nội dung của /etc/hosts.puppet.

Coi chừng điều này có điều kiện chạy đua khi người dùng chỉnh sửa tệp và con rối chạy thay đổi nó. Ngoài ra, hướng dẫn người dùng của bạn chỉnh sửa một tệp /etc/hosts.uservà tạo /etc/hostsra cả hai tệp bất cứ khi nào một thay đổi.

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.