admin管理员组文章数量:1566356
一、运维自动化发展历程及技术应用
IaaS Infrastructure as a Service 基础设施即服务
PaaS Platform as a Service 平台即服务
SaaS Software as a Service 软件即服务
1、特性
模块化:调用特定的模块,完成特定的功能
有Paramoki、PyYAML、Jinja2(模块语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单、基于Python和SSH
安全,基于OpenSSH
支持playbook编排任务
幂等性,一个任务执行一遍和执行N遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可以使用用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
2、Ansible架构
3、Ansible主要组成部分
-
Ansible-playbook(剧本)执行过程:
将已有编排好的任务集写入Ansible-Playbook
通过Ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行
-
Ansible主要操作对象
HOSTS主机
NETWORKING网络设备
-
注意事项
ansible主机称为主控端,master或者堡垒机
不能在windows系统
4、安装
- rpm包安装: EPEL源
yum install ansible
- 编译安装:
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
tar -xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
- Git方式:
git clone git://github/ansible/ansible.git--recursive
cd ./ansible
source ./hacking/env-setup
- pip安装:
#pip是安装Python包的管理器,类似yum
yum install python-pip python-devel
yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel pip install --upgrade pip
pip install ansible --upgrade
- 确认安装:
ansible --version
5、相关文件
-
配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
/etc/ansible/hosts 主机清单
/etc/ansible/roles/ 存放角色的目录
#ansible配置文件 vi /etc/ansible/ansible.cfg #inventory = /etc/ansible/hosts #主机列表配置文件 #library = /usr/share/my_modules/ #库文件存放目录 #module_utils = /usr/share/my_module_utils/ #remote_tmp = ~/.ansible/tmp #临时py命令文件放在远程主机目录 #local_tmp = ~/.ansible/tmp #本机的临时命令执行目录 #plugin_filters_cfg = /etc/ansible/plugin_filters.yml #forks = 5 #默认的并发数 #poll_interval = 15 #sudo_user = root #默认sudo用户 #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码 #ask_pass = True #transport = smart #remote_port = 22 #module_lang = C #module_set_locale = False #host_key_checking = False #检查对应服务器host_key,建议取消注释 #log_path = /var/log/ansible.log #日志文件
-
程序
/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界面与用户交互的执行工具
6、Inventory主机清单
-
Inventory主机清单
ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以 在inventory file中将其分组命名
-
默认的inventory file为/etc/ansible/hosts
-
inventory file可以有多个,且也可以通过Dynamic Inventory来动态生成
二、Ansible命令使用
#help
ansible --help
#ping module 此处ping指定ip模块,需要配置免密
ansible [ip1,ip2] -m ping
#如果没有配置免密需要通过参数 -k 来指定我要输入密码
ansible [ip] -m ping -k
1、ansible系列命令
- Ansible系列命令
ansible
ansible-doc
ansible-playbook
ansible-vault
ansible-console
ansible-galaxy
ansible-pull
- ansible-doc:显示模块帮助
ansible-doc [options] [module...]
-a 显示所有模块的文档
-l,--list 列出可用模块
-s,--snippet 显示指定模块的playbook片段
#示例:
ansible-doc -l 列出所有模块
ansible-doc ping 查看指定模块帮助用法
ansible-doc -s ping 查看指定模块帮助用法
-
ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible 端能基于密钥认证的方式联系各被管理节点
-
ansible [-m module_name][-a args]
–version显示版本
-m module指定模块,默认为command
-v详细过程-vv -vvv更详细
–list-hosts显示主机列表,可简写—list
-k,–ask-pass提示输入ssh连接密码,默认Key验证
-K, --ask-become-pass提示输入sudo时的口令
-C, --check检查,并不执行
-T,–timeout=TIMEOUT执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-b, --become代替l旧版的sudo切换
-
ansible的Host-pattern 匹配主机列表
All:表示所有Inventory中的所有主机
ansible all -m ping
* :通配符
ansible “*” -m ping
ansible 192.168.1.* -m ping
ansible “*srvs” -m ping
或关系
ansible “websrvs:appsrvs” -m ping
ansible “192.168.1.10:192.168.1.20” -m ping逻辑与
ansible “websrvs:&dbsrvs” -m ping
在websrvs组并且在dbsrvs组中的主机
逻辑非
ansible ‘websrvs:!dbsrvs’ -m ping
在websrvs组,但不在dbsrvs组中的主机
注意:此处为单引号
综合逻辑
ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ -m ping
正则表达式
ansible “websrvs:&dbsrvs” -m ping
ansible “~(web|db).*.magedu” -m ping -
ansible命令执行过程
ansible命令执行过程
1.加载自己的配置文件默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如command
3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.arsible/tmp/ansible-tmp-数字/XXX.PY文件
4.给文件+x执行? 5.执行并返回结果
? 6.删除临时py文件,sleep o退出
执行状态:
? 绿色︰执行成功并且不需要做改变的操作
? 黄色∶执行成功并且对目标主机做变更
? 红色∶执行失败 -
ansible使用示例
示例:
- 以wang用户执行ping存活检测
ansible all -m ping-u wang -k - 以wang sudo至root执行ping存活检测
ansible allrm ping-u wang -b-k - 以wang sudo至mage用户执行ping存活检测
ansible all-m ping-u wang-b-k --become-user mage - 以wang sudo至root用户执行ls
ansible all -m command -u wang --become-user=root-a ‘ls /root’ -b -k -K
- 以wang用户执行ping存活检测
三、Ansible常用模块详解
1、Command:在远程主机执行命令,默认模块,可忽略-m选项
ansible srvs -m command -a ‘service vsftpd start’
ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’ 不成功此命令不支持$VARNAME< > │;&等,用shell模块实现
#示例1:查看命令
ansible-doc command
- removes
#A filename or (since 2.0) glob pattern. If it already exists, this step *will* be run.
ansible all -a "removes=/root cat /etc/hosts"
#返回:
192.168.75.153 | CHANGED | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.75.137 | CHANGED | rc=0 >>
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
ansible all -a "removes=/null cat /etc/hosts"
#返回:
192.168.75.153 | SUCCESS | rc=0 >>
skipped, since /null does not exist
192.168.75.137 | SUCCESS | rc=0 >>
skipped, since /null does not exist
- chdir
#Change into this directory before running the command.
ansible all -a "chdir=/boot ls"
#示例2:执行脚本
ansible all -a " /root/test.sh"
192.168.75.153 | FAILED | rc=8 >>
[Errno 8] Exec format error
#解决:
#必须在test.sh 加 #!/bin/bash
#示例3:添加用户
#添加用户
ansible all -a "useradd test_user"
#返回
192.168.75.153 | CHANGED | rc=0 >>
192.168.75.137 | CHANGED | rc=0 >>
#查询用户是否存在
ansible all -a "getent passwd test_user"
#返回
192.168.75.137 | CHANGED | rc=0 >>
test_user:x:1001:1001::/home/test_user:/bin/bash
192.168.75.153 | CHANGED | rc=0 >>
test_user:x:1001:1001::/home/test_user:/bin/bash
#添加口令
ansible all -a "echo koulin|passwd --stdin test_user"
#返回,此处没有成功添加口令,只是将echo后面的内容进行打印
192.168.75.153 | CHANGED | rc=0 >>
koulin|passwd --stdin test_user
192.168.75.137 | CHANGED | rc=0 >>
koulin|passwd --stdin test_user
#需要使用shell模块
ansible all -m shell -a "echo koulin|passwd --stdin test_user"
#返回
192.168.75.153 | CHANGED | rc=0 >>
Changing password for user test_user.
passwd: all authentication tokens updated successfully.
192.168.75.137 | CHANGED | rc=0 >>
Changing password for user test_user.
passwd: all authentication tokens updated successfully.
#查看口令
ansible all -a "getent shadow test_user"
#返回,没有添加口令返回内容
ansible all -a "getent shadow test_user"
192.168.75.153 | CHANGED | rc=0 >>
test_user:!!:18544:0:99999:7:::
192.168.75.137 | CHANGED | rc=0 >>
test_user:!!:18544:0:99999:7:::
#成功添加后口令返回内容
192.168.75.153 | CHANGED | rc=0 >>
test_user:$1$/oH7aZ99$2PU3KS3N04n1vnBHMW62k0:18544:0:99999:7:::
192.168.75.137 | CHANGED | rc=0 >>
test_user:$1$SDQ4h5ZP$241sP1v653fREfo2q06Fq/:18544:0:99999:7:::
2、Shell:和command相似,用shell执行命令
ansible srv -m shell -a ‘echo magedu |passwd -stdin wang’
调用bash执行命令类似cat/tmp/stanley.md | awk-F’I’iprint $1,$2y& > /tmp/example.txt这些复杂命令,即使使用shell也可能会失败,解决办法∶写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器
注意:shell模块不是标准模块,需要加参数 -m shell
#示例1:查看命令
ansible-doc shell
#示例2:使用变量,查看$HOSTNAME
ansible all -m shell -a 'echo $HOSTNAME' #注意:必须使用单引号
#返回
192.168.75.153 | CHANGED | rc=0 >>
e-bdap-mn-2.exp.linxi
192.168.75.137 | CHANGED | rc=0 >>
e-bdap-mn-3.exp.linxi
3、Script:运行脚本
-a “/PATH/TO/SCRIPT_FILE”
snsible websrvs -m script -a f1.sh
#示例1:
ansible-doc script
#示例2:
ansible all -m script -a "host.sh"
cat host.sh
#!/bin/bash
hostname
4、Copy:从服务器复制文件到客户端
ansible srv-m copy-a “src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600
backup=yes”
如目标存在,默认覆盖,此处指定先备份
ansible srv-m copy-afcontent='test content\n’dest=/tmp/f1.txt”利用内容,直接生成
目标文件
#示例1:
ansible all -m copy -a 'src=/root/ansible/selinux dest=/etc/selinux/config backup=yes'
ansible all -a "getenforce" #重启生效
ansible all -a "reboot"
#示例2:
ansible all -a 'src=/etc/shadow dest=/data/ mode=000 owner=wang'
#示例3:
ansible all -m copy -a 'content="hello\nthanks\n" dest=/data/test.txt'
ansible all -a 'cat /root/test.txt'
#返回
192.168.75.153 | CHANGED | rc=0 >>
hello
thanks
192.168.75.137 | CHANGED | rc=0 >>
hello
thanks
5、Fetch:从客户端取文件至服务器端,copy相反,目录可先tar
ansible srv-m fetch-a ‘src=/root/a.sh dest=/data/scripts’
#示例1:
ansible-doc fetch
src: # (required) The file on the remote system to fetch. This `must' be a file, not a directory. Recursive fetching may be supported in a later release.
#示例2:
ansible all -m fetch -a 'src=/var/log/messages dest=/data'
6、File:设置文件属性
ansible srv-m file -a “path=/root/a.sh owner=wang mode=755”
ansible web -m file -a ‘src=/app/testfile dest=/app/testfile-link state=link’
#示例1:
ansible all -m file -a 'name=/data/test state=absent' #删除/data/test
ansible all -m file -a 'name=/data/test state=directory' #创建文件夹/data/test
#示例2:创建/删除软链接
ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link'
ansible all -m file -a 'dest=/data/fstab.link state=absent'
#注意:
name=path=state
7、Hostname:管理主机名
ansible node1-m hostname -a “name=websrv”
8、Cron:计划任务
支持时间:minute , hour,day , month , weekday
- ansible srv-m cron -a"minute=*/5 job=’/usr/sbin/ntpdate 172.16.0.1&>/dev/null" name=Synctime”创建任务
- ansible srv-m cron -a 'state=absent name=Synctime’删除任务
#每分钟执行一次告警
ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall FBI warning" name=warningcron'
#禁用定时任务,此处必须加那么,不然会创建一个新的进行禁止
ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'
#再次启用
ansible all -m cron -a 'disabled=false job="/usr/bin/wall FBI warning" name=warningcron'
9、待更新。。。
版权声明:本文标题:Ansible入门 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725737025a1039843.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论