运维
Tcpdump抓包工具
tshark抓包工具
Ansible
Ansible配置
Ansible-远程命令模块( command / script / shell )
Ansible-常用模块
PlayBook
PlayBook-变量
PlayBook-条件/循环
PlayBook-Tags
PlayBook-常用脚本
Ansible-Vault(数据安全)
Ansible-API
Ansible实践
JMeter测试软件
JMeter性能指标
Curl
综合分析工具
磁盘/IO工具
网络分析工具
JAVA分析工具
更换硬盘
Linux启动流程
安装问题
GURB加密
修改默认启动项
Root密码忘记
重装内核、GRUB
Too many open files错误
误删文件,内存恢复
Read-only file system错误
本文档使用MrDoc发布
返回首页
-
+
Ansible-常用模块
2020年2月14日 16:53
admin
#setup 模块 ansible 10.188.100.55 -m setup ![](/media//202202/2022-02-14113744918317.png) --- #debug 模块(调试) ####打印输出信息,类似Linux上的echo命令 ansible Client -m debug -a "msg={{http_port}}" #可查看http_port变量 --- ####playbook示例 - name: print system info debug:msg="System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }}" --------------- - name: print system info debug: var: hostvars[inventory_hostname]["ansible_default_ipv4"]["gateway"] --- #ping 模块(测试主机是否是通的) ####需要能ssh登陆上,才算通了。需要配置密码参数或者免密登陆 ansible Client -m ping --- #copy 模块 ####实现主控端向目标主机拷贝文件,类似于 scp 功能 |参数|说明| |--|-- |src|要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径,如果路径使用'/'来结尾,则只复制目录里的内容,如果没有使用'/'来结尾,则复制包含目录在内的整个内容 |dest|将源文件复制到远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录 |backup=yes/no|在覆盖之前将原文件备份,备份文件包含时间信息。 |force=yes/no|是否强制覆盖 |mode|文件权限:例:440 |directory_mode|目录及其包含文件的权限:例:440 |validate|验证命令| 例: shell > ansible Client -m copy -a "src=/home/test.sh desc=/tmp/ owner=root group=root mode=755" # 向 Client 组中主机拷贝 test.sh 到 /tmp 下,属主、组为 root ,权限为 755 --- #synchronize 模块 ####通过调用rsync进行文件或目录同步 |参数|说明| |--|-- |compress|是否开启压缩,默认开启 |src|要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径,如果路径使用'/'来结尾,则只复制目录里的内容,如果没有使用'/'来结尾,则复制包含目录在内的整个内容 |dest|将源文件复制到远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录 |dest_port|默认为22,SSH协议,表示目标端口 |delete|删除不存在的文件,默认为no |mode|push和pull模式,push模式一般用于从本机想远程主机上传文件,pull模式用于从远程主机上取文件 例: shell > ansible Client -m synchronize -a "src=/mnt/rpm dest=/tmp" #同步本地的/mnt/rpm到远程主机的/tmp shell > ansible Client -m synchronize -a "src=/mnt/rpm dest=/tmp mode=pull" #将远程主机的/mnt/rpm复制到本机的dest=/tmp --- #template 模块 ####在复制的同时需要根据实际情况修改部分内容 --- ###Ad-Hot方式 ####模板文件内容 #ssh防暴力破解 [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port={{ ansible_ssh_port }}, protocol=tcp] logpath = /var/log/secure maxretry = 3 findtime = 300 bantime = 24h ####主机清单内容 [Test] 172.16.2.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='xxxx' ####执行命令 ansible Test -m template -a "src=/root/F2B_SSH/jail.conf dest=/etc/fail2ban/jail.conf" ####执行结果 ![](/media//202205/2022-05-09103625418704.png) --- ###playbook方式 ####playbook.yaml文件: - hosts: web vars: http_port: 80 defined_name: "Hello My name is Bao" tasks: - name: installed httpd yum: pkg=httpd state=latest - name: changed index_file template: src: templates/index2.html.j2 dest: /var/www/html/index.html - name: start httpd service: name=httpd state=restarted --- ####index2.html.j2文件: <!DOCTYPE html> <html> <head> <title>Demo</title> </head> <body> <div> <h1>Demo {{ defined_name }}</h1>> <!--defined_name为yml文件中定义的变量--> <p>Served by {{ ansible_hostname }} ({{ ansible_default_ipv4.address }})</p> <!--ansible_hostname与ansible_default_ipv4.address为远程主机系统变量--> </div> </body> </html> --- #file 模块 ####创建/删除文件 - file: path: /etc/foo.conf state: touch/absent mode: 0644 ####创建/删除目录 - file: path: /etc/foo state: directory/absent mode: 0644 ####创建软链接 - file: src: /file/to/link/to dest: /path/to/symlink state: link owner: foo group: foo ####更改文件权限 - file: path: /etc/foo.conf owner: foo group: foo mode: 0644 #mode: "u=rw,g=r,o=r" #mode: "u+rw,g-wx,o-rwx" --- #service 模块 ####远程主机系统服务管理 |参数|说明| |--|-- |name|必须项,服务名称 |state|对服务执行启动(started),停止(stoped),重启(restarted),重新加载(reloaded)等操作 |enabled=yes/no|是否开机启动 |sleep|如果执行力restarted,则在stop和start之间沉睡几秒钟 #启动服务 ansible Client -m service -a "name=nginx state=started enabled=yes" #开机启动服务 ansible Client -m service -a "name=nginx enabled=yes" #停止服务 ansible Client -m service -a "name=nginx state=stopped" #重启服务 ansible Client -m service -a "name=nginx state=restarted" #重载服务 ansible Client -m service -a "name=nginx state=reloaded" #重启网络接口 ansible Client -m service -a "name=network state=restarted args=eth0" --- #systemd 模块 #启动服务并开机启动 ansible Client -m systemd -a "name=nginx enabled=yes state=started" #停止服务 开机禁止启动 ansible Client -m systemd -a "name=nginx enabled=no state=stopped" #重启服务 ansible Client -m systemd -a "name=nginx state=restarted" 刷新服务 ansible Client -m systemd -a "deamon_reload=yes" --- #yum 模块 ####软件包管理 |参数|说明| |--|-- |name|要进行操作软件包的名字,也可以传递URL或者本地的rpm包的路径 |state|安装(installed/present)、安装最新版本(latest)、删除(removed/absent) |enablerepo|启用某个源 |disablerepo|禁用某个源 #安装软件的最新版本 ansible Client -m yum -a "name=curl state=latest" #使用指定repo源安装软件 ansible Client -m yum -a "name=curl state=latest enablerepo=epel" #删除软件 ansible Client -m yum -a "name=redis state=removed" 或 ansible Client -m yum -a "name=redis state=absent" #安装本地包 ansible Client -m yum -a "name=/usr/local/src/bash-4.2.46-28.el7.x86_64.rpm state=present" #安装URL包 ansible Client -m yum -a "name=http://mirrors.aliyun.com/centos/centos7.4.1708/os/x86_64/Packages/bash-4.2.46-28.el7.x86_64.rpm state=installed" 或 ansible Client -m yum -a "name=http://mirrors.aliyun.com/centos/centos7.4.1708/os/x86_64/Packages/bash-4.2.46-28.el7.x86_64.rpm state=present" --- #cron 模块 ####远程主机 crontab 配置 |参数|说明 |--|-- |backup=yes/no|在远程主机的原任务计划内容修改之前对其进行备份 |cron_file|用来指定一个计划任务文件,也就是将计划任务写到远程主机的/etc/cron.d目录下,然后创建一个文件对应的计划任务 |minute|分钟:(0~59、*、*/2等等) |hour|小时:(0~23、*、*/2等等) |day|日:(1~31、*、*/2等等) |month|月:(1~12、*、*/2等等) |weekday|周:(0~7、*等等) |special_time|特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每时) |name|定时任务的名称,最好设置,因为删除操作需要指定此名称 |job|要执行的动作 |state|创建:present,删除:absent,默认:present |user|以哪个用户的身份执行job指定的任务 例: shell > ansible Client -m cron -a "name='check dirs' hour='5,2' job='ls -alh > /dev/null'" 效果: #Ansible: check dirs * 5,2 * * * ls -alh > /dev/null --- #get_url 模块 ####实现在远程主机下载指定 URL 到本地,支持 sha256sum 文件校验 |参数|说明 |--|-- |timeout|下载超时时间,默认为10秒 |url|下载的url |url_username|主要用于需要用户名和密码进行验证的情况 |url_password|主要用于需要用户名和密码进行验证的情况 例: shell > ansible Client -m get_url -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes" --- #user与group 服务模块 ####远程主机用户和用户组管理 |参数|说明 |--|-- |name|指定用户名 |group|指定用户的主组 |groups|指定用户的附加组 |state|创建:present,删除:absent。默认:present |remove|在state=absent生效,相当于userdel --remove # 添加用户 ansible Client -m user -a "name=wang comment='user wang'" # 删除用户 ansible Client -m user -a "name=wang state=absent remove=yes" #创建用户的ssh密钥 ansible Client -m user -a "name=wang generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa" #设置用户过期时间(时间戳) ansible Client -m user -a "name=wang expires=1422403387" --- #mount 模块 ####远程主机分区挂载 ansible Client -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present" --- ##stat 模块 ####获取远程文件状态信息,atime/ctime/mtime/md5/uid/gid 等信息 ansible Client -m stat -a "path=/etc/syctl.conf" --- #firewalld 模块 ####注意:firewalld要求远程节点上的firewalld版本在0.2.11以上 #添加端口规则(关闭) ansible Client -m firewalld -a "port=8081/tcp permanent=true state=disabled" #添加端口规则(开启) ansible Client -m firewalld -a "port=161-169/udp permanent=true state=enabled" #复杂规则 ansible Client -m firewalld -a "rule family='ipv4' source address='192.168.142.166' port protocol='tcp' port='6379' accept" ansible Client -m firewalld -a "source=192.168.10.0/24 zone=internal state=enabled" ansible Client -m firewalld -a "masquerade=yes permanent=true zone=internal state=enabled"
分享到: