ansible

ansible主要组成部分

user: 普通用户,即system administrator
cmdb: 配置管理数据库,api调用
public/private cloud api调用
user -》 ansible playbook -》 ansible

利用 ansible实现管理的方式
ad-hoc 即ansible命令 主要用于临时使用场景
ansible-playbook主要用于长期规划好的,大型项目的场景,需要有前提的规划


ansible-playbook剧本执行流程
1,将已有的编排好的任务集写入 ansible-book
2,通过ansible-playbook命令分拆任务集至每条ansible命令,按预定的规则执行

ansible主要操作对象
1 host主机
2 networking网络设备

注意事项:
执行ansible的主机一般为主控端,中控, master或者堡垒机
主控端 python 版本需要2.6以上
被控端python 版本小于2.4需要安装python-simplejson
被控端如开启selinux 需要安装 libselinux-python
windows 不能做为主控端

ansible的用法

ansible通过ssh实现配置管理,应用部署,任务执行等功能,建议配置ansbile端能基于密钥认证的方式联系各被管理的节点
ansible <host-pattern> [-m module_name] [-a args]
  --version 显示版本
  -m module 指定模块, 默认为command
  -v 详细过程 -vv -vvv更详细
  -k --ask-pass 提示输入ssh连接密码 默认key验证
  --list-hosts 显示主机列表 可简写 --list
  -K --ask-become-pass 提示输入sudo时的口令
  -C --check 检查 并不执行
  -T --timeout=TIMEOUT 执行命令超时时间
  -u --user=REMOTE_USER 执行远程执行的用户
  -b --become 代替旧版的sudo切换


ansible-doc -s 模块名 即列出模块的使用详情

ansible 基于key验证

key验证

ssh-keygen
ssh-copy-id 192.168.30.101

ansible的Host-pattern

ansible的Host-pattern
匹配主机的列表
ALL:表示所有inventory中的所有主机
 ansible all -m ping 

* 通配符
ansible "*" -m ping
ansible 192.168.1.* -m ping

ansible 命令执行过程

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

执行状态

绿色:执行成功并且不需要改变的操作
黄色:执行成功并且需要对目标主机变更
红色:执行失败

ansible command 通过参数 a执行命令

 ansible webgroup -a 'chdir=/home mkdir aaa'  chdir=/home 切换到home目录下 创建一个aaa 的文件

  ansible webgroup -a 'df -h'  # 查看 主机分组中的 内存配置

ansible webgroup -a 'chmod +x /home/tang.py' # 给文件加执行权限

 

 ansible shell 模块

ansible webgroup -m shell -a 'echo $HOSTNAME' # 参数要放在单引号中

ansible script 模块 运行脚本

ansible webgroup -m script -a '/root/host.sh'

host.sh

#! /bin/bash
hostname

返回详情

103.100.208.80 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 103.100.208.80 closed.
", 
    "stderr_lines": [
        "Shared connection to 103.100.208.80 closed."
    ], 
    "stdout": "lalala
", 
    "stdout_lines": [
        "lalala"
    ]
}

ansible copy 模型

ansible webgroup -m copy 'src=/root/ansible/selinux dest=/etc/selinux/config backup=yes'   backup=yes 是备份的意思

ansible Hostname 管理主机名模块

ansible node1 -m hostname -a 'name=websrv'

ansible Cron 计划任务

支持时间: minute, hour, day, month, weekday
ansible webgroup -m cron -a "minute*/5 job='usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime" 创建任务
ansible webgroup -m cron -a 'state=absent name=Synctime' 删除任务


在控制的机器上 输入 crontab -e 查看定时任务

ansible Fetch 模块

从客户端取文件至服务器端,copy相反,目录可先tar
ansible webgroup -m fetch -a 'src=/root/a.sh dest=/data/scripts'

ansibel File 模块

设置文件属性
ansible webgroup -m file -a 'src=/root/a.sh owner=wang mode=755'
ansible webgroup -m file 'src=/app/testfile dest=/app/testfile-link state=link' state=link 创建软连接 state=touch 创建文件 ,具体模式可以 ansible-doc -s file查看

ansible yum 模块

ansible webgroup -m yum -a 'name=vsftpd' state 来控制安装还是卸载

ansible webgroup -m yum -a 'name=httpd state=latest'安装
ansible webgroup -m yum -a 'name=httpd state=absent'删除

安装多个包
ansible webgroup -m yum -a 'name=vsftpd,memcached,httpd'

安装本地的包 到被控制机器
ansible webgroup -m yum -a 'name=path' path指在本机的绝对路径

ansible Service 管理服务

ansible webgroup -m service -a 'name=httpd state=stopped'  关闭服务
ansible webgroup -m service -a 'name=httpd state=started' 开启服务
ansible webgroup -m service -a 'name=httpd state=reloaded'
ansible webgroup -m service -a 'name=httpd state=restarted'

ansible User 管理用户

ansible webgroup -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible webgroup -m user -a 'name=sysuser1 system=yes home=/app/sysuser1'
ansible webgroup -m user -a 'name=user1 state=absent remove=yes' 删除用户及家目录等数据

ansible Group 管理组

ansible webgroup -m group -a 'name=testgroup system=yes'
ansible webgroup -m group -a 'name=testgroup system=absent'

ansible-galaxy

连接https://galaxy.ansible.com/下载相应的roles

列出所有安装的galaxy
ansible-galaxy list
安装 galaxy
ansible-galaxy install geerlingguy.redis
删除galaxy
ansible-galaxy remove geerlingguy.redis
原文地址:https://www.cnblogs.com/tangda/p/14536701.html