ansible その一 ad-hoc

写在前面:啧啧,看了点关于ansibled的几本书,看了几天还是一脸懵逼,干脆找了点视频看,看了看,哈哈我果然更适合通俗的视频。

下面按着视频的知识点来。就是比较乱了。

 

1 一个小例子

ansible ip地址 -m ping -k

这是个简单的例子,其中ip地址要加入/etc/ansible/hosts 里,否则会报错。-k 是输入密码的意思。一般人不会这么用,这就是个例子。-m是模块的意思。

 

2 分组

可以在/etc/ansible/hosts添加,因为目前都是ad-hoc嘛,所以不用在这里先暂时在这里添加。如果是playbook的话就直接建立个文件。

里面的写法还挺多的。 

[webservers]     # 这是分组名
ip地址
ip地址

3 配置文件

/etc/ansible/ansible.cfg 。

一般把host_key_checking=False  检查对应服务器的host_key,建议取消注释。

log_path,记录日志,最好也打开

4 ansible-doc

显示帮助模块, ansible-doc ping

5 ansible 命令

ansible <hostname> [-m mdule_name] [-a args]

--version                   显示版本

-m module                加模块名

-v    详细过程,  -vv 更详细, -vvv更更详细

--list                           主机列表

-k                               输入sudo密码

-T                               执行命令的超时时间

-u                               指定执行命令的用户

-b                               相当于sudo

ansible all --list                # all 全部主机
ansible test --list               # test分组
ansible all -u 用户 -k -m command -a 'ls'  # 可以不加-m command 因为默认就是它

当加-b 参数时,以sudo权限使用,要每次都输入密码。

给用户加sudo权限

visudo               # 看相关设置,里面有个wheel组

usermod -ad wheel 用户          # 把这个用户加到这个组里

sudo时不需要输入密码设置

visudo 找到%wheel All=(All)  NOPASSWD:ALL      把前面的注释拿掉

 

6 添加公钥

每次执行ansible都要输入密码,添加公钥:

ssh-keygen                 # 然后按提示来,生成公钥
ssh-copy-id  主机的ip地址(应该就是本机的ip)
# 172.24.20.165 本机ip

然后执行ansible就不用输入密码了。

7 通配符和逻辑关系

其实尽量用单引号,双引号有的命令的可能会报错。所以尽量用单引号。

ansible "*srvs" -m ping         # 大概就是这样

或逻辑

ansible '分组1:分组2' -m ping

其实不加引号也可以,执行分组1和分组2里的ip地址,:的意思就是和的意思。

 

且逻辑

ansible "分组1:&分组2" -m ping

意思是在分组1且在分组2里的所有主机。

 

非逻辑

ansible '分组1:!分组2' -m ping 

意思是在分组1里但不在分组2里的所有主机。

 

正则

ansible '~(web|db).*' ...

正则必须是~开头的。

 

ansible执行过程

  1. 加载配置文件,默认/etc/ansible/ansible.cfg
  2. 加载对应模块
  3. 通过ansible将模块或命令生成对应的py临时文件,将该文件传输到远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/xxx.py
  4. 更文件+x执行
  5. 返回执行结果
  6. 删除临时的py文件,sleep退出

执行状态:

绿色:成功,不做改变的操作

黄色:发生改变的操作

红色:执行错误

 

下面BB下常用模块

Command模块

removes  文件已经存在,执行

creates    文件存在则不执行

chdir        切换目录

等等

ansible-doc command # 查看关于command的帮助文档
ansible all -a 'removes=/etc/xx cat /etc/xx' # 文件存在则执行,不存在不执行
ansible all -a 'creates=......'              # 文件存在,则不执行
ansible all -a 'chdir=xx ls'                 # 切换工作目录

但是command不支持$变量,<,>,| ,&等特殊符号,用shell模块就好了。

 

shell 模块

ansible srv -m shell -a 'echo xx | xx'  # 可移执行稍微复杂的命令

但是如果命令太过复杂的话,可能会执行失败,所以可以行进shell脚本里,在通过copy模块copy到各个主机中,然后在执行scropt模块。

所以一般command模块能执行shell模块都可以执行。

ansible all -m shell -a 'echo $Home'   # 双引号会失败,所以要用单引号。

script 模块

在各个主机执行脚本。

ansible xx -m script -a f1.sh
ansible xx -m script -a f1.sh --指定参数 参数值

copy模块

src 是源文件路径

dest 是目标路径

mode 是指定属性

owner 指定 拥有者

backcup 覆盖是备份

ansible all -m copy -a 'src=xx dest=xx backup=yes mode=777 ower=xxx'

 

Fetch 模块

单个文件,不能是目录,和copy相反,是从各个主机拿取文件。

如果是多文件或者是目录,可以先tar下。

ansible srv -m fetch -a 'src=xx dest=xx' # 和copy一个道理

File 模块

state 的参数

touch 建立个新的空文

directory  建立文件夹

absent    删除文件或者文件夹

link          软链接

ansible all -m file -a 'name=/data/fs state=touch' # 建立个空文件
ansible all -m file -a 'src=/etc/xx dest=/xx.link state=link'  # 建立软连接
ansible all -m file -a 'dest=/xx/xx.link state=absent'         # 删除软连接

crom 模块

支持时间:minute,hour,day,month,weekday

添加定时任务

name是这个定时任务的名字,叫啥无所谓了

ansible all -m cron -a 'minute=* job="/usr/bin/wall fuck off" name=test'

删除定时任务

ansible srv -m cron -a 'state=absent name=xxx'

给计划任务加注释
还必须指定job,要不不行

ansible all -m cron -a 'disabled=true job=xxx name=xxx'

disbaled为no false就把注释拿掉了

 

Yum 管理包

state

absent 为删除

removed 也为删除

state 为 latest 为安装,安装最新的,也可以文档,看具体参数。

而且不指定state参数,默认为安装

ansible srv -m yum -a 'name=httpd state=latest'  # 安装模块

ansible srv -m yum -a 'name=httpd,xx'  # 安装多个模块,可以不指定state

 查看安装的模块

ansible all -m yum -a 'list=installed'  

安装本地包

先copy模块,把安装包推到多个主机上。

ansible all -m yum -a 'name=路径或者文件'
ansible all -m yum -a 'name=xx update_cache=yes'   # 更新缓存

service模块

state

stopped   停止服务

started     开始服务

reloaded  重新加载服务

restarted  重新启动

ansible srv -m service -a 'name=httpd state=stopped enabled=yes'  # 加这个是自启动

User模块

创建模块

ansible srv -m user -a 'name=user1 comment="这是注释内容" uid=xx home=xx group=xxx'

删除模块

ansible srv -m user -a 'name=usr1 state=abset remove=yes' # 删除用户和它的的家目录数据,删除家目录参数是remove

 

group模块

absible web -m group -a 'name=nginx system=yes gid=80'

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值