Ansible_yaml剧本
来源:互联网 发布:umts网络是什么 编辑:程序博客网 时间:2024/04/28 21:35
YAML语法
YAML最初是Yet Another Markup Language(另一种标记语言)的缩写,后来为了强调yaml是以数
据为中心重新命名为递归写法YAML Ain’t
Markup Language(YAML 不是一种标记语言)。
散列表:(又叫哈希表),有键值对组成。 示例: name: aaa age: 12 或者 {name: aaa, age: 12}
列表: 示例: - list1 - list2 - list3 或者 [list1, list2, list3]
散列表中是引用列表: 示例: name: - name1 - name2
列表中使用散列项: 示例: - name: aaa age: 18 或者 - {name: aaa, age: 18}
列表中使用列表项: 示例: - [name, age, ] 或者 - - name1 - name2
散列表中使用散列表: 示例: names1: name1: aaa name2: bbb name3: ccc names2: .....: .. .....: ..
playbook组成结构: Inventory Modules Ad Hoc Command hosts Playbook Task:任务,即调用模块完成的某操作 Variables:变量 Templates:模板 Handlers:处理器,由某事件触发执行的操作 Roles:角色
示例:- hosts: webnodes # hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分隔主机组 vars: http_port: 80 max_clients: 256 remote_user: root # remote_user则用于指定远程主机上的执行任务的用户。remote_user也可用于各task中 tasks: # 任务列表task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成 第一个任务后再开始第二个如果中途发生错误,所有已执行任务都有可能将回滚 - name: ensure apache is at the latest version # 在众多模块中,只有command和shell模块仅需要给定 一个列表而无需使用“key=value command: /sbin/setenforce 0 yum: name=httpd state=latest - name: ensure apache is running service: name=httpd state=started handlers: - name: restart apache service: name=httpd state=restarted
运行playbook的方式: (1) 测试 ansible-playbook --check 只检测可能会发生的改变,但不真正执行操作; ansible-playbook --list-hosts 列出运行任务的主机; ansible-playbook --list-tasks 列出要运行的任务列表 ansible-playbook --syntax-check 语法检查
handlers: 任务,在特定条件下触发; 接收到其它任务的通知时被触发; notify: HANDLER TASK NAME
条件式触发器
- hosts: web remote_user: root tasks: - name: install nginx package yum: name=nginx state=latest - name: start nginx service service: name=nginx enabled=true state=started- hosts: db remote_user: root tasks: - name: install redis package yum: name=redis state=latest - name: install conf file copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644 notify: restart redis service # 引用触发器 tags: instconf - name: start redis service service: name=redis enabled=true state=started tags: startredis handlers: # 定义触发器 - name: restart redis service service: name=redis state=restarted
# 给play添加tags- hosts: web remote_user: root tags: nginx service # play添加标签 tasks: - name: install nginx package yum: name=nginx state=latest - name: start nginx service service: name=nginx enabled=true state=started- hosts: db remote_user: root tags: redis service # play添加标签 tasks: - name: install redis package yum: name=redis state=latest - name: install conf file copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644 notify: restart redis service tags: instconf - name: start redis service service: name=redis enabled=true state=started tags: startredis handlers: - name: restart redis service service: name=redis state=restarted{default,file,handlers,meta,tasks,templates,vars}
例子:在webserver上面安装nginx,在dbserver上面安装redis,并且redis每次修改配置文件后,会触发重启redis服务。打上标签后,可以只单独运行标签的那一部分[ root@node1 ~ ]# ansible-playbook -t install nginx.yaml - hosts: webserver remote_user: root tasks: #任务 - name: install nginx package yum: name=nginx state=latest - name: start nginx service service: name=nginx enabled=true state=started- hosts: dbserver remote_user: root tasks: - name: install redis package yum: name=redis state=latest - name: install conf file copy: src=/root/redis.conf dest=/etc/redis.conf owner=redis group=root mode=644 tags: install notify: restart redis service #触发器,配置文件修改后会触发后面的handlers - name: start redis service service: name=redis state=started tags: startredis #使用标签 handlers: #不主动使用,只能被前面触发. - name: restart redis service service: name=redis state=restarted
变量
(1) facts:可直接调用;
注意:可使用setup模块直接获取目标主机的facters;
(2) 用户自定义变量:
(a) ansible-playbook命令的命令行中的 -e VARS, --extra-vars=VARS # 示例:ansible-playbook test.yml --extra-vars "name=nginx user=root" Note:命令行的变量比playbook中的变量优先级高。
(b) 在playbook中定义变量的方法: vars: - var1: value1 - var2: value2变量引用:{{ variable }}
例子:
[ root@node1 ~ ]# cat installpkc.yml - hosts: webserver remote_user: root vars: - pkgname: tree tasks: - name: install package {{ pkgname }} yum: name={{ pkgname }} state=latest
[ root@node1 ~ ]# ansible-playbook -e "pkgname=memcached" -C installpkc.yml #这里在命令行定义变量PLAY [webserver] ***************************************************************TASK [Gathering Facts] *********************************************************ok: [172.18.25.52]ok: [172.18.25.51]TASK [install package memcached] ***********************************************changed: [172.18.25.51]changed: [172.18.25.52]
(3) 通过roles传递变量;
(4) Host Inventory #主机清单
Note:变量优先级低
(a) 用户自定义变量
(i) 向不同的主机传递不同的变量; IP|HOSTNAME varaiable=value var2=value2
例子:[webserver]172.18.25.51 pkgname=redis172.18.25.52 pkgname=memcached
(ii) 向组中的主机传递相同的变量;
[groupname:vars]
variable=value
例子: [webserver] 172.18.25.51 172.18.25.52 [webserver:vars] pkgname=redis
(b) invertory参数
用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量;
ansible_ssh_host ansible_ssh_port ansible_ssh_user ansible_ssh_pass ansbile_sudo_pass ...
例子:一种不基于密钥的连接方法,不推荐使用。
[webserver] 172.18.25.51 ansible_ssh_user=root ansible_ssh_pass=123 172.18.25.52 ansible_ssh_user=root ansible_ssh_pass=centos
阅读全文
0 0
- Ansible_yaml剧本
- 剧本
- 剧本
- 剧本
- 剧本改编
- 关于剧本的创作
- 乱世情怀(剧本)
- 自动测试发布会剧本
- 自己写的剧本
- 评书三国剧本
- GALGAME 剧本提取工具
- 粤语相声剧本《讲下喈》
- 剧本改写底稿
- 疯狂的程序员剧本
- 乌龙山伯爵剧本
- 人生的剧本
- 剧本修改谁说了算?
- 催婚广告剧本
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题)
- Vue用axios请求数据proxyTable解决跨域问题
- Java WebService 简单实例
- 初识react-native ListView
- Android webView
- Ansible_yaml剧本
- 市面那么复杂,棋牌服务器该如何抉择?
- 常用命名法:骆驼命名法,匈牙利命名法和帕斯卡命名法
- PLSQL游标笔记
- SQL0805N 找不到程序包 "NULLID.SQLUFG13 0X4141414141594758"。 SQLSTATE=51002
- 在Linux上安装hadoop教程
- 【Scikit-Learn 中文文档】协方差估计 / 经验协方差 / 收敛协方差 / 稀疏逆协方差 / Robust 协方差估计
- 安卓网络框架---volley的简单使用。
- Linux常用命令大全(多加练习识记20171129)