一、配置文件

  1.配置文件

  • /etc/ansible/ansible.cfg 主配置文件
  • /etc/ansible/hosts          主机清单
  • /etc/ansible/roles           存放角色的目录

  2.ansible主配置文件  

[defaults]

# some basic default values...

#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
#ask_pass = True

#transport = smart

#remote_port = 22               # 远程ssh端口
#module_lang = C 
#module_set_locale = False

#host_key_checking = False          #检查对应服务器的host_key.建议取消注释(因为第一次连接会出现yes/no)

#log_path = /var/log/ansible.log         #日志文件,建议启用

#module_name = command           # 默认模块,可以修改为shell模块

3.ansible相关工具

    • /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界面与用户交互的执行工具 

  4.【ansible-doc】

    -l,--list     #列出可用的模块

    -s,--snippet  #显示指定模块playbook片段

    【例】:ansible-doc -l       #列出所有模块

        ansible-doc -s ping         #查看ping模块的帮助

  5.配置/etc/ansible/hosts

    配置单个主机:

    192.168.100.110 ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22'

    配置主机群组:

    [webs]

    192.168.100.100

    192.168.100.110

    192.168.100.120

    #1.生成私钥

    ssh-keygen (报没有目录的错解决办法ssh-keygen -t dsa)
    #2.向主机分发私钥
     ssh-copy-id root@192.168.100.100

6.【ansible】

  通过ssh协议远程连接,实现对远程主机的配置管理、应用部署、任务执行等功能

  格式:ansible <主机清单> [-m "模块名"] [-a "参数"]

  --version      #显示版本

  -m module     #指定模块,默认为command

  -v         #详细过程 ,-vv -vvv更详细

  --list-hosts    #列出主机列表,可简写--list

  -k,--ask-pass  #提示输入ssh连接密码,默认key验证

  -c,--check    #检查,并不执行

  -T,--timeout=TIMEOUT  #执行命令的超时时间,默认10s

  -u,--user=REMOTE_USER #指定远程执行的用户

  -b,--become    #代理旧版的sudo切换

  --become-user=USERNAME #指定sudo的runas用户,默认为root

  -K,--ask-become-pass #显示输入sudo的口令

【例】:ansible '*' --list或者ansible all --list-hosts #列出所有主机清单

    ansible all -m ping

  或关系:(相加)

      ansible "192.168.100.100:192.168.100.110" -m ping

  逻辑与: (取交集)

      ansible "192.168.100.100:&all" -m ping

  逻辑非:(取反)

      ansible 'all:!192.168.100.10*' -m ping   #注意用单引号

  正则表达式:

      ansible "~192.168.100.(100|110)" -m ping

      ansible 'all:!~192.168.100.10[1-9]' -m ping

7.ansible命令执行过程

  (1).加载自己的配置文件,默认/etc/ansible/ansible.cfg

  (2).加载自己对应的模块文件,如command

  (3).通过ansible将模块或命令生成对应的临时文件,并将该文件传输至远程服务器的对应执行用户

   $HOME/.ansible/tmp/目录下

  (4).给文件+x执行

  (5).执行并返回结果

  (6).删除临时py文件,退出

7.ansible常用模块

  • 【command】模块

   功能:在远程主机执行命令,此为默认模块,可以忽略-m选项

   注意:此命令不支持$VARNAME > < | ; & 等;可以用shell模块实现

  ansible webs -m 'command' -a 'df -h'

  ansible webs -m 'command' -a 'echo 123>/tmp/123.txt' #实际并没有执行成功

  • 【shell】模块

    功能:和command相似,用shell执行命令

    ansible webs -m 'command' -a 'echo 123>/tmp/123.txt'

    ansible webs -m 'shell' -a 'docker info|grep -i root'

  将shell模块设置为默认模块:

  修改配置文件/etc/ansible/ansible.cfg: module_name = shell

  • 【script】模块

    功能:在远程主机运行ansible服务器上的脚本

    ansible webs  -m 'script' -a '/root/1.sh' 

  • 【copy】模块

    功能:从ansible服务器上主控端复制文件到远程主机

    #如目标存在,默认覆盖,此处指定先备份

    ansible webs -m 'copy' -a 'src=/root/1.sh dest=/tmp/'

    ansible webs -m 'copy' -a 'content="hello world\nabcdefg" dest=/tmp/123.txt'

    ansible webs -m 'copy' -a 'src=/etc/ dest=/backup' #复制etc下的文件,不包括目录自身

  • 【fetch】模块

    功能:从远程主机提取文件到ansible主控端,与copy相反,目前暂不支持目录

   ansible webs -m 'fetch' -a 'src=/etc/centos-release dest=/tmp/'

  • 【file】模块

    功能:设置文件属性

    ansible webs -m 'file' -a 'path=/tmp/test.txt state=touch' #创建文件/tmp/test.txt

    ansible webs -m 'file' -a 'path=/tmp/test.txt state=absent' #删除文件

    ansible webs -m 'file' -a 'path=/tmp/123.txt owner=mysql mode=755'

    #创建目录

    ansible webs -m 'file' -a 'path=/tmp/mysql state=directory owner=mysql group=mysql'

    #创建软链接

    ansible webs -m 'file' -a 'src=/tmp/mysql dest=/tmp/link_mysql state=link'

  • 【unarchive】模块

    功能:解包,解压缩

    实现有2中方法

    1.将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes

    2.将远程主机上的压缩包解压缩到指定路径下,设置copy=no

    ansible webs -m 'unarchive' -a 'src=/root/nginx.tar dest=/tmp owner=mysql group=mysql copy=yes'

    ansible webs -m 'unarchive' -a 'src=/tmp/nginx.tar dest=/opt owner=mysql group=mysql mode=700 copy=no'

  •  【archive】模块  

    功能:打包压缩

    ansible webs -m 'archive' -a 'path=/tmp/123.txt dest=/opt/123.tar.bz2 format=bz2'

  •  【hostname】模块  

    功能:管理主机名

    ansible 192.168.100.100 -m 'hostname' -a 'name=master' #会修改/etc/hostname配置文件

  •  【cron】模块

    功能:任务计划

    支持时间:minute,hour,day,month,weekday

    ansible 192.168.100.100 -m 'cron' -a 'hour=0 minute=30 weekday=6-7 name="机器重启" job=/root/restart.sh'  #需要在目标机上存在restart.sh文件

    ansible 192.168.100.100 -m 'cron' -a 'hour=0 minute=30 weekday=6-7 name="机器重启" job=/root/restart.sh disabled=yes'  #禁用计划任务

    ansible 192.168.100.100 -m 'cron' -a 'name=机器重启 state=absent' #删除计划任务

  •  【yum】模块

     ansible webs -m 'yum' -a 'name=vim'

     ansible webs -m 'yum' -a 'name=httpd state=absent' #删除安装包

  •  【service】模块

    ansible webs -m 'service' -a 'name=httpd state=started' #启动httpd服务 state有started/stopped/restarted/reloaded

    ansible webs -m 'service' -a 'name=httpd state=started enabled=yes' #设置开机启动

  • 【lineinfile】模块

    功能:相当于sed,可以修改文件的内容

    ansible webs -m 'lineinfile' -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=enforcing"'

    ansible webs -m 'lineinfile' -a 'path=/tmp/123.txt regexp="hello" state=absent' #删除含有hello的行