1074 字
5 分钟
页面浏览--访问次数--
Ansible学习笔记(1)

写在前面#

Ansible是一款通过ssh来实现批量自动化的工具,理论上,只要能使用ssh完成的操作,Ansible都能做到,支持多类型主机且部署方便,这里记录下自己学习此软件的笔记,会随学习进度更新

附上Ansible的文档:链接

部署#

1.安装Ansible软件

sudo yum install epel-release -y
sudo yum install ansible -y

被管理机只需要启动ssh服务且py版本大于2.4即可

2.配置ssh

为管理机添加免密登录

ssh-keygen
ssh-copy-id 192.168.255.131

3.修改主机目录

Ansible需要知道自己管理的机器有哪些,默认的主机目录文件路径在**/etc/ansible/hosts**,可以直接修改

  • 最基本的hosts文件样式
192.168.255.131
server.text.com
  • 带分组的hosts文件样式
[web]
192.168.255.131
server.text.com

管理#

Ansible可以使用命令,也可以脚本来管理主机

1.命令

ansible 是最基本的命令,用于在远程主机上一次性执行模块

ansible <主机模式> -i <清单文件> -m <模块名> -a "<模块参数>" [选项]

一些常用选项,可以在文档中找到更加详细的选项

  • -i 或 —inventory:指定清单文件(默认 /etc/ansible/hosts)
  • -m:指定要使用的模块(默认 command)
  • -a:传递给模块的参数
  • -f: 指定要使用的并行进程数(用于重复执行)

2.脚本

Ansible使用了格式为YAML的脚本playbook,能够方便的管理主机

要执行脚本的指令如下

ansible-palybook [文件名]

playbook内包含了以下关键词

  • hosts:执行主机的ip、域名或主机组,也可以使用all
  • remote_user:以指定用户身份执行
  • vars :用于创建变量
  • tasks:定义顺序执行的动作,每一个动作调用一个模块

下面贴一个为主机组web简单部署Apache服务的yml文件

---
- hosts: web #表示执行此脚本的对象为[web]主机组
remote_user: root #表示使用root用户执行此脚本
tasks: #下方定义了要执行的动作
- name: Install httpd #标注执行的操作,注意一个name里只能包含一个模块调用
yum: name=httpd state=latest #调用yum模块下载名称为httpd的包的latest版本

tasks的一些常用模块,可以在文档中找到更加详细的说明

  • Ping:ping指定远程主机,如果连接成功,则返回pong
  • debug:用于调试的模块,作用类似于echo命令
  • copy:从本地复制文件到远程主机
  • template:从本地复制文件到远程主机,但可以使用变量进行替换其中的内容
  • file:设置文件属性
  • user:管理用户账户
  • yum:使用包管理器
  • service:管理远程主机中的服务
  • firewalld:管理防火墙中的服务和端口
  • shell:在远程主机上执行shell命令

下面来升级一下上面的案例,让我们在安装Apache服务并使用template模块读取脚本中的变量来更改默认的index.html,我会在代码中标注详细的执行流程

---
- hosts: web #表示执行此脚本的对象为[web]主机组
vars:
textname: "buwang" #此处使用了vars创建了变量textname
remote_user: root
tasks:
- name: Install httpd #和上方案例中的安装指令稍稍有些不一样,但表达的功能是一样的
yum:
name: httpd
state: latest
- name: Deploy custom index page #使用template渲染httpd.html.j2模板并替换远程主机中的内容
template:
src: httpd.html.j2
dest: /var/www/html/index.html
- name: Restart httpd service #做完全部工作后使用service重启httpd服务
service:
name: httpd
state: restarted

httpd.html.j2的内容如下,这个文件是py的jinja2模板引擎,目前只需要知道变量在其中使用{{}}表达就行了

<html>
<body>
<h1>欢迎来到 {{ ansible_facts['hostname'] }}</h1>
<p>IP地址:{{ ansible_facts['default_ipv4']['address'] }}</p>
<p>变量内容为{{textname}}</p>
</body>
</html>
Ansible学习笔记(1)
https://www.yisibuwang.top/posts/2026-03-25-ansible学习笔记1/
作者
不旺の博客
发布于
2026-03-25
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

评论

正在加载评论...

最后更新于 ,距今已过 192 天

部分内容可能已过时