1、进行ansible的命令必须在ansible的目录下进行
2、ansible all --list 进行查询被控主机的数量
3、children ——嵌套必须加入后面添加的
4、/etc/sudoers ——提权对用户、100行模板
root ALL=(ALL) ALL ——第一个时提权用户 、主机名=提升权限到哪个用户 、执行所有的命令都可以
alice ALL=(ALL) NOPASSWD: ALL ——NOPASSWD就是不需要密码的意思
5、which xx命令 ——进行查看命令的目录位置,
6、在控制主机/etc/ansible/ansible.cfg 340行复制到,所用用户ansible.cfg配置文件下,——进行提权
Alice ansible.cfg(提权参照6) ——ssh—— alice(提权参照4)
标题(提升权限) 第一行(是否提权)第二行(以加sudo的方式提权)第三行(提权成为的对象用户)第四行(是否需要密码)
7、ansible模块命令
不具有幂等性模块
ansible all -m command -a ‘命令’或者 ansible all -a ‘命令’——command默认模块是个给远程主机传达linux命令-a是传递什么样子的参数
ansible-doc -l 或者 ansible-doc | wc -l ——查看ansible有多少我们可以使用的模块
ansible 名字 -m shell -a “命令” —shell模块可以行comand的执行不了的复杂linxu命令,comand模块不支持正则达式符号
ansible 名字 -m script -a “lou.sh(脚本名字)”——script模块是用来传递给被控主机脚本的模块
ansible-doc -l | grep X ——抓取忘记的命令
ansible-doc 命令 —— 查找命令的帮助进去之后 /EXAMPLE可以继续实例解释example
shell脚本写法:1声明解释器 #!/bin/bash 2、添加主题 #(名字)3、执行的命令
参照写法:
#!/bin/bash
#测试
touch f1 /mnt
具有幂等性ansible的模块
1、yum_repository 搭建yun模块——参数
name :仓库名
description :仓库描述
bseurl :软件源
gpgcheck :是否开始软件合法性检验
enabled: 是否开始仓库
gpgkey :如果要检测软件合法性,提供key的路径直接粘贴复制
如果开始gpgkey 就http://study.lab0.example.com/rhel8.2/AppStream加上(gpgkey的路径)
2、yum模块 ——安装软件包的模块
state :执行动作
present :安装
absent : 删除
latest :升级
ansible all -m yum -a ‘name=软件包 state=present’——安装指定的安装包,后面的可以不加是默认安装的。
安装包组 ansible all -m yum -a ‘name=‘@包名’ ’——需要在进行将包组在引起来,安装是默认的
使用playbook剧本安装服务的时候使用逗号(,)进行分割就可以
3、file模块 ——创建文件的模块
path : 创建文件路径
state : 文件类型—— touch普通文件
directory 目录
link 连接文件 :src 源文件 dest 目标文件
owner : 属主
group : 属组
mode :xxxx 权限
修改文件的属组和属主、0是特殊权限没有的话就是0
给文件创建软链接、源文件是/tmp/lou 链接文件是/tmp/yr
4、copy ——可以将控制主机的文件拷贝到被控主机
src :控制主机的目录
dest :被控主机的目录
owner : 属主
group : 属组
mode : 权限
backup=yes 备份:防止已有文件覆盖
content : 将什么样子的内容放到这个文件中
将文件拷贝到被控主机的目录下不进行改名
将文件拷贝到被控主机进行改名字
拷贝文件到被控主机进行更改属主和属组
拷贝文件到被控主机、同名的文件不会覆盖会生成以原名.日期时间结尾的文件
5、user模块 group模块
name :用户名
uid : UID多少
password :密码
group :组
groups : 附加组 append :多组的时候append=yes 否则会覆盖
state :present 创建账户、 absent 删除账户
创建密码的格式必须进行加密否则密码违法使用,系统无法识别
删除用户-加上remove-yes才能将用户信息彻底删除
6、group模块 ——创建组
name : 组名字
gid : 组id默认、不设置就是默认排序
state= present 创建 absent 删除
创建组
删除我们所不用的组
7、service 开启服务的模块
name : 服务的名字
state : started 开启 stopped关闭 restarted重启 reloaded重新读取配置文件进行生效
enabled=yes 开启服务开机自启服务
开启有的服务
8、firrwalld 防火墙模块——
state : enabled 启用规则 disabled 禁用规则
zone : 区域名称 默认的是public
https://my.oschina.net/u/3358860/blog/1835487
service : 定义服务的名称
prot :定义端口协议 参照规格 port=80/tcp
permanent =yes 永久生效
immediate =yes 立刻生效
使用服务名字对防火墙策略可以通过http服务
使用端口设置防火墙可以通过http服务
9、parted 对磁盘进行分区的模块
device : 设备分区的名字
label : 分区表的类型 默认msdos =MBR gpt
number : 定义分区的序号
part_start : 划分分区的起始位置
part_end : 划分分的结束位置
state : 操作方式 present 创建 absent 删除
第一次对硬盘进行分区的格式
第二次对硬盘分区的格式,必须加从哪里开始到哪里结束
创建分区的时候指定好分区类型。如果更改的分区类型前面不一致的分区数据会消失
删除分区
10、filesystem ——可以格式化的模块
dev : 要格式化的分区
fstype : 文件系统类型 ext4 xfs
force=yes : 用于二次格式化强制格式化
进行对分区格式化为ext4的类型
11、lvg ——创建卷组的模块
state :present 创建 sbsent 删除
pvs : 指定分区名字
pesize : 指定pe的大小
vg :卷组名字
默认的pe的大小是4MiB
删除一个不需要的vg卷组
使用多个分区创建一个卷组
12、lvol——创建逻辑卷的模块
lv : 定义逻辑卷的名字
size : 定义逻辑卷的大小
vg ; 空间来自哪个vg
state : present (默认创建) sbsent (删除)
force =yes 删除逻辑卷必须加上 /创建的时候也可以用 (强制的)
创建一lv逻辑卷
ansible playblook ——相当于shell脚本,剧本模式
playbook剧本,可以让被控主机执行批量任务,要用yaml格式编写
YAML 是可读性较高的文本编写规范
规则:
- 剧本的扩展名要用yaml或者yml
- 文档内容开始时要写---,结尾要写...
- 键值对(变量)使用: 冒号后面有空格
4, 不能用tab键
- 同层级要对齐,不同层级要有2格以上缩进
- 列表前面要加- 后面有空格
13、lineinfile 模块——对文档进行添加内容与替换的模块针与整行
潜规则:如果替换的内容没有找到就会在文件的尾添加你所要的内容
dest : 操作的文档名字
regexp : 查找要替换的内容
line : 要替换或添加的内容
insertbefore :某行上添加
insertafter :某行下添加
进行更改/mnt/adc下的要替换的内容和替换的内容
进行在某一行的上面进行添加某些的内容
14、replace 模块、替换文档中某个字符串
path : 要替换的文档
regexp :查找匹配的内容
replace :替换成什么内容
可以将内容中的某个字符替换不影响行里别的内容
15、 setup 模块可以收集被控主机各种参数存在变量中
默认的
查看主机中的所有的环境变量
16:debug 模块相当于linux中的echo
msg :输出的信息
常用变量:
ansible_hostname 主机名
ansible_fqdn 完整主机名
ansible_bios_version bios版本信息
ansible_memfree_mb 剩余内存空间大小
ansible_devices.vda.partitions.vda1.size 查看vda1分区的大小
ansble_devices.vda.size 查看vda大小
ansible_lvm.lvs.root.size_g 查看名称是root的逻辑卷的大小
ansible_kernel 查看内核版本信息
ansible_eth0.ipv4.address 查看eth0网卡的ip地址信息
17、主机清单变量修改主机清单文件
进行配置node1主机,进行变量
对01组进行设置变量:vars
18、剧本变量
可以在playbook的剧本中进行变量,所有都可以实现
19、在文档中进行变量
vars_files :路径
先创建一个文件,为yml格式的
编辑一个playbook的剧本变量
20、在执行剧本时以交互式定义变量内容
vars_prompt :定义什么样子的变量
在执行剧本的时候进行定义变量
prompt 在执行剧本的时候进行提示信息
执行剧本的时候就会显示出填写出来的参数
private=no 可以显示我们输出的变量取消隐私
第一部分是编写执行变量变量,抓取第二部分是显示哪个变量
21、可以进行修改这个默认的命令setup为no |关闭系统变量的收集
根据上面这个默认的修改为这个默认为yes改为no
修改完成之后就没有setup 这个默认的模块命令了
22、魔法变量(特殊变量)——ansible 中内置的特殊变量
inventory_hostname : 主机清单中的名字
hostvars : 看现在所有变量
hostvars.node1 : 显示node1的变量
hostvars.node1.group_names :显示node1主机所在组名
groups 所有的主机和组的信息
groups.all 所有的主机名
groups.test01 显示test01组的主机的名字
groups_names 当前正在运行任务的主机所在的组名
play_hosts 执行单枪playbook的所有机器列表
inventory_dir 主机清单所在的路径
inventory_file 主机清单文件的路径和文件名
role_path 当前role的路径
可以使用node1主机查询node2的变量信息因为hosts默认收集所有可变量信息(setup默认开启)然后node1上面执行就可以收集到node2的所有的变量信息
通过使用hostvars.node1.group_names 可以显示我们主机所在的组的名字
通过使用 groups 可以查看所有组的信息
23、template 模块相当于copy模块:
编辑一个.j2 的文件 :这个文件可以识别内容中的变量:存放变量信息的文件 :动态数据里面的内容会发生改变
模板名称是yy.j2 (.j2代表jinja2模板文件
可以在该模板中存储变量,并通过template模块识别)
src : 源文件
dest :目标文件
使用某块进行传输文件,
拷贝过去之后文件内容的变量,就是被控主机的变量
通过魔法变量可以得到别的主机的变量
进行修改plebook剧本,需要默认的setup模块启动收集系统变量
24、ansible - varult 可以将文件进行加密处理
ansible-varult 直接回车可以查看下面参数
create :创建新文件同时进行加密
encrypt : 加密已有文件
decrypt : 解密
rekey : 修改密码
view : 不解密查看内容
--ask-vault--pass 可以使playbook 剧本进行输入密码生效
--vault-password-file 不需要手打密码使用文件中指定的密码;文件可以指定直接对文件进行加密
加密已有文件
再次查看就已经加密
将playbook 剧本进行加密就无法运行
后面添加这个命令就可以输入密码临时执行剧本
创建一个文件,将密码写入这样就可以不用每次手打密码直接使用就可以了
这就是直接使用文件中的密码,在文件密码比较复杂的情况下使用
25、角色: roles 是统一定义好的目录规范
修改配置ansible.cfg 的配置文件
添加一行为: roles_path 定义角色的配置
创建一个我们指定的目录,根据我们写入配置文件的目录进行创建
分类的存储文档就需要某些文件就存在哪个目录下面,我们创建一个的角色交为httpd
角色中定义好的规范通过这个必须tasks目录
编写文件:创建一个文件必须指定名为main.yml
通过这个 yml 文件来写我们操作的内容调用使用哪些模块
然后我们写一个playbook的剧本进行调取我们这个角色httpd
然后剧本就可以调用我们的角色,按照角色中写入的调用yum模块和debug 模块
第二种创建角色方法、
ansible-galaxy init 目录名字—— 创建角色目录
使用这个创建的方法就会把所有使用到的目录自动进行创建
tasks : 里面有个main.yml可以存放任务
files : 存放静态文件,比如图片、配置文件、视频
meta : 作者、角色的介绍,版本信息
templates : 存放动态文件
vars main.yml : 存放变量,优先级高
defaults : 存放变量,优先级低
handlers : 存放提前定义的任务
二、可以网络下载角色
1,编写yml文件,里面name定义安装的角色名,src定义角色
下载路径
可以是全称域名和ip地址
ansible-galaxy install -r xxx文件名字
安装角色,-r是定义安装角色时的文件,
安装位置默认是之前配置文件定义的roles目录,
还可以加-p 选项临时定义安装目录
三、使用rhel-system-roles软件包安装角色
先下载一个红帽自带的软件包
通过命令查询软件包安装的路径
找到目录就是有这个红帽自带的各种角色配置
常用根据上面图片解释
每个角色的目录都有一个使用手册就是这个 READE.md 这个文件(可以参考进行使用)
iburst 参数 :如果没有成功将多次进行执行,提高同步时间的成功率
四、loop = item模块工具: 相当于模块的帮手
可以存储多个值,利用固定名称 item实现执行多次任务的目的
是一个循环的值知道结束为止
可以创建多个文件,当获取变量前有信息就可以省略引号
item ——值变量的名字
loop ——是变量的值
通过loop可以进行批量的创建用户和设置密码相当于在
账户name : 就是item 下的子变量name
密码password: 就是item 下的子变量pass
26、when 可以进行条件测试,满足条件就会执行对应任务 在那个模块下面在哪个模块下面生效
== ——两边的内容相等
!= ——两边内容不相等
> ——前面的大于后面的
>= ——前面大于或者是等于后面的
< ——前面内容小于后面的
in ——这个变量里面有这个内容
not in ——这个变量里面没有这个内容
is defined —— 这个系统变量里面有这个变量
is not defined —— 这个系统变量里面没有这个变量
and ——并且
or ——或者
when 在调取变量的时候不用{{}} 双括号 直接调取变量
如果测试不成功就不会执行debug这个模块 就不会看到上面的那个结果因为when的测试失败所以就不会执行debug 模块
后面那个可以根据setup上面有没有做双引号
通过这个in就可以查看这个变量里面有没有这个
变量是不需要引号的,但是引号套引号是为了让系统知道我这个是一组
通过这个 is defined 如果这个系统的变量里面有这个变量那就执行上面这个setup 如果没有的话就不会执行上面的这个setup 的这个命令 不通过的话都会显示skip....蓝色的
可以使用通过and 进行连接两个都需要测试的内容
使用or 就是或者的意思两个测试的需求只要满足一个就可以继续执行上面的debug 模块
27、block —— 进行合并任务将个任务进行合并
使用block这个格式的话就可以将两个任务进行合并共同使用一个when 的检测
28、rescue 救援任务,当block任务失败后执行
当block任务失败后就会使用救援任务进行执行
正常的话执行成功不会执行救援模式
故意修改文件错误,无法安装软件包就会触发救援模式
29、always 无论block任务是否执行成功,都会执行
block 写法正确但是写入always 即时block 执行成功与失败他都会执行
block 执行的成功 always也继续进行执行不挂block 是否执行的失败与成功
30、handler,可以单独定义备用任务
使用时要在任务模块后面加notify来触发任务,需要调用
定义备用任务时的名称name
仅仅在任务是changed状态才会触发
书写的格式
第一次运行这个剧本都执行成功了
第二次运行这个脚本没有进行执行后面的debug 因为handlers的上面的任务必须是changed状态,他才会执行的否则不执行
31、fail 模块相当于debug但是执行成功的话后面的任务不会在进行执行
就是哪个主机中没有这个,卷组fail 会说一句 not 然后后面的所有任务跟这个主机没有关系了
32、mount 挂载模块
path —— 挂载点
src ——需要挂载的设备
fstype ——文件系统类型
state ——挂载动作 present :临时挂载
mounted : 永久挂载
umounted : 卸载
abaset : 永久卸载清除etc/fstab
就可以进行查看,node5上面的fstab配置就已经写入
就可以看到已将挂载上了
33、get_url 模块从网站上下载文件
url :网站网址
dest : 下载到的目录
force=yes 强制的
mode : 权限设置
username: 用户
password: 密码
1、下载文件到指定目录: ansible all -m get_url -a "url=http://www.guojinbao.com dest=/tmp/guojinbao mode=0440 force=yes" 需要添加登录名密码的网站,使用url_password、url_username参数来定义
34、plabook剧本里面改变语句可以结合when
if ——判断语句
else —— 否则
这句话意思就是:if就是判断这个系统变量是否有这个变量 else 否则执行这个
35、cron 计划任务模块
name :任务计划名称
cron_file :替换客户端该用户的任务计划的文件
minute :分(0-59, * ,*/2)
hour :时(0-23, * ,*/2)
day :日(1-31, * ,*/2)
month :月(1-12, * , */2)
weekday :周(0-6或1-7, *)
job :任何计划执行的命令,state要等于present
backup :是否备份之前的任务计划
user : 新建任务计划的用户指定用户
state :指定任务计划present、absent