ansible实战-2023
环境信息:
cat /etc/ansible/hosts
[webserver]
192.168.31.18 ansible_ssh_user=root ansible_ssh_pass=123456 http_port=815 testvar=31.18 mysql_port=3309
[dbserver]
192.168.31.19 ansible_ssh_user=root ansible_ssh_pass=123456 http_port=816 testvar=31.19 mysql_port=3310
变量的使用
- hosts: all #指定所有主机
remote_user: root #指定远程账户
tasks: #定义任务
- name: copy file #任务名
copy: content="{{ansible_date_time}}\n {{testvar}}\n" dest=/tmp/var.ansible #引用copy模块,将content内容覆盖写入到远程文件里,\n表示内容换行
###然后执行ansible-playbook var.yml
安装httpd
- hosts: all #指定主机
remote_user: root #指定远程账号
vars: #定义变量,方便下面引用,在hosts清单里也可以定义全局变量
package: httpd #定义package变量
service: httpd #定义service变量
tasks: #定义任务
- name: install httpd package #任务名
yum: name={{package}} state=latest #引用yum模块,name指定安装的软件包 state指定软件版本,latest为最新
- name: install configuration file for httpd #任务名
copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf #copy模块 src为本地源文件路径,dest为远程服务器目标路径
notify: #关注本任务是否有变更 changed,有的话触发handlers,handlers名为restart httpd
- restart httpd #触发的handlers
- name: start httpd service #任务名
service: enabled=true name={{service}} state=started #service模块,enabled设置开机是否启动 name指定服务名 state指定服务状态
handlers: #配合notify执行动作
- name: restart httpd #handlers名
service: name=httpd state=restarted #动作,启动service服务管理模块 name指定服务名 state指定服务状态
###然后执行:ansible-playbook httpd.yml
数组item的运用
- hosts: all #指定主机
remote_user: root #指定远程账号
vars: #定义变量
username: user10 #变量
tasks: #定义任务
- name: create {{username}} user #任务名
user: name={{username}} #使用user模块创建用户
when: ansible_fqdn == "node2" #when,当fact变量 ansible_fqdn == "node2"时执行此任务,fact变量是内置的,通过setup模块获得
- name: add several users #任务名
user: name={{item}} state=present groups=wheel #使用user模块创建用户,item为内置数组变量,遍历item里面的元素
with_items: #item为内置的数组变量,下面两个元数testuser1,testuser2都遍历
- testuser1 #item元数
- testuser2 #item元数
###然后执行 ansible-playbook cond.yml
template模板应用
- hosts: all #指定host里面所有主机
remote_user: root #远程账号
vars: #定义变量
package: httpd #变量
service: httpd #变量
tasks: #定义任务
- name: install httpd package #任务名 -表示列表
yum: name={{package}} state=latest #yum模块,name指定安装包名,state指定软件包版本
- name: install configuration file for httpd #任务名
template: src=/root/ansible/template/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf #引用template本地模板,直接复制到远程服务器,文件里{{http_port}}为/etc/ansible/hosts里指定的变量,{{ansible_fqdn}}为fact内置变量
notify: # #关注本任务是否有变更 changed,有的话触发handlers,handlers名为restart httpd
- restart httpd #指定handlers名
- name: start httpd service #任务名
service: enabled=true name={{service}} state=started # service服务管理模块,enabled定义开机启动,name指定服务名,state定制服务状态
handlers: #触发任务,需要notify触发
- name: restart httpd #handler触发名
service: name=httpd state=restarted #触发动作,service服务管理模块,name指定服务名,state指定服务状态
###然后执行ansible-playbook httpd2.yml
tags标签任务的运用
- hosts: all
remote_user: root
vars:
package: httpd
service: httpd
tasks:
- name: install httpd package
yum: name={{package}} state=latest
- name: install configuration file for httpd
template: src=/root/ansible/template/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
tags: #打上标签,可以指定或忽略此标签任务执行
- conf
notify:
- restart httpd
- name: start httpd service
service: enabled=true name={{service}} state=started
tags:
- always #此标签任务表示怎么样都运行
handlers:
- name: restart httpd
service: name=httpd state=restarted
###然后执行ansible-playbook /root/httpd3.yml --tags=conf 指定此标签任务运行
###执行ansible-playbook /root/httpd3.yml --skip-tags=conf 忽略此标签任务运行
ignore_errors的用法
- hosts: webserver #指定webserver主机组
remote_user: root #指定远程账户
tasks: #定义任务
- name: create nginx group #任务名
group: name=testgroup gid=515 system=yes #group模块创建组,name指定组名,gid指定组id,system指定系统组
- name: create nginx user #任务名
user: name=testgroup uid=515 group=testgroup system=yes #user创建用户模块,name指定用户,uid指定用户id
- hosts: dbserver #指定dbserver主机组
remote_user: root #指定远程用户
tasks: #定义任务
- name: copy file to dbserver #任务名
copy: src=/etc/inittab dest=/tmp/inittab.ansible #copy模块,src指定本地源文件路径,dest指定远程主机路径
ignore_errors: True #忽略任务执行报错,继续往下执行
###然后执行ansible-playbook nginx.yml
roles的使用
ansible自1.2版本引入了新特性,用于层次性、结构化地组织playbook,roles能够根据层次型结构自动装载变量文件、tasks
以及handlers等。要使用roles只需要在playbook中使用include指令即可。
简单来讲,roles就是通过分别将变量、文件、任务、模块以及处理器放置于单独的目录中,并可以便捷地include它们的
一种机制。roles一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等的场景中。
一个roles的案例如下所示:
site.yml #主接口文件 即ansible-playbook site.yml
webserver.yml #子yml文件
fooserver.yml #子yml文件
roles/ #roles文件目录
common/ #通行角色
files/
templates/
tasks/
handlers/
vars/
meta/
webserver/ #服务器角色
files/
templates/
tasks/
handlers/
vars/
meta/
创建roles的步骤
(1)创建以roles命名的目录;
(2)在roles目录中分别创建以各角色名称命名的目录,如webservers等;
(3)在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以
创建为空目录,也可以不创建。
(4)在plabook文件中,调用各角色,一般为site.yml
roles内各目录中可用的文件
tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表:此文件可以使用include包含其他的位于此目录中的task文件;
files目录:存放由copy或script等模块调用的文件。
templates目录:template模块会自动在此目录中寻找jinjia2模板文件。
handlers目录:此目录中应当包含一个main.yml文件,用于定义此角色用到的各handlers,在handler中使用include包含的其他的handler文件也应该位于此目录中。
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量。
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系:ansible 1.3版本以后才支持。
default目录:应当包含一个main.yml文件,为当前角色设定默认变量时使用此目录。
ansible_playbooks/
1,目录名同角色名
2,目录结构有固定格式
files:直接复制的静态文件
templates: 模板文件 或jinjia2
tasks:至少有main.yml文件,定义各tasks
hanlder:至少有一个main.yml文件,定义各handlers
vars:至少有一个main.yml文件,定义变量
meta:定义依赖关系等信息
3,site.yml 定义 playbook
4,执行命令 ansible-playbook site.yml
实例:
├── roles
│ ├── dbserver 主机角色,同主机分组名
│ │ ├── files #直接引用files目录路径
│ │ │ └── my.cnf #直接复制的静态文件
│ │ ├── handlers #至少一个handlers目录
│ │ │ └── main.yml 至少有一个main.yml文件,定义各handlers
│ │ ├── meta #定义依赖关系等信息
│ │ ├── tasks #至少一个tasks目录
│ │ │ └── main.yml #至少有一个main.yml文件,定义各tasks
│ │ ├── templates #存放模板文件,或jinjia2文件
│ │ └── vars #存放变量的文件
│ └── webserver
│ ├── files
│ │ └── httpd.conf
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
│
└── site.yml #执行的playbook文件
实际操作:
mkdir -pv ansible_playbooks/roles/{webserver,dbserver}/{tasks,files,templates,meta,handlers,vars}
[root@node1 ~]# tree ansible_playbooks/
ansible_playbooks/
└── roles
├── dbserver #主机角色,同主机分组名
│ ├── files #直接引用files目录里的静态文件,静态文件里不能传变量,存放由copy或script等模块调用的文件。
│ ├── handlers #至少一个handlers目录,里面至少有一个main.yml文件,定义各handlers。
│ ├── meta #应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系:ansible 1.3版本以后才支持。
│ ├── tasks #至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表:此文件可以使用include包含其他的位于此目录中的task文件;
│ ├── templates #template模块会自动在此目录中寻找jinjia2等包括其他格式的模板文件。
│ └── vars #应当包含一个main.yml文件,用于定义此角色用到的变量。
└── webserver
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
cd ansible_playbooks/roles/webserver/;cp /etc/httpd/conf/httpd.conf files/
vim tasks/main.yml #定义角色所有的任务
- name: install httpd package #任务名
yum: name=httpd #调用yum模块,name指定要安装的软件包
- name: install configuration file #任务名
copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf #复制files目录下的 httpd.conf,files里的静态文件不能传/etc/ansible/hosts里的变量
tags: #指定任务tags,可以--tags=conf指定此标签任务跑
- conf #标签名
notify: #观察此任务是否有changed,如果有就会触发handlers
- restart httpd #notify名,同handlers名
- name: start httpd #任务名
service: name=httpd state=started #调用service服务管理模块,name指定服务名,state指定服务状态
vim handlers/main.yml
- name: restart httpd #handlers名
service: name=httpd state=restarted #调用service模块,name指定服务名,state指定服务状态
调用角色:
vim ansible_playbooks/site.yml
- hosts: webserver #指定远程主机或/etc/ansible/hosts里主机组
remote_user: root #远程账号
roles: #指定调用哪些角色
- webserver #指定调用哪个角色
启动:ansible-playbook site.yml
###简单的roles实例已完成###
###新增roles###
vim ansible_playbooks/site.yml
- hosts: 192.168.31.18
remote_user: root
roles:
- webserver #指定调用哪个角色
- hosts: 192.168.31.19
remote_user: root
roles:
- webserver #调用两个roles
- dbserver
安装mariadb,获取my.cnf配置文件
yum install mariadb-server -y
cd roles/dbserver/;cp /etc/my.cnf files/
vim tasks/main.yml
- name: install mariadb-server package
yum: name=mariadb-server state=latest
- name: install configuration file
copy: src=my.cnf dest=/etc/my.cnf #复制files目录下的 my.conf,拷贝files里的静态文件不能传/etc/ansible/hosts里的变量
tags:
- myconf
notify:
- restart mariadb
- name: start mariadb service
service: name=mariadb enabled=true state=started
vim handlers/main.yml
- name: restart mariadb
service: name=mariadb state=restarted
启动验证:cd /root/ansible_playbooks/;ansible-playbook site.yml
###template模板文件引用###
cd ansible_playbooks/roles/webserver/;cp /etc/httpd/conf/httpd.conf templates/
vim tasks/main.yml #定义角色所有的任务
- name: install httpd package
yum: name=httpd
- name: install configuration file
template: src=httpd.conf dest=/etc/httpd/conf/httpd.conf #复制templates目录下的httpd.conf,templates目录里的模板文件可以传/etc/ansible/hosts里的变量
tags:
- conf
notify:
- restart httpd
- name: start httpd
service: name=httpd state=started
vim handlers/main.yml
- name: restart httpd
service: name=httpd state=restarted
cd roles/dbserver/;cp /etc/my.cnf templates/
vim tasks/main.yml
- name: install mariadb-server package
yum: name=mariadb-server state=latest
- name: install configuration file
template: src=my.cnf dest=/etc/my.cnf #复制templates目录下的my.conf,templates目录里的模板文件可以传/etc/ansible/hosts里的变量
tags:
- myconf
notify:
- restart mariadb
- name: start mariadb service
service: name=mariadb enabled=true state=started
vim handlers/main.yml
- name: restart mariadb
service: name=mariadb state=restarted
启动验证:cd /root/ansible_playbooks/;ansible-playbook site.yml
1,在site.yml这种playbook文件中还可以这样用roles
- hosts: 192.168.31.18
roles:
- webserver
2,也可以向roles传递参数,例如,传递参数暂时还不清楚怎么用
- hosts: all
roles:
- { role: webserver, dir: '/opt/a',port: 800 }
- { role: dbserver, dir: '/var/data',port: 3307 }
实例:site.yml
- hosts: 192.168.31.18
remote_user: root
roles:
- webserver #指定调用哪个角色
- hosts: all
remote_user: root
roles:
- { role: dbserver, when: "ansible_fqdn == 'node1'"}
- { role: webserver, dir: '/opt/a', port: 800 }
- { role: dbserver, dir: '/var/data', port: 3307 }
3,也可以条件式地使用roles,例如:
- hosts: 192.168.31.19
roles:
- { role: dbserver, when: "ansible_fqdn == 'node1'"}
实例: site.yml
- hosts: all
remote_user: root
roles:
- { role: dbserver, when: "ansible_fqdn == 'node1'"}
ansible实战-2023的更多相关文章
- Ansible实战之Nginx代理Tomcat主机架构
author:JevonWei 版权声明:原创作品 实验架构:一台nginx主机为后端两台tomcat主机的代理,并使用Ansible主机配置 实验环境 Nginx 172.16.252.82 Tom ...
- 企业级LINUX自动化运维工具Ansible实战课程下载
什么是Ansible? Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量 ...
- Ansible 实战:一键安装 LNMP
Ansible 配置文件 : [root@center /data/ansiblework]# cat ansible.cfg [defaults] remote_user = root remote ...
- Ansible实战:部署分布式日志系统
本节内容: 背景 分布式日志系统架构图 创建和使用roles JDK 7 role JDK 8 role Zookeeper role Kafka role Elasticsearch role My ...
- 自动化运维工具Ansible实战(四)常用模块
转载链接:http://blog.51cto.com/liqingbiao/1962609 Ansible模块按功能分为:云模块.集群模块. 命令模块.数据库模块.文件模块.资产模块.消息模块.监 ...
- ansible 实战项目之文件操作(二)
一,前言 如果没有安装好的话看我以前的贴子哦!! 上次安装已经确定通了,所以下面步骤应该是完全ok的 特点: (1).轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可: (2 ...
- Ansible 实战之部署Web架构
WEB架构(ubuntu 16.04): Proxy -- WebServer(Nginx+PHP+Django) -- Nosql -- MariaDB 一. 定义Inventory [proxy] ...
- Ansible实战之Nginx高可用代理LNMP-wordpress
author:JevonWei 版权声明:原创作品 blog:http://119.23.52.191/ --- 实验环境:前端使用Nginx做代理服务器,静态资源经由缓存服务器,连接后端web集群, ...
- ansible入门七(实战)
Ansible实战:部署分布式日志系统 本节内容: 背景 分布式日志系统架构图 创建和使用roles JDK 7 role JDK 8 role Zookeeper role Kafka role ...
- 使用 Ansible 管理 MySQL 复制
Ansible 是一个新兴的 IT 自动化工具.本文将介绍如何通过 Ansible 配置及管理 MySQL 主.从复制环境,实现部署过程自动化,体验 Ansible 简单快速带来的快感. 简介: An ...
随机推荐
- [BZOJ3786] 星系探索 题解
题目链接:\(BZOJ\) 本题通过 \(dyf\_DYF\) 的题解理解 \(ETT\),代码则借鉴 \(lcyfrog\) 的题解,图片则使用了何太狼的题解.在此笔者感谢这三位神犇. 声明变量: ...
- KUKA库卡机器人维修
KUKA库卡机器人作为生产线上的核心设备,一旦出现KUKA机械手故障,将直接影响整个生产线的运行效率.及时的库卡机器人维修工作不仅能够迅速恢复机器人的工作状态,减少生产停滞时间,还能通过预防性维护降低 ...
- SWD下载口的端口状态
1.关于SWD SWD下载口的端口状态:SWD为上拉,SWC为下拉. SWD是MCU下载程序和调试的端口,分为四线制和五线制 四线制:VCC GND SWDIO SWCKL 五线制:VCC GND S ...
- MySQL Q&A - [02] windows上MySQL的安装路径变更之后无法启动MySQL服务
参考:https://blog.csdn.net/weixin_45271005/article/details/130091868 Step1:首先,变更之前,需要保证MySQL服务是停止运行的 S ...
- devops第一步:CentOS初始化流程
设置IP vi /etc/sysconfig/network-scripts/ifcfg-ens192 修改下面两个配置 BOOTPROTO=static ONBOOT=yes 添加以下配置 # 改成 ...
- ABC393F题解
大概评级:绿. 一看到这种题目,就知道肯定是数据结构题,我们首先用一个众所周知的二分来求出 \(pos\) 数组,\(pos_i\) 表示以 \(i\) 结尾的最长上升子序列的大小,然后将询问离线,弄 ...
- 在 Mac 上解决 LM Studio 无法下载模型的问题(国内镜像替换教程)
如果你在使用 LM Studio 时遇到类似 There was an error fetching results from Hugging Face 或 Model details error: ...
- 【检索类型EI、Scopus】第二届智能计算与数据分析国际学术会议(ICDA 2025)
为探讨数据科学和计算智能领域的关键问题,促进相关交流,由黄河科技学院主办的2025年第二届智能计算与数据分析国际学术会议(ICDA 2025)将于2025年8月22日-24日在中国郑州召开.本届会议拟 ...
- 对称&反对称&完全固定边界条件
ABAQUS Boundary Condition XSYMM 对称边界条件,对称面为与坐标轴1垂直的平面,即U1=UR2=UR3=0; YSYMM 对称边界条件,对称面为与坐标轴2垂直的平面,即U2 ...
- Vulnhub-Source-1(CVE-2019-15107)
一.靶机搭建 选择打开选项 选中下载的ova文件,然后导入选择一个存放路径即可 如果遇到不兼容的情况,可以打开.vmx修改,改为和虚拟机一个版本号 二.信息收集 官方信息 Name: Source: ...