利用主机模式选择主机
引用清单主机
先创建一个host_vars目录,在这个目录下创建一个web1文件
[root@localhost playbook]# mkdir /etc/ansible/host_vars/
[root@localhost playbook]# touch /etc/ansible/host_vars/web1
编辑清单文件
[root@localhost playbook]# vim /etc/ansible/inventory
web1 ansible_password=redhat
[root@localhost playbook]# vim /etc/ansible/host_vars/web1
ansible_host: 192.168.187.129
[root@localhost playbook]# ansible all --list-host
hosts (1):
web1
[root@localhost playbook]# ansible all -m ping
web1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
[root@localhost playbook]# ansible web1 -m ping
web1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
管理多个清单
[root@localhost playbook]# tree
.
├── biaybook.yml
├── files
└── inventory
├── qq
└── wx
2 directories, 3 files
[root@localhost playbook]# ansible all -i inventory --list-host
hosts (2):
1.1.1.1
2.2.2.2
编写动态清单
[root@localhost playbook]# vim inventory
{bj}
1.1.1.1
12.12.12.12
[hj]
2.2.2.2
23.23.23.23
[root@localhost playbook]# ansible-inventory -i inventory --list
{
"_meta": {
"hostvars": {}
},
"all": {
"children": [
"hj",
"ungrouped"
]
},
"hj": {
"hosts": [
"2.2.2.2",
"23.23.23.23"
]
},
"ungrouped": {
"hosts": [
"1.1.1.1",
"12.12.12.12",
"{bj}"
]
}
}
配置并行
使用分叉在ansible中配置并行当Ansible处理playbook时,会按顺序运行每个play。确定play的主机列表之后,Ansible将按顺序运行每个任务。通常,所有主机必须在任何主机在play中启动下一个任务之前成功完成任务。理论上,Ansible可以同时连接到play中的所有主机以执行每项任务。这非常适用于小型主机列表。但如果该play以数百台主机为目标,则可能会给控制节点带来沉重负担。Ansible所进行的最大同时连接数由Ansible配置文件中的forks参数控制。默认情况下设为5,这可通过以下方式之一来验证
[root@localhost playbook]# ansible-config dump|grep -i fork
DEFAULT_FORKS(default) = 5
[root@localhost playbook]#
[root@localhost playbook]# ansible-config list|grep -i fork
DEFAULT_FORKS:
description: Maximum number of forks Ansible will use to execute tasks on target
- {name: ANSIBLE_FORKS}
- {key: forks, section: defaults}
name: Number of task forks
[root@localhost playbook]#
管理滚动更新
默认情况下:
依次在5台主机上执行playbook中的第一个任务,然后依次在5台主机上执行playbook中的第二个任务,直到playbook中所有任务全部完成,然后执行handlers中的任务
serial: 5
先在前5台主机上执行playbook中的所有任务,包括handlers中的任务,然后在另外5台主机上执行playbook中的所有任务,包括handlers中的任务
包含或导入文件Ansible可以使用两种操作将内容带入playbook。可以包含内容,也可以导入内容。包含内容是一个动态操作。在playbook运行期间,Ansible会在内容到达时处理所包含的内容。导入内容是一个静态操作。在运行开始之前,Ansible在最初解析playbook时预处理导入的内容
导入playbook
[root@localhost playbook]# cat main.yml
---
- name: import install
import_playbook: playbook.yml
- name: config
import_playbook: config.yml
[root@localhost playbook]#
[root@localhost playbook]# cat playbook.yml
---
- hosts: all
tasks:
- name: install apache
yum:
name: httpd
state: present
[root@localhost playbook]#
[root@localhost playbook]# cat config.yml
---
- hosts: all
tasks:
- name: stsrt httpd
service:
name: httpd
state: started
[root@localhost playbook]#
[root@localhost ~]# ss -antl // 查看服务是否启动
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@localhost ~]# rpm -qa|grep httpd //查看受控机是否安装阿帕奇
httpd-tools-2.4.6-93.el7.centos.x86_64
httpd-2.4.6-93.el7.centos.x86_64
[root@localhost ~]#