目录

一 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相关推荐

  1. Ansible自动化运维工具介绍

    介绍 Ansible自动化运维工具,是基于Python开发的,可以实现批量系统配置,批量程序部署.批量运行命令等等. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ans ...

  2. 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法

    [Ansible自动化运维工具]Ansible变量之lookup生成变量方法 一.lookup插件介绍 1.lookup简介 2.lookup使用场景 3.lookup获取的数据源 4.lookup的 ...

  3. ansible自动化运维工具

    ansible自动化运维工具 ansible自动化运维脚本工具 ansible自动化运维工具 一.ssh工作原理和基本命令 1.ssh原理 2.ssh的基本命令 二.anible 自动化运维工具 1. ...

  4. ansible自动化运维详解(三)ansible常用模块续

    文章目录 ansible自动化运维详解(三)ansible常用模块续 四.ansible常用模块(2) 4.10.yum_repository 4.11.dnf 4.12.service 及 fire ...

  5. ansible自动化运维从入门到精通

    ansible自动化运维 Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器),因此Ansible可以管理远程虚拟机.物理机,也可以是本地主机. An ...

  6. @ansible自动化运维详解(总述)

    ansible [自动化运维应用场景] "运维的未来是,让研发人员能够借助工具.自动化和流程,并且让他们能够在运维干预极少的情况下部署和运营服务,从而实现自助服务.每个角色都应该努力使工作实 ...

  7. Ansible自动化运维(五)----Ansible剧本

    Ansible自动化运维(五)----Ansible剧本 Ansible核心的功能,作用就是进行配置管理. Ansible需要编写的 playbook 剧本需要遵循一定的规则,格式,这个格式就称之为y ...

  8. 大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]

    文章目录 ansible 自动化运维工具 详解 关于作者 作者介绍 一.ansible 概述 1.1 ansible 概述 1.2 是什么要使用 ansible 1.3 ansible 功能 1.4 ...

  9. ansible自动化运维详解(一)ansible的安装部署、参数使用、清单管理、配置文件参数及用户级ansible操作环境构建

    文章目录 ansible自动化运维详解(一)ansible的安装部署.参数使用.清单管理.配置文件参数及用户级ansible操作环境构建 一.ansible的安装部署 1.1.ansible简介 1. ...

  10. Ansible自动化运维工具介绍与部署

    ansible自动化运维工具介绍与部署 文章目录 一.什么是自动化运维? 二.常用的自动化运维工具 2.1 Ansible 2.2 SaltStack 2.3 Puppet 2.4 三种自动化工具特点 ...

最新文章

  1. Docker 入门到实践笔记2
  2. 洛阳综合保税区正式获国务院批复同意设立
  3. Firefox的input缓存
  4. 网络营销外包——网络营销外包公司如何做好电子商务网站优化?
  5. 【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )
  6. python 日期格式和字符串格式的转化
  7. 库存生产-实用sql知识:如何在保证去重分组的情况下获取组内最新数据(可按时间排序),distinct +group by +嵌套结果 的联合妙用
  8. 云上快速搭建Serverless AI实验室
  9. PHP中cookie和session
  10. 想深度探究数据库内核技术,墙裂推荐你看看这个
  11. NYOJ 822 画图
  12. python智慧树判断题_智慧树_大数据分析的python基础_判断题答案
  13. echarts 图表数据更新方式
  14. 计算机四级网络工程师复习提纲
  15. UTM坐标和WGS84坐标转换
  16. 论文查重算法 python_个人项目之论文查重
  17. 什么是蜂窝移动网络?
  18. Auto.js Pro安卓免ROOT引流脚本开发系列教程23网易公开课(1)-前言
  19. 中关村电子商户纷纷搬走或转型 为哪般
  20. Angularjs DataTable表格自动刷新

热门文章

  1. jupyter notebook绘制cos,sin图像 加入%matplotlib inline解决Figure size 640x480 with 1 Axes问题
  2. 软工第一次结对作业——原型设计
  3. 浅谈计算机系统仿真,浅谈计算机仿真技术
  4. 判断素数的方法(普通篇)
  5. 无领导小组讨论面试技巧
  6. oracle认证考试资格,Oracle认证考试报考条件(Oracle认证报名条件)
  7. python网站设计开题报告_网站毕业设计开题报告范文
  8. 关于三种近场通信的特点以及对其应用场景的分析和预测
  9. 最牛逼的自媒体平台今日头条申请秘籍,包过!
  10. 电压放大器在非共线混频方法检测混凝土中的应用