Ansible自动化运维2
目录
一 Playbook运维
1.1验证YAML语法
1.2play的定义
1.3完整playbook
2.ansbible 变量
2.1主机变量
2.2facts变量
2.3.注册变量
2.4变量优先级
3.ansible任务控制
3.1循环
3.2tags属性
3.3handiers属性
二、jinja2模板
1.jinja逻辑控制
1.1一个基于facts的jinja2实例
三,ansible roles
实例1
2.新方式执行roes
3.galaxy
一 Playbook运维
playbook是Ansible自定义的一门语言(类似于linux和shell的关系)
1.YAML特点
playbook遵循YAML语法
- YAML 文件 #为注释符
- YAML 文件.yml 或则.yam1结尾
- YAML 文件--开始 以..结束 但是开始和结束的标志都是可选的
2.基本语法
- 大小写密函
- 使用缩进表示层级关系
- 缩进是是使用tab 还是空格要统一,建议使用空格
- 相同层级的元素必须左侧对其即可
3.字符串
列表定义:
以短横线+空格+ 具体的值
- red
#########################
字典定义:
key+冒号+空号+值 即key:value
name: huawei
######################
混合结构
class
- name: huawei
nmu:001
-name:apple
num:002
1.1验证YAML语法
[root@master ~]# yum -y install python2-pip ##安装pip [root@master ~]# pip install pyyaml ##下载解释包 [root@master ~]# python -c 'import yaml,sys;print yaml.load(sys.stdin)' < ceshi.yml ##提前编写ceshi.yml文件写入配置 ['red', 'green']
1.2play的定义
常用属性
- name 每个play的名字
- hosts 每个play色痕迹的被管理服务器 通ad hoc中的资产选择器
- tasks 每个play中具体要完成的任务 以列表的形式表达
- become属性 如果需要提权 则加上become
- become_user 若提权 提权到那个用户上
- remote——user 指定来远程的用户 若不指定 则默认使用当前执行ansible playbook用户
1.3完整playbook
[root@master ~]# vi ceshi.yml --- - name: ceshihosts: masterremote_user: roottasks:- name: install nginx packageyum: name=nginx state=present- name: start nginx serverservice:name: nginxenable: truestate: started ... ~ ~ [root@master ~]# ansible-playbook -i hosts ceshi.yml --syntax-check ##检查完整性playbook: ceshi.yml[root@master ~]# python -c 'import yaml,sys;print yaml.load(sys.stdin)' < ceshi.yml [{'tasks': [{'yum': 'name=nginx state=present', 'name': 'install nginx package'}, {'name': 'start nginx server', 'service': {'state': 'started', 'enable': True, 'name': 'nginx'}}], 'hosts': 'master', 'remote_user': 'root', 'name': 'ceshi'}][root@master ~]# ansible-playbook ceshi.yml ###运行playbook
2.ansbible 变量
2.1主机变量
[root@master ~]# cat 01t [server] 192.168.1.105 user=lw port=3360[root@master ~]# ansible 192.168.1.105 -i 01t -m debug -a "msg='{{user}} {{port}}'" 192.168.1.105 | SUCCESS => {"msg": "lw 3360" } ##获取定义的变量[root@master ~]# cat 01t [server] 192.168.1.105 user=lw port=3360 [server:var] home="/home/lw"[root@master ~]# ansible 192.168.1.105 -i 01t -m debug -a "var=home"
2.2facts变量
[root@master ~]# ansible all -i loaclhost, -c local -m setup ##手动收集变量[root@master ~]# ansible all -i loaclhost, -c local -m setup -a "filter=*ansible_processor" loaclhost | SUCCESS => {"ansible_facts": {"ansible_processor_vcpus": 4, "discovered_interpreter_python": "/usr/bin/python"}, "changed": false } ##获取主机cpu信息关闭facts变量 可以使playbook执行更快 gather_facts: no ##添加这行代码
2.3.注册变量
[root@master ~]# cat ceshi.yml --- - name: ceshihosts: masterremote_user: roottasks:- name: install nginx packageyum: name=nginx state=presentregister: install_result ##定义变量- name: printdebug: var=install_result ...[root@master ~]# ansible-playbook -i hosts ceshi.yml PLAY [ceshi] ***********************************************************************************TASK [Gathering Facts] ************************************************************************* ok: [192.168.1.105]TASK [install nginx package] ******************************************************************* ok: [192.168.1.105]TASK [print] *********************************************************************************** ok: [192.168.1.105] => {"install_result": {"changed": false, "failed": false, "msg": "", "rc": 0, "results": [ ##nginx已经安装了"1:nginx-1.20.1-9.el7.x86_64 providing nginx is already installed"]} }PLAY RECAP ************************************************************************************* 192.168.1.105 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.4变量优先级
- 优先级最高的是全局变量 其次是自己变量
3.ansible任务控制
[root@master ~]# cat ceshi.yml ##编辑yml文件 --- - name: ceshihosts: mastergather_facts: noremote_user: roottasks:- name: install nginx packageyum: name=nginx state=presentregister: install_result## - name: update ngxin## copy: src=nginx.conf dest=/etc/nginx/- name: check nginxshell: /usr/sbin/nginx -tregister: nginxsyntax- name: print nginxsyntxdebug: var=nginxsyntax - name: start nginxservice: name=nginx state=startedwhen: nginxsyntax.rc == 0 ##当变量值为0 启动 when关键字 ...[root@master ~]# ansible-playbook -i hosts ceshi.yml PLAY [ceshi] ***********************************************************************************TASK [Gathering Facts] ************************************************************************* ok: [192.168.1.105]TASK [install nginx package] ******************************************************************* ok: [192.168.1.105]TASK [check nginx] ***************************************************************************** changed: [192.168.1.105]TASK [print nginxsyntx] ************************************************************************ ok: [192.168.1.105] => {"nginxsyntax": {"changed": true, "cmd": "/usr/sbin/nginx -t", "delta": "0:00:00.006268", "end": "2022-09-18 23:23:44.675290", "failed": false, "rc": 0, ##代表是否成功"start": "2022-09-18 23:23:44.669022", "stderr": "nginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful", "stderr_lines": ["nginx: the configuration file /etc/nginx/nginx.conf syntax is ok", "nginx: configuration file /etc/nginx/nginx.conf test is successful"], "stdout": "", "stdout_lines": []} }TASK [start nginx] ***************************************************************************** ok: [192.168.1.105]PLAY RECAP ************************************************************************************* 192.168.1.105 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3.1循环
在playbook中是使用with_items循环遍历这个变量来达到创建用户的目的
[root@master ~]# ansible-playbook -i hosts ceshi01.yml PLAY [variable playbook example] ***************************************************************TASK [create user] ***************************************************************************** ok: [192.168.1.105] => (item=tom) ok: [192.168.1.105] => (item=lihua) ok: [192.168.1.105] => (item=hauwei)PLAY RECAP ************************************************************************************* 192.168.1.105 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [root@master ~]# cat ceshi01.yml ---- name: variable playbook examplehosts: mastergather_facts: novars: createuser: ##定义列表- tom- lihua- hauweitasks:- name: create useruser: name={{ item }} state=present ##将变量每一个带入with_items: "{{ createuser}}" ##调用列表:
新版本循环loop 就是将with_items换成loop
3.2tags属性
执行时一定要指定tags 执行task任务打上tag标记为updateconfig任务 即只会执行打上标签的任务
3.3handiers属性
当task文件配置发生改变时,则触发条件执行task任务
二、jinja2模板
- jiaja2文件以.j2为后缀,也可以不写后缀
- 三种界定符号: 注释{##}
变量引用:{{ }}
逻辑表达{% %}
1.jinja逻辑控制
条件表达{% if %}......{% endif %}##example:{% if idc is defied%}{{ idc} }{{ else' if }}{% endif %}
1.1一个基于facts的jinja2实例
[root@master ~]# cat config.j2 {# ceshi1 #} wlecome host {{ ansible_hostname}},os is{{ansible_os_family}} today is {{ ansible_date_time.date }} coucore numbers {{ ansible_processor_vcpus }} [root@master ~]# cat usejinja2.yml --- - name: a template examplehosts: masterremote_user: roottasks:- name: update jinja2 configtemplate: src=config.j2 dest=/tmp/config.conf...[root@master ~]# cat /tmp/config.conf wlecome host master,os isRedHat today is 2022-09-20 coucore numbers 4[root@master ~]# ansible-playbook -i hosts usejinja2.yml ##调用命令
三,ansible roles
表面看是哟个目录,目录的名字就是role的名字
使用时,每个目录必须包含一个main.yml的文件 这个文件应该包含如下目录对应的内容
- task 包含就角色执行的任务主要列表
- handlers 处理程序
- defults 角色的默认变量
- vars 角色的其他变量
- files 通过角色部署的文件
- templates 包含通过此角色部署的模板
- meta 角色定义的一些元数据
实例1
1.执行roes文件
[root@master nginx]# for i in `ls`; do touch $i/main.yml; done [root@master nginx]# tree ##在创建这些文件夹和文件 . ├── files │?? └── main.yml ├── handles │?? └── main.yml ├── tasks │?? └── main.yml ├── templates │?? └── main.yml └── vars [root@master ~]# cat nginx/tasks/main.yml ---- name: install nginx packageyum: name=nginx state=presentregister: install_result- name: check nginxshell: /usr/sbin/nginx -tregister: nginxsyntax- name: print nginxsyntxdebug: var=nginxsyntax- name: start nginxservice: name=nginx state=startedwhen: nginxsyntax.rc == 0 ...[root@master ~]# cat nginx/handles/main.yml --- - name: reload nginx serberservice: name=nginx state=startedwhen:- nginxsyntax.rc == 0 nginxrunning.stat.exists true [root@master ~]# cat nginx/vars/main.yml --- createuser:- tomcat- www- mysql [root@master ~]# ls ##需要创建文件nginx_test.yml 01t anaconda-ks.cfg ceshi.yml nginx sudoers 1.sh a.sh config.j2 nginx_test.yml usejinja2.yml 2.sh ceshi01.yml hosts openpbs-server-20.0.0-0.x86_64.rpm[root@master ~]# cat nginx_test.yml ##role不能被调用 同样也需要创建yml文件 进行调用 --- - name: a playbook uesd rolehosts: masterroles:- nginx[root@master ~]# ansible-playbook -i hosts nginx_test.yml PLAY [a playbook uesd role] ********************************************************************TASK [Gathering Facts] ************************************************************************* ok: [192.168.1.105]TASK [install nginx package] ******************************************************************* ok: [192.168.1.105]TASK [check nginx] ***************************************************************************** changed: [192.168.1.105]TASK [print nginxsyntx] ************************************************************************ ok: [192.168.1.105] => {"nginxsyntax": {"changed": true, "cmd": "/usr/sbin/nginx -t", "delta": "0:00:00.017429", "end": "2022-09-21 20:54:06.667458", "failed": false, "rc": 0, "start": "2022-09-21 20:54:06.650029", "stderr": "nginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful", "stderr_lines": ["nginx: the configuration file /etc/nginx/nginx.conf syntax is ok", "nginx: configuration file /etc/nginx/nginx.conf test is successful"], "stdout": "", "stdout_lines": []} }TASK [start nginx] ***************************************************************************** changed: [192.168.1.105]PLAY RECAP ************************************************************************************* 192.168.1.105 : ok=5 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.新方式执行roes
在playbook定import-role属性
[root@master ~]# mkdir master [root@master ~]# mv nginx nginx/ nginx_test.yml [root@master ~]# mv nginx master/ [root@master ~]# mv nginx_test.yml master/ [root@master ~]# ls master/ nginx nginx_test.yml[root@master ~]# cat master/newnginx_test.yml - name: new playbook use rolehosts: mastertasks:- debug:msg: "before we run our role"- import_role:name: nginx- debug:msg: "new use role"[root@master ~]# ansible-playbook -i hosts master/newnginx_test.yml PLAY [new playbook use role] *******************************************************************TASK [Gathering Facts] ************************************************************************* ok: [192.168.1.105]TASK [debug] *********************************************************************************** ok: [192.168.1.105] => {"msg": "before we run our role" }TASK [install nginx package] ******************************************************************* ok: [192.168.1.105]TASK [check nginx] ***************************************************************************** changed: [192.168.1.105]TASK [print nginxsyntx] ************************************************************************ ok: [192.168.1.105] => {"nginxsyntax": {"changed": true, "cmd": "/usr/sbin/nginx -t", "delta": "0:00:00.005298", "end": "2022-09-21 21:12:03.357452", "failed": false, "rc": 0, "start": "2022-09-21 21:12:03.352154", "stderr": "nginx: the configuration file /etc/nginx/nginx.conf syntax is ok\nnginx: configuration file /etc/nginx/nginx.conf test is successful", "stderr_lines": ["nginx: the configuration file /etc/nginx/nginx.conf syntax is ok", "nginx: configuration file /etc/nginx/nginx.conf test is successful"], "stdout": "", "stdout_lines": []} }TASK [start nginx] ***************************************************************************** ok: [192.168.1.105]TASK [debug] *********************************************************************************** ok: [192.168.1.105] => {"msg": "new use role" }PLAY RECAP ************************************************************************************* 192.168.1.105 : ok=7 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3.galaxy
[root@master ~]# ansible-galaxy init huaweitestrole ##创建一个role - Role huaweitestrole was created successfully [root@master ~]# ls 01t anaconda-ks.cfg ceshi.yml huaweitestrole sudoers 1.sh a.sh config.j2 master usejinja2.yml 2.sh ceshi01.yml hosts openpbs-server-20.0.0-0.x86_64.rpm [root@master ~]# tree huaweitestrole/ huaweitestrole/ ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── README.md ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars└── main.yml
Ansible自动化运维2相关推荐
- Ansible自动化运维工具介绍
介绍 Ansible自动化运维工具,是基于Python开发的,可以实现批量系统配置,批量程序部署.批量运行命令等等. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ans ...
- 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法
[Ansible自动化运维工具]Ansible变量之lookup生成变量方法 一.lookup插件介绍 1.lookup简介 2.lookup使用场景 3.lookup获取的数据源 4.lookup的 ...
- ansible自动化运维工具
ansible自动化运维工具 ansible自动化运维脚本工具 ansible自动化运维工具 一.ssh工作原理和基本命令 1.ssh原理 2.ssh的基本命令 二.anible 自动化运维工具 1. ...
- ansible自动化运维详解(三)ansible常用模块续
文章目录 ansible自动化运维详解(三)ansible常用模块续 四.ansible常用模块(2) 4.10.yum_repository 4.11.dnf 4.12.service 及 fire ...
- ansible自动化运维从入门到精通
ansible自动化运维 Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器),因此Ansible可以管理远程虚拟机.物理机,也可以是本地主机. An ...
- @ansible自动化运维详解(总述)
ansible [自动化运维应用场景] "运维的未来是,让研发人员能够借助工具.自动化和流程,并且让他们能够在运维干预极少的情况下部署和运营服务,从而实现自助服务.每个角色都应该努力使工作实 ...
- Ansible自动化运维(五)----Ansible剧本
Ansible自动化运维(五)----Ansible剧本 Ansible核心的功能,作用就是进行配置管理. Ansible需要编写的 playbook 剧本需要遵循一定的规则,格式,这个格式就称之为y ...
- 大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]
文章目录 ansible 自动化运维工具 详解 关于作者 作者介绍 一.ansible 概述 1.1 ansible 概述 1.2 是什么要使用 ansible 1.3 ansible 功能 1.4 ...
- ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建
文章目录 ansible自动化运维详解(一)ansible的安装部署.参数使用.清单管理.配置文件参数及用户级ansible操作环境构建 一.ansible的安装部署 1.1.ansible简介 1. ...
- Ansible自动化运维工具介绍与部署
ansible自动化运维工具介绍与部署 文章目录 一.什么是自动化运维? 二.常用的自动化运维工具 2.1 Ansible 2.2 SaltStack 2.3 Puppet 2.4 三种自动化工具特点 ...
最新文章
- Docker 入门到实践笔记2
- 洛阳综合保税区正式获国务院批复同意设立
- Firefox的input缓存
- 网络营销外包——网络营销外包公司如何做好电子商务网站优化?
- 【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )
- python 日期格式和字符串格式的转化
- 库存生产-实用sql知识:如何在保证去重分组的情况下获取组内最新数据(可按时间排序),distinct +group by +嵌套结果 的联合妙用
- 云上快速搭建Serverless AI实验室
- PHP中cookie和session
- 想深度探究数据库内核技术,墙裂推荐你看看这个
- NYOJ 822 画图
- python智慧树判断题_智慧树_大数据分析的python基础_判断题答案
- echarts 图表数据更新方式
- 计算机四级网络工程师复习提纲
- UTM坐标和WGS84坐标转换
- 论文查重算法 python_个人项目之论文查重
- 什么是蜂窝移动网络?
- Auto.js Pro安卓免ROOT引流脚本开发系列教程23网易公开课(1)-前言
- 中关村电子商户纷纷搬走或转型 为哪般
- Angularjs DataTable表格自动刷新
热门文章
- jupyter notebook绘制cos,sin图像 加入%matplotlib inline解决Figure size 640x480 with 1 Axes问题
- 软工第一次结对作业——原型设计
- 浅谈计算机系统仿真,浅谈计算机仿真技术
- 判断素数的方法(普通篇)
- 无领导小组讨论面试技巧
- oracle认证考试资格,Oracle认证考试报考条件(Oracle认证报名条件)
- python网站设计开题报告_网站毕业设计开题报告范文
- 关于三种近场通信的特点以及对其应用场景的分析和预测
- 最牛逼的自媒体平台今日头条申请秘籍,包过!
- 电压放大器在非共线混频方法检测混凝土中的应用