首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ansible中遍历文本文件的每一行

如何在ansible中遍历文本文件的每一行
EN

Stack Overflow用户
提问于 2022-03-22 05:38:30
回答 2查看 139关注 0票数 1

我必须遍历包列表文件,其中包含包列表及其体系结构。如何将这些输入输入到我的剧本文件中?我找到了一种单独获取包名的方法,但是架构版本并没有出现。这是我的package_list文件

代码语言:javascript
复制
nginx | x86_64
telnet| x86_64
openssh | i386

这是我的剧本

代码语言:javascript
复制
 - name: get contents of package.txt
   command: cat "/root/packages.txt"
   register: _packages
 - name: get contents of architecture from packages.txt
   command: cat "/root/packages.txt" | awk '{print $3}'
   register: _arch

 - name: Filter
   theforeman.foreman.content_view_filter:
     username: "admin"
     password: "mypass"
     server_url: "myhost"
     name: "myfilter"
     organization: "COT"
     content_view: "M_view"
     filter_type: "rpm"
     architecture: "{{ _arch }}"
     package_name: "{{ item }}"
     inclusion: True
   loop: "{{ _packages.stdout_lines }}"
   loop: "{{ _arch.stdout_lines }}"

如能提供任何帮助,将不胜感激。

所需的输出是包名,应该通过ansible-playbook从packages.txt文件中读取体系结构。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-22 06:37:05

试试这个剧本:

代码语言:javascript
复制
- name: Reproduce issue
  hosts: localhost
  gather_facts: no
  tasks:
    - name: get contents of package.txt
      command: cat "/root/packages.txt"
      register: _packages
    - debug: 
        msg: "package: {{ line.0 }}, arch: {{ line.1 }}"         
      loop: "{{ _packages.stdout_lines }}"
      vars:
        line: "{{ item.split('|')|list }}"

结果:

代码语言:javascript
复制
ok: [localhost] => (item=nginx | x86_64) => {
    "msg": "package: nginx , arch:  x86_64 "
}
ok: [localhost] => (item=telnet| x86_64) => {
    "msg": "package: telnet, arch:  x86_64 "
}
ok: [localhost] => (item=openssh | i386) => {
    "msg": "package: openssh , arch:  i386 "
}

就你的情况而言:

代码语言:javascript
复制
 - name: Filter
   theforeman.foreman.content_view_filter:
     :
     :
     architecture: "{{ line.1 }}"
     package_name: "{{ line.0 }}"
     inclusion: True
   loop: "{{ _packages.stdout_lines }}"
   vars:
     line: "{{ item.split('|')|list }}"

遵循ansible的版本,您可以编写太line: "{{ item | split('|') | list }}"

票数 2
EN

Stack Overflow用户

发布于 2022-03-22 06:43:16

您需要通过过滤将行划分为必要的值。

代码语言:javascript
复制
---
- hosts: localhost
  become: false
  gather_facts: false

  tasks:

  - name: Gahter package list
    shell:
      cmd: cat package.txt
    register: _packages

  - name: Show packages
    debug:
      msg: "Name: {{ item.split('|')[0] }}, Arch: {{ item.split('|')[1] }}"
    loop: "{{ _packages.stdout_lines }}"

进一步文档

进一步Q&A

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71567373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档