Ansible Playbook将在postgres SQL数据库实例上运行查询

时间:2015-10-05 19:31:01

标签: ansible ansible-playbook

我是使用Ansible的新手,我希望了解如何编写一个Ansible Playbook,它将作为特定用户在postgres SQL db实例上运行查询,并在终端中显示输出。

例如:

SELECT * FROM example_db;

有人可以提供一个简单的例子吗?

4 个答案:

答案 0 :(得分:3)

基于@Christofides的例子。我做了一些修改和测试。
这有效:

- hosts: all
  sudo: yes
  sudo_user: postgres
  tasks:
    - name: Select all from example table
      command: psql -c "SELECT * FROM example_table" example_db
      register: select_all_from_example

    - name : Display example table contents
      debug: msg="{{ select_all_from_example.stdout }}"

<强>结果: enter image description here

答案 1 :(得分:2)

这是一个未经测试的示例,显示了基本要素。根据您的设置,可能需要调整。

- name: Select all from example table
  sudo: yes
  sudo_user: postgres
  command: psql -c "SELECT * FROM example_table" example_db
  register: select_all_from_example

- name: Display example table contents
  debug: msg="{{ select_all_from_example.stdout }}"

答案 2 :(得分:0)

您可以使用提供四个新模块的新角色:

  • postgresql_table:确保表中存在(或不存在) 数据库
  • postgresql_row:确保表中存在(或不存在)行
  • postgresql_query:在数据库中执行任意查询 返回结果
  • postgresql_command:执行任意查询 数据库

在这里查看文档:{​​{3}}

答案 3 :(得分:0)

使用 Ansible Shell 模块

创建数据库和用户

我在这里创建:airflow db,用户 airflow_user 和密码 airflow_password

PGPASSWORD 变量中设置 postgres_user(主用户)密码


  - name: Created Airflow Database and User in Postgres
    shell: /usr/bin/psql --host=10.0.0.39  --dbname=postgres --username=postgres -c "CREATE DATABASE airflow" ; /usr/bin/psql --host=10.0.0.39  --dbname=postgres --username=postgres -c "CREATE USER airflow_user WITH PASSWORD 'airflow_password'" ;  /usr/bin/psql --host=10.0.0.39  --dbname=postgres --username=postgres -c "GRANT ALL PRIVILEGES ON DATABASE airflow TO airflow_user " ;
    environment:
      PGPASSWORD: postgres_password
    register: postgres_query_status
    failed_when: "'already exists' not in postgres_query_status.stderr and  'CREATE' not in postgres_query_status.stdout"
    tags:
    - postgres