Ansible 清单与命令解析
在大规模的配置管理工作中我们需要管理不同业务的不同机器,这些机器的信息都存放在 Ansible 的 Inventory 组件里面,在我们工作中配置部署针对的主机必须先存放在 Invento 组里面,这样才能使用 Ansible 对它进行操作,默认 Ansible 的 Inventory 是一个静态的 INI 格式的文件/etc/ansible/hosts 当然,还可以通过 ANSIBLE_HOSTS 环境变量指定或者运行 ansible 和 ansible-playbook 的时候用 -i 参数临时设置.
主机和组
我们可以通过配置/etc/ansible/hosts这个文件来定义主机和主机组,例如下面的代码.
[root@localhost ~]# cat -n /etc/ansible/hosts
1 192.168.1.10 ansible_ssh_pass='123123'
2 192.168.1.20 ansible_ssh_pass='123123'
3
4 [docker]
5 172.168.1.10[1:9]
6 [docker:vars]
7 ansible_ssh_pass='123123'
8 [web_server]
9 192.168.10.10
10 192.168.10.20
11 192.168.10.30
上图的参数解析:
● 第1-2行:定义了两台主机,并且使用内置变量给予了SSH登陆密码.
● 第4-5行:定义了一个docker组,且组内有101-109这9台机器的定义.
● 第6-7行:定义为上面的docker组统一赋值一个密码.
● 第8-11行:定义了一个web_server组,其中有三台主机.
这就是,常用的组的定义与声明部分啦.
端口与别名
ssh默认的端口是22 (此时的Ansible主机配置文件可以省略),但是如果某些主机的ssh运行在自定义的端口上,Ansible使用Paramiko进行ssh连接时不会使用你ssh配置文件中列出的端口,但是如果修改ansible使用openssh进行ssh连接时将会使用:
1.在Client客户端上ssh开启2个端口连接,下面一段话随意加入到指定配置文件里即可.
[root@Client ~]# vim /etc/ssh/sshd_config
Port 10086
Port 22
[root@Client ~]# systemctl restart sshd
2.在Ansible服务端的配置,配置主机清单列表同时指定一个主机端口即可.
[root@Ansible ~]# vim /etc/ansible/hosts
[web_server]
192.168.10.10:10086
192.168.10.20:10086
[web_server:vars]
ansible_ssh_pass='123123'
## 使用主机变量
这里介绍 Ansible Invento 的内置的一些参数,这些参数我们在实际工作中也会经常使用到.
| 内置参数 | 参数说明 |
|---|---|
| ansible_ssh_host | 指定被管理的主机的真实IP |
| ansible_ssh_port | 指定连接到被管理主机的ssh端口号,默认是22 |
| ansible_ssh_user | ssh连接时默认使用的用户名 |
| ansible_ssh_pass | ssh连接时的密码 |
| ansible_sudo_pass | 使用sudo连接用户时的密码 |
| ansible_sudo_exec | 如果sudo命令不在默认路径,需要指定sudo命令路径 |
| ansible_ssh_private_key_file | 秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项 |
| ansible_shell_type | 目标系统的shell的类型,默认sh |
| ansible_connection | SSH 连接的类型:local,ssh,paramiko |
| ansible_python_interpreter | 用来指定python解释器的路径 |
上面的实例也可以配置直接使用用户名和密码进行连接
[root@localhost ~]# vim /etc/ansible/hosts
[web_server]
192.168.10.10 ansible_ssh_port=10086 ansible_ssh_user=root ansible_ssh_pass='123123'
[docker_server]
192.168.10.10
192.168.10.20
[docker_server:vars]
ansible_ssh_port=10086
ansible_ssh_user=root
ansible_ssh_pass='123123'
## Ansible配置文件解析
Ansible 配置文件是以 ini 格式存储配置数据的,在 Ansible 中,几乎所有的配置项都可以通过 Ansible 的 playbook 或环境变量来重新赋值,在运行 Ansible 命令时,命令将会按照预先设定的顺序查找配置文件,具体的ansible配置文件包括以下两个部分:
/etc/ansible/ansible.cfg 和 /etc/ansible/hosts
● /etc/ansible/ansible.cfg 主要配置Ansible的一些参数信息
● /etc/ansible/hosts 主机清单(被控主机文件),或分组管理
● /usr/bin/ansible* 记录了Ansible的命令
如果你通过操作系统软件包管理工具或 pip 安装,那么你在/etc/ansiblc目录下应该已经有了 ansible.cfg 配置文件.如果你是通过 GitHub 仓库安装的,在你复制的仓库中 examples 目录下可以找到 ansible.cfg 你可以把它拷贝到/etc/ansible目录下.
接下来看一下Ansible的主配置文件 /etc/ansible/ansible.cfg 里面的参数解析,并说明每个参数代表的含义.
| 配 置 参 数 | 参 数 的 说 明 |
|---|---|
| inventory = /etc/ansible/hosts | Ansible存放可通信主机的列表 |
| library = /usr/share/my_modules/ | Ansible默认搜寻模块的位置 |
| remote_tmp = $HOME/.ansible/tmp | Ansible通过远程传输模块到远程主机,默认传输路径 |
| log_path = /var/log/ansible.log | Ansible默认日志文件保存位置 |
| pattern = * | 如没有提供主机列表,则默认值是对所有主机通信 |
| forks = 5 | 默认执行线程数量 |
| poll_interval = 15 | 多久回查一下这些任务的状态,默认值是15秒 |
| sudo_user = root | sudo使用的默认用户,默认是root |
| ask_sudo_pass = True | 控制playbook在执行sudo之前是否询问sudo密码.默认no |
| transport = smart | 通信机制.默认值为smart |
| remote_port = 22 | 远程SSH端口,默认是22 |
| module_lang = C | 模块和系统之间通信的计算机语言,默认是C语言 |
| host_key_checking=false | 设置是否检查SSH主机密钥 |
就介绍这些,这是最常用的,其他的文本请参考
http://www.ansible.com.cn/docs/intro_configuration.html#environmental-configuration
Ansible命令参数解析
看完了上面的配置文件的解析,我们再来看一下,Ansible命令的常用语法格式依旧常用命令参数吧.
[root@localhost ~]# ansible --help
命令语法:[ ansible [选项] [模块] [参数] [主机列表] ]
-m #要执行的模块,默认为command
-a #指定模块的参数
-u #ssh连接的用户名,默认是root
-k #提示输入ssh登录密码,当使用密码验证的时候用
-s #sudo权限运行
-U #sudo到哪个用户,默认为root
-K #提示输入sudo密码,当不是NOPASSWD模式时使用
-C #只是测试一下会改变什么内容,不会真正去执行
-c #指定连接类型(default=smart)
-f #fork指定进程并发数,默认为5个
-i #指定hosts文件路径,默认default=/etc/ansible/hosts
-I #指定pattern对已匹配的主机中再过滤一次
--list-host #打印主机列表
-M #要执行的模块路径,默认为/usr/share/ansible
-o #压缩输出摘要输出
--private-key #指定一个私钥路径
-T #ssh连接超时时间,默认是10秒
-t #日志输出到该目录,日志文件名以主机命名
-v #显示详细日志
## PlayBook命令参数解析
该指令对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定,它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容,其通过读取playbook 文件后执行相应的动作.
[root@localhost ~]# ansible-playbook -h
命令语法:[ ansible-playbook [选项] [参数] .yml ]
-m #要执行的模块,默认为command
-C #测试运行效果
--flush-cache #清除fact缓存
--syntax-check #语法检查
--force-handlers #如果任务失败,也要运行handlers
--list-tags #列出所有可用的标签
--list-tasks #列出将要执行的所有任务
--skip-tags=SKIP_TAGS #跳过运行标记此标签的任务
--start-at-task=START_AT_TASK #在此任务处开始运行
--step #一步一步在运行之前确认每个任务
-t TAGS,--tags=TAGS #只运行标记此标签的任务
参考文献:《Ansible自动化运维:技术与最佳实践》
Ansible 清单与命令解析的更多相关文章
- Ansible常用模块命令
Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...
- Ansible之系列命令详解
ansible系列命令有:ansible.ansible-doc.ansible-playbook.ansible-vault.ansible-console.ansible-galaxy.ansib ...
- ansible 安装 使用 命令 笔记 生成密钥 管控机 被管控机 wget epel源
ansible 与salt对比 相同 都是为了同时在多台机器上执行相同的命令 都是python开发 不同 agent(saltstack需要安装.ansible不需要) 配置(salt配置麻烦,a ...
- linux mknod命令解析
linux mknod命令解析 http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html mknod:make node 生成设备 ...
- C#基础:命令解析
1.普通格式命令的解析 例如: RENA<SP>E:\\A.txt<SP>C:\\B.txt<CRLF> (SP -> 空格,CRLF -> 回车加换行 ...
- Appium Android Bootstrap源码分析之命令解析执行
通过上一篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在b ...
- virsh的详细命令解析(一)
virsh的详细命令解析 virsh 有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式 virsh list 列出所有的虚拟机,虚拟机的状态有(8 ...
- (转)Linux命令:使用dig,nslookup命令解析域名
Linux命令:使用dig命令解析域名 Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息. dig的全称是 (domain infor ...
- angular-cli.json配置参数解析,常用命令解析
1.angular-cli.json配置参数解析 { "project": { "name": "ng-admin", //项目名称 &qu ...
随机推荐
- 第六天-css基础(css定位)
css定位 方位名称: left right top bottom position:absolute 绝对定位(脱离标准流 div{ width:100px; height:100p ...
- 2016 ICPC 大连网络赛 部分题解
先讲1007,有m个人,n种石头,将n种石头分给m个人,每两个人之间要么是朋友关系,要么是敌人关系,朋友的话他们必须有一种相同颜色的石头,敌人的话他们必须所有石头的颜色都不相同.另外,一个人可以不拥有 ...
- exgcd 解同余方程ax=b(%n)
ax=n(%b) -> ax+by=n 方程有解当且仅当 gcd(a,b) | n ( n是gcd(a,b)的倍数 ) exgcd解得 a*x0+b*y0=gcd(a,b) 记k=n/gc ...
- 震惊!文科生如何三个月转行成为Java工程师?
点击上方“程序员江湖”,选择“置顶或者星标” 你关注的就是我关心的! 作者:以大橘为重链接:https://www.nowcoder.com/discuss/156087 楼主是19届应届生,去年在牛 ...
- flask 第八篇 实例化flask时的参数配置
Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...
- 编写可维护的JavaScript代码(部分)
平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...
- mongodb aggregate 聚合 操作(扁平化flatten)
mongodb自带的函数非常多,最近用mongo做持久化数据库,遇到一个需求:子文档是个数组,把数组里的各个字段扁平化合到根文档中,查过资料后(主要是mongodb的文档和stackoverflow) ...
- LC 539. Minimum Time Difference
Given a list of 24-hour clock time points in "Hour:Minutes" format, find the minimum minut ...
- mongodb游标的使用
1.插入数据 ;i<;i++){ db.shop.insert({_id:i+,name:+i}) } 2.查看数据数 db.shop.find().count() 3.获取游标.判断是否还存在 ...
- 百度AI---语音识别
题记:娱乐性的玩玩百度接口. 说实话,其接口个人觉得有点烂,重试了好几个音频文件才成功. 1.重新申请AppID.SecretKey .API Key. 链接:https://console.bce. ...