Ansible之Playbook,字节跳动算法工程师面试总结

本文介绍了AnsiblePlaybook的使用,包括playbook的结构、语法验证、任务执行流程(如yum和service操作),以及如何进行空运行、远程用户的权限管理、特权升级和模块使用。还提到了playbook中的YAML语法和注释的重要性。
摘要由CSDN通过智能技术生成

playbook: vsftpd.yml

  • ​ 语法验证失败时,将报告语法错误。输出中包含语法问题在playbook中的大致位置。

[root@master lamp]# ansible-playbook --syntax-check vsftpd.yml

ERROR! conflicting action statements: yum, service

The error appears to be in ‘/opt/lamp/vsftpd.yml’: line 5, column 7, but may

be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

tasks:

  • name: vsftpd

^ here

执行空运下


  • 可以使用-C选项对playbook执行空运行。这会使Ansible报告在执行该playbook时将会发生什么更改,但不会对受管主机进行任何实际的更改。

下例演示了一个playbook的空运行,它包含单项任务,可确保在受管主机上安装了最新版本的httpd软件包。注意该空运行报告此任务会对受管主机产生的更改

[root@master lamp]# ansible-playbook -C /opt/lamp/vsftpd.yml

PLAY [vsftpd] ********************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************

ok: [192.168.129.135]

ASK [vsftpd] ********************************************************************************************************

ok: [192.168.129.135]

TASK [service vsftpd] ************************************************************************************************

ok: [192.168.129.135]

PLAY RECAP ***********************************************************************************************************

192.168.129.135 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

实施多个play


  • Playbook是一个YAML文件,含有由一个或多个play组成的列表。记住一个play按顺序列出了要对清单中的选定主机执行的任务。因此,如果一个playbook中有多个play,每个play可以将其任务应用到单独的一组主机。

  • 在编排可能涉及对不同主机执行不同任务的复杂部署时,这会大有帮助。我们可以这样进行编写:对一组主机运行一个play,完成后再对另一组主机运行另一个play。

  • 缩写包含多个play的playbook非常简单。Playbook中的各个play编写为playbook中的顶级列表项。各个play是含有常用play关键字的列表项。

以下示例显示了含有两个play的简单playbook。第一个play针对httpd运行,第二个play则针对mariadb运行。

[root@master lamp]# cat play.yml


This is a simple playbook with two play

  • name: first play

hosts: httpd

tasks:

  • name: first task

yum:

name: vsftpd

status: present

  • name: second task

service:

name: vsftpd

enables: true

  • name: second play

hosts: mysql

tasks:

  • name: first task

service:

name: httpd

enabled: true

play中的远程用户和特权升级


  • Play可以将不同的远程用户或特权升级设置用于play,取代配置文件中指定的默认设置。这些在play本身中与hosts或tasks关键字相同的级别上设置。

用户属性


  • playbook中的任务通常通过与受管主机的网络连接来执行。与临时命令相同,用于任务执行的用户帐户取决于Ansible配置文件/etc/ansible/ansible.cfg中的不同关键字。运行任务的用户可以通过remote_user关键字来定义。不过,如果启用了特权升级,become_user等其他关键字也会发生作用。

如果用于任务执行的Ansible配置中定义的远程用户不合适,可以通过在play中使用remote_user关键字覆盖。

remote_user: 用户名

特权升级属性


  • Ansible也提供额外的关键字,从而在playbook内定义特权升级参数。become布尔值关键字可用于启用或禁用特权升级,无论它在Ansible配置文件中的定义为何。它可取yes或true值来启用特权升级,或者取no或false值来禁用它。

  • 如果启用了特权升级,则可以使用become_method关键字来定义特定play期间要使用的特权升级方法。

  • 此外,启用了特权升级时,become_user关键字可定义特定play上下文内要用于特权升级的用户帐户。

以下示例演示了如何在play中使用这些关键字:

//echo一个密码

[root@mysql ~]# id aaa

uid=6000(aaa) gid=6000(aaa) 组=6000(aaa)

[root@mysql ~]# echo “1” | passwd --stdin aaa

更改用户 aaa 的密码 。

passwd:所有的身份验证令牌已经成功更新。

//传输秘钥

[root@master ~]# ssh-copy-id aaa@192.168.129.135 //ansible主机上操作,把秘钥给135主机(mysql)

[root@mysql ~]# visudo //mysql主机

Allow root to run any commands anywhere

root ALL=(ALL) ALL

aaa ALL=(ALL) NOPASSWD: ALL

//编写任务文件

[root@master lamp]# ansible-playbook /opt/lamp/aaa.yml

PLAY [mysql] *********************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************

ok: [192.168.129.135]

TASK [create user aaa] ***********************************************************************************************

ok: [192.168.129.135]

PLAY RECAP ***********************************************************************************************************

192.168.129.135 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

模块文档


使用ansible-doc [module name]命令来显示模块的详细文档

ansible-doc service //显示service模块的帮助文档

[root@master ~]# ansible-doc service

SERVICE (/usr/lib/python3.6/site-packages/ansible/modules/system/service.py)

OPTIONS (= is mandatory):

  • arguments

Additional arguments provided on the command line.

(Aliases: args)[Default: (null)]

type: str

  • enabled

Whether the service should start on boot.

At least one of state and enabled are required.

[Default: (null)]

type: bool

= name

Name of the service.

type: str

……略

语法变化


| 语法 | 作用 |

| — | :-- |

| YAML注释 | 用于提高可读性,在YAML中,编号或井号字符(#)右侧的所有内容都是注释

如果注释的左侧有内容,请在该编号符号的前面加一个空格 |

| YAML字符串 | YAML中的字符串通常不需要放在引号里,即使字符串中包含空格。字符串可以用双引号或单引号括起

编写多行字符串有两种方式。可以使用管道符表示要保留字符串中的换行字符

要编写多行字符串,还可以使用大于号字符来表示换行字符转换成空格并且行内的引导空白将被删除

这种方法通常用于将很长的字符串在空格字符处断行,使它们跨占多行来提高可读性 |

| YAML字典 | 字典也可以使用以大括号括起的内联块格式编写

大多数情况下应避免内联块格式,因为其可读性较低。

有一种情形中会较常使用它。

当playbook中包含角色列表时,较常使用这种语法,

从而更加容易区分play中包含的角色和传递给角色的变量 |

| YAML列表 | 列表也有以中括号括起的内联格式;我们应该避免使用此语法,因为它通常更难阅读 |

特殊用法


YAML注释

注释也可以用于提高可读性。在YAML中,编号或井号字符(#)右侧的所有内容都是注释。如果注释的左侧有内容,请在该编号符号的前面加一个空格。

#This is a YAML comment

[defaults] # This is also a YAML comment

some basic default values…

YAML字符串

YAML中的字符串通常不需要放在引号里,即使字符串中包含空格。字符串可以用双引号或单引号括起。

This is a string

‘This is another string’

“This is yet another a string”

编写多行字符串有两种方式。可以使用管道符表示要保留字符串中的换行字符。

line: |

AddType application x-httpd-php .php

AddType application x-httpd-php-source .phps

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

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

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

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

img
img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V:vip1024b 备注Java获取(资料价值较高,非无偿)
img

最后,附一张自己面试前准备的脑图:

image

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

image

  • Spring全家桶(实战系列)

image.png

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

image

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典**

  • Java核心知识整理

[外链图片转存中…(img-49BRbMt4-1711538209476)]

  • Spring全家桶(实战系列)

[外链图片转存中…(img-pOQTGYKz-1711538209476)]

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-TeUGyNp0-1711538209477)]

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值