Ansible常用模块基本操作

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后,在目标主机上,就会对原来的文件进行备份,比如这样子的备份文件:

[email protected]: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日,于内蒙古呼和浩特。

原文地址:https://www.cnblogs.com/vipygd/p/11625142.html

时间: 2024-07-29 08:25:08

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

Ansible 常用模块详解(3)

title: Ansible 常用模块详解(3) date: 2018-12-01 15:22:11 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是an

ansible常用模块详解

ansible常用模块详解: ansible <host-pattern> [-m module_name] [-a args] [options] #ansible命令格式  指定主机组或ip地址  指定调用模块   传递给模块的参数   ansible-doc -l #列出可用模块 ansible-doc -s model_name #查看指定模块详细用法 command:ansible默认模块,对指定主机执行命令,不能理解特殊字符 例:ansible web -a 'date' #对we

二:Ansible常用模块

二:Ansible常用模块 一:Ansible命令模块 1.1 command # 默认模块, 执行命令 [[email protected] ~]# ansible web_group -a "hostname" 1.2 shell # 如果需要一些管道操作,则使用shell [[email protected] ~]# ansible web_group -m shell -a "ps -ef|grep nginx" -f 50 注意:command不识别管道符

2. ansible常用模块

Ansible通过模块的方式来完成一些远程的管理工作. ansible-doc -l查看所有模块 ansible-doc -s module来查看某个模块的参数, ansible-doc help module来查看该模块更详细的信息. 模块命令 -i 设备列表路径,可以指定一些动态路径 -f 并发任务数 -private-key 私钥路径 -m 模块名称 -M 模块夹的路径 -a 参数 -k 登陆密码 -K sudo密码 -t 输出结果保存路径 -B 后台运行超时时间 -P 调查后台程序时间

ansible常用模块介绍

ansible查看模块用法 例子 查看shell 模块使用方法 [[email protected] opt]# ansible-doc -s shell 注: -i 指定配置文件  tomcatserver自己定义的工作组  -m 指定模块 file模块 file模块包含如下选项: force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下:另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group:定义文件/目录的属组 mo

Ansible常用模块介绍及使用

ansible常用命令解析: 查看当前 ansible 都支持哪些模块: ansible-doc -l 查看某一模块可以使用的参数:ansible-doc -s copy (eg:copy模块) ansible用法: ansible 主机名 -m 模块名 -a 模块参数 -m:模块的名字,如果执行单一的命令不用加-m,默认走command -a: 模块参数,如果模块是command,-a 后面跟的就是命令参数 -i : 指定hosts文件位置      默认:/etc/ansible/hosts

Ansible常用模块及API

Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm 安装Ansible: yum install ansible -y 配置文件: 路径:/etc/ansible/hosts配置说明:webservers为组名,下面的ip或域名则是属于该组的主机. [webservers] 192.168.1.111

ansible使用一(ansible的安装及ansible常用模块的使用)

1.ansible概述        Ansible是一款基于Python开发的自动化运维工具,它不需要安装客户端,使用SSH进行通信,同时可支持系统账号认证或秘钥认证,也支持windows客户端. Ansible主要组成部分: (1)ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件: (2)INVENTORY:Ansible管理主机的清单: (3)MODULES:Ansible执行命令的

Ansible常用模块实例

ansible主要文件 (/etc/ansible/ansible.cfg) #ansible主配置文件. (/etc/ansible/hosts) #主机清单,保存管理的主机信息. (/etc/ansible/roles) #公共角色,主要在自动化部署多台主机时应用. ansible命令集 ansible 定义并运行简单任务. ansible-config #查看.编辑.管理ansible配置. ansible-doc #文档查看工具. ansible-galaxy #共享和下载roles的工