ansible 知识

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值