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执行命令。如果一个命令可以通过模块yum、copy模块实现时,那么建议不要使用shell或者command这样通用的命令模块。因为通用的命令模块不会根据具体操作的特点进行状态判断,所以当没有必要再重新执行的时候,它还是会重新执行一遍。

支持<、>、|、;和&

--- 
- hosts: server1
  tasks:
    - name: Test shell
  • 调用脚本
---

- 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 提供了一系列内置模块用于自动化运维任务,每个模块都有特定的功能和使用方式。为了表示一个可执行的任务,在配置这些模块时需加上`-`号[^1]。 #### 文件操作类模块 ##### `file` 此模块可用于处理文件、目录以及链接等资源的状态。例如创建空文件: ```bash ansible web_servers -m file -a "path=/tmp/testfile1 state=touch" ``` 这条命令会在目标机器上的 `/tmp/` 路径下创建名为 `testfile1` 的空文件[^3]。 #### 执行远程命令模块 ##### `command` 该模块允许用户在远程节点上执行不带shell特性(如管道符、重定向)的简单命令。 ##### `shell` 与 command 类似但是支持更复杂的 Shell 特性,比如环境变量设置、输入输出重定向等功能。 可以通过如下命令查看系统中存在的所有可用模块列表并统计数量: ```bash ansible-doc -l | wc -l ``` 也可以通过grep查找特定名称的模块, 如查询包含"shell"字样的模块: ```bash ansible-doc -l | grep shell ``` #### 获取主机信息模块 ##### `setup` Setup 模块用来收集被控端系统的事实(facts),即有关操作系统的信息和其他属性数据。默认情况下每次连接都会自动调用 setup 收集facts,当面对大量主机时可能会降低效率,因此可以选择关闭这一行为以提高性能: ```yaml --- - hosts: all tasks: - name: Disable fact gathering to speed up playbooks with many targets. debug: msg: "Gathering of facts is disabled." gather_facts: no ``` #### 测试连通性的 ping 模块 Ping 是最基础也是最重要的测试工具之一,它能够验证网络可达性和基本通信能力。Ansible 中也有对应的ping模块来实现这一点。 #### 自定义逻辑控制模块 ##### `script` Script 可以让管理员上传本地脚本到远端服务器上去运行,并根据返回的结果决定下一步动作。下面的例子展示了如何仅当某个条件满足时才去安装软件包: ```bash [root@master-61 ~]# ansible nfs -m script -a "/root/install_nginx.sh" ``` 这段代码会尝试在匹配的目标机上调用位于根用户的家目录下的 install_nginx.sh 脚本来部署 Nginx Web服务程序[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值