ansible字符串处理(一)
[root@node-1 test]# ansible-playbook hba_card_check.yml
PLAY [compute[0]] *******************************************************************************************************
Tuesday 12 March 2019 08:50:44 +0800 (0:00:00.097) 0:00:00.097 *********
TASK [get hba hosts] ************************************************************************************************************
ok: [172.23.2.9]
Tuesday 12 March 2019 08:50:45 +0800 (0:00:00.425) 0:00:00.522 *********
TASK [set_fact] *******************************************************************************************************************
ok: [172.23.2.9]
Tuesday 12 March 2019 08:50:45 +0800 (0:00:00.112) 0:00:00.635 *********
TASK [debug] *********************************************************************************************************************
ok: [172.23.2.9] => {
"hba_hosts.stdout_lines": [
"/sys/class/fc_host/host11",
"/sys/class/fc_host/host12"
]
}
Tuesday 12 March 2019 08:50:45 +0800 (0:00:00.120) 0:00:00.756 *********
TASK [get hba card state] *********************************************************************************************************
changed: [172.23.2.9]
Tuesday 12 March 2019 08:50:45 +0800 (0:00:00.307) 0:00:01.064 *********
TASK [debug] ***********************************************************************************************************************
ok: [172.23.2.9] => {
"port_state.stdout_lines": [
"[u'', u'sys', u'class', u'fc_host', u'host11'] Online",
"[u'', u'sys', u'class', u'fc_host', u'host12'] Online"
]
}
PLAY RECAP ************************************************************************************************************************
172.23.2.9 : ok=5 changed=1 unreachable=0 failed=0
上边是完整的输出。
代码如下:
---
- hosts: compute[0]
gather_facts: false
tasks:
- name: get hba hosts
shell: ls -d /sys/class/fc_host/host*
register: hba_hosts
failed_when: false
changed_when: false
- set_fact:
hba_count: "{{hba_hosts.stdout_lines|length}}"
when: hba_hosts.rc == 0
- name: get hba card state
shell: |-
{%- for host in hba_hosts.stdout_lines -%}
echo -n "{{ host.split('/') }} "
cat {{ host }}/port_state;
{%- endfor -%}
register: port_state
- debug: var=port_state.stdout_lines
那么字符传的输出处理在get hba cart state这个task的shell里, 使用了jinja2循环,在echo时,对元素host进行路径字符串(hba_hosts.stdout_lines的元素)分割,想得到路径最右的‘/’后的文件夹名称,也就是shell的basename,然而在playbook中,jinja2获取的变量是utf-8编码,而python2.7和shell都是ascii编码,所以此时要得到没有u‘’的字符串需要对这个元素host进行编码,使用.encode()方法(python2默认编码ascii),则可以去掉u'',得到我们想要的结果.
echo -n "{{ host.encode().split('/') }} "
输出即为如下:
TASK [debug] *******************************************************************************************************************
ok: [172.23.2.9] => {
"port_state.stdout_lines": [
"['', 'sys', 'class', 'fc_host', 'host11'] Online",
"['', 'sys', 'class', 'fc_host', 'host12'] Online"
]
}
然而我要获取hosts11 Online和host12 Online的列表,则需使用jinja2的last过滤器获取该值
echo -n "{{ host.encode().split('/') }}|last "
输出如下:
ok: [172.23.2.9] => {
"port_state.stdout_lines": [
"host11 Online",
"host12 Online"
]
}
然而,在大规模的环境里,系统信息的获取时,个人以为shell效率要高于python的,故此处有shell方法:
{%- for host in hba_hosts.stdout_lines -%}
host={{host}}
echo -n "${host##*/} " # echo -n "$(basename $host) "
#echo -n "{{ host.encode().split('/')|last}} "
cat {{ host }}/port_state;
{%- endfor -%}
ansible字符串处理(一)的更多相关文章
- ansible字符串的处理
ansible中字符串的处理 from_json json_query join select selectattr map list trim 列表和字典的处理 combine
- ansible之数据提取与Juniper实例演示
一.Ansible列表两种表达方式 基于YAML的列表 my_list: - a - b - c - d 基于Json格式的列表 {"my_list":[ "a" ...
- ansible取出register变量中最长字符串
背景 在用ansible撰写一个etcd恢复的playbook时,有一个操作是获取etcd启动时的"initial-cluster"启动参数,该参数在etcd集群不同节点不一致,需 ...
- 《Ansible权威指南》笔记(2)——Inventory配置
四.Inventory配置ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts.可以存在多个Inventory,支持动态生成.1.定义主 ...
- ansible模块debug
示例: # Example that prints the loopback address and gateway for each host - debug: msg="System { ...
- ansible模块authorized_key
示例: --- - hosts: test remote_user: root tasks: - name: deliver authorized_keys authorized_key: user: ...
- Ansible简介及常用模块
一.基础介绍 1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置. ...
- Ansible状态管理
转载自:http://xdays.me/ansible状态管理.html 简介 就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件 ...
- Ansible的循环
Ansible的循环 1. 前言 有可能在一个任务中,可能要做很多事情,例如创建多个用户,安装很多个包等,那么就有可能用到循环. 2. 标准循环 重复的任务可以用下面的方式: ...
随机推荐
- Java技术栈思维导图
Java技术栈思维导图 Java IO流体系 设计模式
- luoguP3598 Koishi Loves Number Theory
题目 题解 等比数列,最后统一除以(x-1)(这里数据都存在逆元....) (不存在逆元可以考虑表示成:x*p^y的pair形式,最后上下把p的次数相减(类似扩展Lucas)) 求:lcm(x^(ai ...
- ECharts将折线变平滑和去掉点的属性
eries : [ { name:'your name', symbol:'none', //这句就是去掉点的 smooth:true, //这句就是让曲线变平滑的 type:'line', stac ...
- python 之金玉良言 或许是最后一次给自己系统总结--已结
jar tvf xxx.jar vim xxx.jar 配置一下 notepad++ F5 cmd /k D:"Program Files (x86)"\python\python ...
- mysql 设置skip_name_resolve参数 日志 [Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode
[环境介绍] 系统环境:Red Hat Enterprise Linux 7 + 5.7.25-enterprise-commercial-advanced-log MySQL Enterprise ...
- 最小生成树(kruskal算法)
首先明确三个概念: 1.最小生成树的特点? 答:假设某个连通网络由n个顶点组成,则其生成树必含n个顶点和n-1条边,而最小生成树的n-1条有个要求:总和最小. 2.并查集的运用? 答:在该问题中,首先 ...
- 【作业3.0】HansBug的第三次博客规格总结
转眼间第三次作业了,似乎需要说点啥,那就说点. 规格&工业 说到这个,不得不提一下软件开发的发展史. 历史的进程 早在上世纪50年代,就已经有早期的编程语言出现,也开始有一些程序编写者出现(多 ...
- python 类的魔法函数 内置函数 类方法 静态方法 抽象类
魔法函数 __init__函数 init函数会在实例化A这个类的时候被调用 class A(): def __init__(self): print('__init__函数') a = A() 显示结 ...
- python模块------shutil
说明 shutil -- High-level file operations 是一种高层次的文件操作工具 类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好. copy() ...
- 2018-2019-2 20165325 网络对抗技术 Exp4 恶意代码分析
2018-2019-2 20165325 网络对抗技术 Exp4 恶意代码分析 实验内容(概要) 一.系统(联网)运行监控 1. 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,逐步排查并且 ...