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

前言

对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提供很多常用的模块,这样让大家也很容易使用起来。Ansible也是一样的,所以这些常用的模块,就好比基本功,基本招式一样,我们需要掌握这些基本功,掌握这些基本招式。这篇文章,就对这些常用的模块进行一个比较全面的总结。

ping模块

ping是测试远程节点的SSH连接是否就绪的常用模块,但是它并不像Linux命令那样简单地ping一下远程节点,而是先检查能否通过SSH登陆远程节点,再检查其Python版本能否满足要求,如果都满足则会返回pong,表示成功。使用方式如下:

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。

    ---
    
    - 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

对于注入变量,可以这样玩:

---

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

copy模块

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

一般情况的使用,就是这样的:

---

- 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日,于内蒙古呼和浩特。

Ansible常用模块基本操作的更多相关文章

  1. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  2. Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...

  3. Ansible常用模块命令

    Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...

  4. Ansible常用模块介绍及使用(2)

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ...

  5. Ansible 常用模块详解

    经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...

  6. Ansible常用模块及API

    Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel ...

  7. ansible常用模块入门

    常用模块有以下几个 command copy shell crond yum service setup 1.command模块 ansible george -m command -a " ...

  8. ansible常用模块详解(三)

    1.模块介绍 明确一点:模块的执行就类似是linux命令的一条命令,就单单的是为了执行一条语句,不是批量的操作,批量操作需要用到playbook内类似shell编写脚本进行批量. 1.1 模块的使用方 ...

  9. Linux之ansible 常用模块

    目的 代码发布系统 代码发布:把本地的代码通过某些方式弄到线上,可以供别人访问 部署 前戏 ansible 批量在远程主机上执行命令 puppet ruby ansible saltstack pyt ...

随机推荐

  1. C函数指针状态机实现

    C函数指针状态机实现 有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.FSM是一种逻辑单元内部 ...

  2. C# winform语音提示

    1.SpeechSynthesizer文字转音频 项目添加引用:System.Speech using(SpeechSynthesizer speech = new SpeechSynthesizer ...

  3. txt 文件的归并和分割

    1.归并 import os # 1.获取需要整合的文件目录下的 filepath = "G:\\我的python\\尹成\\python基础\\day13\\详细分类\\详细地区" ...

  4. SCRUM的五个事件

    转自:http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html#tab-id-7 Scrum 使用固定的事件来产生规律性,以此来减 ...

  5. 【selenium】- webdriver常见元素定位(上)

    本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. 元素的定位 2.By.id 打开Firefox,打开百度首页,右键点击选择“使用Firebug”查看元素. 点击红框内的按钮,将鼠标指针 ...

  6. 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群

    一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...

  7. 【Offer】[28] 【对称的二叉树】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请实现一个函数,用来判断一-棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的.  牛客网刷题地址 思路分析 利用前序 ...

  8. 【Offer】[10-1] 【斐波那契数列】

    题目描述 思路分析 Java代码 代码链接 题目描述  大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). 思路分析 递归的思路,会出现很多重复的 ...

  9. spring boot整合kafka

    最近项目需求用到了kafka信息中间件,在此做一次简单的记录,方便以后其它项目用到. 引入依赖 <dependency> <groupId>org.springframewor ...

  10. 自荐RedisViewer有情怀的跨平台Redis可视化客户端工具

    # **自荐一个有情怀的跨平台Redis可视化客户端工具——RedisViewer**[转载自 最美分享Coder 2019-09-17 06:31:00](https://www.toutiao.c ...