[Linux] Ansible及playbook实操步骤

这是作者在学习Ansible时,记的笔记,以防长时间不练手生
现在分享给大家,有什么完善意见的,欢迎在评论区提出~

《Ansible—实操》

作者:方旭
日期:2021.5.25
版本:1.0.1

准备工作:镜像 centos 7

一、安装虚拟机

创建虚拟机,打开此图像
在这里插入图片描述

在这里插入图片描述

二、基本配置:IP地址,桥接模式,可联网

查看网卡设备

在这里插入图片描述

查看IP信息

在这里插入图片描述

修改IP地址、主机名

首先确保服务开启
这里是NAT模式下,必须开启的

在这里插入图片描述

在这里插入图片描述

查看编辑器中的NAT信息

在这里插入图片描述

在这里插入图片描述

进入可视化编辑页面

在这里插入图片描述

编辑相应的网卡

在这里插入图片描述

选择手动模式

在这里插入图片描述

显示配置信息

在这里插入图片描述

修改主机名。修改后,保存退出。

在这里插入图片描述

验证配置

在这里插入图片描述

Ping测试

在这里插入图片描述

在这里插入图片描述

三、配置本地yum源

创建挂载目录,并挂载

在这里插入图片描述

验证

在这里插入图片描述

四:配置网络yum源,用于安装ansible

方法一:配置网络yum源,安装ansible

在这里插入图片描述

安装ansible,检查版本
准备工作:查看python版本,是否大于2.6

在这里插入图片描述

查看yum仓库中是否存在ansible的rpm包

yum  list | grep  ansible

在这里插入图片描述

如果没有,则自行安装。

在这里插入图片描述

如果安装错误:

在这里插入图片描述

解决:

在这里插入图片描述
在这里插入图片描述

解决:
更新yum源

在这里插入图片描述

查看可用yum源

在这里插入图片描述

运行安装ansible,并查看结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

自此,安装完成

方法二:安装rpm包

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

查看版本

在这里插入图片描述

自此,安装完成

五、配置免密

使用ansible前需实现ansible服务器对被控节点的ssh无密码访问,
操作:输入命令:ssh-keygen,一直按回车,直至完成操作; 命令:ssh-copy-id root@被控节点IP地址 ,
然后输入连接密码即可实现无密码访问,另外被控节点的设置方式一样,不再赘述。

首先环境要有控制机和被控节点

例1:
控制机

在这里插入图片描述

被控节点:

在这里插入图片描述

Ping测试

在这里插入图片描述

创建一个用户,用于管理被控节点

在这里插入图片描述

在其家目录下创建用于操作ansible的同名目录,并在该目录下操作

在这里插入图片描述

配置清单,配置文件

在这里插入图片描述

验证失败:

在这里插入图片描述

更改:
因为连接不到被控节点,需要配置免密

在这里插入图片描述

传输密钥

在这里插入图片描述

免密成功:

在这里插入图片描述

再次验证:

在这里插入图片描述

更改:
没有找到相应主机
在/etc/hosts里添加IP解析

在这里插入图片描述

添加失败:

在这里插入图片描述

因为该用户没有权限

在这里插入图片描述

更改:
添加权限:

在这里插入图片描述
在这里插入图片描述

再次配置:

在这里插入图片描述

再次验证:

连通性测试:

在这里插入图片描述

列出被控节点信息:

在这里插入图片描述

例2:
编写清单(添加被控节点)、编写配置文件、运行并验证

在这里插入图片描述

六、编写剧本

没有特殊要求,剧本名自定义!!

剧本1
在所有主机执行,任务1:调用 file模块,分别创建文件/opt/play01,目录 /opt/play02

剧本2
在所有主机执行,任务1:调用ping模块。

在这里插入图片描述
在这里插入图片描述

剧本3:
用shell模块创建文件 /opt/haha,用command模块创建目录 /opt/hehe

在这里插入图片描述
在这里插入图片描述

剧本4
在所有主机执行,任务1:利用yum模块安装包 httpd mysql tftp
任务2:利用yum模块给软件升级

剧本5
调用变量
在所有主机执行,任务1:使用debug模块,输出常量信息 [主机的IP地址]。

剧本6
在node1上执行,任务1:创建变量文件 variables.yml。创建两个变量,变量为vars1、vars2。变量信息自定义。
创建剧本名为 playbook.yml。调用变量文件。
任务2:使用 user 模块,分别调用文件中的变量,生成用户及密码。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

七、loop循环

编写标准loop循环

列子:

在这里插入图片描述
在这里插入图片描述

编写嵌套循环

例子:

在这里插入图片描述

编写文件匹配Loops:

例子:

在这里插入图片描述

编写随机选择循环:

例子:

在这里插入图片描述

八、填空题

填空题

2、 无代理 最适合描述ansible架构
3、ansible默认使用 SSH 网络协议与受控节点通信
4、 inventory 文件定义ansible 在受控节点上执行操作
5、 YAML 语法用于定义Ansible playbook
6、在Ansible的主机清单文件中定义远程用户的参数是 remote_user
7、通过 ansible-doc 可以查看ansible模块的帮助文档
8、Ansible 的主配置文件是 ansible.cfg
9、ansible ad-hoc调用模块的选项为 -m
10、在Ansible主机清单文件中定义嵌套组的关键词是 children
11、通常搭建网站用的LNMP环境是指 linux 、 nginx 、 mysql 、php 工具
12、YAML文件中用 - 代表数组, : 代表 kv 数据
13、在ansible剧本中,使用关键词 tasks 定义任务
14、ansible基于语言 python 开发的
15、ansible使用 loop 语句实现循环功能
16、Playbook文件以.为 .yaml 、 .yml 后缀名
17、剧本文件开头第一行,必须是 — ,即 三个横杠
18、Playbook由一到多个 play 组成;每一Play定义了相关的一组运维任务
19、play以 - 为开头;同一play中的语句的缩进符合
20、YAML语法中,“-”用于定义一个 数组 ,其中的元素是 并列 关系
21、幂等性的定义: 用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。
22、运行剧本时,使用 -v 参数显示任务具体执行情况
23、剧本的语法检测语句: --syntax-check
24、Ansible role的标准目录有 defaults 、tasks 、 vars 、templates 、tests 、files
25、Ansible使用 block 关键词可以定义任务块
26、Ansible-vault加密数据的命令 ansible-vault encrypt
27、Ansible-vault解密数据的命令 ansible-vault decrypt
28、Ansible-vault修改密码的命令 ansible-vault rekey
29、Command模块不支持的功能有: 、 、 28、忽略任务失败,使用 Ingore_errors 关键字
29、任务失败后,强制执行处理程序,使用 Force_handlers 关键字
30、使用 Failed_when 关键字,指定任务失败条件 31、Jinja2模板文件的后缀为 .j2
32、角色的概念:
通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。
33、角色目录的含义:
34、README.md: 整个角色(role)的描述信息
35、 templates目录: 存放动态数据文件的地方(文件中包含了变量的模板文件)
36、 files目录: 存储静态文件的目录,如tar包、音乐、视频等
37、defaults/main.yml: 定义变量的缺省值,优先级较低
38、 使用ansible-galaxy 下载角色的格式: ansible-galaxy init

翻译以下词句:
37、Min_menory is not defind:变量不存在
38、Inventory:清单
39、Role:角色
40、Remote_user : 远程用户
41、Roles_path :角色目录位置
42、Ask_pass :访问
43、Defaults :默认
44、Gater_facts :
45、Vars_files : 变量文件
46、Notify :通知
47、Handlers :处理程序
48、Changed_when :当……改变时
49、Failed_when :当……失败时
50、Block :块
51、Resuce :结果
52、Import_tasks :导入任务
53、Templates :模板
54、Ansible_facts[‘hostname’]:短主机名
55、Ansible_facts[‘fqdn’]:完全限定的域名
56、Ansible_facts[‘default_ipv4’][‘address’]:主要IP v4地址

九、问答题目

5、简述Linux 系统中的目录与文件结构?

目录是Linux系统中的一种特殊文件,目录中保存的是文件名和i节点数组。Linux系统把文件信息以树型结构组织起来。树形结构由一个根目录(root)和根目录下的子目录构成。每一个目录内可以包含下一级目录、文件、指向其他文件系统的指针(符号链接)、表示设备的设备名(如/dev/tty)等。

6、简述绝对路径与相对路径

路径分相对路径和绝对路径。 绝对路径是指从根目录开始的路径,也称为完全路径;相对路径是从用户当前目录开始的路径。系统中每一个文件都有一个完全路径名。用户要访问一个文件时,可以通过路径名来引用。此时可以使用绝对路径名,也可以使用相对路径名。

7、命令行下“.”,“…”和“~”分别表示什么

在使用命令时,用“.”表示当前目录,用“…”表示上一级目录,用“~”表示自己的主目录。

8、Linux文件系统中包括的主要文件类型有那些?

普通文件:普通文件包括文本文件、二进制可执行文件、shell脚本文件以及各种类型的数据文件,如图像文件、声音文件等。

目录文件:目录文件是一种特殊的文件,它们包含文件名和子目录名,以及查找这些文件和子目录所必需的信息

链接文件:普通的链接实际上不是文件,它们仅是指向同一索引节点的目录条目,是一个索引节点表。

设备文件:Linux系统把每一个输入/输出设备都看成一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。其中可以读写单个字符的是设备字符设备(如键盘);不能访问单个字符,而必须整块读写的设备称作块设备(如磁盘)。

9、在命令中如何使用字符表示法表示不同的权限

r 读权限 w 写权限 s设置SUID和SGID位 t设置粘贴位

10、在命令中使用字符表示法,如何表示不同的用户?

U:所有者 G:组成员 O:其他用户 A:所有用户

11、Linux系统下,/etc/hosts文件和/etc/services文件有什么用途?

使用3种字符表示不同的操作:
= 重新指定权限 + 添加权限 - 删除权限

12、如何查看硬盘被占用了多少空间,目前还剩下多少空间?

df

13、Ansible是什么?

Ansible是一个自动化运维工具,基于Python开发,集合了众多运维工具的优点,可以实现批量系统配置、批量程序部署、批量运行命令等功能。并且它是基于模块工作的,本身没有批量部署的能力,真正批量部署的是ansible所运行的模块,而ansible只是提供一种框架

14、什么是Ansible模块?

模块被认为是 Ansible 的工作单元。每个模块大多是独立的,可以用标准的脚本语言编写,如 Python、Perl、Ruby、bash 等。模块的一个重要属性是幂等性,意味着一个操作执行多次不会产生副作用。

15、Ansible常用模块(至少6个)?

command ping yum copy service shell file replace user group

16、什么是Ansible的playbook?

Playbooks 是 Ansible 的配置、部署和编排语言,它是基于YAML语言编写的。他们可以描述您希望远程系统实施的策略,或者描述一般 IT 流程中的一系列步骤。

17、描述Ansible是如何工作的?

Ansible由节点和控制机器组成。 控制机器是安装Ansibles的地方,节点由这些机器通过SSH管理。 借助SSH协议,控制机器可以部署临时存储在远程节点上的模块。
控制机器使用ansible或者ansible-playbooks在服务器终端输入的Ansible命令集或者playbook后,Ansible会遵循预先编排的规则将PLAYbook逐条拆解为Play,再将Play组织成Ansible可以识别的任务tasks,随后调用任务涉及到的所有MODULES及PLUGINS,根据主机清单INVENTORY中定义的主机列表通过SSH协议将任务集以临时文件或者命令的形式传输到远程节点并返回结果,如果是临时文件则执行完毕后自动删除。

18、ansible使用copy模块来将/opt/aa.txt复制到/home/jack中

ansible node1 -m copy -a ‘src=/opt/aa.txt dest=/home/jack/’

19、使用file模块,来定义/home/jack/aa.txt的权限为777,归属为所有者是jack,所属组为jack

ansible node1 -m file -a 'path=/home/jack/aa.txt owner=jack group=jack mode=0777’

20、使用cron模块,定义一个任务,每周五的14点30分执行备份/var

ansible node1 -m yum -a 'name=httpd state=present’

21、使用user模块,创建用户student,让其是系统用户,属组为root,uid为2000

ansible node1 -m cron -a ‘name=“crontab test” weekday=5 hour=14 minute=30 job=“/usr/bin/tar -czf /opt/var.tar.gz /var”’

十、恢复root密码

(1)按e编辑grub菜单 、选择linux16那行,追加rd.break 、ctrl+x引导 、#mount -o remount,rw /sysroot 、#chroot /sysroot ——改变系统的根目录,把根目录换成指定的目的目录、#passwd root redhat、#touch /.autorelabel
若是想要永久变更系统 SELinux 运行环境,可以通过更改配置文件 /etc/sysconfig/selinux 实现。注意当从 Disabled 切换到 Permissive 或者 Enforcing 模式后需要重启计算机并为整个文件系统重新创建安全标签(touch /.autorelabel && reboot)。
(9)#exit
(10)#exit

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值