Ansible 系列之 Inventory 资源清单介绍

摘要:
它通过选择Ansible资源清单文件中列出的系统,该清单文件默认是在/etc/ansible/hosts,也可以使用-i进行路径的指定。就出现了带有:children关键字的组名.配置文件如下:[root@docker~]#cat/etc/ansible/hosts[centos_group]172.17.0.2172.17.0.3[webserver]web1ansible_port=222ansible_host=172.17.0.4[centos:children]centos_groupwebserver验证下:[root@docker~]#ansiblecentos-mpingweb1|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。

一、Inventory 库存清单文件

Ansible 系列之 Inventory 资源清单介绍第1张

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-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进行管理了。如下:

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

第二种:

[webserver]
web1 ansible_port=222 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=222 ansible_host=172.17.0.4
[test]
172.17.0.[2:3]

运行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=222 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 资源清单介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js实现图片的等比例缩放ref:详解MYSQL数据库密码的加密方式及破解方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python configparser模块

一、configparser介绍 configparser模块主要用于读取配置文件(*.ini),导入方法:from configparser import ConfigParser 二、configparser初始化 目录结构: api_test - common - config -apiConfig.ini 配置文件所在目录 -readConfig....

windows下docker的安装及常用命令学习

docker search 镜像名     本文主要介绍Docker在Windows下的安装。关于Docker的介绍和文档在其官网中可以找到:http://www.docker.com 。安装环境:Windows7。   Docker引擎使用了一个定制的Linux内核,所以要在Windows下运行Docker我们需要用到一个轻量级的虚拟机(vm),我们使用...

Nginx tomcat集群 转发后端口丢失

场景: 阿里云主机 docker 搭建nginx集群,访问项目端口丢失 配置如下: 丢失的可能原因: proxy_set_header Host设置不对,修改如下: proxy_set_header Host $http_host; proxy_set_header Host 可以设置有如下几种: proxy_set_header Host $prox...

Linux 能ping通ip但ping不通域名

Linux里 能ping通ip,但ping不通域名(如 baidu.com),查看相关资料后发现是DNS的配置问题 修改 配置文件: /etc/resolv.conf 修改为: 1 nameserver 114.114.114.114 其中ip可选择: 114.114.114.114 119.29.29.29 223.5.5.5 参考资料:https://...

gin-vue-admin 03 项目打包上线

目录 作者视频 思路 环境要求 1. 配置nginx 2.打包前台vue代码 3.打包后台go代码 4. 上传代码到服务器 5. 后台运行power 6. 访问后台 开发场景: 1. nginx 配置 2. 后端代码接上面的 3.打包后台go代码 部署到服务器上 3.前端环境配置: 作者视频 【gin-vue-admin】部署教程:gin-v...

Docker安装Redis,让宿主机可以访问

一、拉取镜像 docker pull redis #后面可以带上tag号, 默认拉取最新版本 二、查看镜像 docker images #查看容器中的镜像 三、启动并做映射(以配置文件方式启动) 1、创建配置文件目录存放redis.conf,文件从官网下载:http://download.redis.io/redis-stable/redis.conf...