同じ命名規則を使用するいくつかのSQLスクリプトファイルがあります。
pole15432-pole15435.sql
pole15435-pole15447.sql
pole15447-pole15453.sql
pole15453-pole15454.sql
次より大きいファイルだけをフィルタリングしたいと思いますpole15435-pole15447.sql
。次の方法で端末から直接これを実行できます。
ls -1 pole* | awk '$1 > "pole15435-pole15447.sql"'
結果:
pole15447-pole15453.sql
pole15453-pole15454.sql
しかし、ansibleで同じことをすると、結果は出ません。
- name: Find upgrade scripts that need to be executed
shell: ls -1 pole* | awk '$1 > "pole15392-pole15402.sql\"'
#shell: "ls -1 | sed -n /pole15392-pole15402.sql/,//p"
args:
chdir: /data/releases/Upgrade Scripts
delegate_to: localhost
register: scripts
- debug:
msg: "{{scripts}}"
result:
changed: [10.101.96.176] => {"changed": true, "cmd": "ls -1 pole* | awk '$1 > \"pole15392-pole15402.sql\"'", "delta": "0:00:00.010166", "end": "2022-10-15 18:01:04.441383", "rc": 0, "start": "2022-10-15 18:01:04.431217", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
誰でも助けることができますか?
ベストアンサー1
尋ねる:"pole15435-pole15447.sqlより大きいファイルのみをフィルタリングします。"
答え:与えられたファイル
file: pole15435-pole15447.sql
およびファイルリスト
files:
- pole15453-pole15454.sql
- pole15432-pole15435.sql
- pole15435-pole15447.sql
- pole15447-pole15453.sql
リストを並べ替え、ファイルのインデックスを取得し、フラグメントを作成します。
files_sort: "{{ files|sort }}"
file_index: "{{ files_sort.index(file) }}"
files_select: "{{ files_sort[file_index|int + 1:] }}"
与えられた
files_select:
- pole15447-pole15453.sql
- pole15453-pole15454.sql
テストのための完全なプレイブックの例
- hosts: localhost
vars:
files:
- pole15432-pole15435.sql
- pole15435-pole15447.sql
- pole15447-pole15453.sql
- pole15453-pole15454.sql
files_sort: "{{ files|sort }}"
file: pole15435-pole15447.sql
file_index: "{{ files_sort.index(file) }}"
files_select: "{{ files_sort[file_index|int + 1:] }}"
tasks:
- debug:
var: files_sort
- debug:
var: file_index
- debug:
var: files_select
使いたいならアッファイル名を変数に入れます。例えば、木が与えられると
shell> tree sql/
sql/
├── pole15432-pole15435.sql
├── pole15435-pole15447.sql
├── pole15447-pole15453.sql
└── pole15453-pole15454.sql
以下のスクリプト
- hosts: localhost
vars:
file: pole15435-pole15447.sql
tasks:
- shell:
cmd: ls -1 pole* | awk '$1 > "{{ file }}"'
chdir: "{{ playbook_dir }}/sql"
register: scripts
- debug:
var: scripts.stdout_lines
与えられた(要約)
scripts.stdout_lines:
- pole15447-pole15453.sql
- pole15453-pole15454.sql