Ansible-doc及常用模块

张开发
2026/6/9 13:03:34 15 分钟阅读
Ansible-doc及常用模块
一、ad-hoc介绍ansible执行方式的其中一种是ad-hocad-hoc就像一条Linux命令ad-hoc一次性只能执行一个模块所以ad-hoc一般在ansible中实现的是简单的任务ansible执行方式的另外一种是playbookplaybook就像一个shell脚本文件可以一次性调用多个ansible的模块而且playbook中还可以实现条件判断、循环等高阶特性playbook一般都是实现复杂的任务一ad-hoc语法格式ansible 主机 -m 模块 -a 模块参数 ansible选项egansible all -m shell -a useradd zhangsan -uroot -k二、命令执行模块ansible的命令执行模块就是相当于在被控节点直接去执行shell命令所以叫做命令执行模块而这些命令执行模块和其他的模块之间有一个很大的区别命令执行模块不具备幂等性幂等性执行一次任何或者多次执行任务结果只要是一样的那么就不会发生任何改变调用user模块去被控节点创建用户第一次调用的时候创建了用户第二次调用的时候已经存在的用户结果是一样的不会发生任何改变一shell模块简单容易上手本质就是执行shell命令也就是所谓的linux命令支持一些高阶参数如creates、removes、chdir..二command模块和shell模块一模一样只不过有一些特殊符号不支持比如 | 、...三raw模块和shell模块也是一模一样但是不支持shell模块和command模块的那些参数执行任务的时候—直接SSH远程执行命令并没有将模块封装为py脚本去执行所以raw模块可以在没有python环境下的被控节点执行任务四script模块在被控节点执行主控节点的shell脚本实际上并不是将shell脚本推送到远程主机执行而是在主控节点上读取脚本的shell命令把shell命令推送到被控节点执行三、常用模块##一定要擅用“ansible-doc模块名”查询帮助一文件管理模块copy、fetch、file1file在被控节点查看文件信息、创建、删除、修改普通文件/目录文件touch、rm、mkdir、chmod、chownstate常用参数file默认 确保这是一个普通文件并可修改属性directory 确保这是一个目录link 创建软链接hard 创建硬链接touch 创建空文件如果不存在absent 删除文件或目录1.查看node节点的/etc/passwd文件信息[rootcontroller ~]#ansible node1 -m file -a path/etc/passwdstatefile##statefile可以不用加上默认就是这个node1 | SUCCESS {ansible_facts: {discovered_interpreter_python: /usr/bin/python},changed: false,gid: 0,group: root,mode: 0644,owner: root,path: /etc/passwd,secontext: system_u:object_r:passwd_file_t:s0,size: 2314,state: file,uid: 0}2.在node1和node2节点上创建/opt/file文件要求文件的拥有人是devops拥有组是root文件权限是777[rootcontroller ~]#ansible node1,node2 -m file -a path/opt/fileownerdevopsgrouprootmode0777statetouch##注意点一定一定要带上特殊权限一共是四位数字并要用逗号包裹起来3.修改node2节点上的/opt/file文件信息将文件的拥有人修改为root[rootcontroller ~]#ansible all -m file -a path/opt/fileownerrootstatefile##statefile可以不用加上默认就是这个4.在所有的节点上创建/opt/dir目录[rootcontroller ~]#ansible all -m file -a path/opt/dirstatedirectory5.删除所有节点上的/opt/dir目录文件[rootcontroller ~]#ansible all -m file -a path/opt/dirstateabsent##file模块只能一个文件一个文件的删除不支持批量删除文件6.在node1节点上创建软链接文件/opt/passwd源文件指定/etc/passwd[rootcontroller ~]#ansible all -m file -a src/etc/passwddest/opt/passwdstatelink##src被控节点的源文件原始文件的真实路径—— 链接指向的目标##dest被控节点的目标路径链接文件存放的位置—— 创建的快捷方式本身(二) copy实现控制节点和被控节点文件的传输把控制节点的文件传输给被控节点在被控节点自身上进行文件拷贝支持将内容直接写入到文件中常用参数backup在覆盖文件之前先备份一份备份的文件名自动以时间命名content把内容写到文件中dest目标文件src源文件remote_src如果为yes则src表示被控节点路径如果为false则src表示主控节点的路径force是否要覆盖文件1. 将控制节点的/etc/passwd拷贝到所有的被控节点的/tmp目录下ansible all -m copy -a src/etc/passwddest/tmpbackuptrue2. 将node1节点的/etc/passwd文件拷贝到自己node1节点的/opt目录下修改名/opt/passwd-node1[rootcontroller ansible]# ansible node1 -m copy -a remote_srcyessrc/etc/passwddest/opt/passwd-node1##remote_src源文件已经在远程主机上在远程主机内部复制/移动3. 使用copy模块将httpd index 内容写入到/var/www/html/index.html文件[rootcontroller ansible]# ansible all -m copy -a contenthttpd index\n dest/var/www/html/index.html##\n表示换行三fetch将被控节点的文件拷贝到控制节点上只能拉取普通文件目录是无法拷贝过来的默认情况下拉取过来的文件在控制节点上是以被控节点主机名的名字作为目录名字来存储的1.将所有的被控节点的/opt/copy.txt文件保存到控制节点的/tmp目录下[rootcontroller ansible]# ansible all -m fetch -a src/opt/copy.txtdest/tmp/##拉取过来的文件在控制节点上是以被控节点主机名的名字作为目录名字来存储的[rootcontroller ansible]# ls /tmp/node1/opt/copy.txt/tmp/node1/opt/copy.txt2.直接拉取/opt/copy.txt文件不要以目录结构存储[rootcontroller ansible]# ansible all -m fetch -a src/opt/copy.txtdest/opt/flatyesnode1 | CHANGED {changed: true,node2 | SUCCESS {##因为文件名相同所以node2显示为successchanged: false,##注意flat设置为true然后dest如果是一个目录那么目录后面必须要带/四、软件管理模块1. yum_repository模块管理yum仓库配置文件创建配置文件往里面写内容修改配置文件的内容不能删除yum仓库配置文件2. yum模块管理软件包的比如安装、更新、卸载...一 yum_repository模块常用参数file指定yum配置文件的不需要指定.repo后缀name对应配置文件中的[ ] 仓库名description对应配置文件的中name内容gpgcheck对应配置文件中的gpgcheckgpgkey对应配置文件中的gpgcheckenabled对应配置文件中的enabledstatepresent创建仓库以及修改的含义absent删除仓库1在所有的被控节点创建yum配置文件要求文件名称为dvd.repo文件中包含俩个仓库仓库信息如下.提前将镜像挂载到iso目录上。[base]namebase01baseurlfile:///iso/BaseOS/gpgcheck0enabled1[appstream]nameappstream01baseurlfile:///iso/AppStreamgpgcheck0enabled1[rootcontroller ansible]# ansible all -m yum_repository -a filedvd namebase descriptionbase01baseurl///iso/BaseOS gpgcheck0 enabled1[rootcontroller ansible]# ansible all -m yum_repository -a filedvd nameappstream descriptionappstream01baseurl///iso/AppStream gpgcheck0 enabled1二yum模块可以对包进行管理也可以对包组进行管理常见参数name指定包或者包组的名字stateabsent卸载、latest更新、present安装1安装nginx软件包[rootcontroller ansible]# ansible all -m yum -a namenginxstatepresent2安装Development Tools软件包组##考试会考[rootcontroller ansible]# ansible all -m yum -a namedevelopmenttools statepresent##有空格的内容一定要使用“”包裹起来##在软件包组前加上一个。则表示为包组3更新系统上所有的rpm包版本[rootcontroller ansible]# ansible all -m yum -a name* statelatest4卸载nginx软件包不会同时卸载依赖包[rootcontroller ansible]# ansible all -m yum -a namenginx stateabsent五、服务管理模块- service- systemdsystemd模块多了daemon_reload参数相当于执行了systemctl daemon-reload一旦修改了服务的服务单元配置文件一定要daemon-reload才能够读取到。其他的参数都是一样常用参数name操作哪个服务statestarted、stopped、restarted、reloadedenabled是否实现开机自启动一 重启httpd服务并且实现开机自启动[rootcontroller ansible]# ansible all -m systemd -a namehttpdstaterestartedenabledyes六、用户管理模块user模块管理用户的相当于useradd、userdel、usermodgroup模块管理用户组的相当于groupadd、groupmod、groupdel一user模块1 创建lisi用户要求uid是3300附加组是root描述信息是web user登录shell是/bin/bash[rootcontroller ansible]# ansible all -m user -a namelisi uid3300 groupsroot commentweb server shell/bin/bash##append: yes 在 Ansible 的 user 模块中表示追加组而不是替换组。2修改lisi用户信息将其登录shell修改为/sbin/nologin[rootcontroller ansible]# ansible all -m user -a namelisi shell/sbin/nologin3删除lisi用户删除用户的要删除家目录和邮箱文件所以这里需要额外添加一个参数removeyes[rootcontroller ansible]# ansible all -m user -a namelisi stateabsent removeyes二group模块1创建用户组itgroupgid是6666[rootcontroller ansible]# ansible all -m group -a nameitgroupgid6666##默认的状态是statepresent2修改组的gid为7777[rootcontroller ansible]# ansible all -m group -a nameitgroup gid77773删除用户组[rootcontroller ansible]# ansible all -m group -a nameitgroup stateabsent七、计划任务模块cron模块相当于crontab周期性计划任务常用参数minutehourdaymonthweekdayjob定义执行的任务命令user以什么用户的身份去执行任务state创建/删除cron_file指定在哪个文件定义计划任务要么是/etc/crontab要么是/etc/cron.d一在node1节点上创建一个cron01任务每天上午9点15分以及下午的17点15分执行echo redhat任务[rootcontroller ansible]# ansible node1 -m cron -a namecron01minute15hour9,17jobecho redhat##如果未指定文件 则默认存放在 “/var/spool/cron/”目录下二删除cron01计划任务[rootcontroller ansible]# ansible node1 -m cron -a namecron01 stateabsent八、文件下载模块get_url在被控节点下载文件使用的常用参数:url指定下载的文件的路径dest指定下载到目的的哪个位置一下载https://releases.ansible.com/ansible/ansible-2.9.0.tar.gz文件到/opt目录下[rootcontroller ansible]# ansible all -mget_url-a urlhttps://releases.ansible.com/ansible/ansible-2.9.0.tar.gzdest/opt九、解压缩模块unarchive可以把控制节点的压缩包解压缩到被控节点也可以在被控节点自身上找压缩包然后解压缩到自身另外一个目录常用参数src压缩文件的源路径默认是在控制节点上找到的除非remote_srcyesdest解压缩后放到哪个目录下remote_src表示找的压缩文件是否来自于被控节点本身如果remote_srcyes则src是在被控节点本身搜索的压缩文件如果 remote_srcno则src表示控制节点的压缩文件。默认remote_srcno一将控制节点/下的压缩文件demo.tar.gz解压缩到/opt目录下[rootcontroller ansible]# ansible all -munarchive -a src/demo.tar.gzdest/opt二将被控节点node1/opt目录下的压缩文件node1.tar.gz解压缩到/tmp目录下[rootcontroller ansible]# ansible node1 -munarchive -a remote_srcyessrc/opt/node01.tar.gzdest/tmp十、文件同步模块synchronize模块相当于执行rsync命令- 将远程主机 被控节点的文件拉取到控制节点上- 将控制节点的文件推送到被控节点底层其实走的是rsync命令而rsync走的是SSH协议常用参数modepull/push默认是push。如果是push的话那么src表示控制节点的文件路径如果是pull的话那么src表示被控节点的路径src文件源路径dest文件目标路径一传输普通文件1.将控制节点的/etc/passwd文件同步到所有的被控节点的/opt目录下[rootcontroller ansible]# ansible all -msynchronize -a src/etc/passwddest/opt2.将所有的被控节点的/opt/passwd拉取到控制节点的/tmp目录下[rootcontroller ansible]# ansible all -msynchronize -a modepullsrc/opt/passwddest/tmp/二传输目录文件传输的如果是目录那么对于src来说后面路径带不带/是存在不同的意义的如果带上了/表示同步这个目录下所有的文件如果没带/表示同步这一整个目录1.将控制节点的整个“/opt目录”同步到被控节点的/tmp目录下[rootcontroller ansible]# ansible all -m synchronize -a src/optdest/tmp[rootnode1 /]# ls /tmp/opt##这个没带/同时的是一整个opt目录2.将控制节点/opt目录下的文件全部同步到被控节点的/tmp目录下[rootcontroller ansible]# ansible all -m synchronize -a src/opt/ dest/tmp[rootnode1 /]# ls /tmp/containerd copy.txt##这个带了/同步的是/opt目录下的所有文件

更多文章