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格式对缩进和语法有严格要求,以下是其基本格式规则和核心组成部分:
缩进:使用空格(不能用Tab)缩进,缩进量一致(通常2或4个空格),用于表示层级关系。
键值对:格式为 key: value(冒号后必须有空格)。
列表:用 - 开头表示列表项(- 后必须有空格),通常用于定义任务、变量等集合。
注释:用 # 开头,单行注释。
字符串:可加引号(' 或 "),也可不加;但包含特殊字符(如冒号、空格)时必须加引号。
一个完整的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
hosts(必填)
指定任务执行的目标主机或主机组(在 inventory 文件中定义)。
示例:hosts: webservers(执行到webservers组)、hosts: all(执行到所有主机)。
tasks(必填)
定义具体要执行的任务,每个任务用 - name: ... 开头,包含一个Ansible模块(如 yum、copy、service 等)及参数。
示例:安装nginx并启动:
tasks:
- name: 安装nginx
yum:
name: nginx
state: present # present表示安装,absent表示卸载
- name: 启动nginx服务并设置开机自启
service:
name: nginx
state: started # started表示启动,stopped表示停止
enabled: yes # 开机自启
vars(可选)
定义变量,可在tasks中通过 {{ 变量名 }} 引用,简化重复值的维护。
示例:
vars:
package_name: nginx
service_name: nginx
tasks:
- name: 安装{{ package_name }}
yum:
name: "{{ package_name }}"
state: present
handlers(可选)
用于处理“任务执行后需要触发的操作”(如配置文件修改后重启服务),需通过 notify 在tasks中触发(notify 的值需与handler的 name 一致)。
示例:修改nginx配置后重启:
tasks:
- name: 修改nginx配置文件
copy:
src: ./nginx.conf
dest: /etc/nginx/nginx.conf
notify: 重启nginx # 触发名为“重启nginx”的handler
handlers:
- name: 重启nginx # 与notify的值一致
service:
name: nginx
state: restarted
become(可选)
控制是否提权执行任务(如需要root权限时),become: yes 等价于 sudo。
示例:
become: yes # 所有任务以root权限执行
tasks:
- name: 创建/root/test目录(需要root权限)
file:
path: /root/test
state: directory
gather_facts(可选)
控制是否在任务执行前收集主机信息(如IP、操作系统版本等),默认 yes;若不需要可设为 no 提高效率。
示例:gather_facts: no
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缩进规则,确保语法正确。