Ansible是一个系列文章,我会尽可能以通俗易懂、诙谐幽默的总结方式给你们呈现这些枯燥的知识点,让学习变的有趣一些。web
对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提供不少经常使用的模块,这样让你们也很容易使用起来。Ansible也是同样的,因此这些经常使用的模块,就比如基本功,基本招式同样,咱们须要掌握这些基本功,掌握这些基本招式。这篇文章,就对这些经常使用的模块进行一个比较全面的总结。shell
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" }
打印输出信息,相似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
模块在复制文件的时候,会先比较一下文件的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~
若是只是复制静态文件,使用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
模块能够用来设置远程主机上的文件、软连接和文件夹的权限,也能够用来建立和删除它们。
咱们可使用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
模块能够对用户进行管理,实现增、删、改Linux远程节点的用户帐户。好比增长用户:
--- - hosts: server1 tasks: - name: Add user user: name: test3
删除用户:
--- - hosts: server1 tasks: - name: Add user user: name: test3 state: absent remove: yes
可是在使用这个user
模块时,须要注意权限问题。
在远程节点上经过/bin/sh
执行命令。若是一个命令能够经过模块yum
、copy
模块实现时,那么建议不要使用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
在远程节点上执行命令。和shell
模块相似,但不支持<
、>
、|
、;
和&
等操做,其它的大抵都是类似的。
Ansible提供了很是多的经常使用模块,咱们可使用ansible-doc -l
命令查看这些模块。这篇文章只是总结了几个用的频率更高一点的,对于这里总结的经常使用模块,咱们须要作到“手到擒来”,熟练到上手就能写的地步,你们须要在理解的基础上,多上手写,多练习。在从此的工做中多用这些经常使用的模块来提高本身的工做效率。
夜,又静了!
2019年9月29日,于内蒙古呼和浩特。