【Ansible 学习之旅】Playbook 的使用实例

系列文章

Ansible 介绍和架构
Ansible 安装和入门
配置控制机器和受控机器
Inventory文件介绍
Ansible核心工具介绍
Ansible常用模块介绍与演示
Playbook 的基本概念



playbook 命令格式

  • 格式 :ansible-playbook <filename.yml> ... [options]
  • 常见选项
    • -C --check #只检测可能会发生的改变,但不真正执行操作
    • --list-hosts #列出运行任务的主机
    • --list-tags #列出tag
    • --list-tasks #列出task
    • --limit 主机列表 #只针对主机列表中的主机执行
    • -v -vv -vvv #显示过程
  • 示例
ansible-playbook  file.yml  --check #只检测
ansible-playbook  file.yml  
ansible-playbook  file.yml  --limit websrvs

playbook 简单示例

创建 MySQL 用户和组

示例:

创建mysql_user.yml

---
- hosts: dbsrvs
  remote_user: root

  tasks:
    - {name: create group, group: name=mysql system=yes gid=306}
    - name: create user
      user: name=mysql shell=/sbin/nologin system=yes group=mysql uid=306 home=/data/mysql create_home=no
  • - hosts: dbsrvs:表示Play 将在属于 dbsrvs 组的主机上执行

  • remote_user: root :指定了 Ansible 将以 root 用户身份执行任务。这是因为创建用户和组通常需要 root 权限

  • - {name: create group, group: name=mysql system=yes gid=306}

    • 这种写法称为单行任务或紧凑写法,它允许在一个单独的行内定义一个任务。这种写法比较简洁,适合于那些只需要一个模块及其参数的任务
    • 这个任务是使用 group 模块来创建一个名为 mysql 的组,并设置它是系统组且具有 GID 306
  • 后面是第二个任务,使用了多行任务或标准写法。这也是我们常见的一种写法。这个任务是使用 user 模块来创建一个名为 mysql 的用户,并指定用户的各种属性


安装 nginx

示例:

创建install_nginx.yml

---
- name: Install and Configure Nginx
  hosts: websrvs
  remote_user: root
  tasks:
    - name: Add Nginx Group
      group:
        name: nginx
        state: present
    - name: Add Nginx User
      user:
        name: nginx
        state: present
        group: nginx
    - name: Install Nginx
      package:
        name: nginx
        state: present
    - name: Copy Web Page
      copy:
        src: files/index.html
        dest: /usr/share/nginx/html/index.html
    - name: Start Nginx Service
      service:
        name: nginx
        state: started
        enabled: yes
  • hosts: websrvs: 指定了 Play 将在名为 websrvs 的主机组上执行。
  • remote_user: root: 指定了 Ansible 将以 root 用户身份执行任务。
  • 这里有5个task。分别是创建Nginx 组、创建Nginx 用户、安装Nginx 、复制文件到远程主机、启动Nginx 。分别使用了group、user、package、copy和service模块。

安装和卸载 httpd

示例:

创建install_httpd.yml

---
#install httpd 
- hosts: websrvs
  remote_user: root
  gather_facts: no

  tasks:
    - name: Install httpd
      yum: name=httpd state=present
    - name: Install configure file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/
    - name: web html
      copy: src=files/index.html  dest=/var/www/html/
    - name: start service
      service: name=httpd state=started enabled=yes
  • gather_facts: no:表示禁用了事实收集功能。事实收集是指 Ansible 在执行 Play 之前收集有关目标主机的信息。在这个场景下,我们不需要收集事实信息,因此可以加快 Playbook 的执行速度

创建remove_httpd.yml

#remove_httpd.yml
---
- hosts: websrvs
  remote_user: root
  tasks:
    - name: remove httpd package
      yum: name=httpd state=absent
    - name: remove apache user 
      user: name=apache state=absent
    - name: remove config file
      file: name=/etc/httpd  state=absent
    - name: remove web html
      file: name=/var/www/html/index.html state=absent

安装 MySQL 5.6.46

示例:

假设我们已有mysql-5.6.46-linux-glibc2.12压缩包。并且已在控制机上创建并编写好my.cnf文件。

创建install_mysql.yml

---
- name: Install MySQL 5.6.46
  hosts: dbsrvs
  remote_user: root
  gather_facts: no
  tasks:
    - name: Install Required Packages
      package:
        name:
          - libaio
          - perl-Data-Dumper
          - perl-Getopt-Long
    - name: Create MySQL Group
      group:
        name: mysql
        gid: 306
    - name: Create MySQL User
      user:
        name: mysql
        uid: 306
        group: mysql
        shell: /sbin/nologin
        system: yes
        create_home: no
        home: /data/mysql
    - name: Unarchive MySQL Package
      unarchive:
        src: /data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
        dest: /usr/local/
        owner: root
        group: root
    - name: Create Symbolic Link for MySQL
      file:
        src: /usr/local/mysql-5.6.46-linux-glibc2.12-x86_64
        dest: /usr/local/mysql
        state: link
    - name: Initialize MySQL Data Directory
      shell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
      tags: data
    - name: Copy MySQL Configuration
      copy:
        src: /data/ansible/files/my.cnf
        dest: /etc/my.cnf
    - name: Copy MySQL Service Script
      shell: cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    - name: Enable MySQL Service
      shell: /etc/init.d/mysqld start; chkconfig --add mysqld; chkconfig mysqld on
      tags: service
    - name: Set PATH Variable
      copy:
        content: 'PATH=/usr/local/mysql/bin:$PATH'
        dest: /etc/profile.d/mysql.sh
    - name: Run MySQL Secure Installation Script
      script: /data/ansible/files/secure_mysql.sh
      tags: script

tags

tags 是一种非常有用的特性,它可以让我们对任务进行标记,从而在运行 Playbook 时能够选择性地执行某些任务或跳过某些任务。

比如:

  • 选择性执行:
    • 可以通过指定 --tags 参数来选择只运行带有特定标签的任务。
    • 如果想只运行与数据目录初始化相关的任务,可以使用 --tags data
  • 跳过任务:
    • 可以使用 --skip-tags 参数来跳过带有特定标签的任务。
    • 如果想跳过所有与服务相关的任务,你可以使用 --skip-tags service
  • 任务分组:
    • 标签可以帮助我们将相似的任务分组在一起,方便管理和维护。
    • 例如,我们可以将所有与数据目录相关的任务标记为 data,将所有与服务相关的任务标记为 service
  • 调试:
    • 当我们需要调试 Playbook 的一部分时,可以通过 --tags 参数仅运行这些任务,从而节省执行时间。

在上面那个 Playbook 中,有几个任务被标记了标签:

  • Initialize MySQL Data Directory:
    • 标签: data
    • 这意味着我们可以仅运行与数据目录初始化相关的任务。
  • Enable MySQL Service:
    • 标签: service
    • 这意味着我们可以仅运行与服务启动相关的任务。
  • Run MySQL Secure Installation Script:
    • 标签: script
    • 这意味着我们可以仅运行与安全脚本相关的任务。

假设你想只执行与数据目录初始化相关的任务,你可以使用以下命令:

ansible-playbook install_mysql.yml --tags data

如果你想跳过所有与服务相关的任务,你可以使用以下命令:

ansible-playbook install_mysql.yml --skip-tags service
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不怕娜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值