playbooks
Ansible Playbooks提供了一个可重复、可重用、简单易用的配置管理和多机部署系统,非常适合部署复杂的应用程序。如果需要多次使用Ansible执行任务,请编写剧本并将其置于源代码控制之下。然后,您可以使用playbook推送新配置文件或检查远程系统的配置。ansible-examples repository有很多范例。
---
- name: Update web servers
hosts: webservers
remote_user: root
tasks:
- name: Ensure apache is at the latest version
ansible.builtin.yum:
name: httpd
state: latest
- name: Write the apache config file
ansible.builtin.template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
- name: Update db servers
hosts: databases
remote_user: root
tasks:
- name: Ensure postgresql is at the latest version
ansible.builtin.yum:
name: postgresql
state: latest
- name: Ensure that postgresql is started
ansible.builtin.service:
name: postgresql
state: started
ansible-playbook
ansible-playbook playbook.yml -f 10
roles
一个 Ansible role 定义了八个子目录。每个role至少包含一个,不用的目录可以忽视。比如:
# playbooks
site.yml
webservers.yml
fooservers.yml
roles/
common/
tasks/
handlers/
library/
files/
templates/
vars/
defaults/
meta/
webservers/
tasks/
defaults/
meta/
默认,ansible 会查找每个目录下的 main.yml
文件。
-
tasks/main.yml
- role执行的任务列表。 -
handlers/main.yml
- handlers, role 外也可以使用。 -
library/my_module.py
- modules, role 内使用。 -
defaults/main.yml
- role 的默认变量,这些变量优先级最低,可被覆盖,比如inventory variables。 -
vars/main.yml
- role 的其他变量。 -
files/main.yml
- role 发布的文件。 -
templates/main.yml
- role 发布的模板。 -
meta/main.yml
- role 的 metadata ,包含了 role 的依赖。
---
- hosts: webservers
roles:
- common
- webservers
---
- hosts: webservers
roles:
- role: '/path/to/my/roles/common'
---
- hosts: webservers
roles:
- common
- role: foo_app_instance
vars:
dir: '/opt/a'
app_port: 5000
tags: typeA
- role: foo_app_instance
vars:
dir: '/opt/b'
app_port: 5001
tags: typeB
范例
修改云服务器上的 resolv.conf 文件,添加 domain 配置。
1) 当前目录结构
- 配置文件
.ansible.cfg
- inventory 文件
hosts
- playbook
resov.yml
- roles目录,以及 role
01_rha-dr-resolv
-
01_rha-dr-resolv
下存在 tasks/ 和 files/ 目录,执行tasks/main.yml,将 files/目录下的 resov.conf推送到远程服务器
[sysadmin@VM-201-5-centos ~]$ tree ./
./
|-- hosts
|-- resolv.yml
`-- roles
`-- 01_rha-dr-resolv
|-- files
| `-- resolv.conf
`-- tasks
`-- main.yml
4 directories, 4 files
- hosts
[new]
10.99.201.11
- resolv.yml
---
- hosts: new
become: yes
roles:
- 01_rha-dr-resolv
- main.yml
---
- name: resolv.conf config
copy:
src: resolv.conf
dest: /etc/resolv.conf
owner: root
group: root
mode: '0644'
- resolv.conf
; created by ansible
domain rha-dr.com
search rha-dr.com
;created by ansible
; generated by /usr/sbin/dhclient-script
nameserver 183.60.83.19
nameserver 183.60.82.98
2) 执行role
-u
远程账户
-k
远程账户密码
-K
远程账户sudo密码
[sysadmin@VM-201-5-centos ~]$ ansible-playbook resolv.yml -u admin -k -K
SSH password:
BECOME password[defaults to SSH password]:
PLAY [new] *******************************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************************************************************************************************************************************************************************
ok: [10.99.201.11]
TASK [01_rha-dr-resolv : resolv.conf config] *********************************************************************************************************************************************************************************************************************************
changed: [10.99.201.11]
PLAY RECAP *******************************************************************************************************************************************************************************************************************************************************************
10.99.201.11 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
网友评论