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