簡體   English   中英

如何使用sql查詢的輸出動態創建ansible列表

[英]How can I create an ansible list dynamically with the output of a sql query

我有一本劇本,我想在其中備份,刪除和導入一些表(作為更新它們的一種方式),不要問我為什么我不只是使用更新和插入,這是一個復雜的體系結構。

我想查詢postgres數據庫,以確定特定數據庫中要對這些表執行操作的表。

喜歡:

- name: Create a list of STATIC TABLES to import later
  command: psql -t -A -d {{ dbname }} -U {{ dbuser }} -c "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE'"
  register: dbtables_data

- name: Backup all tables.
  shell: "pg_dump -U {{ dbuser }} {{ item.name }} -f {{ dbbackup_dir }}/{{ item.name }}.sql"
  with_items: "{{ dbtables_data.results }}"

這給了我:

fatal: [*.*.*.*] => with_items expects a list or a set

而且我想將此輸出注冊到列表變量中,以便我可以迭代和執行備份,刪除和導入操作。

請幫忙

注冊變量包含一個名為stdout_lines的字段,您可以使用:

我建議您暫時添加一個調試任務以顯示如下輸出:

- name: Create a list of STATIC TABLES to import later
  command: psql -t -A -d {{ dbname }} -U {{ dbuser }} -c "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE'"
  register: dbtables_data

- name: Backup all tables.
  shell: "pg_dump -U {{ dbuser }} {{ item }} -f {{ dbbackup_dir }}/{{ item }}.sql"
  with_items: "{{ dbtables_data.stdout_lines }}"

要調試stdout_lines內容,您可以在兩個現有任務之間插入以下任務:

- debug:
    var: dbtables_data

要么

- debug:
    msg="{{item}}"
  with_items: "{{ dbtables_data.stdout_lines | default([]) }}"

另一種優雅的方法是,通過使用參數“ with_lines”調用查找插件“ lines”, 直接在一個任務中迭代結果

- name: Backup all tables.
  shell: "pg_dump -U {{ dbuser }} {{ item }} -f {{ dbbackup_dir }}/{{ item }}.sql"
  with_lines: psql -t -A -d {{ dbname }} -U {{ dbuser }} -c "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE'"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM