我想使用ansible来检查命令的输出中是否存在包名。如果不存在,则做些什么。
例如:我正在查找包"zip“,但问题是它返回"gzip”"zip“"unzip”,而我只查找"zip“,如何在when条件下执行此操作
如何使用正则表达式精确匹配{{ item.name }},而不是包含部分{{ item.name }}的单词
- name: Check if Package is installed
shell: dpkg-query -f '${binary:Package}\n' -W
register: is_installed
- name: Install apt dependencies
apt:
name: "{{item.name}}{{item.version}}"
state: present
allow_unauthenticated: yes
force: yes
with_items:
- { name: 'python2.7', version: '' }
- { name: 'ruby', version: '' }
- { name: 'postgresql-9.5', version: '' }
- { name: 'postgresql-contrib-9.5', version: '' }
- { name: 'libpq-dev', version: '' }
- { name: 'nodejs', version: '=9.*' }
- { name: 'python-setuptools', version: '' }
- { name: 'python-pip', version: '' }
- { name: 'python-pkg-resources', version: '' }
- { name: 'sshpass', version: '' }
- { name: 'zip', version: '' }
- { name: 'mongodb-org', version: '=4.0.0' }
- { name: 'libfontconfig', version: '' }
- { name: 'ntp', version: '' }
- { name: 'fio', version: '' }
when: not "{{item.name}}" in is_installed.stdout发布于 2019-01-28 21:30:32
我只能部分地测试,因为在我面前没有一个基于Debian的机器。
您没有更新Q以显示输出的确切格式,因此我不确定该命令是在一行中输出所有包,还是在每行中输出一个包。
如果每行一个,请尝试如下所示:
- name: Install apt dependencies
apt:
name: "{{item.name}}{{item.version}}"
state: present
allow_unauthenticated: yes
force: yes
with_items:
- { name: 'python2.7', version: '' }
- { name: 'ruby', version: '' }
when: not (is_installed.stdout_lines| map('regex_search', '^' + item.name + '$') | select('string') | list | length)如果在多行上,那么is_installed.stdout_lines将是一个列表,每个项目一个包。因此,我们在列表中搜索精确匹配,并输出匹配的总计数。>0 = true。
如果所有内容都在同一行上,请尝试执行以下操作:
- name: Install apt dependencies
apt:
name: "{{item.name}}{{item.version}}"
state: present
allow_unauthenticated: yes
force: yes
with_items:
- { name: 'python2.7', version: '' }
- { name: 'ruby', version: '' }
when: not (is_installed.stdout | search('(^| )' + item.name + '( |$)')在这种情况下,我们需要在行的开头或前面加上一个空格,然后在后面加上一个空格或行尾来搜索name,以获得精确匹配。
发布于 2019-01-28 19:00:20
尝试如下所示修改您的正则表达式
when: not (?<![\w\d]){{item.name}}(?![\w\d]) in is_installed.stdouthttps://stackoverflow.com/questions/54399449
复制相似问题