Ansible常用模块

Ansible模块

# 环境
# ansible: 172.16.1.61
cat /etc/ansible/hosts
[web]
web1:   172.16.1.7
web2:  172.16.1.8
web3:  172.16.1.9
1. ssh免密钥配置
# 免交互创建密钥
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""

# 免交互将密钥推送至远端
sshpass -p'1289456'  ssh-copy-id -i ~/.ssh/id_rsa.pub "-o StrictHostKeyChecking=no" 172.16.1.108

# scp免交互拷贝远程拷贝
sshpass -p "1289456" scp [email protected]:/root/1.txt /tmp

# 通过ansible使用scp免交互远程拷贝
ansible web -m shell -a " sshpass -p "1289456" scp [email protected]:/root/1.txt /tmp "
2. Ad-Hoc
# ad-hoc 表示临时命令,不会保存
# ansible中有两种模式,分别是ad-hoc模式和playbook模式

#使用场景
# 在多台机器上,查看某个进程是否启动
# 在多台机器上,拷贝指定日志文件到本地
3. Ad-Hoc命令格式
命令 + 主机组名称 + 指定模块 + 模块动作 + 具体命令
4. command命令模块( shell )
# command 为默认模块,可以不指定;
ansible web -a "hostname"

# 特殊操作可以使用shell模块,同样是命令模块
ansible web -m shell -a "ifconfig |grep eth0 " -f 50
# -f = forks /etc/ansible/ansible.cfg   #结果返回的数量
5. script脚本模块
ansible web -m script -a "/scripts/check_flog.sh"
6. yum 安装软件模块
# name           指定要安装的软件包名称;
# state          指定使用yum的方法; (installed,persent #安装) (removed,absent #移除软件包)  (latest #安装最新)
# exclude        排除
# enablerepo     指定yum仓库
# disablerepo    安装时不使用哪个仓库
ansible web -m yum -a "name=nginx state=installed"

ansible web -m yum -a "name=nginx state=latest"

ansible web -m yum -a "name=nginx enablerepo=epel state=present"

ansible web -m yum -a "name=http://192.168.16.236/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present "

ansible web -m yum -a "name='*' state=latest exclude="kernel*""

ansible web -m yum -a "name=nginx state=abent"
7. copy 拷贝模块
`# src          源文件
`# dest         目标路径
`# backup       对推送过去的文件,进行备份
`# content      直接批量的在被管理端的文件中添加内容
`# group        指定属组
`# owner        指定属主
`# mode         指定权限
ansible web -m copy -a 'src=/etc/yum.repos.d/nginx.repo dest=/tmp/owner=root group=root mode=600 backup=yes'

ansible web -m copy -a "src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf owner=root group=root mode=0644 backup=yes"

# 直接向远端文件内写入数据信息,并且会覆盖远端文件内原有数据信息
ansible web -m copy -a "content='test' dest=/tmp/dtest.txt"
8.systemd 启动服务模块
`# name         服务名称
`# state        操作  ( started  stopped  restarted  reloaded )
`# enabled      是否开机自启动 yes|no
ansible web -m systemd -a "name=nginx state=started"

ansible web -m systemd -a "name=nginx state=started enabled=yes"
9.file 文件配置模块
`# path     指定远程主机目录或文件信息
`# recures  递归授权
`# state    类型或动作 -->
            `# --> directory    创建目录    
            `# --> touch            创建文件  
            `# --> link             创建链接文件 
            `# --> absent           删除文件或目录 
            `# --> mode             指定权限  
            `# --> owner            指定属主
            `# --> group            指定属组
ansible web -m file -a "path=/tmp/test state=directory"

ansible web -m file -a "path=/tmp/test state=touch mode=555 owner=root group=root"

ansible web -m file -a "src=/tmp/test path=/tmp/test_link state=link"
10. group模块
`# name         指定创建的组名
`# gid          指定组的gid
`# state        状态 -->
                `# --> absent  移除远端主机的组
                `# --> present 创建远端主机的组
ansible web -m group -a " name=www gid=666 state=present"

ansible web -m group -a " name=www state=absent"
11. user模块
`# name                 指定创建的用户名
`# uid                  指定用户uid
`# group                指定用户组名称
`# groups               指定附加组名称
`# password             给用户添加密码
`# shell                指定用户登录shell
`# create_home          是否创建家目录
`# system               指定系统用户
ansible web -m user -a "name=www uid=666 shell=/sbin/nologin create_home=no"

`# 将明文密码进行hash加密,然后进行用户创建
ansilbe all -i localhost, -m debug -a "msg={{'password' | password_hash('sha512', 'mysecretsalt' ) }}"  ;
 "msg": "$6$mysecretsalt$ZB9R8AirQYAXhtfhOo2qdJz52FyNI6v3L6Uc3KNRP.arBKIYpcuEyQewT5qBAHoyQFwHkW6Z551Ql.cZ53GeY0"
ansible web -m user -a 'name=mysql password="$6$mysecretsalt$ZB9R8AirQYAXhtfhOo2qdJz52FyNI6v3L6Uc3KNRP.arBKIYpcuEyQewT5qBAHoyQFwHkW6Z551Ql.cZ53GeY0"'
12. mount 挂载
`# src          源设备( 磁盘|光盘|远程共享地址 )
`# path         挂载点
`# fstype       设备类型  --> nfs  xfs  ext4   iso9660
`# opts         挂载选项    defaults
`# stste        状态 -->
                `# --> absent  | mounted   永久挂载
                `# --> present | unmounted 临时挂载

ansible web -m mount -a "src=172.16.1.31:/data/blog path=/opt fstype=nfs opts=defaults state=mounted"

ansible web -m mount -a "src=172.16.1.31:/data/blog path=/opt fstype=nfs opts=defaults state=unmounted"
13. selinux
`# 关闭selinux
ansible web -m selinux -a "state=disabled"
14. firewalld
`# zone             指定区域 默认public
`# service          指定服务名称
`# port             指定端口
`# state            启用或禁止
`# masquerade       开机地址伪装是否开启 yes|no
`# immediate        临时生效 yes | no
`# permanent        永久生效
`# source           来源IP
`# rich_rule:   rule service name="ftp" audit limit value="1/m" accept

ansible web -m firewalld -a "zone=public  service=http state=enabled immediate=yes permanent=yes"

ansible web -m firewalld -a "zone=public  port=80/tcp state=enabled immediate=yes permanent=yes"

`# 将5555端口转发到 172.16.1.7 22  端口 开启masquerade地址伪装`
ansible web -m firewalld -a "zone=public rich_rule='rule family=ipv4 forward-port port=5555 protocol=tcp to-port=22 to-addr=172.16.1.7'  state=enabled immediate=yes"

ansible web -m firewalld -a "zone=public masquerade=yes state=enabled immediate=yes"

`# 配置基于来源IP  10.0.0.1主机 放行 22 端口`
ansible web -m firewalld -a "zone=public rich_rule='rule family=ipv4 source address=10.0.0.100/32 service name=ssh accept'  state=enabled immediate=yes"
15. cron 定时任务模块


`# 添加一个定时任务
ansible web -m cron -a "name='Backup scripts' minute=00 hour=05 user=root job='/bin/bash /scripts/check_data.sh &>/dev/null'"

`# 删除定时任务
ansible web -m cron -a "name='Backup scripts' minute=00 hour=05 user=root job='/bin/bash /scripts/check_data.sh &>/dev/null' state=absent"
16.yum_repository 源仓库模块
`# name             仓库名称,文件的名称
`# description      描述
`# baseurl          仓库地址
`# enabled          是否启用该仓库yes
`# gpgcheck         不对下载的包检查

ansible web -m yum_repository -a 'name=rpmforge description="RPMforge YUM Repo" baseurl="https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/" enabled=yes gpgcheck=no'

你可能感兴趣的:(Ansible常用模块)