동일한 명명 규칙을 사용하는 일부 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
답변2
ls -1 polly* | awk '$1 > "{{ file}}"'에서 문제를 발견했습니다. -1 매개변수는 파일 이름 이상의 것을 추출하며 awk는 Ansible을 통해 이를 처리할 수 없습니다. -1(one)을 사용하여 수정하세요.