#ansible主机清单是/etc/ansible/hosts文件
vim /etc/ansible/hosts
[webserver] #括号里设置组名
www1.example.org #定义被监控主机,这边可以是主机名也可以是IP地址,主机名需要修改/etc/hosts文件
www2.example.org:222 #冒号后定义远程连接端口,默认是ssh的22端口
#如果是名称类似的主机,可以使用列表的方式标识各个主机
[webserver]
www[01:50].xxxxxxx.com ansible_ssh_user=root ansible_ssh_pass=123123
# 这句话表示01到50的主机,可以使用免交互的方式进行管理
[dbbservers]
db-[a:f].xxxxxxx.com # 支持匹配a b c d e f
[webserver]
www1.xxxxxxx.com http_port=80 maxRequestsChild=808
www2.xxxxxxx.com http_port=8080 maxRequestsChild=909
[servers:vars]
ntp_server=ntp.xxxxxx.com
nfs_server=nfs.xxxxxx.com
[apache]
http1.xxxxxxx.com
http2.xxxxxxx.com
[nginx]
ngx1.xxxxxxx.com
ngx2.xxxxxxx.com
[webservers:children]
apache
nginx
参数 | 说明 |
---|---|
ansible_ssh_host | 将要连接的远程主机名,与你想要设定的主机的别名不同的话,可通过此变量设置 |
ansible_ssh_port | ssh端口号,如果不是默认的端口号,通过此变量设置 |
ansible_ssh_user | 默认的ssh用户名 |
ansible_ssh_pass | ssh密码(这种方式并不安全,强烈建议使用–ask-pass或SSH密钥) |
ansible_ssh_private_key_file | ssh使用的私钥文件,适用于有多个密钥,而你不想用SSH代理的情况 |
ansible_ssh_common_args | 此设置附加到sftp,scp和ssh默认命令行 |
ansible_sftp_extra_args | 此设置附加到默认sftp命令行 |
ansible_scp_extra_args | 此设置附加到默认scp命令行 |
ansible_ssh_extra_args | 此设置附加到默认ssh命令行 |
ansible_ssh_pipelining | 确定是否使用SSH管道,可以覆盖ansible.cfg中的设置 |
ansible_shell_type | 目标系统的shell类型,默认情况下,命令的执行使用”sh“语法,可设置为”csh“或”fish“ |
ansible_python_interpreter | 目标主机的python路径,适用于的情况系统中有多个 Python, 或者命令路径不是"/usr/bin/python |
ansible_*_interpreter | 这里的*可以是ruby或Perl或者其他语言的解释器,作用和ansible_python_interpreter类似 |
ansible_shell_executable | 将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的默认为/bin/sh |
YAML另一种标记语言,是用来写配置文件的语言,非常简洁和强大
YAML语法和其他语言类似,也可以表达散列表,标量等数据结构
结构通过空格来展示,序列里配置项通过”-“来代表,Map里键值用”:“来分隔;
大小写敏感
使用缩进表示层级关系
缩进时不允许使用制表符,只允许使用空格
缩进的空格数不重要,只要相同层级的元素左侧对齐即可
对象:键值对的集合,又称映射(mapping)、哈希(hashes)、字典(dictionary)
例如:name:example Developer
键 值
数组:一组按次序排列的值,又称为序列(sequence)、列表(list)
例如: - football
- basketball
纯量:单个的、不可再分的值
例如:number:33.33
sure:true
playbook配置文件使用了YAML语法,具有简介明了、结构清晰等特点,playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表,之前介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂的任务时,逐条输入就显得效率非常地下了,更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可实现自动化运维,YAML文件的扩展名通常为.yaml或者.yml
tasks:任务,即调用模块完成某操作
variables:变量
templates:模板
handlers:处理器,当某种条件满足时,触发执行的操作
roles:角色
ansible-playbook nginx.yaml --syntax-check # 检查yaml文件的语法
ansible-playbook nginx.yaml --list-task # 检查tasks任务
ansible-playbook nginx.yaml --list-hosts # 检查生效的主机
ansible-playbook nginx.yaml --start-at-task=‘Copy Nginx.conf’ # 从某一个task任务开始
- hosts: 主机组名称 #指定主机,可以是一个或多个组
remote_user: root #指定远程主机执行的用户名
[root@master opt]# vim a.yaml
- hosts: mysql
remote_user: root
tasks:- name: change user
ping:
remote_user: root#需要的用户一定是root用户
[root@master opt]# vim b.yaml
- hosts: 192.168.200.13
remote_user: root
tasks:
- name: disable selinux
command: ‘/sbin/setenforce 0’
- name: install httpd
yum : name=httpd
- name: run httpd
service: name=httpd state=started
#ignore_errors 忽略错误,强制返回成功
[root@master opt]# ansible-playbook c.yaml
- hosts: 192.168.200.13
remote_user: root
become: yes
become_user: fyf
#Handlers也是一些task的列表,和一般的task并没有什么区别。是由通知者进行的notify,如果没有被notify,则Handlers不会执行,加入被notify了,则Handlers被执行,不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handelers也只会被执行一次
- hosts: test
remote_user: root
tasks:
- name: install httpd package
yum: name=httpd state=latest
- name: install configuration file for httpd
copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
- name: start httpd service
service: enabled=true name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted
#在使用命令时用-e
[root@master opt]# vim d.yaml
- hosts: 192.168.200.12
remote_user: root
vars:
- user:
tasks:
- name: add user
user: name={{user}}[root@master opt]# ansible-playbook d.yaml -e “user=ppp”
#在剧本中使用
[root@master opt]# vim d.yaml
- hosts: 192.168.200.12
remote_user: root
vars:
- user: ttt
tasks:
- name: add user
user: name={{user}}#定义在主机清单节点后面
[root@master opt]# vim d.yaml
- hosts: 192.168.200.12
remote_user: root
tasks:
- name: add uer
user: name={{user}}[root@master opt]# vim /etc/ansible/hosts
[webserver]
192.168.200.12 user=aa
#单条件测试
[root@master opt]# vim e.yaml
- hosts: 192.168.200.12
remote_user: root
tasks:
- name: shutdown centos
command: /sbin/shutdown -h now #将被控制端关机 -h是关机 -r是重启
when: ansible_distribution == “CentOS” #判断如果被控制端是CentOS系统
#多条件判断
[root@master opt]# vim e.yaml
- hosts: 192.168.200.12
remote_user: root
tasks:
- name: shutdown centos
command: /sbin/shutdown -h now
when:
- ansible_distribution == “CentOS” #判断是CentOS系统
- ansible_distribution_major_version == “7” #而且是7版本的
#组条件判断
vim when.yml
- hosts: test01
remote_user: root
tasks:
- name: shutdown CentOS 6 and Debian 7 systems
command: /sbin/shutdown -t now
when: (ansible_distribution == “CentOS” and ansible_distribution_major_version == “6”) or
(ansible_distribution == “Debian” and ansible_distribution_major_version == “7”)
[root@master opt]# vim f.yaml
- hosts: 192.168.200.13
remote_user: root
tasks:
- name: add user
user: name={{item}}
with_items:
- 111
- 222
- 333#只能使用item这个变量,因为这个是ansible中默认的变量