ansible:playbook学习笔记

  • #代表注释

  • 布尔值灵活,不区分大小写的true/false;yes/no;on/off;y/n;0/1都被允许

  • 一个完整的代码块至少元素包括name:task

下面通过一个简单的例子了解一下playbook:


  • hosts: web

remote_user: root

tasks:

  • name: hello world

command: hostname

然后通过以下命令运行剧本:当然这个剧本可能没显示什么内容

ansible-playbook test.yaml

如果只想看运行效果,不实际执行,可以用这条命令:

ansible-playbook -C test.yaml

以上剧本中各行内容含义:

  • “—”没有什么特殊含义,表示这是一个剧本文件,省略也没有错误

  • hosts代表对哪些主机运行剧本,主机清单存放在/etc/ansible/hosts文件

  • remote_user表示以什么身份运行

  • tasks表示任务,可以有一个或多个

2.2.playbook核心元素


  • hosts:执行的远程主机清单

  • tasks:任务级,一个或多个

  • varniables:内置变量或自定义变量

  • templates:模板,可替换模板文件中变量实现一些逻辑的文件

  • handlers:与notity结合使用,触发器,满足条件即执行

  • tags:标签

2.3.playbook基本使用


2.3.1.忽略错误信息

如果执行剧本时由于一个可能出现的错误导致整个剧本无法继续执行,可以使用以下方法来忽略错误

  • 命令或脚本退出码不为0的情况,意思是即使错误也返回为真

tasks:

  • name: xxx

shell: 命令 ||/bin/true

  • 或使用ignore_errors忽略错误

tasks:

  • name: xxx

shell: 命令

ignore_errors: True

2.3.2.handlers和notify结合形成触发器

  • handlers:是task列表,与其他task并没有什么不同,作用于关注的资源发生改变时,处罚一定的操作。

  • notify:此action用于在每个play的最后被触发,可避免有多次发生改变时每次都执行指定操作,仅在所有的变化发生完成后一次性的执行指定操作。

tasks:

  • name: install httpd

yum: name=httpd

  • name: config file

template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

notify: restart service

  • name: start service

service: name=httpd state=started enabled=yes

handlers:

  • name: restart service

service: name=httpd state=restarted

以上代码中handlers与notify的含义是,当服务的配置文件发生变化时,将处罚服务的重启动作。

handlers是可以有多个的。

2.3.3.tags的使用

  • 相当于给某个action起一个标签,例如下面这个例子。

tasks:

  • name: install httpd

yum: name=httpd

tags: inhttpd

  • name: xxx

  • name: xxx

标签的效果是执行剧本时不会全部执行,只会执行带有标签的动作。

在剧本中可以多个动作共同使用一个标签。

ansible-playboos -t inhttpd httpd.yml

这个命令就是☞执行这个剧本的标签为inhttpd的一个动作,举例不好,看懂就行。

2.3.4.变量

  • 变量名:只能由字母、数字和下划线组成,且只能字母开头

变量来源:

  • ansible setup facts远程主机的所有变量可直接使用

ansible web -m setup -a ‘filter=xxx’

例:

ansible web -m setup -a ‘filter=address

  • 在主机清单中定义:可针对单独主机定义,也可针对组定义,单独主机优先级更高

下面这个例子说明了针对单台主机的变量与针对组都有效的变量。

例:

[web]

192.168.10.3 http_port=80

192.168.10.4 http_port=81

[web:vars]

nodename=www

  • 通过命令指定变量,优先级最高

ansible-playbook -e varname=value

例:

tasks:

  • name: install pkg

yum: name={{ pkgname }}

ansible-playbook -e ‘pkgname=nginx’ nginx.yml

  • 在playbook中定义

vars:

  • var1: value1

  • var2: value2

例:

vars:

  • pkgname: nginx

tasks:

  • name: install pkg

yum: name={{ pkgname }}

  • 还可以创建单独的变量文件,在剧本中引用,比如以下这个例子

#创建变量文件

vim vars.yml

var1: httpd

var2: vsftpd

#在剧本中调用变量


  • hosts: web

remote_user: root

vars_files:

  • vars.yml

#接下来就可以在剧本中调用变量了

tasks:

  • name: install pkg

yum: name={{ var1 }}

2.3.5.模板

  • 将配置文件中的一些配置信息替换成变量,传递到远端服务器时会根据主机信息生成新的配置信息

  • 使用jinja2语言,使用字面量,有字符串,数字,列表,元组,字典和布尔值等类型

#字符串

可使用单引号或双引号

#数字

可使用整数或浮点数

#列表

[item1,item2]

#元组

(item1,item2)

#字典

{key1:value1,}

#布尔值

true/false

  • 可进行算数运算:

+、-、*、/、//、%、**

  • 比较操作:

==、!=、>、<…

  • 逻辑运算:

and、or、not

  • 流表达式

for、if、when

  • 建议创建一个存放模板的templates的文件夹,与playbook平级

在剧本中的用法可以看下面这个例子:

  • name: copy template

template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

j2模板样式示例:以nginx为例写下部分内容

vim /etc/nginx/nginx.conf

这个例子代表nginx启动的进程数根据cpu的核数来决定

user nginx;

worker_processes {{ ansible_processes_vcpus }}

这个例子代表nginx启动的进程数是cpu核数的2倍

user nginx;

worker_processes {{ ansible_processes_vcpus*2 }}

2.3.6.when

  • 条件测试判断

作为条件可以使用远程主机的变量表示

举一个例子:如果系统是redhat系列,则执行命令

  • name: xxx

shell: xxx

when: ansible_os_family == “redhat”

2.3.7.迭代:with_items

  • 当有需要重复性执行的任务时,可使用迭代机制

  • 对于迭代项的引用,固定变量名为item

  • 要在task中使用with_items给定要迭代的元素列表

  • 列表格式:字符串,字典

例如:我们要在远程主机安装多个服务,可以使用这种方法,下面这个例子是说在远程主机上安装haproxy与keepalived两个服务

tasks:

  • name: install pkg

yum: name={{ item }}

with_items:

  • haproxy

  • keepalived

还可以再复杂一些,比如我要创建两个用户,这两个用户分别要加入指定的组,这种方式叫迭代嵌套子变量。

tasks:

  • name: create users

user: name={{ item.name }} group={{ item.group }}

with_items:

  • { name: ‘user1’, group: ‘group1’ }

  • { name: ‘user2’, group: ‘group2’ }

2.3.8.for循环与if条件判断

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

一份还热乎的蚂蚁金服面经(已拿Offer)面试流程4轮技术面+1轮HR

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
0336348)]

[外链图片转存中…(img-P0tGpFPc-1713810336349)]

[外链图片转存中…(img-Kbu633Pc-1713810336349)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

[外链图片转存中…(img-3tYh9h1x-1713810336349)]

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

[外链图片转存中…(img-pK1dWImq-1713810336350)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值