Ansible经常使用模块基本操做

Ansible是一个系列文章,我会尽可能以通俗易懂、诙谐幽默的总结方式给你们呈现这些枯燥的知识点,让学习变的有趣一些。web

前言

对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提供不少经常使用的模块,这样让你们也很容易使用起来。Ansible也是同样的,因此这些经常使用的模块,就比如基本功,基本招式同样,咱们须要掌握这些基本功,掌握这些基本招式。这篇文章,就对这些经常使用的模块进行一个比较全面的总结。shell

ping模块

ping是测试远程节点的SSH链接是否就绪的经常使用模块,可是它并不像Linux命令那样简单地ping一下远程节点,而是先检查可否经过SSH登录远程节点,再检查其Python版本可否知足要求,若是都知足则会返回pong,表示成功。使用方式以下:bash

ansible web -m ping

ping无须任何参数。上述命令输出结果以下所示:框架

192.168.1.2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.1.4 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

debug模块

打印输出信息,相似Linux上的echo命令。在后续的学习过程当中,咱们会常常用这个命令来调试咱们写的playbook。学习

对于debug模块有两种用法。下面就对这两种用法都进行详细的总结。测试

  • 经过参数msg定义打印的字符串 msg中能够嵌入变量,好比我先定义了如下的一个playbook。debug

    ---
    
    - hosts: web
      vars:
        name: jellythink
      tasks:
        - name: display
          debug: msg="I am {{name}}"
  • 经过参数var定义须要打印的变量 变量能够是系统变量,也能够是动态的执行结果,经过关键字register注入变量中。对于变量,咱们能够这样玩:调试

---

- hosts: web
  vars:
    name: jellythink
  tasks:
    - name: display
      debug:
        var: name

对于注入变量,能够这样玩:code

---

- hosts: web
  tasks:
    - name: register var
      shell: hostname
      register: result
    - name: display
      debug:
        var: result

copy模块

从当前的机器上复制静态文件到远程节点上,而且设置合理的文件权限。copy模块在复制文件的时候,会先比较一下文件的checksum,若是相同则不会复制,返回状态为OK;若是不一样才会复制,返回状态为changed。server

通常状况的使用,就是这样的:

---

- hosts: server1
  tasks:
    - name: copyDemo
      copy:
        src: /home/jelly/nameList.txt 
        dest: /home/test1/nameList.txt

在实际的工做中,通常会在进行文件分发时,须要备份原文件,这个时候就须要咱们加上backup选项:

---

- hosts: server1
  tasks:
    - name: copyDemo
      copy:
        src: /home/jelly/nameList.txt 
        dest: /home/test1/nameList.txt
        backup: yes

加上backup: yes后,在目标主机上,就会对原来的文件进行备份,好比这样子的备份文件:

nameList.txt.8648.2019-09-28@06:27:18~

template模块

若是只是复制静态文件,使用copy模块就能够了;可是若是在复制的同时须要根据实际状况修改部份内容,那么就须要用到template模块了。

好比咱们在分发配置文件时,每一个配置文件须要根据远程主机的一些属性不一样而配置不一样的值,对于须要替换的部分,咱们就可使用template模块来进行替换。template模块使用的是Python中的Jinja2模板引擎,这里咱们不须要过多的去关注这个模板引擎,只须要知道变量的表示法是{{}}就能够了。好比这里就有一个http.conf.j2的模板文件,文件内容以下:

Listen {{ansible_default_ipv4.address}}
Port {{http_port}}

其中{{ansible_default_ipv4.address}}就是须要根据不一样的主机,动态变化的。接下来,咱们就能够这样使用template模块来完成变量的替换。

---

- hosts: server1
  vars:
    http_port: 8080

  tasks:
  - name: Write Config File
    template:
      src: http.conf.j2
      dest: /home/test1/http.conf

在目的主机上,文件内容以下:

Listen 192.168.1.3
Port 8080

copy模块同样,template模块也能够进行权限设置和文件备份等功能。

file模块

file模块能够用来设置远程主机上的文件、软连接和文件夹的权限,也能够用来建立和删除它们。

咱们可使用mode参数进行权限修改,能够直接赋值数字权限(必须以0开头)。

---

- hosts: server1
  tasks:
  - name: Modify Mode
    file:
      path: /home/test1/http.conf
      mode: 0777

咱们还能够根据state参数的不一样,实现不一样的行为,好比建立软连接:

---

- hosts: server1
  tasks:
    - name: Create Soft Link
      file:
        src: /home/test1/http.conf
        dest: /home/test1/conf
        state: link

也能够设置state: touch建立一个新文件,好比这样:

---

- hosts: server1
  tasks:
    - name: Create a new file
      file:
        path: /home/test1/touchfile
        state: touch 
        mode: 0700

还能够设置state: directory新建一个文件夹,好比这样:

---

- hosts: server1
  tasks:
    - name: Create directory
      file: 
        path: /home/test1/testDir
        state: directory
        mode: 0755

user模块

user模块能够对用户进行管理,实现增、删、改Linux远程节点的用户帐户。好比增长用户:

---

- hosts: server1
  tasks:
    - name: Add user
      user:
        name: test3

删除用户:

---

- hosts: server1
  tasks:
    - name: Add user
      user:
        name: test3
        state: absent
        remove: yes

可是在使用这个user模块时,须要注意权限问题。

shell模块

在远程节点上经过/bin/sh执行命令。若是一个命令能够经过模块yumcopy模块实现时,那么建议不要使用shell或者command这样通用的命令模块。由于通用的命令模块不会根据具体操做的特色进行状态判断,因此当没有必要再从新执行的时候,它仍是会从新执行一遍。

  • 支持<>|;&

    --- 
    - hosts: server1
      tasks:
        - name: Test shell
          shell: echo "test1" > ~/testDir/test1 && echo "test2" > ~/testDir/test2
  • 调用脚本

    ---
    
    - hosts: server1
      tasks:
        - shell: ~/test.sh >> somelog.txt

    在执行命令以前,咱们能够改变工做目录,而且仅在文件somelog.txt不存在时执行命令,除此以外,还能够指定用bash运行命令:

    ---
    
    - hosts: server1
      tasks:
        - shell: ~/test.sh >> somelog.txt
          args:
            chdir: ~/testDir
            creates: somelog.txt
            executable: /bin/bash

command模块

在远程节点上执行命令。和shell模块相似,但不支持<>|;&等操做,其它的大抵都是类似的。

总结

Ansible提供了很是多的经常使用模块,咱们可使用ansible-doc -l命令查看这些模块。这篇文章只是总结了几个用的频率更高一点的,对于这里总结的经常使用模块,咱们须要作到“手到擒来”,熟练到上手就能写的地步,你们须要在理解的基础上,多上手写,多练习。在从此的工做中多用这些经常使用的模块来提高本身的工做效率。

夜,又静了!

2019年9月29日,于内蒙古呼和浩特。


扫码关注

相关文章
相关标签/搜索