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 二.单元测试:开发自 ...
随机推荐
- 记录--极致舒适的Vue页面保活方案
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 为了让页面保活更加稳定,你们是怎么做的? 我用一行配置实现了 Vue页面保活是指在用户离开当前页面后,可以在返回时恢复上一次浏览页面的状态 ...
- wire和reg型变量的组合使用
模型功能 实现寄存器之间的连线 实现寄存器的声明 建构时钟的时序系统 模型框图 `timescale 1ns / 1ps /* */ // ****************************** ...
- HTTP长连接和短链接代理与网关
长连接和短链接 代理与网关 HTTP/)服务器端网关:网关与客户端使用HTTP协议通信,使用其他协议与服务端通信 (/HTTP)客户端网关:网关与客户端使用其他协议通信,使用HTTP协议与服务端通信 ...
- 测试开发之网络篇-OSI七层协议
今天,我们来了解一下OSI(Open System Interconnect)开放式系统互连.它是ISO组织在1985年发布的网络互连模型,该标准定义了网络互连的七层框架.其内容简述如下: 我们办公室 ...
- 实用 Linux 命令 Windos 命令 实例演示 持续更新中
实用 Linux 命令 Windos 命令 实例演示 持续更新中 目录 实用 Linux 命令 Windos 命令 实例演示 持续更新中 Linux 命令 [Command [options] [lo ...
- #环#nssl 1487 图
题目 在一个\(n\)个节点\(n\)条边的连通图中, 每条边的权值为两个端点的权值的和. 已知各边权值,求各点权值 (保证环的大小一定是奇数) 分析 考虑断掉环的某一条边,设根节点的答案为\(ax+ ...
- 如何在 Python 中执行 MySQL 结果限制和分页查询
Python MySQL 限制结果 限制结果数量 示例 1: 获取您自己的 Python 服务器 选择 "customers" 表中的前 5 条记录: import mysql.c ...
- Python拷贝、移动、重命名、删除文件和文件夹----shutil
拷贝 # 拷贝文件import shutil # 语法: shutil.copy(src, dst) '''示例 将 a 文件夹中的 a.txt 拷贝到 b 文件夹 ''' shutil.copy(' ...
- mysql统计查询和索引练习
课程数据表course SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table ...
- 家庭实验室系列文章-如何迁移树莓派系统到更大的 SD 卡?
前言 其实这个专题很久很久之前就想写了,但是一直因为各种原因拖着没动笔. 因为没有资格,也没有钱在一线城市买房 (); 但是在要结婚之前,婚房又是刚需. 我和太太最终一起在一线城市周边的某二线城市买了 ...