目录

  • 一、ansible实现管理的方式
  • 二、ansible命令运行方式及常用参数
  • 三、ansible中的常用模块[1]
  • 1.command
  • 2.shell
  • 3.script
  • 4.copy
  • 5.fetch
  • 6.file
  • 7.archive
  • 8.unarchive
  • 9.hostname
  • 10.cron


一、ansible实现管理的方式

Ad-Hoc :利用ansible命令直接完成管理,主要用于临时命令使用场景
playbook :ansible脚本,主要用于大型项目场景,需要前期的规划

(1)Ad-Hoc执行方式中如何获得帮助:

ansible-doc :显示模块帮助的指令

格式:ansible-doc [参数] [模块…]

常用参数:

ansible-doc -l: 列出所有模块

ansible-doc 名称: 列出指定模块

ansible-doc -s :简要列出指定模块

ansible 接口api java ansible -v_linux


ansible 接口api java ansible -v_ansible 接口api java_02


ansible 接口api java ansible -v_ansible 接口api java_03


ansible 接口api java ansible -v_ansible 接口api java_04


(2)playbook,ansible脚本,主要用于大型项目场景,需要前期的规划

ansible 接口api java ansible -v_自动化_05


编写test.yaml,执行test.yaml

ansible 接口api java ansible -v_linux_06

二、ansible命令运行方式及常用参数

格式:
ansible 清单 -m 模块 -a 模块参数
常用参数
--version 显示版本
-m module 指定模块,默认为command模块
-v 详细过程 -vv -vvv更详细过程
--list 显示主机列表,也可以用--list-hosts
-k 提示输入ssh连接密码,默认key认证
-C 预执行检测
-T 执行命令的超时时间,默认10s
-u 指定远程执行的用户
-b 执行sudo切换身份操作
-become-user=USERNAME 指定sudo的用户
-K 提示输入sudo密码

-v显示详细信息

ansible 接口api java ansible -v_运维_07


继续编辑test.yml文件

ansible 接口api java ansible -v_ansible 接口api java_08


ansible 接口api java ansible -v_ansible 接口api java_09


-vv -vvv显示更详细过程

ansible 接口api java ansible -v_运维_10


ansible 接口api java ansible -v_ansible 接口api java_11


-k 提示输入ssh连接密码,默认key认证

ansible 接口api java ansible -v_ansible 接口api java_12


-u 指定远程执行的用户

ansible 接口api java ansible -v_运维_13


不指定-u时显示也为root用户

ansible 接口api java ansible -v_ansible 接口api java_14


这是因为设定了身份信息,连接后自动切换用户

ansible 接口api java ansible -v_自动化_15


将其注释

ansible 接口api java ansible -v_linux_16


此时默认为devops用户

ansible 接口api java ansible -v_自动化_17


-C 预执行检测

ansible 接口api java ansible -v_压缩包_18


真实执行,显示报错,是因为未设定提权,devops用户不具有删除/mnt下文件的权限

ansible 接口api java ansible -v_压缩包_19


进行提权,-become-user=USERNAME 指定sudo的用户

ansible 接口api java ansible -v_ansible 接口api java_20


-T 执行命令的超时时间,默认10s

ansible 接口api java ansible -v_运维_21


还原设定

ansible 接口api java ansible -v_linux_22


ansible的基本颜色代表信息

绿色,执行成功但为对远程主机做任何改变;

ansible 接口api java ansible -v_自动化_23


黄色,执行成功并对远程主机做改变;

红色,执行失败

ansible 接口api java ansible -v_ansible 接口api java_24

三、ansible中的常用模块[1]

1.command

功能: 在远程主机执行命令,此模块为默认模块
常用参数
chdir 执行命令前先进入到指定目录
cmd 运行命令指定
creates 如果文件存在将不运行
removes 如果文件存在将运行
free_form 在远程主机中执行的命令,此参数不需要加

进入mnt目录,创建文件file1/2;

成功创建

ansible 接口api java ansible -v_自动化_25


进入mnt目录,删除文件file1/2;

ansible 接口api java ansible -v_压缩包_26


进入mnt目录,创建文件file1/2;

ansible 接口api java ansible -v_ansible 接口api java_27

removes参数 :与 creates 参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果 /mnt/file1 文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件。

removes :如果/mnt/file1文件存在将运行

ansible 接口api java ansible -v_ansible 接口api java_28

creates参数 :看到 creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行对应命令,比如,如果 /mnt/file1文件存在,就不执行我们指定的命令。

creates :如果/mnt/file1文件存在将不运行,不存在将运行创建指令

ansible 接口api java ansible -v_linux_29


creates :如果/mnt/file1文件存在将不运行删除指令;

文件依然存在

ansible 接口api java ansible -v_压缩包_30


node节点的文件也存在

ansible 接口api java ansible -v_自动化_31

2.shell

功能: 和command功能类似,主要有两点不同
常用参数
chdir 执行命令前先进入到指定目录
cmd 运行命令指定
creates 如果文件存在将不运行
removes 如果文件存在在将运行
free_form 在远程主机中执行的命令,此参数不需要加
executable 指定执行环境,默认为

在这里插入代码片

(1)shell中支持通配符* ,command不支持通配符*

如下图,command中无法删除/mnt,shell中可以删除/mnt

ansible 接口api java ansible -v_自动化_32


ansible 接口api java ansible -v_运维_33


chdir 执行命令前先进入到指定目录

ansible 接口api java ansible -v_运维_34


文件成功建立

ansible 接口api java ansible -v_压缩包_35


cmd 运行命令指定

ansible 接口api java ansible -v_自动化_36


creates 如果文件存在将不运行

ansible 接口api java ansible -v_ansible 接口api java_37


removes 如果文件存在在将运行

ansible 接口api java ansible -v_ansible 接口api java_38


ansible 接口api java ansible -v_linux_39


(2)shell多了executable模块,默认使用的执行环境为sh,加入executable模块,可以指定执行环境为bash;

$$是当前bash进程的pid

ansible 接口api java ansible -v_压缩包_40


ansible 接口api java ansible -v_自动化_41

3.script

功能:在ansible主机中写好的脚本在受控主机中执行;

示例:先在ansible主机里创建一个test.sh脚本文件

ansible 接口api java ansible -v_压缩包_42


使用script模块,受控机执行test.sh脚本

ansible 接口api java ansible -v_自动化_43

4.copy

功能:从ansible主机复制文件到受控主机

ansible 接口api java ansible -v_linux_44


ansible 接口api java ansible -v_ansible 接口api java_45


ansible 接口api java ansible -v_压缩包_46


此时node主机/mnt目录下为空

ansible 接口api java ansible -v_linux_47


使用copy模块,从ansible主机复制test.sh文件到被控主机的/mnt/test.sh文件,拥有者为westos,权限为755

ansible 接口api java ansible -v_linux_48


进入受控机,查看文件权限为755,拥有者为westos

ansible 接口api java ansible -v_自动化_49


修改test.sh文件,再次执行copy模块,添加backup参数,可以备份之前的同名文件

ansible 接口api java ansible -v_ansible 接口api java_50


ansible 接口api java ansible -v_ansible 接口api java_51


ansible 接口api java ansible -v_自动化_52


copy模块,还可以直接输入文件内容,发给受控主机的/mnt/westos文件

ansible 接口api java ansible -v_linux_53


受控主机的westos文件的内容的确是hello word

ansible 接口api java ansible -v_压缩包_54

5.fetch

功能:从受控主机把文件复制到ansible主机,但不支持目录

ansible 接口api java ansible -v_压缩包_55


查看node节点的网卡配置文件

ansible 接口api java ansible -v_压缩包_56


ansible 接口api java ansible -v_运维_57


使用fetch模块,从受控主机复制/etc/sysconfig/network-scripts/ifcfg-ens3文件到ansible主机的lr用户的家目录,可以看到层层的子目录也复制过来了

ansible 接口api java ansible -v_linux_58


多加flat参数,表示只要这个文件,不要层层目录

ansible 接口api java ansible -v_ansible 接口api java_59

6.file

功能:设置文件的属性
常用参数:
1、path 指定文件名称
2、state 指定操作状态
touch 建立
absent 删除
directory 递归
link 建立链接
hard
3、mode 设定权限
4、owner 设定文件用户
5、group 设定文件组
6、src 源文件
7、dest 目标文件
8、recurse=yes 递归更改

ansible 接口api java ansible -v_linux_60


ansible 接口api java ansible -v_运维_61


ansible 接口api java ansible -v_运维_62


首先将node主机/mnt目录清空

ansible 接口api java ansible -v_linux_63


使用file模块,受控主机建立/mnt/westosfile文件

ansible 接口api java ansible -v_自动化_64


可以看到受控主机已建立westosfile文件

ansible 接口api java ansible -v_压缩包_65


继续将node主机/mnt目录清空

ansible 接口api java ansible -v_运维_66


受控主机建立westosdir目录(为了实验方便看到效果,westos组受管主机此时只有一个westosb主机)

ansible 接口api java ansible -v_linux_67


可以看到已建立westosdir目录

ansible 接口api java ansible -v_压缩包_68


受控主机的/mnt/westosdir目录下建立westosdir目录

ansible 接口api java ansible -v_压缩包_69


建立成功

ansible 接口api java ansible -v_linux_70


设定westosfile文件的拥有者为westos

ansible 接口api java ansible -v_ansible 接口api java_71


成功设定/mnt/westosfile文件的拥有者为westos

ansible 接口api java ansible -v_运维_72


设定westosdir目录的拥有者为westos

ansible 接口api java ansible -v_运维_73


设定成功

ansible 接口api java ansible -v_运维_74


设定westosdir目录的组为devops;

recurse=yes :递归更改并设定westosdir目录下的文件的组为devops

ansible 接口api java ansible -v_压缩包_75


设定成功

ansible 接口api java ansible -v_linux_76


用westosfile文件,创建受控主机的linuxfile软连接

ansible 接口api java ansible -v_自动化_77


设定成功

ansible 接口api java ansible -v_ansible 接口api java_78


用westosfile文件,创建受控主机的westosfile1硬连接

ansible 接口api java ansible -v_ansible 接口api java_79


查看硬连接,编号一样

ansible 接口api java ansible -v_压缩包_80


删除受控主机的linuxfile文件

ansible 接口api java ansible -v_自动化_81


已成功删除

ansible 接口api java ansible -v_linux_82


删除受控主机的westosdir目录

ansible 接口api java ansible -v_压缩包_83


已成功删除

ansible 接口api java ansible -v_压缩包_84

7.archive

作用:压缩
常用参数
path 打包目录名称
dest 声称打包文件名称
format 打包格式
owner 指定文件所属人
mode 指定文件权限

查看node主机的/media目录

ansible 接口api java ansible -v_运维_85


将受控主机/usr/local/bin目录打包到/mnt目录下,名为bin.tar.gz,格式为gz格式

ansible 接口api java ansible -v_ansible 接口api java_86


查看bin.tar.gz压缩包

ansible 接口api java ansible -v_ansible 接口api java_87


受控主机把/usr/local/bin打包为etc.tar.bz2压缩包,格式为bz2格式,权限为755,拥有者为westos,组为westos

ansible 接口api java ansible -v_压缩包_88


进行查看

ansible 接口api java ansible -v_运维_89

8.unarchive

功能:解压缩
常用参数:
copy :默认为yes ,从ansible主机复制文件到受控主机;设定为no 从受控主机中寻找src源文件。
remote_src :功能同copy且相反,设定为yes 表示包在受控主机;设定为no表示包在ansible主机。
src :包路径,可以使ansible主机也可以使受控主机
dest :受控主机目录
mode :加压后文件权限 <copy=yes>

首先在ansible主机创建压缩包

ansible 接口api java ansible -v_自动化_90


使用ansible主机的压缩包(可以使用相对路径),解压到受控主机的/media下

ansible 接口api java ansible -v_ansible 接口api java_91


解压成功

ansible 接口api java ansible -v_压缩包_92


删除收受控主机/media目录下的内容

ansible 接口api java ansible -v_ansible 接口api java_93


使用ansible主机的压缩包,解压到受控主机的/media下,解压后文件拥有者为westos

ansible 接口api java ansible -v_自动化_94


查看解压后bin目录拥有者为westos

ansible 接口api java ansible -v_linux_95


使用ansible主机的压缩包,解压到受控主机的/media下,解压后文件权限为755,拥有者为westos

ansible 接口api java ansible -v_ansible 接口api java_96


进行查看

ansible 接口api java ansible -v_linux_97


在ansible的受控主机创建压缩包

ansible 接口api java ansible -v_运维_98


使用受控主机的压缩包(绝对路径),解压到受控主机的/media下,解压后文件权限为755,拥有者为westos

ansible 接口api java ansible -v_ansible 接口api java_99


解压成功

ansible 接口api java ansible -v_linux_100

清空node主机/mnt目录

ansible 接口api java ansible -v_自动化_101

9.hostname

作用为修改主机名称

修改受控主机的主机名称为westos_node2

ansible 接口api java ansible -v_linux_102


成功修改

ansible 接口api java ansible -v_压缩包_103


恢复受控主机的主机名称为westos_node1

ansible 接口api java ansible -v_运维_104

10.cron

参数

含义

name

任务名称

job

任务脚本或命令

disabled

yes 禁用计划任务,no 启动计划任务

state

absent 删除计划任务

minute

分钟

hour

小时

day


month


weekday


使用cron模块,名字叫test,命令为echo westos,每半分钟执行一次

ansible 接口api java ansible -v_压缩包_105


查看定时任务列表

ansible 接口api java ansible -v_自动化_106


取消test这个定时任务

ansible 接口api java ansible -v_linux_107


其实取消任务也就是加注释

ansible 接口api java ansible -v_运维_108


开启test任务

ansible 接口api java ansible -v_压缩包_109


开启也就是去掉注释

ansible 接口api java ansible -v_自动化_110


删除test任务

ansible 接口api java ansible -v_运维_111


可以看到目前的时程表为空

ansible 接口api java ansible -v_自动化_112