运维效率倍增!Ansible Copy 模块必知必会操作

开发 网络优化
Ansible提供了强大的copy模块,帮助我们快速完成文件的分发任务。本文将结合实际案例,详细讲解copy模块的用法,助你在生产中得心应手。

在自动化运维中,文件分发是一个高频需求场景,例如上传配置文件、分发脚本等。Ansible提供了强大的copy模块,帮助我们快速完成文件的分发任务。本文将结合实际案例,详细讲解copy模块的用法,助你在生产中得心应手。

Copy模块简介

copy 模块用于从Ansible控制节点向目标主机上传文件或目录。支持文件权限设置、内容替换等功能,是实现文件管理的利器。

ansible <pattern> -m copy \
-a "src=<source_path> dest=<destination_path> [other options]"

模块参数:

  • <pattern>:指定要操作的主机或主机组,例如 all、webservers。
  • -m copy:指定使用copy模块。
  • src:源文件路径,必须是控制节点上的文件。
  • dest:目标路径,指定文件在目标主机上的存放位置。
  • owner:文件所有者。
  • group:文件所属组。
  • mode:文件权限。
  • content:直接指定文件内容。

基础用法示例

上传文件到远程主机

在控制节点的 /etc/ansible/playbooks/ 目录下,有一个 config.txt 文件需要分发到所有目标主机的 /etc/app/ 目录。

Playbook语法示例:

- name:使用copy模块上传文件
hosts:test
tasks:
    -name:上传配置文件到目标主机
      ansible.builtin.copy:
        src:/etc/ansible/playbooks/config.txt
        dest:/home/config.txt
        owner:root
        group:root
        mode:'0644'

命令运行:

ansible-playbook -i hosts copy_example.yml

ad-hoc语法示例:

ansible test -m copy \
-a "src=/etc/ansible/playbooks/config.txt dest=/home/config.txt owner=root group=root mode=0664"

结果:

文件config.txt被成功上传到目标主机的 /etc/app/目录,权限设置为0644,并且把所有者和组设置为root。

多环境文件分发

在生产环境中,需要将不同的配置文件分发到开发、测试和生产环境。配置文件根据环境名称存储在控制节点的不同目录中:

  • /etc/ansible/configs/dev/config.txt
  • /etc/ansible/configs/test/config.txt
  • /etc/ansible/configs/prod/config.txt

动态路径分发

Playbook 示例:

- name:多环境配置文件分发
hosts:all
vars:
    env:"{{ inventory_hostname | regex_replace('(.*)-(.*)', '\\2') }}"# 提取环境名
tasks:
    -name:根据环境分发配置文件
      ansible.builtin.copy:
        src:"/etc/ansible/configs/{{ env }}/config.txt"
        dest:"/etc/app/config.txt"
        owner:root
        group:root
        mode:'0644'

**hosts**** 文件示例:**

[dev]
dev-server-01 ansible_host=192.168.1.101

[test]
test-server-01 ansible_host=192.168.1.102

[prod]
prod-server-01 ansible_host=192.168.1.103

命令运行:

ansible-playbook -i hosts multi_env_copy.yml

结果:

每个环境的主机接收到对应的配置文件:

  • dev-server-01:收到 dev/config.txt。
  • test-server-01:收到 test/config.txt。
  • prod-server-01:收到 prod/config.txt。

替换目标文件内容

在上传文件时,需要动态替换其中的占位符,例如替换为主机名或IP地址。

使用 content 参数

Playbook 示例:

- name:动态生成配置文件
hosts:all
tasks:
    -name:根据模板生成配置文件
      ansible.builtin.copy:
        dest:/etc/app/config.txt
        content:|
          主机名:{{ inventory_hostname }}
          IP地址:{{ ansible_default_ipv4.address }}
        owner:root
        group:root
        mode:'0644'

命令运行:

ansible-playbook -i hosts dynamic_content.yml

结果:

目标主机 /etc/app/config.txt 的内容如下:

主机名:dev-server-01
IP地址:192.168.1.101

copy模块 vs template 模块

copy 模块虽然简单高效,但在处理动态内容时需要通过 content 参数显式定义。而 template 模块专为动态内容设计,结合Jinja2模板更灵活。

总结

copy模块是Ansible文件分发的基础工具,无论是单文件上传、多环境管理,还是动态内容生成,它都能快速满足需求。在实际运维中,根据场景选择适当的方法,搭配其他模块使用,可以大大提高自动化效率。快用copy模块在你的工作中试一试吧!

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2020-07-02 09:55:32

运维架构技术

2020-04-21 10:11:12

运维体系趋势

2022-07-27 11:10:27

Kubectl命令运维

2018-12-28 09:11:28

运维监控开源

2020-06-03 15:25:27

运维架构技术

2020-07-10 07:58:14

Linux

2024-11-15 11:11:48

2020-04-28 18:12:31

技术资讯

2024-01-03 07:56:50

2022-05-18 09:01:19

JSONJavaScript

2022-08-19 10:31:32

Kafka大数据

2019-01-30 14:14:16

LinuxUNIX操作系统

2015-10-20 09:46:33

HTTP网络协议

2018-10-26 14:10:21

2023-05-08 15:25:19

Python编程语言编码技巧

2023-04-20 14:31:20

Python开发教程

2024-06-13 09:10:22

2015-08-17 16:05:35

javascript对象编程

2024-01-09 13:58:22

PandasPython数据分析

2023-12-26 12:10:13

点赞
收藏

51CTO技术栈公众号