ansible 知识
ansible 是一个自动化运维工具,他可以在一台主机上安装好 ansible,然后通过这个 ansible 主机对其他需要管理的机器作部署修改的操作,装了 ansible 的服务器一般被叫做主控端。
1.hosts 文件
ansible中第一个重要的文件是 hosts (主机清单文件) ,在这个文件中存放的是需要操作的服务器清单。
例:
[websrvs]
10.100.200.8
10.200.100.7
[dbsrvs]
10.200.100.100
10.200.100.105
在这个文件中将需要管理的主机分组,在执行ansible命令的时候可以指定分组主机进行执行,以便对被控主机有选择的执行操作。
2. ansible.cfg 主配置文件
里面指定了主机列表的hosts文件路径,和默认使用模块等设置。
3.ansible-doc 命令
ansible-doc可以查看 ansible 模块的信息,包括各种参数、类型等。
命令格式:
ansible-doc (这里可选 -s 参数,表示精简帮助信息) + 模块名
例:
ansible-doc -s command
4.ansible 命令
ansible <hosts> [-m module] [-a 模块参数]
例:ansible dbsrvs -m command -a "cd /etc"
注:dbsrvs 是上面hosts文件中的组,这条命令表示对 10.200.100.100,10.200.100.105 两台机器执行 cd /etc 命令。
如果想对所有的 hosts 中主机执行,则用 all 代替 dbsrvs 即可。
5.ansible 工具
ansible-playbook:此工具用于执行编写好的 playbook 任务。(yml 语法文本,缩进严格,.yml 尾缀)。
ansible-vault: 此工具用来加密 yml 文件。(当 yml 中有明文密码等信息时,加密是个好选择)。
ansible-vault encrypt *.yml (加密)
ansible-vault decrypt *.yml (解密)
注:加密后不可执行,并且不能用 cat 命令查看。
6.ansible 模块
--command 模块:command 是默认模块,功能是远程执行 linux 命令,并且它是默认模块,在执行 ansible dbsrvs -m "模块名" 时可以省略 -m "模块名" 不写。
例:ansible dbsrvs -m command -a 'linux命令'
缺点:不支持linux的通配符、重定向等功能,所以不适合常用。
--shell 模块:和 command 模块类似,都是在远程主机上执行 linux 命令。但是好处是支持通配符、重定向等功能,但有些特殊命令执行仍有限制。
由于 shell 的支持性比较好,所以一般让 shell 来充当默认模块。(在 ansible.cfg 文件中搜索 command 项,将值变为shell)
--script 模块:在 ansible 主机上将 bash 脚本给所有被控机执行的模块。
例:ansible dbsrvs -m script -a'文件夹/脚本文件'
注:此模块工作原理是将脚本文件推送到远程主机上,等到远程主机执行完毕后再将脚本文件删除掉。
如果在ansible主控主机上按 ctrl + c 退出执行过程,远程推送文件也会删除,不会留下脏文件。
--copy 模块:将ansible主控端文件复制到远程主机。(传输目标支持目录)
例:ansible dbsrvs -m copy -a "src= /etc/sysconfig dest=/data/ owner=wang mode=600"
注:ansible主机目录 src 远程主机目录 dest 所有者 owner 权限 mode
--fetch 模块:从远程主机上提取文件到 ansible 主机,copy 和 fetch 是反向的两个操作。(传输目标不支持目录)
例:ansible dbsrvs -m fetch -a "src= /etc/redhat-release dest=/data/os"
注:ansible主机目录 dest 远程主机目录 src
主控端即使不存在 os 目录,也会自动创建
--file 模块: 设置文件属性。
例1(创建空文件):ansible dbsrvs -m file -a 'path=/data/test.txt state=touch'
注:state 参数 touch 代表创建空文件,absent 代表删除文件。
例2(改变文件权限、所属组):ansible dbsrvs -m file -a 'path=/data/test.txt group=bin mode=600'
注:文件已经存在的情况下。
--unarchive 模块:解包解压缩。
2种用法: 将 ansible 主机上的压缩包传到远程主机后解压缩到特定目录,设置copy = yes
将远程主机上的某个压缩包解压到指定路径下,copy = no
例:ansible dbsrvs -m unarchive -a 'src= dest= mode= copy= '
注:copy 是必填参数,但是有默认值,如果不写则默认 yes,表示是第一种用法,src 就是 ansible 主机下的路径
如果 copy 是 no 则表示是第二种用法,src 就是远程路径。
--archive 模块:打包。
例:ansible dbsrvs -m archive -a 'path= dest= formant= owner= mode= '
注:formant 参数代表文件格式。 dest 必须要将文件名设定好。
--hostname 模块:改主机名。
例:ansible dbsrvs -m hostname -a 'name= '
注:指定主机可以是组和指定ip。
--yum 模块:管理软件包,支持RHEL,Centos,不支持ubuntu。
例:ansible dbsrvs -m yum -a"name=包名 state= enabled= "
注:state 为 absent 时表示卸载软件,不加 state 项表示默认安装
enabled参数为 yes 时,表示开机自启。
--service 模块:启动、关闭服务。
例:ansible all -m service -a "name=httpd states=started enabled=no"
--setup 模块:查看主机信息。
例:ansible all -m setup (查看所有主机组内主机信息)
ansible all -m setup -a 'filter=主机信息参数'
7.playbook (yaml语言书写,yaml格式)
playbook中重要的几个参数:hosts (指定执行任务的主机)
remote_user:表示以什么用户执行 playbook
gather_facts:表示是否执行过程中收集主机信息(setup 模块支持,一般与执行主机无关的任务时设为 no 以便减少运行时间)
task:表示要执行的任务。
执行语句:ansible-playbook <file-name> <options>
options : --check 检查yaml文件是否有格式语法等错误。
--list-hosts 列出运行任务的主机。
--list-tags 列出tags。
--list-tasks 列出tasks。
--limit 是hosts的另一层过滤。
-v、-vv、-vvv 详细显示执行过程,v越多越详细。
tags标签:可以选择执行那个task.
用法:在task下加上 tags: ceshi
执行时:ansible-playbook -t ceshi httpd.yml --limit (<ip>)
playbook中使用变量:
变量名:只能由字母、数字、下划线组成,且只能以字母开头。 {{ 变量名 }}
变量来源:1.setup 模块:tasks:
-name: create
file:name/data/{{ ansible_nodename }}.log state=touoch (这里的ansible_nodename就是setup模块信息,此时gather_facts不可禁用)
2.自定义变量:在playbook文件中写{{ a }}
执行时赋值:ansible-playbook -e a=python var2.yml
3.在另一个文件中定义变量:
例:变量文件 vars.yml 直接写 变量名:变量值
playbook文件:remote_user:root
var_files:
-vars.yml(如果和playbook不在同一文件夹下支持绝对路径写法)
4.在主机清单文件(hosts文件)中定义:
例:
一、
[websrvs]
10.0.0.8 host=model1(每一个host只作用于一台主机)
10.0.0.9 host=model2
二、
在清单文件加上(作用于全组)
[websrvs:vars]
domain=model3
使用:ansible websrvs -m hostname -a'name={{host}}.{{domain}}'
playbook中使用when:
tasks:
-name:
command:
when:ansible_os_family=="Redhat"
(当条件成立才执行这条任务)
playbook中使用循环(with_items):
takes:
-name:
user: name={{items}} state=present groups=wheel
with-items:
-tesuser1
-tesuser2
等同于:
user:name=tesuser1 state=present groups=wheel
user:name=tesuser2 state=present groups=wheel
这两条任务。
playbook的资料:https://www.cnblogs.com/yanjieli/p/10969299.html#Playbook%E6%A0%B8%E5%BF%83%E5%85%83%E7%B4%A0