设为首页 收藏本站
查看: 876|回复: 0

[经验分享] Ansible的基础元素和YAML介绍

[复制链接]

尚未签到

发表于 2018-1-3 06:25:04 | 显示全部楼层 |阅读模式
  本节内容:


  • YAML
  • Ansible常用的数据类型
  • Ansible基础元素

一、YAML
  1. YAML介绍
  YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。
  YAML Ain't Markup Language,即YAML不是XML。不过,在开发的这种语言时,YAML的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。其特性:


  • YAML的可读性好
  • YAML和脚本语言的交互性好
  • YAML使用实现语言的数据类型
  • YAML有一个一致的信息模型
  • YAML易于实现
  • YAML可以基于流来处理
  • YAML表达能力强,扩展性好
  更多的内容及规范参见http://www.yaml.org。
  2. YAML语法
  YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(Structure)通过空格来展示,序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔。下面是一个示例。YAML是用键值对和缩进来表示的。
  

name: John Smith  
age:
41  
gender: Male
  
spouse:
  
name: Jane Smith
  
age:
37  
gender: Female
  
children:
  

- name: Jimmy Smith  
age:
17  
gender: Male
  

- name: Jenny Smith  
age
13  
gender: Female
  

  YAML文件扩展名通常为.yaml,如example.yaml。

二、Ansible常用的数据类型
  1. list
  列表中的所有元素都使用“-”打头,例如:A list of tasty fruits


  • Apple
  • Orange
  • Strawberry
  • Mango
  2. dictionary
  字典通过key与value进行标识,例如:
  ---
  An employee record:
  

name: Example Developer  
job: Developer
  
skill: Elite
  

  也可以将key:value放置于{}中进行表示,例如:
  ---
  An employ record:
  

{name: Example Developer, job: Developer, skill: Elite}  


三、Ansible基础元素
  1. 变量
  (1)变量命名
  变量名仅能由字母、数字和下划线组成,而且只能以字母开头。
  (2)facts
  facts是由正在通信的远程目标主机发回的信息,这些信息被保存在ansible变量中。要获取指定的远程主机所支持的所有facts,可使用如下命令进行:
  

# ansible hostname -m setup  

  (3)register
  把任务的输出定义为变量,然后用于其他任务,示例如下:
  

tasks:  

- shell: /usr/bin/foo  
register: foo_result
  
ignore_errors: True
  

  (4)通过命令行传递变量
  在运行playbook的时候也可以传递一些变量供playbook使用,示例如下:
  

ansible-playbook test.yml --extra-vars "hosts=www user=magedu"  

  就是说hosts和user这两个变量可以在test.yml文件中直接调用
  (5)通过roles传递变量
  当给一个主机应用角色的时候可以传递变量,然后在角色内使用这些变量,示例如下:
  

- hosts: webservers  
roles:
  

- common  

- { role: foo_app_instance, dir: '/web/htdocs/a.com', port: 8080 }  

  注意:role、dir、port是变量名,冒号后面的是变量值。
  2. Inventory
  ansible的主要功能在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名。默认的inventory file为/etc/ansible/hosts。
  inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成。
  (1)inventory文件格式
  inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号标明。
  

[webservers]  
www1.wisedu.com:
8888  
www2.wisedu.com
  

  如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机,例如:
  

[webservers]  
www[
01:50].example.com  

  
[databases]
  
db
-[a:f].example.com  

  (2)主机变量
  可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用,例如:
  

[webservers]  
www1.wisedu.com http_port
=80 maxRequestsPerChild=808  
www2.wisedu.com http_port
=8080 maxRequestsPerChild=909  

  (3)组变量
  组变量是指赋予给指定组内所有主机上的在playbook中可用的变量。例如:
  

[webservers]  
www1.wisedu.com
  
www2.wisedu.com
  

  
[webservers:vars]   # 表示向webservers这组主机定义变量如下,回头这两台主机上都可以调用变量ntp_server和nfs_server
  
ntp_server
=ntp.wisedu.com  
nfs_server
=ntp.wisedu.com  

  (4)组嵌套
  inventory中,组还可以包含其它的组,并且也可以向组中的主机指定变量。不过,这些变量只能在ansible-playbook中使用,而ansible不支持。例如:
  

[apache]  
httpd1.wisedu.com
  
httpd2.wisedu.com
  

  
[nginx]
  
ngx1.wisedu.com
  
ngx2.wisedu.com
  

  
[webservers:children]     # 注意:children是固定格式
  
apache
  
nginx
  

  
[webservers:vars]
  
ntp_server
=ntp.wisedu.com  

  (5)inventory参数
  ansible基于ssh连接inventory中指定的远程主机时,还可以通过参数指定其交互方式,这些参数如下所示:


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431011-1-1.html 上篇帖子: ansible 模块之在学习(2) 下篇帖子: [ansible-playbook]4 持续集成环境之分布式部署利器 ansible playbook学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表