PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Ansible Loves PostgreSQL

Ansible chỉ đơn giản là tuyệt vời và PostgreSQL chắc chắn tuyệt vời, hãy xem cách chúng hoạt động cùng nhau đáng kinh ngạc!

====================Thông báo thời gian chính thức! ====================

PGConf Europe 2015 sẽ diễn ra vào ngày 27-30 tháng 10 tại Vienna năm nay.

Tôi cho rằng bạn có thể quan tâm đến quản lý cấu hình, điều phối máy chủ, triển khai tự động (đó là lý do tại sao bạn đang đọc bài đăng trên blog này, phải không?) và bạn thích làm việc với PostgreSQL (chắc chắn) trên AWS (tùy chọn), thì bạn có thể muốn tham gia bài nói chuyện của tôi “Quản lý PostgreSQL với Ansible” vào ngày 28 tháng 10, 15-15:50.

Vui lòng kiểm tra lịch trình tuyệt vời và đừng bỏ lỡ cơ hội tham dự sự kiện PostgreSQL lớn nhất Châu Âu!

Hy vọng được gặp bạn ở đó, vâng, tôi thích uống cà phê sau khi nói chuyện 🙂

====================Thông báo thời gian chính thức! ====================

Ansible là gì và nó hoạt động như thế nào?

Phương châm của Ansible là “tự động hóa CNTT nguồn mở không cần tác nhân và mạnh mẽ ”Bằng cách trích dẫn từ tài liệu Ansible.

Như có thể thấy từ hình bên dưới, trang chủ của Ansible cho biết rằng các lĩnh vực sử dụng chính của Ansible như:cung cấp, quản lý cấu hình, triển khai ứng dụng, phân phối liên tục, bảo mật và tuân thủ, điều phối. Menu tổng quan cũng hiển thị trên nền tảng nào chúng tôi có thể tích hợp Ansible, tức là AWS, Docker, OpenStack, Red Hat, Windows.

Hãy kiểm tra các trường hợp sử dụng chính của Ansible để hiểu cách hoạt động và mức độ hữu ích của nó đối với môi trường CNTT.

Cấp phép

Ansible là người bạn trung thành của bạn khi bạn muốn tự động hóa mọi thứ trong hệ thống của mình. Nó không có tác nhân và bạn có thể đơn giản quản lý mọi thứ của mình (tức là máy chủ, bộ cân bằng tải, thiết bị chuyển mạch, tường lửa) thông qua SSH. Cho dù hệ thống của bạn chạy trên máy chủ kim loại trần hay máy chủ đám mây, Ansible sẽ ở đó và giúp bạn cung cấp các phiên bản của mình. Các đặc điểm lý tưởng của nó đảm bảo rằng bạn sẽ luôn ở trong trạng thái bạn mong muốn (và mong đợi).

Quản lý cấu hình

Một trong những điều khó nhất là không lặp lại chính mình trong các nhiệm vụ hoạt động lặp đi lặp lại và ở đây Ansible lại xuất hiện trong tâm trí bạn như một vị cứu tinh. Ngày xưa khi thời thế tồi tệ, các sysadmins đã viết nhiều script và kết nối với nhiều máy chủ để áp dụng chúng và rõ ràng đó không phải là điều tốt nhất trong cuộc sống của họ. Như chúng ta đều biết các công việc thủ công dễ xảy ra lỗi và chúng dẫn đến môi trường không đồng nhất thay vì đồng nhất và dễ quản lý hơn và chắc chắn làm cho cuộc sống của chúng ta căng thẳng hơn.

Với Ansible, bạn có thể viết các playbook đơn giản (với sự trợ giúp của tài liệu rất nhiều thông tin và sự hỗ trợ của cộng đồng khổng lồ của nó) và khi bạn viết các nhiệm vụ của mình, bạn có thể gọi một loạt các mô-đun (tức là AWS, Nagios, PostgreSQL, SSH, APT, File mô-đun). Do đó, bạn có thể tập trung vào nhiều hoạt động sáng tạo hơn là quản lý cấu hình theo cách thủ công.

Triển khai ứng dụng

Chuẩn bị sẵn các hiện vật, việc triển khai chúng đến một số máy chủ sẽ rất dễ dàng. Vì Ansible đang giao tiếp qua SSH nên không cần lấy từ kho lưu trữ trên mỗi máy chủ hoặc rắc rối với các phương pháp cổ điển như sao chép tệp qua FTP. Ansible có thể đồng bộ hóa các tạo tác và đảm bảo rằng chỉ các tệp mới hoặc cập nhật mới được chuyển và các tệp lỗi thời sẽ bị xóa. Điều này cũng tăng tốc độ truyền tệp và tiết kiệm nhiều băng thông.

Bên cạnh việc chuyển các tập tin, Ansible cũng giúp chuẩn bị cho các máy chủ sẵn sàng để sử dụng trong quá trình sản xuất. Trước khi chuyển, nó có thể tạm dừng giám sát, xóa máy chủ khỏi bộ cân bằng tải và dừng dịch vụ. Sau khi triển khai, nó có thể khởi động các dịch vụ, thêm máy chủ vào bộ cân bằng tải và tiếp tục theo dõi.

Tất cả những điều này không nhất thiết phải xảy ra cùng một lúc cho tất cả các máy chủ. Ansible có thể hoạt động trên một tập hợp con các máy chủ tại một thời điểm để cung cấp các triển khai không có thời gian chết. Ví dụ:tại một thời điểm, nó có thể triển khai 5 máy chủ cùng một lúc và sau đó nó có thể triển khai tới 5 máy chủ tiếp theo khi chúng kết thúc.

Sau khi thực hiện kịch bản này, nó có thể được thực thi ở bất kỳ đâu. Các nhà phát triển hoặc thành viên của nhóm QA có thể triển khai trên máy của riêng họ cho mục đích thử nghiệm. Ngoài ra, để khôi phục một triển khai vì bất kỳ lý do gì, tất cả những gì Ansible cần là vị trí của các tạo tác hoạt động được biết đến gần đây nhất. Sau đó, nó có thể dễ dàng triển khai lại chúng trên các máy chủ sản xuất để đưa hệ thống trở lại trạng thái ổn định.

Giao hàng liên tục

Phân phối liên tục có nghĩa là áp dụng cách tiếp cận nhanh chóng và đơn giản cho các bản phát hành. Để đạt được mục tiêu đó, điều quan trọng là phải sử dụng các công cụ tốt nhất cho phép phát hành thường xuyên mà không có thời gian ngừng hoạt động và yêu cầu càng ít sự can thiệp của con người càng tốt. Vì chúng ta đã tìm hiểu về khả năng triển khai ứng dụng của Ansible ở trên, nên việc triển khai không có thời gian chết là khá dễ dàng. Yêu cầu khác để phân phối liên tục là ít quy trình thủ công hơn và điều đó có nghĩa là tự động hóa. Ansible có thể tự động hóa bất kỳ tác vụ nào từ cung cấp máy chủ đến cấu hình dịch vụ để sẵn sàng sản xuất. Sau khi tạo và thử nghiệm các kịch bản trong Ansible, việc đặt chúng trước một hệ thống tích hợp liên tục và để Ansible thực hiện công việc của mình sẽ trở nên đơn giản hơn.

Bảo mật và Tuân thủ

Bảo mật luôn được coi là điều quan trọng nhất nhưng giữ cho hệ thống an toàn là một trong những điều khó nhất để đạt được. Bạn cần chắc chắn về bảo mật dữ liệu của mình cũng như bảo mật dữ liệu của khách hàng. Để đảm bảo an ninh cho hệ thống của bạn, xác định bảo mật là chưa đủ, bạn cần có khả năng áp dụng bảo mật đó và liên tục giám sát hệ thống của mình để đảm bảo chúng vẫn tuân thủ bảo mật đó.

Ansible rất dễ sử dụng cho dù đó là thiết lập các quy tắc tường lửa, khóa người dùng và nhóm hay áp dụng các chính sách bảo mật tùy chỉnh. Bản chất của nó là an toàn vì bạn có thể áp dụng nhiều lần cùng một cấu hình và nó sẽ chỉ thực hiện những thay đổi cần thiết để đưa hệ thống trở lại tuân thủ.

Điều phối

Ansible đảm bảo rằng tất cả các nhiệm vụ được giao theo thứ tự phù hợp và thiết lập sự hài hòa giữa tất cả các nguồn lực mà nó quản lý. Việc sắp xếp các triển khai nhiều tầng phức tạp dễ dàng hơn với khả năng triển khai và quản lý cấu hình của Ansible. Ví dụ:xem xét việc triển khai ngăn xếp phần mềm, những lo lắng như đảm bảo rằng tất cả các máy chủ cơ sở dữ liệu đã sẵn sàng trước khi kích hoạt máy chủ ứng dụng hoặc cấu hình mạng trước khi thêm máy chủ vào bộ cân bằng tải không còn là vấn đề phức tạp nữa.

Ansible cũng giúp điều chỉnh các công cụ điều phối khác như Amazon’s CloudFormation, OpenStack’s Heat, Docker’s Swarm, v.v. Bằng cách này, thay vì học các nền tảng, ngôn ngữ và quy tắc khác nhau; người dùng chỉ có thể tập trung vào cú pháp YAML của Ansible và các mô-đun mạnh mẽ.

Mô-đun Ansible là gì?

Mô-đun hoặc thư viện mô-đun cung cấp phương tiện Ansible để kiểm soát hoặc quản lý tài nguyên trên máy chủ cục bộ hoặc từ xa. Chúng thực hiện nhiều chức năng khác nhau. Ví dụ:một mô-đun có thể chịu trách nhiệm khởi động lại máy hoặc nó có thể chỉ hiển thị một thông báo trên màn hình.

Ansible cho phép người dùng viết các mô-đun của riêng họ và cũng cung cấp các mô-đun lõi hoặc bổ sung có sẵn.

Còn sách vở Ansible thì sao?

Ansible cho phép chúng tôi sắp xếp công việc của mình theo nhiều cách khác nhau. Ở dạng trực tiếp nhất, chúng tôi có thể làm việc với các mô-đun Ansible bằng cách sử dụng “ ansible ”Công cụ dòng lệnh và tệp kiểm kê.

Khoảng không quảng cáo

Một trong những khái niệm quan trọng nhất là khoảng không quảng cáo . Chúng tôi cần tệp kiểm kê để cho Ansible biết máy chủ nào cần kết nối bằng SSH, thông tin kết nối mà nó yêu cầu và tùy chọn biến nào được liên kết với các máy chủ đó.

Tệp kiểm kê có định dạng giống INI. Trong tệp khoảng không quảng cáo, chúng tôi có thể chỉ định nhiều máy chủ và nhóm chúng dưới nhiều nhóm máy chủ.

Tệp khoảng không quảng cáo mẫu hosts.ini của chúng tôi giống như sau:

[dbservers]
db.example.com

Ở đây chúng tôi có một máy chủ duy nhất được gọi là “db.example.com” trong một nhóm máy chủ có tên là “dbservers”. Trong tệp khoảng không quảng cáo, chúng tôi cũng có thể bao gồm các cổng SSH tùy chỉnh, tên người dùng SSH, khóa SSH, thông tin proxy, biến, v.v.

Vì chúng tôi đã sẵn sàng tệp kiểm kê, để xem thời gian hoạt động của các máy chủ cơ sở dữ liệu của chúng tôi, chúng tôi có thể gọi “ command của Ansible ”Và thực thi“ thời gian hoạt động ”Trên các máy chủ đó:

ansible dbservers -i hosts.ini -m command -a "uptime"

Ở đây, chúng tôi đã hướng dẫn Ansible đọc các máy chủ từ tệp hosts.ini, kết nối chúng bằng SSH, thực thi “ thời gian hoạt động ”Trên mỗi lệnh, và sau đó in kết quả của chúng ra màn hình. Loại thực thi mô-đun này được gọi là lệnh ad-hoc .

Đầu ra của lệnh sẽ như sau:

[email protected] ~/blog/ansible-loves-postgresql # ansible dbservers -i hosts.ini -m command -a "uptime"
db.example.com | success | rc=0 >>
21:16:24 up 93 days,  9:17,  4 users,  load average: 0.08, 0.03, 0.05

Tuy nhiên, nếu giải pháp của chúng tôi chứa nhiều hơn một bước, thì việc quản lý chúng chỉ bằng cách sử dụng các lệnh đặc biệt sẽ trở nên khó khăn.

Đây là sách chơi Ansible. Nó cho phép chúng tôi tổ chức giải pháp của mình trong một tệp playbook bằng cách tích hợp tất cả các bước theo nhiệm vụ, biến, vai trò, mẫu, trình xử lý và khoảng không quảng cáo.

Hãy xem qua một số thuật ngữ này để hiểu chúng có thể giúp chúng ta như thế nào.

Nhiệm vụ

Một khái niệm quan trọng khác là nhiệm vụ. Mỗi tác vụ Ansible chứa một tên, một mô-đun sẽ được gọi, các tham số mô-đun và các điều kiện trước / sau tùy chọn. Chúng cho phép chúng tôi gọi các mô-đun Ansible và chuyển thông tin cho các tác vụ liên tiếp.

Biến

Ngoài ra còn có các biến. Chúng rất hữu ích để sử dụng lại thông tin chúng tôi đã cung cấp hoặc thu thập. Chúng tôi có thể xác định chúng trong khoảng không quảng cáo, trong tệp YAML bên ngoài hoặc trong sách phát.

Playbook

Sách phát Ansible được viết bằng cú pháp YAML. Nó có thể chứa nhiều hơn một vở kịch. Mỗi lần chơi chứa tên của các nhóm máy chủ để kết nối và các nhiệm vụ mà nó cần thực hiện. Nó cũng có thể chứa các biến / vai trò / trình xử lý, nếu được xác định.

Bây giờ chúng ta có thể xem một playbook rất đơn giản để xem nó có thể được cấu trúc như thế nào:

---

- hosts: dbservers
  gather_facts: no

  vars:
    who: World

  tasks:
  - name: say hello
    debug: msg="Hello {{ who }}"

  - name: retrieve the uptime
    command: uptime

Trong playbook rất đơn giản này, chúng tôi đã nói với Ansible rằng nó phải hoạt động trên các máy chủ được xác định trong nhóm máy chủ “dbservers”. Chúng tôi đã tạo một biến có tên là “ai” và sau đó chúng tôi xác định các nhiệm vụ của mình. Lưu ý rằng trong tác vụ đầu tiên khi chúng tôi in ra một thông báo gỡ lỗi, chúng tôi đã sử dụng biến “ai” và khiến Ansible in “Hello World” ra màn hình. Trong nhiệm vụ thứ hai, chúng tôi đã yêu cầu Ansible kết nối với từng máy chủ và sau đó thực hiện lệnh “thời gian hoạt động” ở đó.

Mô-đun PostgreSQL Ansible

Ansible cung cấp một số mô-đun cho PostgreSQL. Một số trong số chúng nằm trong các mô-đun cốt lõi trong khi những người khác có thể được tìm thấy trong các mô-đun bổ sung.

Tất cả các mô-đun PostgreSQL yêu cầu gói Python psycopg2 được cài đặt trên cùng một máy với máy chủ PostgreSQL. Psycopg2 là bộ điều hợp cơ sở dữ liệu PostgreSQL bằng ngôn ngữ lập trình Python.

Trên hệ thống Debian / Ubuntu, gói psycopg2 có thể được cài đặt bằng lệnh sau:

apt-get install python-psycopg2

Bây giờ chúng ta sẽ xem xét các mô-đun này một cách chi tiết. Ví dụ:chúng tôi sẽ làm việc trên máy chủ PostgreSQL tại máy chủ db.example.com trên cổng 5432 với postgres người dùng và một mật khẩu trống.

postgresql_db

Mô-đun cốt lõi này tạo hoặc xóa một cơ sở dữ liệu PostgreSQL nhất định. Trong thuật ngữ Ansible, nó đảm bảo rằng một cơ sở dữ liệu PostgreSQL nhất định có hoặc không có.

Tùy chọn quan trọng nhất là tham số bắt buộc “ name ”. Nó đại diện cho tên của cơ sở dữ liệu trong máy chủ PostgreSQL. Một thông số quan trọng khác là “ trạng thái ”. Nó yêu cầu một trong hai giá trị: hiện tại hoặc vắng mặt . Điều này cho phép chúng tôi tạo hoặc xóa cơ sở dữ liệu được xác định bằng giá trị được cho trong tên tham số.

Một số quy trình công việc cũng có thể yêu cầu đặc tả các thông số kết nối chẳng hạn như login_host , cổng , login_user login_password .

Hãy tạo cơ sở dữ liệu có tên “ module_test ”Trên máy chủ PostgreSQL của chúng tôi bằng cách thêm các dòng dưới đây vào tệp playbook của chúng tôi:

- postgresql_db: name=module_test
                 state=present
                 login_host=db.example.com
                 port=5432
                 login_user=postgres

Tại đây, chúng tôi đã kết nối với máy chủ cơ sở dữ liệu thử nghiệm của mình tại db.example.com với người dùng; postgres . Tuy nhiên, nó không nhất thiết phải là postgres người dùng làm tên người dùng có thể là bất kỳ thứ gì.

Xóa cơ sở dữ liệu dễ dàng như tạo nó:

- postgresql_db: name=module_test
                 state=absent
                 login_host=db.example.com
                 port=5432
                 login_user=postgres

Lưu ý giá trị "không có" trong thông số "trạng thái".

postgresql_ext

PostgreSQL được biết là có các phần mở rộng rất hữu ích và mạnh mẽ. Ví dụ:một tiện ích mở rộng gần đây là tsm_system_rows giúp tìm nạp số lượng hàng chính xác trong lấy mẫu bảng. (Để biết thêm thông tin, bạn có thể xem bài đăng trước của tôi về các phương pháp lấy mẫu bảng.)

Mô-đun bổ sung này thêm hoặc xóa các phần mở rộng PostgreSQL khỏi cơ sở dữ liệu. Nó yêu cầu hai tham số bắt buộc: db tên . db tham số đề cập đến tên cơ sở dữ liệu và tên tham số đề cập đến tên phần mở rộng. Chúng tôi cũng có trạng thái tham số cần hiện tại hoặc vắng mặt và các tham số kết nối tương tự như trong mô-đun postgresql_db.

Hãy bắt đầu bằng cách tạo tiện ích mở rộng mà chúng ta đã nói đến:

- postgresql_ext: db=module_test
                  name=tsm_system_rows
                  state=present
                  login_host=db.example.com
                  port=5432
                  login_user=postgres

postgresql_user

Mô-đun cốt lõi này cho phép thêm hoặc xóa người dùng và vai trò khỏi cơ sở dữ liệu PostgreSQL.

Đây là một mô-đun rất mạnh mẽ vì trong khi đảm bảo người dùng có mặt trên cơ sở dữ liệu, nó cũng cho phép sửa đổi các đặc quyền hoặc vai trò cùng một lúc.

Hãy bắt đầu bằng cách xem xét các thông số. Tham số bắt buộc duy nhất ở đây là “ name ”, Đề cập đến một người dùng hoặc một tên vai trò. Ngoài ra, như trong hầu hết các mô-đun Ansible, “ trạng thái ”Tham số là quan trọng. Nó có thể có một trong hiện tại hoặc vắng mặt giá trị và giá trị mặc định của nó là hiện tại .

Ngoài các tham số kết nối như trong các mô-đun trước, một số tham số tùy chọn quan trọng khác là:

  • db :Tên của cơ sở dữ liệu nơi quyền sẽ được cấp
  • mật khẩu :Mật khẩu của người dùng
  • priv :Đặc quyền ở định dạng “priv1 / priv2” hoặc bảng ở định dạng “table:priv1, priv2,…”
  • role_attr_flags :Thuộc tính vai trò. Giá trị có thể là:
    • [KHÔNG] SUPERUSER
    • [KHÔNG] CREATEROLE
    • [KHÔNG] CREATEUSER
    • [KHÔNG] CREATEDB
    • [KHÔNG] INHERIT
    • [KHÔNG] ĐĂNG NHẬP
    • [KHÔNG] THAY THẾ

Để tạo người dùng mới có tên ada với mật khẩu lovelace và đặc quyền kết nối với cơ sở dữ liệu module_test , chúng tôi có thể thêm phần sau vào sổ tay của mình:

- postgresql_user: db=module_test
                   name=ada
                   password=lovelace
                   state=present
                   priv=CONNECT
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

Bây giờ chúng tôi đã có người dùng sẵn sàng, chúng tôi có thể chỉ định cho cô ấy một số vai trò. Để cho phép “ada” đăng nhập và tạo cơ sở dữ liệu:

- postgresql_user: name=ada
                   role_attr_flags=LOGIN,CREATEDB
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

Chúng tôi cũng có thể cấp các đặc quyền toàn cầu hoặc dựa trên bảng, chẳng hạn như “ INSERT ”,“ CẬP NHẬT ”,“ CHỌN ”Và“ DELETE ”Bằng cách sử dụng priv tham số. Một điểm quan trọng cần xem xét là không thể xóa người dùng cho đến khi tất cả các đặc quyền đã cấp được thu hồi trước.

postgresql_privs

Mô-đun cốt lõi này cấp hoặc thu hồi các đặc quyền trên các đối tượng cơ sở dữ liệu PostgreSQL. Các đối tượng được hỗ trợ là: table , trình tự , chức năng , cơ sở dữ liệu , lược đồ , ngôn ngữ , vùng bảng nhóm .

Các tham số bắt buộc là “ cơ sở dữ liệu” ; tên của cơ sở dữ liệu để cấp / thu hồi các đặc quyền và “ vai trò” ; danh sách tên vai trò được phân tách bằng dấu phẩy.

Các thông số tùy chọn quan trọng nhất là:

  • loại :Loại đối tượng để đặt đặc quyền. Có thể là một trong số: bảng, trình tự, hàm, cơ sở dữ liệu, giản đồ, ngôn ngữ, vùng bảng, nhóm . Giá trị mặc định là bảng .
  • phản đối :Các đối tượng cơ sở dữ liệu để thiết lập các đặc quyền. Có thể có nhiều giá trị. Trong trường hợp đó, các đối tượng được phân tách bằng dấu phẩy.
  • privs :Danh sách các đặc quyền được phân tách bằng dấu phẩy để cấp hoặc thu hồi. Các giá trị có thể bao gồm: TẤT CẢ , CHỌN , CẬP NHẬT , INSERT .

Hãy xem cách này hoạt động như thế nào bằng cách cấp tất cả các đặc quyền trên “ công khai ”Lược đồ thành“ ada ”:

- postgresql_privs: db=module_test
                    privs=ALL
                    type=schema
                    objs=public
                    role=ada
                    login_host=db.example.com
                    port=5432
                    login_user=postgres

postgresql_lang

Một trong những tính năng rất mạnh của PostgreSQL là hỗ trợ hầu như bất kỳ ngôn ngữ nào được sử dụng làm ngôn ngữ thủ tục. Mô-đun bổ sung này thêm, xóa hoặc thay đổi các ngôn ngữ thủ tục với cơ sở dữ liệu PostgreSQL.

Tham số bắt buộc duy nhất là “ lang ”; tên của ngôn ngữ thủ tục để thêm hoặc bớt. Các tùy chọn quan trọng khác là “ db ”; tên của cơ sở dữ liệu nơi ngôn ngữ được thêm vào hoặc bị xóa và “ tin cậy ”; tùy chọn để đặt ngôn ngữ đáng tin cậy hoặc không đáng tin cậy cho cơ sở dữ liệu đã chọn.

Hãy bật ngôn ngữ PL / Python cho cơ sở dữ liệu của chúng tôi:

- postgresql_lang: db=module_test
                   lang=plpython2u
                   state=present
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

Tập hợp tất cả cùng nhau

Bây giờ chúng ta đã biết cách cấu trúc một playbook Ansible và những mô-đun PostgreSQL nào có sẵn để chúng ta sử dụng, bây giờ chúng ta có thể kết hợp kiến ​​thức của mình trong một playbook Ansible.

Dạng cuối cùng của playbook main.yml giống như sau:

---

- hosts: dbservers
  sudo: yes
  sudo_user: postgres
  gather_facts: yes

  vars:
    dbname: module_test
    dbuser: postgres

  tasks:
  - name: ensure the database is present
    postgresql_db: >
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the tsm_system_rows extension is present
    postgresql_ext: >
      name=tsm_system_rows
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the user has access to database
    postgresql_user: >
      name=ada
      password=lovelace
      state=present
      priv=CONNECT
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the user has necessary privileges
    postgresql_user: >
      name=ada
      role_attr_flags=LOGIN,CREATEDB
      login_user={{ dbuser }}

  - name: ensure the user has schema privileges
    postgresql_privs: >
      privs=ALL
      type=schema
      objs=public
      role=ada
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the postgresql-plpython-9.4 package is installed
    apt: name=postgresql-plpython-9.4 state=latest
    sudo_user: root

  - name: ensure the PL/Python language is available
    postgresql_lang: >
      lang=plpython2u
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

Bây giờ chúng ta có thể chạy playbook của mình bằng lệnh “ansible-playbook”:

[email protected] ~/blog/ansible-loves-postgresql # ansible-playbook -i hosts.ini main.yml

PLAY [dbservers] **************************************************************

GATHERING FACTS ***************************************************************
ok: [db.example.com]

TASK: [ensure the database is present] ****************************************
changed: [db.example.com]

TASK: [ensure the tsm_system_rows extension is present] ***********************
changed: [db.example.com]

TASK: [ensure the user has access to database] ********************************
changed: [db.example.com]

TASK: [ensure the user has necessary privileges] ******************************
changed: [db.example.com]

TASK: [ensure the user has schema privileges] *********************************
changed: [db.example.com]

TASK: [ensure the postgresql-plpython-9.4 package is installed] ***************
changed: [db.example.com]

TASK: [ensure the PL/Python language is available] ****************************
changed: [db.example.com]

PLAY RECAP ********************************************************************
db.example.com             : ok=8    changed=7    unreachable=0    failed=0

Bạn có thể tìm thấy khoảng không quảng cáo và tệp sách vở tại kho lưu trữ GitHub của tôi được tạo cho bài đăng trên blog này. Ngoài ra còn có một playbook khác có tên “remove.yml” hoàn tác mọi thứ chúng tôi đã làm trong playbook chính.

Để biết thêm thông tin về Ansible:

  • Xem các tài liệu được viết tốt của họ.
  • Xem video bắt đầu nhanh Ansible, đây là một hướng dẫn thực sự hữu ích.
  • Theo dõi lịch trình hội thảo trên web của họ, có một số hội thảo trên web thú vị sắp tới trong danh sách.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vị trí mặc định của cơ sở dữ liệu PostgreSQL trên Linux

  2. làm thế nào để thay đổi cổng nghe postgresql trong windows?

  3. CẬP NHẬT với ORDER BY

  4. Các công cụ sao lưu hàng đầu cho PostgreSQL

  5. Sắp xếp không chính xác PostgreSQL