标签:ansible
2.24 ansible二、关闭selinux firewall
三、配置mangle主机的yum源
1.下载ansible软件
2.升级两个版本低的软件包
yum update python2-pyasn1 python2-cryptography
3.查看ansible版本
ansible --version
四、配置域名并创建组
添加变量
不同路径下分组
五、使用交互式密码分组
使用脚本,脚本输出的必须是json格式(ansible方可识别)
六、创建密钥实现批量去除密码配置
#################################################
ansible
自动化运维
自动化 DevOps
仅需要ssh和Python即可使用
无客户端
如何选择一款配置管理软件
活跃度(社区是否活跃)
学习成本
使用成本
编码语言
性能
使用是否广泛
创建公钥和私钥对
无限可能Inventory 通过脚本获得外部host信息 脚本输出必须是Json格式
ansible <host-pattern> [options]
-host-pattern 主机戒定义的分组
-M 指定模块路径
-m 使用模块,默认 command 模块
-a or --args 模块参数
-i inventory 文件路径,戒可执行脚本
-k 使用交互式登陆密码
-e 定义变量
-v 详细信息,-vvvv 开启 debug 模式
ansible all -m command -a ‘cp /etc/passwd /tmp/mima‘
批量部署证书文件
模块
ansible-doc
模块的手册 相当于shell的man
ansible-doc -l 列出所有的模块
ansible-doc [模块名] 查看帮助
ansible-doc modulename 查看modulename帮助
ping模块
command模块 #未指定模块 默认为command 未启动shell
shell | raw 模块
shell调用/bin/sh进行执行命令
raw 没有chdir creates removes 参数
script 模块
#!/bin/bash
if ! $(id lisi > /dev/null) ;then
useradd -g 100 zhangsan
echo 123456| passwd --stdin zhangsan
chage -d 0 zhangsan
#################################################
分发配置文件
copy模块
src:要复制到进程主机的文件在本地的地址,可以是
绝对路径,也可以是相对路径。如果路径是一个目录,
它将递归复制。在这种情况下,如果路径使用"/"来结
尾,则只复制目录里的内容,如果没有使用"/"来结尾,
则包含目彔在内的整个内容全部复制,类似于rsync
dest:必选项。进程主机的绝对路径,如果源文件是
一个目录,那么该路径也必须是个目录
复制文件
ansible all -m copy -a ‘src=/root/alog dest=/root/a.log‘
复制目录
ansible all -m copy -a ‘src=urdir dest=/root/‘
适合短小的目录与文件的分发
#################################################
lineinfile 模块
类似于sed的一种行编辑替换模块
path=路径/文件 目的文件
regexp=正则 匹配
line=修改后的该行
replace 模块
path=路径/文件 目的文件 修改哪个文件
regexp=正则 匹配 修改哪个地方
replace=替换后的字符 修改成什么样子
修改配置文件 相同的用copy 不同的 用linefile|replace
#################################################
yum 模块
yum模块
使用yum包管理器来管理软件包
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:状态(present,absent,latest) #不写状态默认是安装
yum模块
删除软件包
ansible all -m yum -a ‘name="lrzsz" state=absent‘
删除多个软件包
ansible all -m yum -a ‘name="lrzsz,lftp" state=absent‘
安装软件包
ansible all -m yum -a ‘name="lrzsz"‘
安装多个软件包
ansible all -m yum -a ‘name="lrzsz,lftp"‘
service模块
name:必选项,服务名称
enabled:是否开机启动 yes|no
sleep:如果执行了restarted,在则stop和start之间
沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载
等操作(started,stopped,restarted,reloaded)
ansible all -m service -a ‘name="sshd" enabled="yes" state="started"‘
在web1 web2 上安装apache
并且设置开机启动 启动服务 并且把端口改称8080
修改默认主页为hello world
#!/bin/bash
ansible all -m yum -a ‘name="httpd"‘
ansible all -m lineinfile -a ‘path="/etc/httpd/conf/httpd.conf" regexp="^Listen" line="Listen 8080"‘
ansible all -m service -a ‘name="httpd" enabled="yes" state="started"‘
echo hello world > /root/test.html
ansible all -m copy -a ‘src=/root/test.html dest=/var/www/html/index.html‘
setup模块
用于获取主机信息
filter 可以过滤到我们需要的信息
ansible t1 -m setup -a ‘filter=ansible_distribution‘
#################################################
ansible 脚本
playbook 基础
ansible 七种武器
一
ansible 命令 用于执行临时性的工作
二
ansible-doc 说明文档
三
ansible-console
四
ansible-galaxy
五
ansible-playbook ansible的脚本
六
ansible-vault 配置文件加密
七
ansible-pull 与push工作模式相反 数量巨大的机器需要管理时
json 数据格式 轻量级数据交换格式 JavaScript 对象表示法
yaml 数据格式
jinja2 数据格式
playbook 由YAML语言编写 遵循YAML标准
由---开始 ansible的命令流
检测所有主机是否连通
-f 并发进程数量 默认是5
tasks 在对应的所有主机上执行的命令 上一个命令执行完毕后 才会执行下一个命令
实验案例
给所有主机添加plj用户
默认密码为123456
要求第一次登陆修改密码
选项 -name 给命令做一个简短的注释
#################################################
playbook 语法进阶
定义变量以及过滤器的使用
ansible-playbook对错误的处理 上一个命令的返回值如果不为0 则中止执行
忽略当前产生的错误
第一种方式:
shell: /usr/bin/somecommand || /bin/true
第二种方式:
#################################################
handlers 用于当关注的资源发生变化时采取一定的操作
#################################################
when 当满足特定条件时 触发操作
register 变量注册 保存某个命令的执行结果
写一个playbook 要求查看web服务器的负载情况 当系统负载大于0.7的时后 停止apache服务
uptime | awk ‘{printf("%.2f\n",$(NF-2))}‘ 输出系统负载
使用
#################################################
with_items playbook的标准循环
测试运行
ansible-playbook -C playbook.yaml
显示收到影响到主机 --list-hosts
显示工作的 task --list-tasks
显示将要运行的 tag --list-tags
标签:ansible
原文地址:http://blog.51cto.com/2168836/2102949