Ansible 系列之 Inventory 资源清单介绍
一、Inventory 库存清单文件
1.Inventory 作用
Ansible 可以在同一时间针对多个系统设施进行管理工作。它通过选择Ansible 资源清单文件中列出的系统,该清单文件默认是在/etc/ansible/hosts,也可以使用 -i <path> 进行路径的指定。文件内的格式INI 风格,中括号内为分组名。 除了这个文件之后,还可以同时使用多个清单文件,可以动态的获取,也可以从外部获取外部库存清单文件。云平台上去拉取(如AWS,或者Cobbler 的API结合)。
2.hosts文件格式是INI的格式,以及如何添加主机
和之前我们上篇文中的一样,如下所示:
- [centos_group]
- 172.17.0.2
- 172.17.0.3
为了有所区别,学习需要,我们在添加1个centos-3主机(创建完成后,记得将management的公钥放到该主机上去,实现免密码登陆)
- [root@docker ~]# docker run -d -it --name centos-3 --expose 222 centos_sshd_3
查看下新主机的ip
- [root@docker ~]# docker exec centos- hostname -I
- 172.17.0.4
然后,我们在hosts 文件中原有 centos_group组下面,在添加单个组名webserver,组内主机设备为刚创建的centos-3,也可以以单个主机ip的方式存在(不过建议同一功能类型都分在组名里,为了后期管理方便)完整内容如下:
- [centos_group]
- 172.17.0.2
- 172.17.0.3
- [webserver]
- 172.17.0.4
[webserver 是组名,用于对系统主机进行功能分类,便于你在统一给web服务器部署管理时,不影响其它主机。这样你在使用ansible 命令执行时,输入组名就可以对.2 和 .3进行管理了。如下:
- [root@docker ~]# ansible webserver -m ping
- 172.17.0.4 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
3.非标准的 ssh 端口
这里有个题外话:在我对centos-3 容器修改sshd 运行端口时,编辑好sshd_config 配置文件后,重启ssh服务会报一下提示:
- [root@731705364b56 /]# systemctl restart sshd
- Failed to get D-Bus connection: Operation not permitted
我又想到用kill 命令,将sshd 服务进程杀掉,谁知容器却退出了。成了exited 状态。
后来查询资料了解到,因为容器的主进程就是CMD运行的命令 ,主进程退出时会退出容器, 在我kill sshd 进程的时候 主进程先退出了, 这时候docker容器也跟着退出了,原来要想让服务重启,要用docker 的restart命令。如下:
- docker restart centos_3
重启后,端口运行在配置文件里指定的端口上啦。
如果你的主机ssh服务不是运行在 标准的22 端口时,在hosts里面就得更改定义方法了,目前有2种方式:
第一种:
- [webserver]
- 172.17.0.4:
第二种:
- [webserver]
- web1 ansible_port= ansible_host=172.17.0.4
这里的web1 相当于是个别名。验证下:
- [root@docker ~]# ansible webserver -m ping
- web1 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- [root@docker ~]# ansible web1 -m ping
- web1 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
4.大量的主机
如果有很多同一网段和功能,并有规律的主机的话,可以使用像正则匹配的方式去修改hosts文件。如下:
- [webserver]
- web1 ansible_port= ansible_host=172.17.0.4
- [test]
- 172.17..[:]
运行ansible 验证下:
- [root@docker ~]# ansible test -m ping
- 172.17.0.2 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.3 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
除了用数字 定义范围外,还可以用字母的方式去匹配主机名,如a到z,a到c 等。
5.包含组的组名
如果你的webserver组的主机由于centos 系统需要更新一个系统文件,这个时候你在更新centos_group组的组机时,就可以把webserver组的主机带上。就出现了带有 :children关键字的组名.
配置文件如下:
- [root@docker ~]# cat /etc/ansible/hosts
- [centos_group]
- 172.17.0.2
- 172.17.0.3
- [webserver]
- web1 ansible_port= ansible_host=172.17.0.4
- [centos:children]
- centos_group
- webserver
验证下:
- [root@docker ~]# ansible centos -m ping
- web1 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.2 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
- 172.17.0.3 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
二、Inventory 清单参数列表
1.主机连接:
ansible_connection:连接主机的类型,这里可以是ansible连接插件的名称中的一个,如ssh 协议中的 smart,ssh或者paramiko。默认值是smart。
2.ssh 连接
- ansible_host:使用主机的名称去连接,可以使用别名
- ansible_port:如果默认不是22的话,要定义ssh的端口号
- ansible_user:默认ssh连接用户
- ansible_ssh_pass:默认ssh 连接的passwd(不要在这里出现明文密码,而是要使用vault)
- ansible_ssh_private_key_file:连接时使用私钥文件。如果不想使用ssh代理的话,可以有多个密钥
- ansible_ssh_common_args:该设置将总是为sftp,scp,ssh附加到命令行,可用于为某个主机或组配置ProxyCommand
- ansible_sftp_extra_args:该设置将sftp附加到命令行
- ansible_scp_extra_args:该设置将scp附加到命令行
- ansible_ssh_extra_args:该设置将ssh附件到命令行
- ansible_ssh_pipelining:决定是否使用ssh 管道,它将覆盖ansible.cfg中的pipelining设置
- 2.2版本后的特性.
- ansible_ssh_executable:这个设置将覆盖使用系统ssh的默认行为。它将覆盖ansible.cfg中的ssh_executable设置
使用特权命令(如sudo)
- ansible_become:允许升级权限,相当于 ansible_sudo 或者 ansible_su
- ansible_become_method:允许设置特殊权限的方法
- ansible_become_user:允许设置特殊权限的用户,相当于 ansible_sudo_user 或者 ansible_su_user
- ansible_become_pass:允许设置特殊权限的密码(不要在这里直接输入明文),相当于 ansible_sudo_pass 或者 ansible_su_pass
远程主机环境参数
ansible_shell_type:目标系统的shell 类型,你不应该设置这个参数,除非你设置的 ansible_shell_executable 与默认的sh 不兼容。默认情况下,命令是在sh shell 环境风格下运行的。此处可以设置为csh或fish shell。
- ansible_python_interpreter:目标系统的python 程序路径。这对于有多个python 版本运行环境的系统很有帮助,或者是默认python 程序不在/usr/bin/python 下,如 *BSD。
- ansible_*_interpreter:适用于任何工作,*处可以替换成其它语言,如ruby或者perl,就像ansible_python_interpreter.这将替换在该主机上运行模块时的shebang。
- 如下所示的示例文件:
- some_host ansible_port=2222 ansible_user=manager
- aws_host ansible_ssh_private_key_file=/home/example/.ssh/aws.pem
- freebsd_host ansible_python_interpreter=/usr/local/bin/python
- ruby_module_host ansible_ruby_interpreter=/usr/bin/ruby.1.9.3
非SSH 的连接类型
如上面所说,ansible 执行剧本时通过ssh连接,但是它又不仅仅只局限于ssh这种连接类型。连接的类型是可以变的。如下面的几种
local:该连接类型将在控制机本身上执行剧本。
docker:该连接类型将使用本地docker直接将 剧本部署到 docker 容器中。以下是有连接器处理的参数:
ansible_host :要连接的docker 容器名称
ansible_user :在容器中操作的用户名,必须是容器内存在的用户
ansible_become :如果设置为 true,这个用户将被用于在容器内进行操作
ansible_docker_extra_args :可以是Docker 程序 启动时支持的额外参数,不是特定的命令,此参数主要用于配置远程Docker 守护进程使用。
如下是一个创建容器并进行部署的示例:
- - name: create jenkins container
- docker:
- name: my_jenkins
- image: jenkins
- - name: add container to inventory
- add_host:
- name: my_jenkins
- ansible_connection: docker
- ansible_docker_extra_args: "--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243"
- ansible_user: jenkins
- changed_when: false
- - name: create directory for ssh keys
- delegate_to: my_jenkins
- file:
- path: "/var/jenkins_home/.ssh/jupiter"
- state: directory
如果文中有错误之处,还希望大家多多指出,互相学习,谢谢。
下一篇再学习下ansible 里的 patterns。
注:本文属于飞走不可原创,如有转载,请务必在文首注明出处。飞走不可:-_-# http://www.cnblogs.com/hanyifeng/p/6137905.html
Ansible 系列之 Inventory 资源清单介绍的更多相关文章
- Ansible之 Inventory 资源清单介绍
一.Inventory 库存清单文件 1.Inventory 作用 Ansible 可以在同一时间针对多个系统设施进行管理工作.它通过选择Ansible 资源清单文件中列出的系统,该清单文件默认是在/ ...
- Ansible组件之inventory主机清单
静态inventory 所有的主机信息都存放在Ansible的inventory组件里面,默认Ansible的inventory是一个静态的ini格式的文件/etc/ansible/hosts,当然还 ...
- kubernetes系列06—kubernetes资源清单定义入门
本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...
- k8s资源清单基础
资源清单介绍 创建资源的方法 apiserver仅接收JSON格式的资源定义 yaml格式提供配置清单 apiserver可自动把yaml转换成json格式数据 资源清单五个一级字段 1.ap ...
- Ansible 小手册系列 五(inventory 主机清单)
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 主机清单示例 mail.example. ...
- Ansible系列(一):基本配置和使用
本文目录:1.1 安装Ansible1.2 配置Ansible 1.2.1 环境配置 1.2.2 SSH互信配置 1.2.3 简单测试1.3 inventory Ansible是一种批量.自动部署工具 ...
- Ansible 系列之 Playbooks 剧本 (1)
一.Playbooks 介绍 1.Playbooks是Ansible的配置,部署和编排语言.它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤. 如果说ansible 模块 是你车间里的 ...
- [转] Ansible 系列之 Playbooks 剧本
[From] https://www.cnblogs.com/hanyifeng/p/6435875.html 一.Playbooks 介绍 1.Playbooks是Ansible的配置,部署和编排语 ...
- Ansible系列(二):选项和常用模块
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
随机推荐
- PistgreSQL9.6手册(基础摘录)
学习目的:基础使用. 能够开发RoR就行. git: https://github.com/postgres-cn/pgdoc-cn 1.2. 架构基础 PostgreSQL使用一种客户端/服务器的模 ...
- spring boot 之热部署
热部署:当发现程序修改时自动启动应用程序. spring boot使用的是spring-boot-devtools是一个为开发者服务的一个模块.其原理用了classLoader 其中一个加载不变的类, ...
- Linux中查看进程和杀掉进程
ps -A查看正在运行的所有进程 kill -9 xxx杀掉某个进程,xxx为进程ID.
- CentOS6.5系统服务
服务名称 功能 默认 建议 备注说明 NetworkManager 用于自动连接网络,常用在Laptop上 开启 关闭 对服务器无用 abrt-ccpp 开启 自定 对服务器无用 abrt-oop ...
- 在Windows中配置Rsync同步
Rsync是一款不错的文件免费同步软件,可以镜像保存整个目录树和文件系统,同时保持原来文件的权限.时间.软硬链接.第一次同步时 rsync 会复制全部内容,下次只传输修改过的文件部分.传输数据过程中可 ...
- 重写ajax方法实现特定情况下跳转登录页面
jQuery(function($){ // 备份jquery的ajax方法 var _ajax=$.ajax; // 重写ajax方法, $.ajax=function(opt){ var _suc ...
- 《Java技术》预备作业总结
Java预备作业总结 第一次的博客作业完成了,对于一种崭新的形式,大家可能还不太适应,学习和借鉴好的理念和学习方式,是我们缩小差距.提升自己的第一步. 关于你期望的师生关系 从幼儿园到大学,大家接触到 ...
- 《DSP using MATLAB》Problem 2.9
代码: %% ------------------------------------------------------------------------ %% Output Info about ...
- 去掉PowerDesigner生成SQL脚本中字段名带的引号
使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会严格按照“”中的名称建表,如果没有“”,会按照ORACL ...
- ES6必知必会 (八)—— async 函数
async 函数 1.ES2017 标准引入了 async 函数,它是对 Generator 函数的改进 , 我们先看一个读取文件的例子: Generator 写法是这样的 : var fs = re ...