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文件的更多相关文章

  1. day5模块学习--yaml文件处理

    yaml文件处理(http://pyyaml.org/wiki/PyYAMLDocumentation)     摘要: 本文讲的是yaml在python上的使用教程详解, YAML是一种容易人类阅读 ...

  2. Python操作yaml文件

    基本的yaml语法 http://ansible-tran.readthedocs.io/en/latest/docs/YAMLSyntax.html YAML 还有一个小的怪癖. 所有的 YAML ...

  3. ansible中yaml语法应用

    4.yaml语法应用 ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下 yaml语言教程 附上一个 ...

  4. Ansible之YAML语言

    playbook写yml语句,若干模块发给Ansible,变成一个一个play,多个片段组合起来变成大片. 最终还是要读取主机清单,来确定作用在哪些机器上. YAML语言 YAML是一个可读性高的用来 ...

  5. 用Yaml文件进行元素管理【转】

    原文:http://www.cnblogs.com/milanmi/p/4636503.html 如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要 ...

  6. 对XML和YAML文件实现I/O操作

    1.文件的打开关闭 XML\YAML文件在OpenCV中的数据结构为FileStorage,打开操作例如: string filename = "I.xml"; FileStora ...

  7. Python读取Yaml文件

    近期看到好多使用Yaml文件做为配置文件或者数据文件的工程,随即也研究了下,发现Yaml有几个优点:可读性好.和脚本语言的交互性好(确实非常好).使用实现语言的数据类型.有一个一致的数据模型.易于实现 ...

  8. selenium2入门 用Yaml文件进行元素管理 (五)

    比如界面有一个按钮,id号是test.如果进行对象化的话,就是test.click就可以了.不用每次都要去创建test对象.如果id号变了,我们也只需要改一下test的名称就行了. 使用Yaml需要用 ...

  9. [Kubernetes]yaml文件详解

    应前一段时间夸下的海口:[Kubernetes]如何使用yaml文件使得可以向外暴露服务,说过要写一篇关于yaml文件详解的文章出来的,今天来总结一下.yaml文件用在很多地方,但是这里以介绍在Kub ...

  10. day11_单元测试_读取yaml文件中的用例,自动获取多个yaml文件内容执行生成报告

    一.使用.yaml格式的文件直接可以存放字典类型数据,如下图,其中如果有-下一行有缩进代表这是个list,截图中是整体是一个list,其中有两部分,第二部分又包含另外一个list 二.单元测试:开发自 ...

随机推荐

  1. 【K8S】如何进入kubernetes的一个pod

    如何进入kubernetes的一个pod呢,其实和进入docker的一个容器相似: 进入docker容器 : docker exec -ti <your-container-name> / ...

  2. verilog之function

    verilog之function 1.基本作用 function,就是声明一个函数.与task的区别就是有参数.function的返回值就是函数名(可以设置位宽),输入值任意,均作为输入参数.代码块需 ...

  3. python爬虫爬取科技报告数据,共计40余万条(来自国家科技报告服务系统)

    按学科分类[中图分类] 共计三十余万条科技报告数据 爬取的网址:https://www.nstrs.cn/kjbg/navigation !!! 如果要完整地跑起来代码,需要先看一下我的这篇博客,完成 ...

  4. Final Countdown 题解

    Problem Link 简要题意 把一个数不断减一直到变成零,每个数位变化一次需要一秒. 比如 \(300\) 变成 \(299\) 需要 \(3\) 秒. 求把一个数变成零要多少秒. 思路 对于每 ...

  5. vue阻止冒泡事件 阻止点击事件的执行 结合div和组件阻止点击事件

    vue阻止冒泡事件 阻止点击事件的执行 <div @click="alerA1()" > <div @click.stop="alerA2()>& ...

  6. #原根,BSGS,扩欧,矩阵乘法#CF1106F Lunar New Year and a Recursive Sequence

    题目 已知数列 \(f\) 满足 \(f_{1\sim k-1}=1\) 且 \(f_n=m\), 并且知道 \(f_i=(\prod_{j=1}^kf_{i-j}b_j)\bmod{99824435 ...

  7. #对顶堆#nssl 1477 赛

    分析 首先按小到大排序,考虑枚举两个都喜欢的个数\(i\) 那么只喜欢一个的个数各需要\(k-i\),剩下要补充到\(m-k*2+i\)个, 考虑用对顶堆维护大根堆大小仅有\(m-k*2+i\)即可 ...

  8. 陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

      11月4日,以"技术筑生态,智联赢未来"为主题的第二届OpenHarmony技术大会在北京隆重举办.本次大会由OpenAtom OpenHarmony(简称"Open ...

  9. 动态库 DLL 封装三:对dll二次封装,并将回调函数放出去,供别人调用

    背景: 我需要对一个dll进行二次封装,其中有一个接口,里面的参数需要传回调函数. 需求: 这个回调函数,我需要开放出去,让别人调用我的dll时,自己写这个回调函数 示例: // 回调原型 VOID ...

  10. maven 设置阿里镜像[二]

    前言 因为我们在国内,网速很慢,所以最好设置一下阿里镜像. 1.在maven中的conf下的setting 修改为: <mirror> <id>alimaven</id& ...