ansible使用一目了然

  • 一、ansible使用
  • ansible中文官网
  • 通用命令
  • /etc/ansible/hosts 的配置模版
  • 命令举例
  • 二、ansible功能模块--ansible的进阶
  • 常用功能模块
  • setup:搜集系统信息
  • Ping:测试网络连通性
  • File:文件属性设置
  • copy:将文件复制到远程主机
  • shell:在远程机子上执行shell命令
  • script:本地脚本文件,到远程主机上运行一次
  • script和shell运行脚本的区别
  • 其他功能模块
  • 三、ansible-playbook的使用
  • 例子


一、ansible使用

ansible中文官网

通用命令

ansible -i [文件路径/文件名称] [选择使用的组别文件] -m [使用的ansible功能] -a “[跟着的文本参数]” -f [并发数(默认5)]

/etc/ansible/hosts 的配置模版

设置test 组,ip为192.168.1.1到192.168.1.128

[test]
192.168.1.[1:128]
#[组别名]
#ip地址或者ip网段

命令举例

#解释:选择 /etc/ansible/hosts 配置文件中的 test 组,
#调用ansible的 shell 功能模块,
#并对 test 组的所有主机使用 touch /home/test.txt 命令,并发数为5
1、'ansible -i /etc/ansible/hosts test -m shell -a "touch /home/test.txt" -f 5'
#默认主机组别配置文件为 ***/etc/ansible/hosts***,所以1命令等同于2命令
2、'ansible test -m shell -a "touch /home/test.txt" -f 5'

学到这里已经够使用ansible了,只要你对shell命令和脚本编写很熟悉,用shell模块和script模块即可。


二、ansible功能模块–ansible的进阶

常用功能模块

shell,ping,copy,script,setup

setup:搜集系统信息

用法: ansible 组别 -m setup -a “filter=ansible*” //支持正则过滤

Ping:测试网络连通性

用法: ansible 组别 -m ping

File:文件属性设置

常用:统一创建目录

  1. force :需要在两种情况下强制创建软连接,一种是源文件不存在,但之后会建立。另一种是目标软连接已存在,需要先取消之前的软链,在创建新的软链, yes|no两个选项
  2. group:定义文件/目录属于哪个组
  3. mode:制定文件的权限
  4. owner:定义文件/目录的属主
  5. path:必选项,定义文件/目录的路径
  6. recurse:定义目录的所有文件的属性
  7. src:被链接的源文件,只应用于state=link的情况
  8. dest:被链接到的路径,只应用于state=link的情况
  9. state
    directory:如果目录不存在就创建目录
    file:即使文件不存在,也不会被创建
    link:创建软连接
    hard:创建硬链接
    touch:如果文件不存在就创建一个新的文件,如果存在就更新最后修改时间
    absent:删除

用法:

ansible 组名 -m file -a “src=路径 dest=路径 state=状态 ”

创建软连接

ansible local -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

取消软连接

ansible local -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=absent"

创建目录

ansible local -m file -a "path=/etc/ansible/xhb group=root owner=root mode=700 state=directory"

copy:将文件复制到远程主机

  1. backup:在覆盖之前先备份 yes|no 是否先备份
  2. content:用户代替src ,可以直接制定文件的值
  3. dest:必选项要将文件复制到远程主机的绝对路径
  4. directory_mode: 递归设定目录的权限,默认为系统默认权限
  5. force:如果目标已经存在该文件,yes为强制覆盖,no为取消复制。默认为yes
  6. others:所有file的选项都可以在这里用
  7. group:复制到远程主机后给他的组别
  8. mode:复制后给予的权限
  9. owner:复制到远程后,指定的用户
  10. src:可绝对可相对,目录后‘/’来结尾复制目录中的文件,不包含目录,没有/则将目录一块复制

用法:将本地文件‘/etc/ansible/hosts复制到远程服务器,设置用户和组以及文件权限

ansible testx -m copy -a “src=/etc/ansible/hosts dest=/home/hosts group=root owner=root mode=777”

shell:在远程机子上执行shell命令

用法:可以使用shell指令

  1. chdir:执行之前先cd到指定目录
  2. creates:指定一个文件,当这个文件存在,则该命令不执行
  3. removes: 指定一个文件,如果文件不存在,不执行
  4. executable:切换shell来执行命令,需要使用命令的绝对路径
  5. free_from:填写本地脚本的路径 // 可以不用
ansible testx -m shell -a “命令”
 ansible testx -m shell -a “sh 本地脚本文件” #远程到服务器上运行服务器本地的脚本

script:本地脚本文件,到远程主机上运行一次

仅仅运行脚本,ansible端有脚本
ansible 组名 -m script -a “脚本”
#运行的是执行ansible命令的服务器上的脚本

script和shell运行脚本的区别

1、ansible 组名 -m script -a “脚本”
2、ansible testx -m shell -a “sh 本地脚本文件”
1命令是类似将一份脚本发送到目标服务器中运行,运行结束后删除脚本。
2命令是目标服务器有该脚本才能运行,没有就不运行。

其他功能模块

这里就不详细介绍其他的模块了,有兴趣请前往官网查询

command:在远程主机上执行命令
cron:计划任务管理
yum:软件安装包管理
service:系统服务管理
group:系统用户组管理
user:系统账号目录管理
stat:获取远程文件信息
mount:配置挂载点
fetch:文件拉取模块,将远程主机中的文件拷贝到本机中
synchronize:将主控方的/root/a目录推送到指定节点的/tmp目录
get_url:将某个url文件下载到被控节点的某个位置
hostname:用来修改主机的名称
wait_for:每一个事件发生或者处理完后在进行下一个事件的处理

三、ansible-playbook的使用

用法: ansible-playbook 文件名.yml –-tags=”标签名称1,标签名称2”

---
-	hosts: 组名
    remote_user: 用户名
    //申明变量的模块
    vars:
   	    - 变量名: 值
	    - test: nihao
    //执行命令的模块
    tasks:
        //类似 -m 需要装载的ansible -a “-a后的内容”
		- name: 描述
		需要装载的ansible功能: “-a后的内容”       

        //判断条件为真执行调用变量
        - name: test
        shell: “echo {{test}}”
        when: (条件1 and 条件2) or (条件3)
            tags: 
            - always  //不管有没有指定标签名称都会执行name为test的模块
        //循环执行调用变量

例子

---
- hosts: test
  gather_facts: f   #开启debug
  remote_user: root  #用户root
  tasks:
     - name: ifconfig test #命名
       shell: 'ifconfig | grep 190' #调用shell模块,执行'ifconfig | grep 190'命令
       register: ifvar   #将debug的内容传到变量ifvar
       tags: only        #标签only,标签命名随意

     - name: echo  #命名
       debug: var=ifvar  #显示debug
       tags: only1    #标签only1
       
     - name: ls dest  
       shell: 'ls'   
       register: lsxhb
       tags:  always 
     - name: echo
       debug: var=lsxhb
       tags: always