[英]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.