Ansible之基础(1)

概述

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible 批量在远程主机上执行命令

# 资源
bing.com   # 网站
https://blog.csdn.net/zyboy2000/article/details/53057330  # ssh认证原理

linux知识点补充

# 查看用户创建成功与否
1.ll /home
2.tail -1 /etc/passwd
3.tail  /etc/shadow
4.id alex
echo "alex3714" |passwd --stdin alex # 给用户设置密码,不需要二次确认

5. 单引号与双引号的区别
name=alex
echo "$name"   # alex
echo '$name'   # $name

shabang

ansible web -a "pwd" -u alex -k
-k: 输入密码 

安装

1. 安装epel源
1) 安装wget
yum install -y wget 
2) 下载epel源文件
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 

2. 安装ansible 
yum install ansible -y

命令

1. 查看帮助信息
ansible -h

Usage: ansible <host-pattern> [options]     # 主机规则
-a MODULE_ARGS, --args=MODULE_ARGS          # 模块的参数
-C  --check                                 # 会去执行, 但是不做任何的改变, 测试
-f FORKS, --forks=FORKS                     # 指定进程数, 做并发
--list-hosts                                # 查看运行的机器, 列出主机
-m MODULE_NAME                              # 模块名称
--syntax-check                              # 检查语法
-k --ask-pass  ask for connection password  # 指定密码
-v                                          # 输出详细信息

ansible配置文件

1. 查看配置文件命令
rpm -ql ansible  或  rpm -ql ansible|more

/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles

ssh认证方式

# 两种认证方式
1. 密码方式
2. 秘钥方式

1. 生成秘钥
ssh-keygen
2. 将秘钥文件复制到远程主机
ssh-copy-id root@10.0.0.132     # 将秘钥文件放在root的家目录下面

ping 命令走的是 icmp 协议, ansible 中的 ping 走的是 ssh 协议

host-pattern的格式

# 配置 /etc/ansible/hosts 文件
1. 单个主机的设置
10.0.0.132
10.0.0.133
10.0.0.134

2. 分组信息
10.0.0.[132:133]
[web]
10.0.0.132
10.0.0.133
[db]
10.0.0.133
10.0.0.134
[cache]
10.0.0.134
# www[001:006].example.com     # 从www001到www006

# 免密码命令测试
1. 测试单个的主机
ansible 10.0.0.52 -m ping

2. 测试单个组的机器
ansible web -m ping

3. 测试多个组, 注意: 使用单引号, 双引号报错
	1) 交集: 'web:&db'
	   ansible 'web:&db' -m ping
	2) 并集: 'web:db'
	   ansible 'web:db' -m ping
	   ansible web,db -m ping
	3) 差集 'web:!db'
	   ansible 'web:!db' -m ping   # 在web中但不在db中
	   
4. 测试 hosts 文件中的所有机器 
ansible all -m ping     

5. 测试部分机器
ansible 10.0.0.51, 10.0.0.52 -m ping  

弱口令校验

密码要符合的规则:
1) 必须有大写字母, 小写字母, 数字, 特殊字符
2) 密码必须在12位以上
3) 密码需要三个月一换

帮助信息

1. 查看 ansible 帮助信息
ansible-doc -h

Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j, --json               # 以json的方式返回所有模块的信息
-l                       # 列出所有的模块
-s, --snippet            # 以片段式显示模块的帮助信息
ansible-doc ping         # 显示全部信息
ansible-doc -l |wc -l    # 统计ansible的模块

查看模块信息
ansible-doc -s 模块名

模块

command

# 执行命令 但不支持特殊字符 ( $ < > | ; & )

1. chdir: 切换目录
ansible web -m command -a "chdir=/tmp pwd"     # 切换目录,一般做编译安装

2. 检测指定的目录是否存在
creates    # 如果存在, 就不执行, 如果不存在, 就执行
removes    # 如果存在, 就执行, 如果不存在, 就不执行

ansible web -m command -a "pwd" 
ansible web -m command -a "ls /tmp"
ansible web -m command -a "creates=/tmp pwd"   # 不被执行,因为/tmp已经存在,
ansible web -m command -a "creates=/tmp2 pwd"  # 被执行,因为/tmp2目录不存在
ansible web -m command -a "creates=/tmp2 mkdir /data" # 会被执行,因为/tmp2目录不存在
ansible web -m command -a "removes=/tmp2 pwd"  # 不被执行,因为/tmp2目录不存在
ansible web -m command -a "removes=/tmp pwd"   # 会被执行,因为/tmp已经存在,

shell

# 执行远程机器上的shell脚本或者python脚本

- chdir    # 切换目录,一般是编译安装
- creates  # 判断是否存在,如果存在,就不执行,如果不存在,就执行
- removes  # 判断是否存在,如果存在,就执行,如果不存在,就不执行

# 编写脚本文件
1. shell 脚本
#!/bin/bash
mkdir /alex

2. python脚本
#!/bin/env python 
#coding:utf-8
print "停车坐爱枫林晚,霜叶红于二月花" 

ansible web -m shell -a "echo 'alex'|passwd --stdin alex" # 给用户设置密码
ansible 10.0.0.132 -m shell -a "bash a.sh"                # 执行shell脚本
ansible 10.0.0.132 -m shell -a "./a.sh"                   # 给文件加权限: chmod +x a.sh
ansible 10.0.0.132 -m shell -a "/root/a.sh"
ansible 10.0.0.132 -m shell -a "python a.py"              # 执行python脚本
ansible 10.0.0.132 -m shell -a "/root/a.py" 

script

[skrɪpt]  # 执行本地脚本 (管控机上的脚本), 对远程主机进行操作, 如: 建立文件

- chdir   # 切换目录,一般是编译安装
- creates # 判断远程主机是否存在,如果存在,就不执行,如果不存在,就执行
- removes # 判断远程主机是否存在,如果存在,就执行,如果不存在,就不执行

ansible db -m script -a "/root/a.sh"
ansible db -m script -a "creates=/root/a.sh /root/a.sh" 
ansible db -m script -a "removes=/root/a.sh /root/a.sh" 

copy

# 将本地的文件复制到远程主机上

src      # 指定本机上原文件的路径
backup   # 创建备份文件, 以时间戳结尾, 远程主机没有指定文件, 则不会备份
content  # 直接将内容覆盖写入文件
dest     # 指定远程主机的目标地址
owner    # 修改文件为属主
group    # 修改文件为属组
mode     # 修改文件的权限: r->4 w->2 x->1

ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh"        # 复制文件
ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755"# 复制文件,并修改文件的权限
ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex"  # 复制文件,修改文件的权限,属主,根据md5值来判断
ansible db -m copy -a "src=/etc/init.d dest=/tmp/"  # 复制文件夹
ansible db -m copy -a "src=/etc/init.d/ dest=/tmp/" # 复制文件夹下面的所有文件
ansible db -m copy -a "src=/etc/init.d dest=/tmp/ owner=alex " # 复制文件夹,并改变文件夹的属性,文件夹的文件的属性也会跟着改变
ansible db -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语' dest=/tmp/a.sh" # 直接写文字,覆盖写入,要慎用
ansible db -m copy -a "src=/root/a.sh dest=/root/a.sh mode=755 owner=alex backup=yes" 
# 备份文件,如果远程机器上没有要备份的文件,即使指定了backup=yes 也不会去备份文件

file

# 在远程主机上创建文件, 文件夹, 软连接, 硬链接

access_time   # 访问事件
group         # 属组
mode          # 权限
owner         # 属主
path          # 路径
src			  # 远程主机上的原文件, 与link和hard共同使用
state		  # 指定操作文件的属性
	- directory # 文件夹
	- file      # 如果不存在就不会被创建
	- touch     # 空文件
	- link      # 软连接
	- hard      # 硬链接
	- absent    # 删除
	
ansible db -m file -a "path=/tmp/baoyuan state=directory" # 创建一个目录
ansible db -m file -a "path=/tmp/baoyuan state=directory owner=alex mode=644" # 创建一个目录,并制定属主,权限
ansible db -m file -a "path=/tmp/baoyuan.txt state=touch owner=alex mode=644" # 创建一个文件,并制定属主,权限
ansible db -m file -a "path=/tmp/f src=/etc/fstab state=link" # 创建一个软连接
ansible db -m file -a "path=/tmp/f state=absent" # 删除

补充

软连接  windows的快捷方式  ln —s 原文件 目标文件  源文件改变,目标文件也改变  可以跨越分区  原文件删除,链接失效
硬链接  指向同一个硬盘的地址 ln 原文件 目标文件  原文件改变,目标文件也改变 不可以跨域分区 原文件删除,不会受影响
复制

posted @ 2019-07-15 16:12  言值  阅读(133)  评论(0编辑  收藏  举报