设为首页 收藏本站
查看: 1259|回复: 0

[经验分享] Ansible 系列之 Inventory 资源清单介绍

[复制链接]

尚未签到

发表于 2018-1-2 14:10:19 | 显示全部楼层 |阅读模式
  一、Inventory 库存清单文件
DSC0000.png

  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的公钥放到该主机上去,实现免密码登陆)
  

[iyunv@docker ~]# docker run -d -it --name centos-3 --expose 222 centos_sshd_3  

  查看下新主机的ip
  

[iyunv@docker ~]# docker exec centos-3 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进行管理了。如下:

  

[iyunv@docker ~]# ansible webserver -m ping  
172.17.0.4 | SUCCESS => {
  
"changed": false,
  
"ping": "pong"
  
}
  

  3.非标准的 ssh 端口
  这里有个题外话:在我对centos-3 容器修改sshd 运行端口时,编辑好sshd_config 配置文件后,重启ssh服务会报一下提示:
  

[iyunv@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:222  

  第二种:
  

[webserver]  
web1 ansible_port
=222 ansible_host=172.17.0.4  

  这里的web1 相当于是个别名。验证下:
  

[iyunv@docker ~]# ansible webserver -m ping  
web1
| SUCCESS => {  

"changed": false,  

"ping": "pong"  
}
  
[iyunv@docker
~]# ansible web1 -m ping  
web1
| SUCCESS => {  

"changed": false,  

"ping": "pong"  
}
  

  4.大量的主机
  如果有很多同一网段和功能,并有规律的主机的话,可以使用像正则匹配的方式去修改hosts文件。如下:
  

[webserver]  
web1 ansible_port
=222 ansible_host=172.17.0.4  

  
[test]
  

172.17.0.[2:3]  

  运行ansible 验证下:
  

[iyunv@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关键字的组名.
  配置文件如下:
  

[iyunv@docker ~]# cat /etc/ansible/hosts  
[centos_group]
  

172.17.0.2  
172.17.0.3
  

  
[webserver]
  
web1 ansible_port=222 ansible_host=172.17.0.4
  

  
[centos:children]
  
centos_group
  
webserver
  

  验证下:
  

[iyunv@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附加到命令行,可用于为某个主机或组配置ProxyCommandansible_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_suansible_become_method:允许设置特殊权限的方法ansible_become_user:允许设置特殊权限的用户,相当于 ansible_sudo_user 或者 ansible_su_useransible_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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430813-1-1.html 上篇帖子: ansible安装及使用 下篇帖子: ansible入门01
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表