shell 忽略yaml代码中以“//”开头的行和空行

cmssoen2  于 2023-01-02  发布在  Shell
关注(0)|答案(2)|浏览(144)

我试图读取所有行在一个.txt文件除了行开始与两个正斜杠'//'和空行使用查找在我的yaml代码,这是我的代码看起来像:

---
- name: playbook for API release deployment
  hosts: api
  become: yes
  ignore_errors: true
  vars:
    date: "{{ lookup('pipe', 'date +%Y.%m.%d-%H.%M') }}"

  tasks:
    - name: deploy-api | upgrade Addons using loop
      command: "{{ module_install }} -u {{ item }} --stop-after-init"
      args:
        chdir: /opt/app/
      with_items:
        - "{{ lookup('file', 'addons.txt') | grep -v '^(//)' }}"

下面是.txt文件的外观:

// Comment 1
// Commment 2
// Comment 3

// Comment 4

addons 1
addons 2
addons 3

Ansible向我抛出一个错误:
致命错误:失败!=〉{“消息”:“模板字符串时出现模板错误:应为标记“end of print statement”,获得的是“string”。字符串:{{查找(“文件”,“addons.txt”)|grep -v '^(//)' }}"}
我不知道如何做到这一点,我应该如何摆脱这些行开始'//'和空行?

uqjltbpv

uqjltbpv1#

考虑重新考虑你的代码,不要使用addons.txt,而是使用一个合适的Ansible数组变量。

// inventory/all/all.yml
# comment
addons:
  - addons 1
  - addons 2
  - addons 3

// playbook.yml
      with_items: '{{ addons }}'

不管怎样,未经测试,下面这样的东西可以让你开始:

with_items: "{{
   lookup('file', 'addons.txt').splitlines() |
   reject('match', '^//') |
   join('\n')
   }}"
2skhul33

2skhul332#

问:**“我应该如何转义以'//'开头的行和空行?"***
答:
拒绝 * 匹配行。请参阅测试字符串。例如,

lines: "{{ lookup('file', 'addons.txt').splitlines()|
             reject('regex', '^//')|
             reject('regex', '^$') }}"

给予

lines:
  - addons 1
  - addons 2
  - addons 3

完整的测试行动手册示例

- hosts: localhost

  vars:

    module_install: install
    lines: "{{ lookup('file', 'addons.txt').splitlines()|
               reject('regex', '^//')|
               reject('regex', '^$') }}"

  tasks:

    - debug:
        var: lines

    - debug:
        msg: "{{ module_install }} -u {{ item }} --stop-after-init"
      loop: "{{ lines }}"

给予

PLAY [localhost] *****************************************************************************

TASK [debug] *********************************************************************************
ok: [localhost] => 
  lines:
  - addons 1
  - addons 2
  - addons 3

TASK [debug] *********************************************************************************
ok: [localhost] => (item=addons 1) => 
  msg: install -u addons 1 --stop-after-init
ok: [localhost] => (item=addons 2) => 
  msg: install -u addons 2 --stop-after-init
ok: [localhost] => (item=addons 3) => 
  msg: install -u addons 3 --stop-after-init

PLAY RECAP ***********************************************************************************
localhost: ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

相关问题