ansible安装
[root@ju ~]# yum install ansible -y
定义主机与组
[root@ju ~]# vim /etc/ansible/hosts #添加主机,并在所配置的主机上与ansible建立互信 192.168.116.138 192.168.116.139 192.168.116.139:7022 #定义一个ssh端口为7022的主机 juserver ansible_ssh_port=22 ansible_ssh_host=192.168.116.25 #利用别名定义一个主机,使用的时候直接使用juserver这个别名即可 [webserver] #建立分组 192.168.116.2 192.168.116.3 192.168.116.4 www[01:50].example.com #支持通配符匹配www01 www02 ...www50 [dbserver] 192.168.116.5 192.168.116.6 db-[a:f].example.com #支持字母匹配a b c...f [weballserver:children] #组嵌套,不过这个只能用在playbook中,ansible命令行中使用不了 webserver dbserver [myserver] 192.168.116.7 http_port=8000 maxRequestsPerChild=808 #可以为每个主机单独指定一些变量,这些变量可以在playbooks中使用 192.168.116.8 http_port=303 maxRequestsPerChild=909 [weixinserver] 192.168.116.9 192.168.116.10 [weixinserver:vars] #也可以为一个组指定变量,组内每个主机都可以使用该变量 ntp_server=ntp.weixinserver.example.com proxy=proxy.weixinserver.example.com
ansible保留主机变量
#ansible_ssh_host:指定主机别名对应的真实IP,如:251 ansible_ssh_host=192.168.116.251,随后连接该主机无须指定完整IP,只需指定251 就行 #ansible_ssh_port:指定连接到这个主机的ssh 端口,默认22 #ansible_ssh_user:连接到该主机的ssh用户 #ansible_ssh_pass:连接到该主机的ssh密码(连-k 选项都省了),安全考虑还是建议使用私钥或在命令行指定-k 选项输入 #ansible_sudo_pass:sudo 密码 #ansible_sudo_exe(v1.8+的新特性):sudo 命令路径 #ansible_connection:连接类型,可以是local、ssh 或paramiko,ansible1.2 之前默认为paramiko #ansible_ssh_private_key_file:私钥文件路径 #ansible_shell_type:目标系统的shell类型,默认为sh,如果设置csh/fish,那么命令需要遵循它们语法 #ansible_python_interpreter:python 解释器路径,默认是/usr/bin/python,但是如要要连freeBSD系统的话,就需要该指令修改python路径 #ansible_*_interpreter:这里的"*"可以是ruby或perl或其他语言的解释器,作用和ansible_python_interpreter类似
分离主机和组的变量定义
#为host 和group 定义一些比较复杂的变量时(如array、hash),可以用单独文件保存host和group 变量,以YAML 格式书写变量,避免都写在hosts 文件显得混乱,如果hosts 文件路径为: /etc/ansible/hosts #则host 和group 变量目录结构: /etc/ansible/host_vars/all #host_vars 目录用于存放host 变量,all 文件对所有主机有效 /etc/ansible/host_vars/foosball #文件foosball 要和hosts 里面定义的主机名一样,表示只对foosball 主机有效 /etc/ansible/group_vars/all #group_vars 目录用于存放group 变量,all 文件对所有组有效 /etc/ansible/group_vars/raleigh #文件raleigh 要和hosts 里面定义的组名一样,表示对raleigh 组下的所有主机有效 #这里/etc/ansible/group_vars/raleigh 格式如下,YAML 格式要求: ntp_server: acme.example.org #变量名:变量值 database_server: storage.example.org
主机匹配方式
#表示通配inventory 中的所有主机 all '*' #星号必须引起来 #也可以指定具有规则特征的主机或者主机名 one.example.com one.example.com:two.example.com 192.168.1.50 192.168.1.* #意思是这两个组中的所有主机 webservers:dbservers #非模式匹配:表示在webservers 组不在phoenix 组的主机 webservers:!phoenix #交集匹配:表示同时都在webservers 和staging 组的主机 webservers:&staging
命令行简单举例
#ansible <pattern_goes_here> -m <module_name> -a <arguments>
[root@ju ~]# ansible 192.168.116.138 -m ping #对单台主机测试ping [root@ju ~]# ansible all -m ping #对/etc/ansible/hosts中所有主机测试ping [root@ju ~]# ansible webserver -a "/bin/echo hello" #运行命令 [root@ju ~]# ansible all -a "uptime" [root@ju ~]# ansible dbserver -m copy -a "src=/tmp/ansible dest=/tmp/ansible_1" #copy文件 [root@ju ~]# ansible 192.168.116.138 -m file -a "dest=/tmp/ansible_1 mode=600 owner=ju group=ju" #改变文件属性 [root@ju ~]# ansible 192.168.116.138 -m service -a "name=httpd state=running" #启动服务,或者放到开机启动的同时运行 [root@ju ~]# ansible all -m setup #打印主机的清单,将输出用于描述每一台主机的JSON对象,其中包括总体内存、已使用内存、CPU、网络、磁盘信息、操作系统版本以及内核版本等等。
查看模块帮助
[root@db ansible]# ansible-doc ping > PING A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' # Test 'webservers' status ansible webservers -m ping