ansible基础模块使用总结

ansible基础模块使用总结

大纲

  • 基础知识
  • 配置说明
  • 准备工作
  • 基本使用
  • 模块总结

基础知识

中文资源网 http://www.ansible.com.cn

配置说明

ansible的配置文件是 ** /etc/ansible/ansible.cfg ** 配置文件修改后无需重启,每次ansible调用都会读取最新的配置

关闭紫色的警告信息
deprecation_warnings = False
在这里插入图片描述

host_key_checking

准备工作

以下是一个服务器集群环境

在这里插入图片描述

不用输入密码

不输入密码有两种处理方式

  • 1 直接配置密码(简单)
  • 2 服务器之间免密码登陆

1 在/etc/ansible/hosts 配置密码

可以将远程主机的密码账号,配置到hosts中这样就可以不用在输入命令的时候带上-k 参数

第一步修改 /etc/ansible/ansible.cfg
host_key_checking = False
在这里插入图片描述

第二步修改 /etc/ansible/hosts
将账号,密码,ssh端口配置在hosts中 如下:

[yyk]
47.110.43.170 ansible_ssh_user='root' ansible_ssh_port=22 ansible_ssh_pass='xxx

[saas]
172.24.128.59 ansible_ssh_user='root' ansible_ssh_pass='xxx'

2 主机之间使用免密码登陆

使用ansible之前需要能让192.168.0.207免密登陆所有被控制的机器,免密登陆详情见《免密登陆.md》
步骤如下图

在这里插入图片描述
在这里插入图片描述

使用ansible之前需要添加被控制机器ip到 /etc/ansible/host文件 (Inventory)
在这里插入图片描述

在host文件中可以定义组,定义变量

[web] #[组名称]
192.168.0.201

ansible all --list 可以查看所有授控的主机

基本使用

基础命令:

  • ansible
  • ansible-galaxy : 下载role
  • ansible-pull
  • ansible-doc
  • ansible-playbook
  • ansible-vault : 配置文件加密
  • ansible-console

在这里插入图片描述

模块总结

模块的使用格式为 ansible 【all(表示所有机器) |机器ip | 机器组名称】 -m 【模块名称】 -a 【‘命令’】(注意使用单引号)-k (-k 表示输入密码一般都是免密登陆不需要-k参数)

查看所有支持的模块

ansible-doc -l
ansible-doc -l | grep xxx 过滤

debug 模块

debug模块可以看到命中执行的效果和一些参数

debug一般直接在playbook中使用使用方式如下

第一种
name: Get debug info
debug: var=result verbosity=0

name: Get debug info
debug: 
  msg: "{{变量}}"

command 模块 (默认模块)

command 是ansible的默认模块 所以可以不使用 -m 指定模块名 主要功能是执行shell命令

ansible g2 -a 'ls /medcrab'  【并未使用-m command 直接-a 带参数实现远程执行命令】

command 模块 不支持脚本中使用 $HOME, |管道 <> 重定向符号 所以不是很方便建议直接使用shell模块

shell 模块 (重要模块)

shell 模块功能与command类似 可以用来执行shell命令 但是比command更强大 支持 $HOME, |管道 <> 重定向符号 所以可以考虑直接使用 shell命令代替command

查看控制机的环境变量

ansible all -m shell -a 'chdir=/data/tmp echo $JAVA_HOME '

在这里插入图片描述

特别注意 ansible 执行shell是利用ssh。有所谓的non-login shell和login shell问题 需要注意环境变量的配置,详细见《环境变量问题总结.md》

远程运行一个java程序(注意环境变量)否则无法启动
注意 真正部署一个java程序 需要使用playbook 来处理

ansible all -m shell -a 'chdir=/data/tmp nohup java -jar my-release-control.jar 1>/data/tmp/log.out 2>&1 & '

在这里插入图片描述

特别注意 详细见《环境变量问题总结.md》

shell模块中使用awk $问题

ansible g2 -m shell -a "netstat -tunlp | grep 31888 | awk '{print \$7}'"  #注意$符号前面需要使用\ 并且要用单引号

script 模块 (重要模块)

在远程主机上执行ansible主机上的脚本,且不需要将脚本复制到被执行的远程主机上
简单将就是只要在ansible主机上编写一个脚本,使用script模块就可以让这个脚本在任意控制机上执行,不用再去把脚本挨个手动复制到控制机

例如有 pp.sh 脚本 内容如下

echo "111"  >> show2.txt
echo $1-$2-$3'-insert' >> show2.txt

利用script 模块 可以在所有被控制的机器上执行此脚本

ansible g1 -m script -a 'chdir=/medcrab/ttcopy /medcrab/tt/pp.sh jim jeff tom'  【在g2组上执行pp.sh 还可以指定参数 jim jeff tom都是对应pp.sh脚本中的参数】

主要参数 :

  • 脚本路径,必须参数 [注意 此参数直接指定脚本,没有例如chdir=那样的前缀]
  • chdir:在执行脚本之前,先进入到指定目录
  • creates:当远程主机上的该文件存在时,不执行脚本;反之执行
  • removes:当远程主机上的该文件不存在时,不执行脚本;反之执行

在这里插入图片描述

copy 模块 (重要模块)

copy可以实现对被控制机的数据复制,适合于发布部署软件的场景

ansible all -m copy -a 'src=/medcrab/copy1.txt dest=/medcrab/cp.txt'  把控制机/medcrab/copy1.txt 复制到所有控制机上
ansible all -m copy -a 'src=/medcrab/copy1.txt dest=/medcrab/cp.txt'

主要参数 :

  • src参数 :用于指定需要copy的文件或目录。
  • dest参数 :用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
  • content参数 :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
  • force参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
  • backup参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • owner参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
  • group参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
  • mode参数 : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r–r–“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。

在这里插入图片描述

hostname 模块

hostname模块用于修改主机名(注意: 它不能修改/etc/hosts文件)

将其中一远程机器主机名修改为salve
ansible 10.1.1.12  -m hostname -a 'name=salve'
基本格式: ansible 被管理机名称或组名 -m 模块名 -a "参数1=值1 参数2=值2"

file 模块

file模块用于对文件相关的操作(创建, 删除, 软硬链接,设置权限等)

创建一个目录
master# ansible group1 -m file -a 'path=/test state=directory'

创建一个文件
master# ansible group1 -m file -a 'path=/test/111 state=touch'

递归修改owner,group,mode
master# ansible group1 -m file -a 'path=/test recurse=yes owner=bin group=daemon mode=1777'

删除目录(连同目录里的所有文件)
master# ansible group1 -m file -a 'path=/test state=absent'

创建文件并指定owner,group,mode等
master# ansible group1 -m file -a 'path=/tmp/111 state=touch owner=bin group=daemon mode=1777'

删除文件
master# ansible group1 -m file -a 'path=/tmp/111 state=absent'

创建软链接文件
master# ansible group1 -m file -a 'src=/etc/fstab path=/tmp/fstab state=link'

创建硬链接文件
master# ansible group1 -m file -a 'src=/etc/fstab path=/tmp/fstab2 state=hard'

Fetch 模块

抓去远程控制机上的文件

ping 模块

ping 模块可以快速的测试被控制机的联通性**(其原理并不是使用原生的ping 而是基于python写的功能)**
使用 ** ansible-doc ping** 可以查看ping模块的功能描述

ansible all -m ping  【ping 所有机器】
ansible g2 -m ping 【ping 所有g2组】

user 模块

user模块用于管理用户账号和用户属性

创建aaa用户,默认为普通用户,创建家目录
master# ansible group1 -m user -a 'name=aaa state=present'

创建bbb系统用户,并且登录shell环境为/sbin/nologin
master# ansible group1 -m user -a 'name=bbb state=present system=yes  shell="/sbin/nologin"'

删除aaa用户,但家目录默认没有删除
master# ansible group1 -m user -a 'name=aaa state=absent'

删除bbb用户,使用remove=yes参数让其删除用户的同时也删除家目录
master# ansible group1 -m user -a 'name=bbb state=absent remove=yes'

yum模块

service模块

lineinfile模块

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值