Ansible配置

Administrator 25 阅读 Ansible

yum源配置
cp /etc/yum.repo.d/backup/r* /etc/yum.repo.d/
mv /etc/yum.repo.d/rocky-lan.repo /etc/yum.repo.d/backup
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
-i.bak \
/etc/yum.repos.d/rocky*.repo

dnf makecache

常规优化

指纹免密

  • 有配置文件

sed -e 's|;host_key_checking=True|host_key_checking=False|g' -i.bak /etc/ansible/ansible.cfg/

  • 无配置文件

cat >> /etc/ansible/ansible.cfg << EOF

[defaults]

host_key_checking=False

EOF

  • 生成配置文件模板

ansible-config init --disabled -t all > ansible.cfg.template

剧本

Ansible剧本(Playbook)采用YAML格式编写,其核心是定义一系列“任务”(tasks),并指定这些任务在哪些目标主机(hosts)上执行。YAML格式对缩进和语法有严格要求,以下是其基本格式规则和核心组成部分:

一、YAML基础规则(必须遵守)

  1. 缩进:使用空格(不能用Tab)缩进,缩进量一致(通常2或4个空格),用于表示层级关系。

  2. 键值对:格式为 key: value(冒号后必须有空格)。

  3. 列表:用 - 开头表示列表项(- 后必须有空格),通常用于定义任务、变量等集合。

  4. 注释:用 # 开头,单行注释。

  5. 字符串:可加引号(' 或 "),也可不加;但包含特殊字符(如冒号、空格)时必须加引号。

二、Playbook核心组成部分

一个完整的Playbook至少包含 hosts 和 tasks,其他部分为可选增强功能。基本结构如下:

  • name: 剧本名称(描述当前剧本的作用)

  hosts: 目标主机或组(必填,如all、webservers)

  gather_facts: 是否收集主机信息(可选,默认yes)

  become: 是否提权(可选,yes/no,如sudo)

  vars: 定义变量(可选,可在tasks中引用)

    变量名1: 变量值1

    变量名2: 变量值2

  tasks: 任务列表(必填,核心部分)

    - name: 任务1名称(描述任务作用)

      模块名: 模块参数(如command、copy、yum等)

        参数1: 值1

        参数2: 值2

      notify: 触发处理程序(可选,任务执行后通知handlers)

    - name: 任务2名称

      模块名: ...

  handlers: 处理程序(可选,用于响应notify触发的操作,如重启服务)

    - name: 处理程序名称(需与notify的值一致)

      模块名: ...

  roles: 引用角色(可选,用于拆分复杂任务)

    - 角色名1

    - 角色名2

三、各部分详解

  1. hosts(必填)
    指定任务执行的目标主机或主机组(在 inventory 文件中定义)。
    示例:hosts: webservers(执行到webservers组)、hosts: all(执行到所有主机)。

  2. tasks(必填)
    定义具体要执行的任务,每个任务用 - name: ... 开头,包含一个Ansible模块(如 yumcopyservice 等)及参数。
    示例:安装nginx并启动:

  3. tasks:

  4.   - name: 安装nginx

  5.     yum:

  6.       name: nginx

  7.       state: present  # present表示安装,absent表示卸载

  8.   - name: 启动nginx服务并设置开机自启

  9.     service:

  10.       name: nginx

  11.       state: started  # started表示启动,stopped表示停止

  12.       enabled: yes    # 开机自启

  13. vars(可选)
    定义变量,可在tasks中通过 {{ 变量名 }} 引用,简化重复值的维护。
    示例:

  14. vars:

  15.   package_name: nginx

  16.   service_name: nginx

  17. tasks:

  18.   - name: 安装{{ package_name }}

  19.     yum:

  20.       name: "{{ package_name }}"

  21.       state: present

  22. handlers(可选)
    用于处理“任务执行后需要触发的操作”(如配置文件修改后重启服务),需通过 notify 在tasks中触发(notify 的值需与handler的 name 一致)。
    示例:修改nginx配置后重启:

  23. tasks:

  24.   - name: 修改nginx配置文件

  25.     copy:

  26.       src: ./nginx.conf

  27.       dest: /etc/nginx/nginx.conf

  28.     notify: 重启nginx  # 触发名为“重启nginx”的handler

  29. handlers:

  30.   - name: 重启nginx  # 与notify的值一致

  31.     service:

  32.       name: nginx

  33.       state: restarted

  34. become(可选)
    控制是否提权执行任务(如需要root权限时),become: yes 等价于 sudo
    示例:

  35. become: yes  # 所有任务以root权限执行

  36. tasks:

  37.   - name: 创建/root/test目录(需要root权限)

  38.     file:

  39.       path: /root/test

  40.       state: directory

  41. gather_facts(可选)
    控制是否在任务执行前收集主机信息(如IP、操作系统版本等),默认 yes;若不需要可设为 no 提高效率。
    示例:gather_facts: no

  42. roles(可选)
    引用“角色”(roles),用于拆分复杂剧本(将任务、变量、模板等按功能模块化)。
    示例:roles: - webserver(引用webserver角色)

四、完整示例

一个安装并启动nginx的简单Playbook:

  • name: 安装并启动nginx服务

  hosts: webservers

  gather_facts: no

  become: yes  # 提权为root

  vars:

    nginx_conf: ./nginx.conf  # 本地配置文件路径

  tasks:

    - name: 安装nginx

      yum:

        name: nginx

        state: present

    - name: 推送自定义nginx配置

      copy:

        src: "{{ nginx_conf }}"

        dest: /etc/nginx/nginx.conf

      notify: 重启nginx  # 配置变化时触发重启

    - name: 确保nginx服务启动并开机自启

      service:

        name: nginx

        state: started

        enabled: yes

  handlers:

    - name: 重启nginx

      service:

        name: nginx

        state: restarted

总结

Ansible Playbook的核心是通过YAML格式定义“在哪些主机上执行哪些任务”,结合变量、处理程序、角色等功能可实现复杂的自动化部署。编写时需严格遵守YAML缩进规则,确保语法正确。