Ansible的yaml文件
ansible提供的脚本,遵循规范yaml(一般用于写配置文件)
可用于配制文件的语言:yaml、xml、json - 冒号后面必须有空格
- 横线后面必须要空格
- 严格保持对齐
- 等号前面不能有空格? yaml数据结构 - 字典 key:value
- 列表 (两种表示方式[], -)
*** 基本命令**
ansible-playbook -h
ansible-playbook [options] playbook.yml [playbook2 ...] -C, --check # 白跑,执行但是不会有结果
--list-hosts # 列出符合的主机
-f FORKS, --forks=FORKS # 做并发
--syntax-check # 检查语法
-k, --ask-pass # 输入密码 操作示例: - - hosts: web
remote_user: root
tasks:
- name: createuser
user: name=jason666 home=/opt/jason666 uid=4000 ansible-playbook --syntax-check p1.yml # 检测语法
ansible-playbook -C p1.yml # 干跑
ansible-palybook p1.yml # 真正执行文件
*** 传参**
- hosts: web
tasks:
- name: createuser
user: name=jason33
# 创建用户jason33 过段时间又需要创建其他用户tank33 频繁修改文件yml明显不合理 # 解决方案 传参!
# 方式1:命令中传值
- hosts: web
tasks:
- name: create{{user}}
user: name={{user}}
ansible-playbook -e user=jason20 p3.yml # 方式2:hosts文件中主机后面直接添加
[web]
192.168.226.[101:102] user=jason30 # 方式3:hosts文件中新增
[web:vars]
user=jason31 # 方式4:yml文件中配置
- hosts: web
vars:
- user: jason32
tasks:
- name: create{{user}}
user: name={{user}} # 方式5:了解
- hosts: web
tasks:
- name: yum
yum: name=bc
- name: sum
shell: echo 11+22|bc
register: user
- name: echo
shell: echo {{user.stdout}} > /tmp/echo.txt
- name: create{{user.stdout}}
user: name=alex{{user.stdout}} 传参优先级:-e > playbook > hosts
**tags可以单独调用任务**
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
copy: dest=/etc/redis.conf src=/etc/redis.conf
tags: copy
- name: start
service: name=redis state=started yum install -y redis # 安装redis
ansible-playbook --syntax-check p7.yml # 检测语法
ansible-playbook -t copy p7.yml # 执行
**handlers**
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
copy: dest=/etc/redis.conf src=/etc/redis.conf
tags: copy
notify: restart # 触发handlers里面的任务
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
- **template**
绝对路径
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: dest=/etc/redis.conf src=/etc/redis.conf
tags: copy
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
相对路径
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: dest=/etc/redis.conf src=redis.conf.j2
tags: copy
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
# 在当前目录下创建一个templates的目录,就可以使用相对路径
**when 类似于后端if判断**
- hosts: web
tasks:
- name: copyfile
copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
when: ansible_distribution_major_version=="7"
- name: copyfile
copy: content="小弦切切如私语" dest=/tmp/a.txt
when: ansible_distribution_major_version=="6" - hosts: web
tasks:
- name: copyfile
copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
when: user=="4"
- name: copyfile
copy: content="小弦切切如私语" dest=/tmp/a.txt
when: user=="3"
with_items
- hosts: web
tasks:
- name: createuser
user: name={{item}}
with_items:
- jason50
- tank50
- oscar50 - hosts: web
tasks:
- name: createuser
user: name={{item}}
with_items:
- jason51
- tank51
- oscar51
- name: creategroup
group: name={{item}}
with_items:
- jason60
- tank60
- oscar60
**循环嵌套**
- hosts: web
tasks:
- name: crateuser
user: name={{item.name}} group={{item.group}}
with_items:
- {"name":jason52,"group":jason60}
- {"name":tank52,"group":tank60}
- {"name":oscar52,"group":oscar60} demo:安装nginx并启动,设置开机自启动,指定监听地址为ip地址
- hosts: web
tasks:
- name: install
yum: name=nginx
- name: copyfile
template: dest=/etc/nginx/nginx.conf src=/etc/nginx/nginx.conf
- name: start
service: name=nginx state=started enabled=yes
roles
目录结构清晰
可以相互调用 - import_tasks: roles/nginx/tasks/install.yml
备份方便
# 在任意位置新建roles文件夹 文件夹内建不同的功能
mkdir /data
cd /data/
mkdir roles
cd roles/
mkdir {nginx,uwsgi,redis,mysql}
cd nginx
# 之后不需要在文件内按照hosts、tasks、handlers等顺序依次书写 而是以文件夹的形式创建
data/roles/nginx/
├── files # -- 静态文件
│ └── c.txt
├── handlers # -- 触发的任务
│ └── main.yml
# - name: restart
# service: name=nginx state=restarted
├── tasks # -- 任务(必须的)
│ ├── copyfile.yml # 只需要书写对应的yml格式任务即可
# - name: copyfile
# template: dest=/etc/nginx/nginx.conf src=/etc/nginx/nginx.conf
│ ├── install.yml
# - name: install
# yum: name=nginx
│ ├── main.yml # (必须有main.yml文件 将其他yml文件导入即可也可以这里面直接写)
# - import_tasks: install.yml
# - import_tasks: copyfile.yml
# - import_tasks: start.yml
# - name: file
# copy: dest=/tmp/aaa.txt src=c.txt\
# - name: createuser
# user: name={{ user }}
# notify: restart
│ └── start.yml
# - name: start
# service: name=nginx state=started enabled=yes
├── templates # -- 动态文件,需要传递参数 拷贝nginx配置文件cp /etc/nginx/nginx.conf .
│ └── nginx.conf # yum install -y nginx下载并将配置文件弄一弄
└── vars # -- 变量
└── main.yml
# {"user":jason70} data/nginx.ym
# - hosts: web
# roles:
# - nginx
# nginx中worker_connections默认1024,理论最大在100万左右,再多nginx就无法正常启动了
# nginx中listen监听ipv4和ipv6,default_server含义:nginx默认多个server,访问使谁写了default_server就返回谁
# 上面的代码如果演示不成功 将nginx配置文件中的default_server删除即可**
查找顺序
- 主文件看到roles,就会去roles目录下面找对应的目录
- 先去tasks目录里面找main.yml入口文件,如果遇到import_task则加载任务
- 如果遇到了template,则去templates目录里面找文件
- 如果遇到了copy,则去files目录里面找文件
- 如果遇到了变量,则去vars目录里面找main.yml文件
- 如果遇到了notify,则去handlers目录里面找main.yml文件
ansible-galaxy
# roles文件参考网站:https://galaxy.ansible.com/ # 下载nginx相关roles文件
ansible-galaxy install geerlingguy.nginx
Ansible的yaml文件的更多相关文章
- day5模块学习--yaml文件处理
yaml文件处理(http://pyyaml.org/wiki/PyYAMLDocumentation) 摘要: 本文讲的是yaml在python上的使用教程详解, YAML是一种容易人类阅读 ...
- Python操作yaml文件
基本的yaml语法 http://ansible-tran.readthedocs.io/en/latest/docs/YAMLSyntax.html YAML 还有一个小的怪癖. 所有的 YAML ...
- ansible中yaml语法应用
4.yaml语法应用 ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下 yaml语言教程 附上一个 ...
- Ansible之YAML语言
playbook写yml语句,若干模块发给Ansible,变成一个一个play,多个片段组合起来变成大片. 最终还是要读取主机清单,来确定作用在哪些机器上. YAML语言 YAML是一个可读性高的用来 ...
- 用Yaml文件进行元素管理【转】
原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...
- 对XML和YAML文件实现I/O操作
1.文件的打开关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "I.xml"; FileStora ...
- Python读取Yaml文件
近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...
- selenium2入门 用Yaml文件进行元素管理 (五)
比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...
- [Kubernetes]yaml文件详解
应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...
- day11_单元测试_读取yaml文件中的用例,自动获取多个yaml文件内容执行生成报告
一.使用.yaml格式的文件直接可以存放字典类型数据,如下图,其中如果有-下一行有缩进代表这是个list,截图中是整体是一个list,其中有两部分,第二部分又包含另外一个list 二.单元测试:开发自 ...
随机推荐
- 【GD32L233C-START】DAC输出(正弦波、锯齿波、方波)
[GD32L233C-START]DAC输出(正弦波.锯齿波.方波) 1.介绍GD32L233C采用的是一款M23的内核.这个芯片据说功耗非常的低,低到什么程度呢?等后面我们再进行测试,今天我们主要来 ...
- Anaconda使用教程
0 写在前面 以下命令都是在命令行模式下进行操作,macOS和Linux用户可以直接打开Terminal终端,Windows用户如果配置了环境变量则可以直接打开cmd,否则需要打开Anaconda P ...
- KingbaseES V8R3 运维案例 -- sys_dump备份故障“SYS_MAC_POLICY_ENFORCEMENT”
案例说明: 在KingbaseES V8R3执行sys_dump时出现"ERROR: permission denied for relation SYS_MAC_POLICY_ENFO ...
- CSS设置图片根据div的大小等比例缩放
1 .img{ 2 position: absolute; 3 background:url("../images/success.png") no-repeat; 4 width ...
- #状压dp#JZOJ 3853 帮助Bsny
题目 一共有\(n\)本书,混乱值是连续相同高度书本的段数. 可以取出\(k\)本书随意放回,问最小混乱值,高度\([25\sim 32]\) 分析 设\(f[i][j][k][mask]\)表示前\ ...
- Visual Studio 2022插件的安装及使用 - 编程手把手系列文章
这次开始写手把手编程系列文章,刚写到C#的Dll程序集类库的博文,就发现需要先介绍Visual Studio 2022的插件的安装及使用,因为在后面编码的时候会用到这些个插件,所以有必要先对这个内容进 ...
- HarmonyOS开发者创新大赛总决赛结果公布
原文:https://mp.weixin.qq.com/s/I-AofLNY72_CtnHWg2k-Bw,点击链接查看更多技术内容. 2021 年 10 月 22 日第二届 HarmonyOS 开发者 ...
- docker 应用篇————swarm[二十]
前言 简单介绍一下swarm. 正文 前提,docker 安装. 有3台机器,全部按照了docker. 现在开始搭建集群. 首先需要初始化: 然后需要注入: 注入之后,那么需要就是启动节点加入进来,那 ...
- leetcode:1380. 矩阵中的幸运数
1380. 矩阵中的幸运数 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 ...
- async与await暂停作用
1. async function Request () { await new Promise(res => { setTimeout(() => { console.log(1) re ...