实战:
- 以taijitao-server上的student用户,切换到/ home/ student /dev - flowcontrol目录。
[student@taijitao-server ~]$ cd dev-flowcontrol/
[student@taijitao-server dev-flowcontrol]$ ls
ansible.cfg inventory
[student@taijitao-server dev-flowcontrol]$ cat ansible.cfg
[defaults]
inventory = inventory
remote_user = devops
[privilege_escalation]
become = true
[student@taijitao-server dev-flowcontrol]$ cat inventory
[databases]
servera.lab.example.com
- 创建一个名为configure_database.yml的任务文件。这将定义安装额外包的任务,从存储在网站上的副本更新/etc/my.cnf,并在托管主机上启动mariadb。包含文件可以并将使用在playbook.yml文件和inventory中定义的变量。get_url模块将需要设置force=yes,以便更新my.cnf文件,即使它已经存在于托管主机上,并且需要在/etc/my.cnf文件上设置正确的权限和SELinux上下文。完成后,保存文件并退出编辑器。该文件应如下所示:
---
- yum:
name: "{{ extra_packages }}"
- get_url:
url: "http://materials.example.com/task_control/my.cnf"
dest: "{{ configure_database_path }}"
owner: mysql
group: mysql
mode: 0644
seuser: system_u
setype: mysqld_etc_t
force: yes
- service:
name: "{{ db_service }}"
state: started
enabled: true
3.在同一目录下,创建playbook.ymlplaybook。定义一个列表变量db_users,它由两个用户(db_admin和db_user)组成。在/etc/my.cnf文件中添加configure_database_path变量。仅当管理的主机属于databases主机组时,创建使用循环创建用户的任务。该文件应如下所示:
---
- name: Constructing Flow Control
hosts: all
vars:
db_package: mariadb-server
db_service: mariadb
db_users:
- db_admin
- db_user
configure_database_path: /etc/my.cnf
tasks:
- name: create the mariadb users
user:
name: "{{ item }}"
with_items: "{{ db_users }}"
when: inventory_hostname in groups['databases']
- 在playbook中,添加一个使用db_package变量来安装数据库软件的任务,前提是该变量已经定义。任务内容应如下:
- name: install the database server
yum:
name: "{{ db_package }}"
when: db_package is defined
- 在剧本中,创建一个任务来执行数据库的基本配置。只有定义了configure_database_path时,该任务才会运行。这个任务应该包括configure_database.yml任务文件,并定义一个本地数组extra_packages(它将用于指定此配置所需的其他包)。将该列表变量设置为包含三个包的列表:mariadb-bench、mariadb-libs和mariadb-test。完成后,保存剧本并退出编辑器。
- name: configure the database software
include: configure_database.yml
vars:
extra_packages:
- mariadb-bench
- mariadb-libs
- mariadb-test
when: configure_database_path is defined
- 在运行最后的playbook.yml文件之前检查它。现在全文如下:
---
- name: Constructing Flow Control
hosts: all
vars:
db_package: mariadb-server
db_service: mariadb
db_users:
- db_admin
- db_user
configure_database_path: /etc/my.cnf
tasks:
- name: create the mariadb users
user:
name: "{{ item }}"
with_items: "{{ db_users }}"
when: inventory_hostname in groups['databases']
- name: install the database server
yum:
name: "{{ db_package }}"
when: db_package is defined
- name: configure the database software
include: configure_database.yml
vars:
extra_packages:
- mariadb-bench
- mariadb-libs
- mariadb-test
when: configure_database_path is defined
- 在运行剧本之前。通过运行ansible - playbook –syntax-check验证其语法是否正确。如果它报告任何错误,请在进行下一步之前纠正它们。您应该会看到类似如下的输出:
[student@taijitao-server dev-flowcontrol]$ ansible-playbook playbook.yml --syntax-check
playbook: playbook.yml
- 运行playbook在托管主机上安装和配置数据库。
[student@taijitao-server dev-flowcontrol]$ ansible-playbook playbook.yml
PLAY [Constructing Flow Control] *************************************************
TASK [Gathering Facts] ***********************************************************
ok: [servera.lab.example.com]
TASK [create the mariadb users] **************************************************
changed: [servera.lab.example.com] => (item=db_admin)
changed: [servera.lab.example.com] => (item=db_user)
TASK [install the database server] ***********************************************
ok: [servera.lab.example.com]
TASK [yum] ***********************************************************************
changed: [servera.lab.example.com]
TASK [get_url] *******************************************************************
changed: [servera.lab.example.com]
TASK [service] *******************************************************************
changed: [servera.lab.example.com]
PLAY RECAP ***********************************************************************
servera.lab.example.com : ok=6 changed=4 unreachable=0 failed=0
输出确认任务文件已成功包含并执行。
- 手动验证servera上已经安装了必要的包,/etc/my.cnf文件是否到位,权限是否正确,并且已经创建了两个用户。
9.1. 从taijitao-server到servera使用ad hoc命令确认软件包已经安装。
[student@taijitao-server dev-flowcontrol]$ ansible all -a 'yum list installed mariadb-bench mariadb-libs mariadb-test'
[WARNING]: Consider using yum module rather than running yum
servera.lab.example.com | SUCCESS | rc=0 >>
Loaded plugins: langpacks, search-disabled-repos
Installed Packages
mariadb-bench.x86_64 1:5.5.52-1.el7 @rhel_dvd
mariadb-libs.x86_64 1:5.5.52-1.el7 installed
mariadb-test.x86_64 1:5.5.52-1.el7 @rhel_dvd
9.2. 确认my.cnf文件已成功复制到/etc/下。
[student@taijitao-server dev-flowcontrol]$ ansible all -a 'grep Ansible /etc/my.cnf'
servera.lab.example.com | SUCCESS | rc=0 >>
# Ansible file
9.3. 确认已创建两个用户。
[student@taijitao-server dev-flowcontrol]$ ansible all -a 'id db_user'
servera.lab.example.com | SUCCESS | rc=0 >>
uid=4004(db_user) gid=4004(db_user) groups=4004(db_user)
[student@taijitao-server dev-flowcontrol]$ ansible all -a 'id db_admin'
servera.lab.example.com | SUCCESS | rc=0 >>
uid=4003(db_admin) gid=4003(db_admin) groups=4003(db_admin)