- 介绍
 - 安装配置
 - 注意事项
 - yum安装
 - 验证安装
 - 配置
 - host配置
 - 主机清单配置
 - 主控端
 - 被控端
 
- 常用模块
 - 命令组成
 - command模块
 - shell模块
 - copy模块
 - script模块
 
- 日志信息
 - 最后
 
介绍
-  
Ansible 是一个开源 IT 自动化引擎,可自动执行供应、配置管理、应用程序部署、编排和许多其他 IT 流程。它可以免费使用,并且该项目受益于数千名贡献者的经验和智慧。

 -  
红帽® Ansible 自动化平台将十多个上游项目整合到一个统一的、安全性强化的企业平台中,以实现任务关键型自动化。它建立在开源项目的基础上,为跨职能团队创建端到端的自动化体验。

 
安装配置
注意事项
- ansible的安装主机一般称为主控端,中控,master或堡垒机
 - ansible 2.4版本开始,主控端Python版本需要2.6或以上(CentOS 5 Python版本为 2.4.3)
 - 被控端Python版本小于2.4的,需要安装python-simplejson
 - 被控端如开启SELinux需要安装libselinux-python
 - windows不能做为主控端
 - ansible不是服务,只在需要的时候启动(本质是Python脚本)
 
yum安装
- epel-release
 
yum install epel-release -y
 
- ansible
 
yum install ansible -y
 
验证安装
 ansible --version
 

配置
- 去配置目录,会有三个文件
 
cd /etc/ansible/
 

- 配置 ansible.cfg
 
vim /etc/ansible/ansible.cfg
 
[defaults]
#inventory     = /etc/ansible/hosts      # 主机列表配置文件
#library       = /usr/share/my_modules/  # 库文件存放目录
#remote_tmp    = $HOME/.ansible/tmp      # 临时py命令文件存放在远程主机目录
#local_tmp     = $HOME/.ansible/tmp      # 本机的临时命令执行目录  
#forks         = 5                       # 默认并发数,同时可以执行5次
#sudo_user     = root                    # 默认sudo 用户
#ask_sudo_pass = True                    # 每次执行ansible命令是否询问ssh密码
#ask_pass      = True                    # 每次执行ansible命令是否询问ssh口令
#remote_port   = 22                      # 远程主机的端口号(默认22)
 
# 建议调整项 
host_key_checking = False               # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log           # 日志文件,建议取消注释
module_name   = command                 # 默认模块,可以改为shell
 
host配置

主机清单配置
主控端
- IP:11.0.1.141
 - 执行命令生成:
ssh-keygen -t rsa - 一直按默认的执行

 - 在该目录存在文件:/root/.ssh

 
被控端
- IP:11.0.1.150、11.0.1.151、11.0.1.152
 - 上传公钥至被控机器
 
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.151
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.152
ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.153
 
- root@11.0.1.151 被控机的账号@IP
 - 输入密码信息

 
ansible "*" -m ping  # (*表示所有主机)
ansible 192.168.1.* -m ping
ansible "*srvs" -m ping
 
常用模块
命令组成
ansible <host-pattern> [-m module_name] [-a args]
ansible +被管理的主机(ALL) +模块  +参数
    
    --help                 显示帮助
    --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时的口令
 
command模块
- 默认模块,支持简单的linux命令,不支持管道、重定向等,不建议使用
 
ansible k8s -m command -a "pwd"
ansible k8s -m command -a "echo testa|grep a" #这个不能正常使用
ansible k8s -m command -a "echo bb >>/tmp/testansible" #重定向也无法正常使用
 

shell模块
ansible k8s -m shell -a "echo testa|grep a" #支持管道
ansible k8s -m shell -a "echo bb >>/tmp/testansible" #支持重定向
ansible k8s -m shell -a "cat /etc/passwd|awk -F':' '{print \$1}'" #遇到特殊符号需要加入\转义,这样子ansible才能正常运行
 

copy模块
- 从ansible主控机复制文件到目录到远程主机,常用参数:
 
src:源文件/目录
dest:指定目标路径
mode:设置权限
backup:备份源文件
content:代替src,将本机指定内容传至远程主机并生成目标文件
# src指定本地文件,dest指定远程主机目录或者文件
ansible k8s -m copy -a "src=/home/ansible/ansible.txt dest=/home/ansible/"
 
- 拷贝文件夹
 
ansible k8s -m copy -a "src=/home/ansible/ dest=/home/" #ansible文件夹没拷贝
ansible k8s -m copy -a "src=/home/ansible dest=/home/" #ansible文件夹拷贝了
 
script模块
- 在远程主机上运行ansible服务器上的脚本,优点是不需手动传送脚本至每个服务器。
 - 其实是ansible自动传到远程主机、执行然后再删除脚本,即copy+shell+delete
 
ansible k8s -m script -a "/home/ansible/test.sh"
 
日志信息
- 之前配置的ansible日志目录
 - log_path=/var/log/ansible.log # 日志文件,建议取消注释

 
最后
- 之前运维多台主机的时候都是挨个执行命令,可能主机只有几台,但是还是感觉有些许重复的操作,现在通过ansible主控操作,效率提升,还在主动探索中。。。

 


















