ansible的功能:
模块化任务,调用特定的模块,完成特定的任务
基于python语言实现,由paramiko、pyyaml和jinja2三个模块构建
部署简单,agentless,ansible基于ssh协议实现的 主从模式 支持自定义模块 支持playbook 允许重复执行ansible的安装,ansible提供的rpm包在epel源上 note:epel源安装 cd /etc/yum.repos.d wget http://mirrors.neusoft.edu.cn/epel/epel-release-latest-6.noarch.rpm rpm -ivh epel-release-latest-6.noarch.rpm yum install ansible -y ansible主端:192.168.223.136节点1:192.168.223.1461、ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''2、ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.223.1433、远程连接ssh root@192.168.223.146或者ssh 192.168.223.1464、在节点上执行命令[iyunv@node1 ~]# ssh 192.168.223.146 'date'Sun Jul 30 20:02:58 CST 2017[iyunv@node1 ~]# dateSun Jul 30 12:03:00 CST 2017 ansible基础用法:ansible <host-pattern> [-m module_name] [-a args] [options]ansible-doc -l 显示ansible支持的模块[iyunv@node1 ~]# ansible-doc -s command 显示模块的具体用法- name: Executes a command on a remote node解决:定义host清单1、cp hosts hosts.bak2、修改hoats文件[nodes]192.168.223.146 command模块: ansible nodes -m command -a 'ifconfig' ping模块: [iyunv@node1 ansible]# ansible all -m ping 192.168.223.146 | SUCCESS => { "changed": false, "ping": "pong" } user模块:#ansible-doc -s user 新建某个用户: [iyunv@node1 ansible]# ansible nodes -m user -a "name=wadeson state=present" 192.168.223.146 | SUCCESS => { "changed": true, "comment": "", "createhome": true, "group": 500, "home": "/home/wadeson", "name": "wadeson", "shell": "/bin/bash", "state": "present", "system": false, "uid": 500 }-a后面接模块的参数:name=:表示需要创建的新用户的名字state:表示用户存在的状态(由于是新建用户,所以状态为present)删除某个用户: absent不在的[iyunv@node1 ansible]# ansible nodes -m user -a "name=wadeson state=absent"192.168.223.146 | SUCCESS => {"changed": true,"force": false,"name": "wadeson","remove": false,"state": "absent"}如果state不填写,默认是present,创建一个新的 cron模块:ansible-doc -s cron[iyunv@node1 ansible]# ansible all -m cron -a 'name="sync time" minute=2 user=root state=present job="/usr/sbin/ntpdate time.nist.gov &> /dev/null"'192.168.223.146 | FAILED! => {"changed": false,"failed": true,"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"}解决办法:在节点主机上安装libselinux-pythonyum -y install libselinux-python 再次在ansible服务器上执行:[iyunv@node1 ansible]# ansible all -m cron -a 'name="sync time" minute=*/2 user=root state=present job="/usr/sbin/ntpdate time.nist.gov &> /dev/null"'192.168.223.146 | SUCCESS => {"changed": true,"envs": [],"jobs": ["sync time"]}在节点上查看:[iyunv@wadeson ~]# crontab -l#Ansible: sync time2 * * * * /usr/sbin/ntpdate time.nist.gov &> /dev/null删除cron任务:ansible all -m cron -a 'name="sync time" state=absent‘ copy模块:ansible-doc -s copyansible all -m copy -a "src=/etc/fstab dest=/tmp/fatab.bak mode=600"节点上查看:[iyunv@wadeson ~]# ll /tmp/总用量 8-rw-------. 1 root root 899 7月 30 21:55 fatab.bak[iyunv@node1 ansible]# cat test_var.yaml
- hosts: nodes
remote_user: root
tasks:
- name: create a new file
copy: content={{ node_var }} dest=/tmp/ansible_var.txt
file模块:ansible-doc -s file,创建文件,目录,链接文件ansible all -m file -a 'path=/tmp/testdir state=directory'ansible all -m file -a 'src=/tmp/fstab.bak dest=/root/fstab.bak state=link'[iyunv@wadeson ~]# ll总用量 16-rw-------. 1 root root 1104 7月 30 19:54 anaconda-ks.cfglrwxrwxrwx. 1 root root 14 7月 30 22:03 fstab.bak -> /tmp/fstab.bakstate:file|absent|directory|link|hard|touch在远程节点上创建一个新文件:ansible nodes -m file -a 'path=/tmp/ansible_agent.txt state=touch'path这里可以为dest或者name yum模块:ansible-doc -s yumansible all -m yum -a 'name="vim,wget" state=latest'state:present|latest|absentansible all -m yum -a 'name=ntpdate state=latest'按照ntpdate包,然后定义cron任务 service模块:参数:enabled:设置是否开机启动state:started|stopped|restartedansible all -m yum -a 'name=httpd state=latest'ansible all -m service -a 'name=httpd state=started enabled=no'节点查看:[iyunv@wadeson ~]# rpm -qa httpdhttpd-2.2.15-60.el6.centos.4.x86_64[iyunv@wadeson ~]# chkconfig --list|grep httpdhttpd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭 shell模块:-a “command”,没有额外的参数命令中带有管道,变量等等[iyunv@node1 ~]# ansible nodes -m shell -a 'echo "redhat"|passwd --stdin testuser1'192.168.223.146 | SUCCESS | rc=0 >>更改用户 testuser1 的密码 。passwd: 所有的身份验证令牌已经成功更新。而command模块:[iyunv@node1 ~]# ansible nodes -m command -a 'echo "redhat"|passwd --stdin testuser1'192.168.223.146 | SUCCESS | rc=0 >>redhat|passwd --stdin testuser1可以看出并没有修改用户的密码,command模块只能执行简单的命令 script模块:1、将脚本传到node上2、并在node上执行该脚本ansible服务器:[iyunv@node1 ~]# cat echo.sh#!/bin/bashecho "ansible is better" > /tmp/echo.textansible all -m script -a "/root/echo.sh"节点查看:[iyunv@wadeson ~]# ll /tmp/总用量 16-rw-r--r--. 1 root root 18 7月 30 14:46 echo.text setup模块:查看facts收集node上的系统信息,可以当作变量进行调用ansible all -m setup |