Làm cách nào để dọn sạch nội dung khỏi các vai trò không được sử dụng nữa trên máy chủ?


15

Giả sử tôi có một máy chủ, trong số những thứ khác, một máy chủ web, nơi cài đặt vai trò Ansible liên quan nginx, thực hiện một số cấu hình thiết yếu trong /etc/nginxvà mở các cổng 80 và 443 trong tường lửa.

Tại một số điểm tôi muốn máy chủ cụ thể đó không còn là máy chủ web nữa, vì lý do nào đó tôi đã chuyển dịch vụ đó đi nơi khác. Chỉ cần loại bỏ máy chủ từ [webservers]trong kho sẽ để lại rác trong máy chủ. Lý tưởng nhất là tôi muốn gỡ cài đặt nginx, xóa /etc/nginxthư mục (và một số thư mục khác) và đóng các cổng 80 và 443 trong tường lửa.

Trong Con rối tôi có thể làm điều này. Một máy chủ lưu trữ là một máy chủ web sẽ có cấu hình như thế này:

class { 'nginx':
  ensure => present,
}

và tất cả những gì tôi phải làm là thay thế "hiện tại" bằng "vắng mặt". Nếu nginxlớp được viết tốt, nó sẽ hoàn tác các thay đổi mà nó đã thực hiện. (Thông thường, quản trị viên sẽ thay thế "hiện tại" bằng "vắng mặt" và sau đó, khi anh ta chắc chắn rằng tất cả các máy chủ bị ảnh hưởng đã hoàn tác cấu hình, anh ta sẽ xóa mục này khỏi bảng kê khai.)

Hơn nữa, tôi nghĩ rằng mô-đun tường lửa Puppet sẽ tự động loại bỏ các quy tắc tường lửa không thể tìm thấy trong bảng kê khai nữa; Vì vậy, tôi nghĩ rằng, đối với tường lửa, bạn thậm chí không cần phải làm điều "vắng mặt" ở trên, tường lửa sẽ tự động đóng lại bằng mọi cách.

Làm thế nào tôi có thể đạt được những điều này với Ansible?


1
Tôi nghĩ rằng những câu hỏi giả thuyết không thực sự thuộc chủ đề ở đây, mặc dù bản thân câu hỏi của bạn không phải là không có công. Thay vì "chúng ta hãy giả vờ ..." nói lại cho rõ và nói ví dụ "Trong con rối tôi có thể thay đổi một vai trò máy chủ và gỡ bỏ cài đặt nginx được cài đặt trước đó bằng cách thay đổi ensure => present để ensure => absentmà cũng sẽ ... Làm thế nào để làm điều tương tự với ansible" vv Lý tưởng nhất với một ví dụ về bất cứ điều gì bạn đã thử.
HBruijn

2
Tôi cho rằng Ansible không thực sự được thiết kế cho loại điều này. Nó nhắm mục tiêu vào các máy chủ dùng một lần, tái sản xuất. Nếu bạn không muốn máy trở thành một máy chủ web nữa, bạn chỉ cần xóa nó (hoặc chấm dứt nếu nó là một ví dụ trên đám mây) thay vì sử dụng lại nó.
ceejayoz

@ceejayoz nhiều nhất tôi đã đọc về Ansibles là trong Trò chơi & phần tiếp theo của Eson Card Card nhưng những gì bạn nói có ý nghĩa rất lớn trong việc dàn xếp đám mây
HBruijn

@ceejayoz: Hiện tại tôi không sử dụng Ansible để thiết lập nhiều máy chủ, nhưng để định cấu hình các máy chủ tự trị nhỏ. Tôi nghĩ rằng đây là một sử dụng hợp lệ. Vì vậy, một máy chủ có thể có nginx + django + PostgreSQL. Nếu sau này tôi quyết định đặt nginx hoặc nginx + django ở nơi khác, việc xóa toàn bộ máy chủ và cần đưa PostgreQuery trở lại từ bản sao lưu có vẻ không tối ưu (không đề cập đến thời gian chết).
Antonis Christofides

Câu trả lời:


10

Với Ansible, bạn sẽ không thực sự làm điều này khác với cách bạn sẽ làm với Puppet.

Trong ví dụ của bạn, nơi bạn sẽ đặt

class { 'nginx':
  ensure => absent,
}

bạn đang dựa vào tác giả của mô đun con rối đó đã viết mã cần thiết để xử lý loại bỏ mọi thứ. Không phải mô-đun con rối nào cũng có cái này.

Tương tự, với Ansible, bạn có thể có các vai trò có cả các bước cần thiết để cài đặt nó cũng như loại bỏ nó. Sự khác biệt chỉ là làm thế nào để gọi hai người.

Một cách tiếp cận có thể là một trong đó vai trò trong câu hỏi phơi bày một biến để chuyển đổi hành vi. Ví dụ, vai trò nginx đó có thể lấy một biến nginx_statelấy các giá trị installedabsent.

Trong vai trò tasks/main.yml, tác giả vai trò có thể có một cái gì đó dọc theo dòng ..

- include: install.yml
  when: nginx_state|default('present') == "present"

- include: uninstall.yml
  when: nginx_state|default('present') == "absent"

.. với logic cài đặt / gỡ cài đặt tương ứng được phân chia giữa hai tệp có điều kiện này.

Vai trò ansible cũng có thể được lồng nhau. Như một cách khác để làm điều tương tự, ví dụ, một tác giả có thể cung cấp một vai trò nginxvới một vai trò khác bên trong nó, được gọi uninstalled. Sau đó bạn có thể làm:

- name: Uninstall nginx
  hosts: some_group
  roles:
    - nginx/uninstalled

Ansible, khi so sánh với Puppet, có thể cho rằng có ít quy tắc và hướng dẫn hơn về cách mọi thứ nên được thực hiện để thực hành thay đổi nhiều hơn một chút trong tự nhiên, nhưng các khái niệm tương tự được áp dụng.


1
Mặc dù về mặt kỹ thuật, bạn cũng có thể chuyển các đối số thẳng vào các vai trò, tôi khuyên bạn nên sử dụng vai trò lồng nhau. Tôi sẽ thấy nó thực sự kỳ lạ khi nhìn thấy trong một vở kịch một số vai trò, điều đó thực sự sẽ được gỡ cài đặt khi thực hiện Playbook vì trong các biến được định nghĩa như vậy. Có nó rõ ràng thông qua vai trò lồng nhau có vẻ sạch sẽ hơn rất nhiều. Về mặt kỹ thuật, nó có thể chuyển các đối số cho vai trò ( - { role: nginx, state: absent }) nhưng đối với tôi nó dường như vô cùng dài dòng. Hạn chế duy nhất cho vai trò lồng nhau mà tôi đã thấy là tôi cần liên kết các vars mặc định từ cha mẹ.
bogdan.mustiata

Bạn cần làm gì cho một cái gì đó như roles: -nginx/uninstalledđể làm việc? Tôi đã tìm khắp nơi, nhưng không thể tìm thấy bất kỳ tài liệu nào về vai trò lồng nhau theo cách cho phép tôi làm điều đó.
tổng

1

Vì bạn có cấu hình / cung cấp trong Ansible, bạn có thể chỉ cần thổi bay toàn bộ máy chủ, cài đặt lại / cung cấp một cái mới và có trạng thái sạch đẹp được biết đến để làm việc.

Nếu bạn thực sự muốn "cấu hình lại" nó cho các mục đích khác thì bạn cần tạo một playbook mới thực hiện các nhiệm vụ dọn dẹp cần thiết.

Theo như tôi biết, tất cả các mô-đun đóng gói Ansible đều hỗ trợ state=absentđể đảm bảo rằng một gói nhất định không được cài đặt trên máy chủ của bạn. Ngoài ra, aptmô-đun có purge=yestham số sẽ dọn sạch mọi tệp cấu hình tùy chỉnh còn lại.

Bạn cũng có thể tạo các tác vụ để xác nhận rằng cổng 80 được tường lửa. Tuy nhiên, vì bạn sẽ không có bất kỳ quy trình nào chạy trên cổng đó, nên việc tường lửa sẽ không tạo ra bất kỳ sự khác biệt nào đối với bảo mật của máy chủ của bạn.


Để thêm vào điều này, tôi đặt cược hầu hết các vở kịch trong vai trò đó có thể đã state=absentđược thêm vào. Có một cơ hội tốt sẽ xóa hoặc hoàn tác phần lớn các thay đổi cấu hình bạn đã thực hiện. Tùy thuộc vào vai trò của nó lớn như thế nào, đây có thể là một PITA thực sự để thử nghiệm.
Christopher Karel
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.