一.ansible

1.概念 ansible是一个基于Python开发的自动化运维工具! 其功能实现基于SSH远程连接服务! ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能 2.网址: http://docs.ansible.com/ 官网 3.特点 不需要单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端。 不需要服务端(no servers)。 需要依靠大量的模块实现批量管理。 4.优点: (1) ansible软件特点: · 可以实现批量管理/部署 ansible oldboy -m command -a "hostname" 批量执行命令 · 编写剧本-脚本(playbook)---针对重复性的操作 (2) ansible核心功能: · pyYAML-----用于ansible编写剧本所使用的语言格式(saltstack---python) · paramiko---远程连接与数据传输 · Jinja2-----用于编写ansible的模板信息(扩展部分) 5.安装: yum -y install ansible 管理端安装软件 yum -y install libselinux-python 被管理端关闭selinux服务

二.ansible部署

【命令部署】 部署好基于ssh密钥认证管理方式认证环境 (1)创建密钥对 ssh-keygen -t rsa (2)分发密钥对 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.41 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.31 ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.7 (3)登陆验证 ssh 172.16.1.41 ssh 172.16.1.31 ssh 172.16.1.7 【脚本部署】 1.批量部署 #!/bin/bash #create key pair \rm -f /root/.ssh/id_dsa* ssh-keygen -t dsa -f /root/.ssh/id_dsa -P "" -q #fenfa key file for ip in 7 31 41 do echo "==== fenfa key to host 172.16.1.$ip======================" sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@172.16.1.$ip" echo "=================== fenfa end ===========================" echo "" done 2.批量检查 #!/bin/bash cmd=$1 for ip in 7 31 41 do echo "====host 172.16.1.$ip info====" ssh root@172.16.1.$ip "$cmd" echo "==============================" echo "" done

三.配置ansible hosts文件

ansible主配置文件/etc/ansible/ansible.cfg 配置hosts主机文件 vim /etc/ansible/hosts [root] 172.16.1.7 172.16.1.31 172.16.1.41

四.ansible 命令语法

(1)指定管理单台主机方法 例:ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes" (2)指定管理主机组 例:ansible KS -m user -a "name=plp group=root" (3)指定管理所有主机 例:ansible all -m user -a "name=plp group=root"

五.ansible重要的模块项

1.command模块参数 (1) -k ansible基于密码口令管理主机 -m 指定模块 -a 指定动作 例:[root@m01 ~]#ansible 172.16.1.31 -m ping -k
(2)chdir 执行命令前切换到指定目录 例:ansible root -m command -a "chdir=/tmp touch 123.txt" (3)creates 执行命令前进行判断,有就不执行,没有执行 例:ansible root -m command -a "creates=/tmp/123.txt touch 123.txt"
(4)removes 如果这个参数对应的文件不存在,就不运行command 例:ansible root -m command -a "remove=/tmp/123.txt touch 123.txt"
(5)free_from 可以输入任何命令,除了特殊变量和符号 2. copy模块参数(将数据推送远程主机) (1)src 源(本地)路径 (2)dest 目标路径 例:ansible KS -m copy -a "src=/tmp/888.txt dest=/tmp" (3)owner 属主 (4)group 属组 (5)mode 定义文件/目录权限 例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup owner=oldboy group=oldboy mode=600” (6)backup 以时间戳名做备份 例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup backup=yes” (7)force 传输内容不同时做覆盖 例:ansible root -m cpoy -a “src=/tmp/123.txt dest=/backup force=no” (8)content 替代sec传输时,将文件内容设置为指定值(短点) remote_src 如果为 False,将搜索源信息在本地/管理及机器上
如果为True,将到远程/目标主机的机器上搜索 默认为false,目前remote_src不支持递归拷贝 例:ansible root -m cpoy -a “content=’my world’ dest=/backup/123.txt” 3.shell 模块参数(执行命令在节点上,万能模块) 例:ansible oldboy -m shell -a "uptime;df -h" ansible oldboy -m shell -a "/server/scripts/test01.sh" 注意:shell模块运行脚本,需要将脚本推送到远程主机中,需要授权脚本文件为执行权限 4.script模块参数(将本地运行脚本信息在远程主机中进行) 例:ansible root -m script -a "/server/scripts/yum-ipstate.sh" 5.yum模块(yum源安装软件) (1)name 软件名 (2)state 状态 (3)installed 安装 例:ansible root -m yum -a "name=tree state=installed" 6.service 模块(服务管理) (1)name 服务名 (2)state 状态 (3)enabled 关闭开启自启 例:ansible root -m service -a "name=iptables state=stopped enabled=yes" 7.file 模块(修改创建文件/目录) (1)mode 定义文件/目录权限 例:ansible root -m file -a "dest=/backup/123.txt mode=0600" (2)src 要连接的文件路径 (3)path 指定文件路径信息(别名dest,name) (4)state 状态 =directory 所有不存在的子目录将会被创建,并且从1.7开始支持设置目录权限 =file 如果文件不存在将不能被创建 =link 符号链接将被创建或更改。 =hard 便会创建出硬链接 =absent 录将被递归删除以及文件,而链接将被取消链接。 =touch 如果路径不存在将创建一个空文件 创建文件: 例:ansible root -m file -a "dest=/backup/123.txt state=touch" 创建目录: 例:ansible root -m file -a "dest=/backup/123 state=directory" 删除文件: 例:ansible root -m file -a "dest=/backup/123.txt state=absent" 创建连接文件: 例:ansible root -m file -a "dest=/backup/123 state=link" 8.cron模块(定时任务模块) (1)minute----------------分 例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ " (2)hour-------------------时 (3)day---------------------天 (4)month-----------------月 (5)weekday--------------周 (6)job----------------------做什么事 (7)name-------------------对定时任务信息做备注 (8)state--------------------present表创建(默认),absent表示删除 例:ansible root -m cron -a "name=’rsync system time’ state=absent " (9)disable-----------------yes表注释/no不注释 例:ansible root -m cron -a "name=’rsync system time’ minute=3 job=’/usr/sbin/ntpdate ntp1.aliyun.com’ disable=yes" 9.mount模块 (1)fstype 指定挂载文件系统类型 (2)opts 挂载时指定挂载参数 (3)path 制定挂载路径 (4)src 指定那个目录进行挂载 (5)state =mounted 在fstab文件中的设备将被激活挂载和适当配置 =unmounted 设备将被卸载并不会改变fstab文件信息 例:ansible root -m mount -a "state=mounted fstype=nfs src=’172.168.1.31:/data/’ path=/mnt" 例:ansible mount -m setup -vvvv 输出详细信息方法 10.user模块 name 用户名 group 用户组 state=absent 删除用户 remove=yes 是否删除 例:ansible KS -m user -a "name=plp group=root" 创建用户 ansible 172.16.1.11 -m user -a "name=plp state=absent remove=yes" 删除用户

六.ansible软件颜色信息

绿色:  表示查看信息,对远程主机未做改动的命令 红色:  批量管理产生错误信息 ×××:  对远程主机做了相应改动 粉色:  对操作提出建议或忠告

七.ansible基于密钥管理

[root] 172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=123456 172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456 172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456

八.编写ansible-playbook剧本

1.编写格式说明 ansible剧本格式:yaml语法格式(python脚本编写格式类似) rsync配置文件格式:ini语法格式 sersync配置文件格式:xml语法格式 2.YAML语法规则 规则一:缩进(一个缩进两空格,注意一定不用tab) 规则二:冒号(每个冒号后一定要有空格) 规则三:短横线 - (短横线后面要空格) 3.编写案例 ansible-playbook --syntax-check cron.yml 剧本检查语法方法 ansible-playbook -C cron.yml -C模拟执行剧本 ansible-playbook cron.yml 执行剧本

(1)案例一 (2)案例二

4.剧本编写方式 多主机单任务编写方式 多主机多任务编写方式 不同主机多任务编写方式