当前位置: 首页 > news >正文

ansible笔记

变量

操作列表过滤器zip和zip_longest

zip

使两个列表元素递归的融合,生成一个新的列表。新列表元素个数以list1和list2中元素个数较少者为准。

如果文字描述不懂,看下面示例就懂了:

- name: give me list combo of two listsdebug:msg: "{{ [1,2,3] | zip(['a','b','c','d','e']) | list }}"

转换结果为:

"msg": [[1,"a"],[2,"b"],[3,"c"]
]

例如:

---
- hosts: zookeepervars:- inventory_hostname_list: "{{ groups.zookeeper }}"- ansible_host_list: "{{ groups.zookeeper | map('extract', hostvars, 'ansible_host') }}"- myid_list: "{{ groups.zookeeper | map('extract', hostvars, 'myid') }}"- zookeeper_port_list: "{{ groups.zookeeper | map('extract', hostvars, 'zookeeper_port') }}"tasks:- name: "拼接获取zk集群地址"set_fact:zookeeper_cluster: "{{ ansible_host_list | zip(zookeeper_port_list) | map('join', ':') | join(',') }}"- name: "打印变量"debug:msg: "{{ zookeeper_cluster }}"

转换结果为:

TASK [拼接获取zk集群地址] ********************************************************************************************************************************************
ok: [zookeeper1] => {"msg": "192.168.8.141:2181,192.168.8.142:2181,192.168.8.143:2181"
}
ok: [zookeeper2] => {"msg": "192.168.8.141:2181,192.168.8.142:2181,192.168.8.143:2181"
}
ok: [zookeeper3] => {"msg": "192.168.8.141:2181,192.168.8.142:2181,192.168.8.143:2181"
}

例如:

[zookeeper]
zookeeper1 ansible_host=192.168.8.141 ansible_password=root myid=1 zookeeper_port=2181 zookeeper_comm_port=2888 zookeeper_elect_port=3888
zookeeper2 ansible_host=192.168.8.142 ansible_password=root myid=2 zookeeper_port=2181 zookeeper_comm_port=2888 zookeeper_elect_port=3888
zookeeper3 ansible_host=192.168.8.143 ansible_password=root myid=3 zookeeper_port=2181 zookeeper_comm_port=2888 zookeeper_elect_port=3888---
- hosts: zookeepervars:- inventory_hostname_list: "{{ groups.zookeeper }}"- ansible_host_list: "{{ groups.zookeeper | map('extract', hostvars, 'ansible_host') }}"- myid_list: "{{ groups.zookeeper | map('extract', hostvars, 'myid') }}"- zookeeper_port_list: "{{ groups.zookeeper | map('extract', hostvars, 'zookeeper_port') }}"- zookeeper_comm_port_list: "{{ groups.zookeeper | map('extract', hostvars, 'zookeeper_comm_port') }}"- zookeeper_elect_port_list: "{{ groups.zookeeper | map('extract', hostvars, 'zookeeper_elect_port') }}"- zookeeper_cluster: "{{ ansible_host_list | zip(zookeeper_port_list) | map('join', ':') | join(',') }}"tasks:- name: "拼接获取zk集群地址"set_fact:zookeeper_server: "{{ myid_list | zip(ansible_host_list | zip(zookeeper_comm_port_list, zookeeper_elect_port_list) | map('join', ':')) | map('join', '=') | map('regex_replace', '^(.*)', 'server.\\1') | join('\n') }}"- name: "打印变量"debug:msg: "{{ zookeeper_server }}"

转换结果为:

TASK [打印变量] **************************************************************************************************************************************************
ok: [zookeeper1] => {"msg": "server.1=192.168.8.141:2888:3888\nserver.2=192.168.8.142:2888:3888\nserver.3=192.168.8.143:2888:3888"
}
ok: [zookeeper2] => {"msg": "server.1=192.168.8.141:2888:3888\nserver.2=192.168.8.142:2888:3888\nserver.3=192.168.8.143:2888:3888"
}
ok: [zookeeper3] => {"msg": "server.1=192.168.8.141:2888:3888\nserver.2=192.168.8.142:2888:3888\nserver.3=192.168.8.143:2888:3888"
}
zip_longest

zip_longest与zip合并原理相似,zip_longest可以对更多的列表进行操作,且新列表元素个数以被操作列表中元素个数最多者为准,此时就需要指定「fillvalue」参数作为补位填充。示例如下:

{{ [1,2,3] | zip_longest(['a','b','c','d','e'], [21, 22, 23], [100,200,300],fillvalue='X') | list }}

转换结果为:

"msg": [[1,"a",21,100],[2,"b",22,200],[3,"c",23,300],["X","d","X","X"],["X","e","X","X"]
]

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • go 语言踏出第一步
  • 【Stable Diffusion】(基础篇七)—— lora
  • AI-WEB-1.0 靶机
  • 2024年8月1日 十二生肖 今日运势
  • 库文件的制作和makefile文件操作基础实现
  • 尚品汇-CompletableFuture异步编排-优化商品详情页(二十五)
  • 【前端 08】简单学习js字符串
  • react中外部传入的属性如果在外部改变,组件内如何得知并作出响应?
  • stm32_按键消抖_代码与流程分析
  • ShardingSphere-Jdbc + Spring Security + Redis 实现简单JWT认证
  • 利用python检查磁盘空间使用情况
  • LinkedList 实现 LRU 缓存
  • 软考高级科目怎么选?软考高级含金量排序
  • WebView加载数据的几种方式
  • SQLSever 设置端口
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • IDEA 插件开发入门教程
  • oschina
  • Python实现BT种子转化为磁力链接【实战】
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 闭包--闭包之tab栏切换(四)
  • 后端_MYSQL
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 排序(1):冒泡排序
  • 前端技术周刊 2019-02-11 Serverless
  • 入门级的git使用指北
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (算法)N皇后问题
  • (算法)Travel Information Center
  • (一)基于IDEA的JAVA基础1
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原创)可支持最大高度的NestedScrollView
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)setTimeout 和 setInterval 的区别
  • .NET 8.0 发布到 IIS
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET Core 版本不支持的问题
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NetCore 如何动态路由
  • .net打印*三角形
  • .NET中两种OCR方式对比
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • @PreAuthorize注解
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [100天算法】-实现 strStr()(day 52)
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票