Ansibleでawkコマンドを実行するためのアドバイスが必要です。

Ansibleでawkコマンドを実行するためのアドバイスが必要です。

同じ命名規則を使用するいくつかの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

おすすめ記事