Ansible配置文件命令及模块

青春须早为,岂能长少年。这篇文章主要讲述Ansible配置文件命令及模块相关的知识,希望能为你提供帮助。
配置文件的内容,规则以及ansible命令的用法和常用模块。


?Ansible配置文件?
?主配置文件ansible.cfg?
?配置文件内容解析?
安装好ansible后,会默认生成的主要的配置文件。(yum安装自动生成,源码安装需要自行从模板复制。)下面介绍部分配置文件的具体含义

hostfile= /etc/ansible/hosts//hosts文件的位置
library= /usr/share/ansible //ansible默认搜寻模块的位置
pattern= *//如果没有提供hosts节点,这是playbook要通信的默认主机组.默认值是对所有主机通信
remote_tmp= $HOME/.ansible/tmp//Ansible通过远程传输模块到远程主机,然后远程执行,执行后在清理现场.在有些场景下,你也许想使用默认路径希望像更换补丁一样使用
forks= 5//在与主机通信时的默认并行进程数 ,默认是5d
poll_interval= 15//当具体的poll interval 没有定义时,多少时间回查一下这些任务的状态, 默认值是5秒
sudo_user= root//sudo使用的默认用户 ,默认是root
#ask_sudo_pass = True//用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no
#ask_pass= True//控制Ansible playbook 是否会自动默认弹出密码
transport= smart//通信机制.默认 值为’smart’。如果本地系统支持 ControlPersist技术的话,将会使用(基于OpenSSH)‘ssh’,如果不支持将使用‘paramiko’.其他传输选项‘local’,‘chroot’,’jail’等等
#remote_port= 22//远程SSH端口。 默认是22
module_lang= C//模块和系统之间通信的计算机语言,默认是C语言
#host_key_checking = False//检查主机密钥
timeout = 10//SSH超时时间
#log_path = /var/log/ansible.log//日志文件存放路径
#module_name = command//ansible命令执行默认的模块
#private_key_file = /path/to/file//私钥文件存储位置



?主机列表文件hosts?
?hosts文件基本格式?
Ansible 通过读取主机清单/etc/ansible/hosts连接到多个远程主机上执行任务。
使用??[]??来对主机进行分类,可按照功能,机房,系统,业务等内容进行分类,方便对同一类型的主机进行批量操作。
[dbserver]
172.25.254.1
mysql.example.com
back.mysql.com:5505//指定ssh的端口
test ansible_ssh_port=5321 ansible_ssh_host=172.25.254.2 //设定别名为test
db[1...5].example.com//支持通配符

?可以为主机指定连接类型和连接用户
[web]
localhost ansible_connection=local
web1.example.com ansible_connection=ssh ansible_ssh_user=web



?hosts文件可以使用的指令
ansible_ssh_host//指定主机别名对应的真实 IP
ansible_ssh_port//指定连接到这个主机的 ssh 端口,默认 22
ansible_ssh_user//指定连接到该主机上的用户
ansible_sudo_pass//sudo 密码
ansible_sudo_exe//sudo 命令路径
ansible_connection//连接类型,可以是 local、ssh 或paramiko,ansible1.2 之前默认为 paramiko
ansible_ssh_private_key_file//私钥文件路径
ansible_shell_type// 目标系统的 shell 类型,默认为sh



Ansible命令参数-v:输出详细信息(可以使用多个v)
-i PATH:指定hosts文件位置
-f NUM :指定开启的进程数(默认为5)
-m MOULE :指定module的名称(默认为command)
-m DIRECTORY:指定module的目录来加载module,默认是/usr/share/ansible
-a,MODULE_ARGS:指定module模块的参数
-k:提示输入ssh的密码,而不是使用基于ssh的密钥认证
-u USERNAME:指定移动端的执行用户
-C:测试此命令执行会改变什么内容,不会真正的去执行


ansible指定主机或主机组的方法直接指定
在命令中直接指定主机或主机组的名称。
ansible test-m shell -a cp /etc/ansible/ansible.cfg /etc/aansible.cfg.bak

使用通配符
?匹配所有的主机:all 或 *
ansible all -m ping

?匹配多个组的主机,中间用 : 隔开、
ansible db:test -m shell -a ls /var/log/

?匹配两个组的交集
ansible db:& test -m script -a /etc/shell/ping.sh

?匹配一个组的特定主机
ansible test[0] -m copy -a src=https://www.songbingjia.com/var/www/html/index.html dest=/tmp owner=root group=root mode=0766

ansible test[0-3] -m file -a "src=https://www.songbingjia.com/etc/resolv.conf dest=/tmp/resolv.conf state=link"

?在一个主机组中,主机编号由0开始往下排。第一个命令表示test组中第一个主机;第二个命令表示test组中第1-4个主机。
混合匹配
anslible web:db:& test1:!test2 -m ping

【Ansible配置文件命令及模块】?在web或db组中,且存在于test1中,不能存在于test2中。
Ansible的模块??ansible的模块??



    推荐阅读