ansible实战应用系列教程10:构造条件语句和循环之实战

本文描述了一个使用Ansible自动化工具在taijitao-server上以student用户身份操作的流程。通过切换到指定目录并创建configure_database.yml和playbook.yml文件,文章详细说明了如何安装MariaDB服务器,更新my.cnf配置文件,创建数据库用户,并设置正确的权限和SELinux上下文。最终,通过运行playbook.yml来执行安装和配置任务,并手动验证了结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实战:

  1. 以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

  1. 创建一个名为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']

  1. 在playbook中,添加一个使用db_package变量来安装数据库软件的任务,前提是该变量已经定义。任务内容应如下:
    - name: install the database server
      yum:
        name: "{{ db_package }}"
      when: db_package is defined

  1. 在剧本中,创建一个任务来执行数据库的基本配置。只有定义了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

  1. 在运行最后的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

  1. 在运行剧本之前。通过运行ansible - playbook –syntax-check验证其语法是否正确。如果它报告任何错误,请在进行下一步之前纠正它们。您应该会看到类似如下的输出:
[student@taijitao-server dev-flowcontrol]$ ansible-playbook playbook.yml --syntax-check

playbook: playbook.yml

  1. 运行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

输出确认任务文件已成功包含并执行。

  1. 手动验证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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太极淘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值