写在前面
Ansible是一款通过ssh来实现批量自动化的工具,理论上,只要能使用ssh完成的操作,Ansible都能做到,支持多类型主机且部署方便,这里记录下自己学习此软件的笔记,会随学习进度更新
附上Ansible的文档:链接
提示本文所有内容运行基于Centos7-2009版本 管理机ip为:192.168.255.130 被管理机ip为:192.168.255.131
部署
1.安装Ansible软件
sudo yum install epel-release -ysudo yum install ansible -y被管理机只需要启动ssh服务且py版本大于2.4即可
2.配置ssh
为管理机添加免密登录
ssh-keygenssh-copy-id 192.168.255.1313.修改主机目录
Ansible需要知道自己管理的机器有哪些,默认的主机目录文件路径在**/etc/ansible/hosts**,可以直接修改
- 最基本的hosts文件样式
192.168.255.131server.text.com- 带分组的hosts文件样式
[web]192.168.255.131server.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文件
提示yaml使用缩进表示层级关系,缩进的空格数不重要,只要相同层级的元素左对齐即可,冒号后面要加空格 如果有语法报错可以丢到在线校验器中或者使用ide来编写
或者直接写json文件再转换
---- 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: restartedhttpd.html.j2的内容如下,这个文件是py的jinja2模板引擎,目前只需要知道变量在其中使用{{}}表达就行了
<html><body> <h1>欢迎来到 {{ ansible_facts['hostname'] }}</h1> <p>IP地址:{{ ansible_facts['default_ipv4']['address'] }}</p> <p>变量内容为{{textname}}</p></body></html>如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时










