Ansible

我怕爱的太早我们不能终老 提交于 2021-01-06 09:21:03

目录

  1. Ansible - 安装介绍
  2. Ansible -常用模块介绍
  3. Ansbile - Playbook 使用
  4. Ansible - Roles 使用示例

参考

  1. bilibili马哥视频
  2. 运维派教程

介绍

ansible是一种自动化运维工具,基于Python开发,可实现批量系统配置、批量程序部署、批量运行命令等功能。


环境信息

# hostnamectl 
   Static hostname: localhost.localdomain
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 752d91f949a840fa9f2ed0b2ca54d8ad
           Boot ID: 81088a1ae25a46279b7746e8c9e0a091
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-957.el7.x86_64
      Architecture: x86-64


安装

可直接通过yum安装

[root@localhost ~]# yum search ansible


校验

[root@localhost ~]# ansible --version
ansible 2.9.15
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]


常用工具

/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具

ansible-doc

格式

ansible-doc [options] [module...]
-l, --list          #列出可用模块
-s, --snippet       #显示指定模块的playbook片段

例如查看ping模块的简短文档

[root@localhost ~]# ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return `pong' on success
  ping:
      data:                  # Data to return for the `ping' return value. If this parameter is set to `crash', the module will cause an exception.

ansible

格式

ansible <host-pattern> [-m module_name] [-a args]

--version           #显示版本
-m module           #指定模块,默认为command
-v                  #详细过程 –vv  -vvv更详细
--list-hosts        #显示主机列表,可简写 --list
-k, --ask-pass      #提示输入ssh连接密码,默认Key验证    
-C, --check         #检查,并不执行
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-u, --user=REMOTE_USER #执行远程执行的用户
-b, --become        #代替旧版的sudo 切换
--become-user=USERNAME  #指定sudo的runas用户,默认为root
-K, --ask-become-pass  #提示输入sudo时的口令

注:若执行-k,必须所有hosts中主机密码相同,否则可能会出现失败

示例

[root@localhost ~]# ssh-keygen 
[root@localhost ~]# ssh-copy-id 10.91.156.209
[root@localhost ~]# ssh-copy-id 10.91.156.205
# 此时公钥已被添加到209 205两台机器中的root用户下
[root@localhost ~]# ansible all -m ping 
10.91.156.209 | SUCCESS => {
   
              
    "ansible_facts": {
   
              
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
10.91.156.205 | SUCCESS => {
   
              
    "ansible_facts": {
   
              
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

查看所有hosts

[root@localhost ~]# ansible all --list-hosts
  hosts (2):
    10.91.156.205
    10.91.156.209
[root@localhost ~]# ansible server --list-hosts
  hosts (1):
    10.91.156.209
[root@localhost ~]# ansible node --list-hosts
  hosts (1):
    10.91.156.205
[root@localhost ~]# cat /etc/ansible/hosts 
[server]
10.91.156.209

[node]
10.91.156.205

ansible命令执行过程

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

具体过程可通过-vvv参数来详细查看

[root@localhost ~]# ansible server -vvv -m ping > ansible.log
# 增加执行权限记录
[root@localhost ~]# grep -n chmod ansible.log 
31:<10.91.156.209> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/4f24120d2d 10.91.156.209 '/bin/sh -c '"'"'chmod u+x /root/.ansible/tmp/ansible-tmp-1608777830.06-12031-172335200139721/ /root/.ansible/tmp/ansible-tmp-1608777830.06-12031-172335200139721/AnsiballZ_ping.py && sleep 0'"'"''

#删除临时文件
[root@localhost ~]# grep -n chmod ansible.log 
...
37:<10.91.156.209> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/4f24120d2d 10.91.156.209 '/bin/sh -c '"'"'rm -f -r /root/.ansible/tmp/ansible-tmp-1608777830.06-12031-172335200139721/ > /dev/null 2>&1 && sleep 0'"'"''

查找ansible.cfg顺序

  1. ANSIBLE_CONFIG:首先,Ansible命令会检查环境变量,及这个环境变量将指向的配置文件
  2. ./ansible.cfg:其次,将会检查当前目录下的ansible.cfg配置文件
  3. ~/.ansible.cfg:再次,将会检查当前用户home目录下的.ansible.cfg配置文件
  4. /etc/ansible/ansible.cfg:最后,将会检查在用软件包管理工具安装Ansible时自动产生的配置文件

ansible-galaxy

此工具会连接 https://galaxy.ansible.com 下载相应的roles

示例

#列出所有已安装的galaxy
ansible-galaxy list
#安装galaxy
ansible-galaxy install geerlingguy.mysql
ansible-galaxy install geerlingguy.redis
#删除galaxy
ansible-galaxy remove geerlingguy.redis

ansible-playbook

作用

此工具用于执行编写好的 playbook任务

示例

[root@localhost ~]# cat hello.yml 
- hosts: server
  remote_user: root  
  tasks:
    - name: hello world
      command: /usr/bin/wall hello world

执行结果

image-20201224112943374


ansible-vault

作用

此工具可以用于加密解密yml文件

示例

ansible-vault encrypt hello.yml     #加密
ansible-vault decrypt hello.yml     #解密
ansible-vault view hello.yml        #查看
ansible-vault edit  hello.yml       #编辑加密文件
ansible-vault rekey  hello.yml      #修改口令
ansible-vault create new.yml        #创建新文件

ansible-console

此工具可交互执行命令,支持tab,ansible 2.0+新增

提示符格式:

执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$

常用子命令

  • 设置并发数: forks n 例如: forks 10
  • 切换组: cd 主机组 例如: cd web
  • 列出当前组主机列表: list
  • 列出所有的内置命令: ?或help

范例

[root@ansible ~]#ansible-console
Welcome to the ansible console.
Type help or ? to list commands.

root@all (3)[f:5]list
10.0.0.8
10.0.0.7
10.0.0.6
root@all (3)[f:5] cd websrvs
root@websrvs (2)[f:5]list
10.0.0.7
10.0.0.8
root@websrvs (2)[f:5] forks 10
root@websrvs (2)[f:10]cd appsrvs
root@appsrvs (2)[f:5] yum name=httpd state=present
root@appsrvs (2)[f:5]$ service name=httpd state=started


其它

输出颜色代表含义

ansible执行完任务后,会根据不同的颜色来说明执行的结果,默认颜色的含义如下(在/etc/ansible/ansible.cfg中)。其中最常见的就是红黄绿三种颜色。

[colors]
#highlight = white
#verbose = blue
#warn = bright purple

# 执行失败
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green

# 执行成功并且对目标主机做变更
#changed = yellow

# 执行成功并且不需要做改变的操作
#diff_add = green
#diff_remove = red
#diff_lines = cyan










易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!