首页 > 其他分享 >Ansible的常用模块

Ansible的常用模块

时间:2024-06-20 15:22:28浏览次数:12  
标签:tmp 常用 ansible state Ansible yum 模块 master

目录

ansible常用模块

这些写的都是常用的模块,还有更多其他的模块可以自行查文档

模块的使用这里都使用Ad-Hoc的方式。playbook的方式后面会说

  • file 模块
  • copy 模块
  • yum_repository 模块
  • yum 模块
  • service 模块
  • systemd 模块
  • user 模块
  • group 模块
  • fetch 模块
  • get_url 模块
  • setup 模块

1. file模块

1.1 file模块的选项

file 模块主要用于远程主机上的文件操作,有一下选项

  • path:必选项,定义文件/目录的路径
  • state:
    • file:查看文件状态,默认选项,如果文件不存在会报错,并不会创建
    • touch:如果文件不存在,则创建,如果已经存在,会更新时间戳
    • absent:删除目录,文件,或取消软链接
    • directory:如果目录不存在,就创建目录
    • link:创建软链接
    • hard:创建硬链接
  • owner:定义文件/目录的拥有人
  • group:定义文件/目录的所属组
  • mode:定义文件的权限
  • src:要被链接的源文件的路径,只应用于state=link的时候
  • dest:被链接到的路径,只应用于state=link的时候

1.2 file模块的使用

1.2.1 使用file模块在远程主机创建文件

[ansible@master ansible]$ ansible all -m file -a "path=/tmp/file1 state=touch owner=ansible group=root mode=666"

192.168.200.210 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "dest": "/tmp/file1",
    "gid": 0,
    "group": "root",
    "mode": "0666",
    "owner": "ansible",
    "size": 0,
    "state": "file",
    "uid": 1000
}

使用path定义了文件的路径,state为touch,则为创建/更新时间戳,文件的拥有人是ansible,所属组是root,并且权限是666,那么我们来到远程主机来看看是不是这样

[ansible@master ansible]$ ansible all -m shell -a "ls -l /tmp/file1"
192.168.200.210 | CHANGED | rc=0 >>
-rw-rw-rw- 1 ansible root 0 Jun 20 13:38 /tmp/file1

可以看到,一切都是按照我们的想法来创建的

1.2.2 创建目录

[ansible@master ansible]$ ansible all -m file -a "path=/tmp/dire1 state=directory"

192.168.200.210 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "gid": 0,
    "group": "root",
    "mode": "0755",
    "owner": "root",
    "path": "/tmp/dire1",
    "size": 40,
    "state": "directory",
    "uid": 0
}

这次我们没有指定权限,拥有人,所属组那些,他就是按照默认的来创建的,通过回显可以看到group是root,owner是root,权限是755

1.2.3 删除文件/目录

[ansible@master ansible]$ ansible all -m file -a "path=/tmp/dire1 state=absent"
192.168.200.210 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "path": "/tmp/dire1",
    "state": "absent"
}

[ansible@master ansible]$ ansible all -m file -a "path=/tmp/file1 state=absent"
192.168.200.210 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "path": "/tmp/file1",
    "state": "absent"
}

在删除的时候,是不分目录还是文件的,只需要给定文件的路径就可以删除

2. copy模块

见名知意,就是拷贝文件到远程主机的

2.1 copy模块的选项

  • src: 本地的哪个文件需要复制到远程主机
    • 注意:如果目标是一个目录,他会递归复制,在这种情况下,如果路径是以 / 结尾,那么他会复制目录下的所有文件,如果不以 **/ **结尾的话,就会将本地目录原样的复制过去,类似于rsync
  • dest:必选项,要将源文件复制到远程主机的哪个路径
  • force:如果目标主机存在此文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制,默认为yes
  • backup:在覆盖之前将原文件备份
  • content:用于替代src,可以直接指定文件内容
  • remote_src:如果需要复制的文件在远程主机上而不在ansible的控制节点上使用这个,注意:他只是将src改为远程主机了,并不是从远程主机将文件复制到本地,而是将某个远程主机的文件复制到其他的远程节点

2.2 copy模块的使用

[ansible@master ansible]$ ansible all -m copy -a "src=./ansible.cfg dest=/tmp/ansible.cfg"
192.168.200.210 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": true,
    "checksum": "b4eeb9b83b919c3f57d7e92dbde263a35713dca4",
    "dest": "/tmp/ansible.cfg",
    "gid": 0,
    "group": "root",
    "md5sum": "156467e44d3da8b3a40b2ca409f86ae8",
    "mode": "0644",
    "owner": "root",
    "size": 19974,
    "src": "/root/.ansible/tmp/ansible-tmp-1718863118.8950412-44119-223733622484954/source",
    "state": "file",
    "uid": 0
}

指定文件内容到远程主机

[ansible@master ansible]$ ansible all -m copy -a "content='hello,world' dest=/tmp/hello"
[ansible@master ansible]$ ansible all -m shell -a "cat /tmp/hello"
192.168.200.210 | CHANGED | rc=0 >>
hello,world

3. yum_repository模块

yum_repository是用来指定yum仓库的repo文件的

3.1 yum_repository的选项

  • file:配置文件的名字,不用包含repo
  • name:yum仓库的名字
  • description:仓库的描述信息
  • baseurl:yum仓库的地址
  • enabled:是否开启这个yum仓库
  • gpgcheck:是否开启gpg检查

3.2 yum_repository的使用

[ansible@master ansible]$ ansible all -m yum_repository -a "file=ansible name=AppStream baseurl=http://test.com enabled=1 gpgcheck=0 description='this is test repo file'"
192.168.200.210 | CHANGED => {
    "changed": true,
    "repo": "AppStream",
    "state": "present"
}

我们来到远程主机查看这个文件

[root@node1 tmp]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# ls
ansible.repo  kubernetes.repo  openEuler.repo

[root@node1 yum.repos.d]# cat ansible.repo 
[AppStream]
baseurl = http://test.com
enabled = 1
gpgcheck = 0
name = this is test repo file

这个模块相对比较简单,功能也比较单一

4. yum 模块

用来使用yum去安装软件包

4.1yum模块的选项

  • name:指定要安装的软件包的名字
  • state:指定动作
    • present:安装
    • latest:最新版本
    • absent:删除

4.2 yum模块的使用

删除nginx

[ansible@master ansible]$ ansible all -m yum -a "name=nginx state=absent"
192.168.200.210 | CHANGED => {
    "ansible_facts": {
        "pkg_mgr": "dnf"
    },
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Removed: nginx-1:1.21.5-6.oe2203sp3.x86_64",
        "Removed: nginx-all-modules-1:1.21.5-6.oe2203sp3.noarch",
        "Removed: nginx-mod-http-image-filter-1:1.21.5-6.oe2203sp3.x86_64",
        "Removed: nginx-mod-http-perl-1:1.21.5-6.oe2203sp3.x86_64",
        "Removed: nginx-mod-http-xslt-filter-1:1.21.5-6.oe2203sp3.x86_64",
        "Removed: nginx-mod-mail-1:1.21.5-6.oe2203sp3.x86_64",
        "Removed: nginx-mod-stream-1:1.21.5-6.oe2203sp3.x86_64"
    ]
}

安装httpd

[ansible@master ansible]$ ansible all -m yum -a "name=nginx state=present"
192.168.200.210 | CHANGED => {
    "ansible_facts": {
        "pkg_mgr": "dnf"
    },
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Installed: nginx-mod-http-xslt-filter-1:1.21.5-6.oe2203sp3.x86_64",
        "Installed: nginx-mod-mail-1:1.21.5-6.oe2203sp3.x86_64",
        "Installed: nginx-mod-stream-1:1.21.5-6.oe2203sp3.x86_64",
        "Installed: nginx-1:1.21.5-6.oe2203sp3.x86_64",
        "Installed: nginx-all-modules-1:1.21.5-6.oe2203sp3.noarch",
        "Installed: nginx-mod-http-image-filter-1:1.21.5-6.oe2203sp3.x86_64",
        "Installed: nginx-mod-http-perl-1:1.21.5-6.oe2203sp3.x86_64"
    ]
}

5. service模块

这个模块完全可以使用systemd来替代,有这个模块的原因是因为centos的早期版本是使用service xxx start 来管理服务的

5.1 service模块的选项

  • name:必选项,服务的名称
  • state:对当前服务执行的操作
  • enabled:是否开机自启

5.2 service模块的使用

[ansible@master ansible]$ ansible all -m service -a "name=nginx state=started enabled=yes"
192.168.200.210 | CHANGED => {
    "changed": true,
    "enabled": true,
    "name": "nginx",
    "state": "started",
    "status": {

输出信息过多,不在这里完全展示

6. systemd模块

6.1 systemd模块的选项

  • name:指定服务的名称
  • state:管理服务状态
    • started
    • restarted
    • stopped
    • reloaded
  • daemon_reload:当服务配置文件发生改变重载服务
  • enabled:是否开机自启

6.2 systemd模块的使用

[ansible@master ansible]$ ansible all -m systemd -a "name=nginx state=stopped enabled=no"
192.168.200.210 | CHANGED => {
    "changed": true,
    "enabled": false,
    "name": "nginx",
    "state": "stopped",

7. user模块

7.1 user模块的选项

  • name:指定用户名
  • state:创建还是删除
  • uid:指定用户uid
  • group:指定用户组
  • groups:指定用户的附加组
  • comment:用户的描述信息
  • create_home:是否给他创建home目录
  • home:home目录的路径,需要配合create_home一起使用
  • shell:指定用户的shell环境
  • password:指定用户的密码,这里必须给定加密过后的密码,如果直接将密码明文写在这是没有用的,登录不了
  • remove:删除用户时是否删除home目录,相当于userdel -r

7.2 user模块的使用

[ansible@master ansible]$ ansible all -m user -a "name=natasha uid=1234 groups=root shell=/sbin/nologin password=123"
[WARNING]: The input password appears not to have been hashed. The 'password'
argument must be encrypted for this module to work properly.
192.168.200.210 | CHANGED => {
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
    "groups": "root",
    "home": "/home/natasha",
    "name": "natasha",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/sbin/nologin",
    "state": "present",
    "system": false,
    "uid": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER"
}

注意,我在这里指定了password,并且就是明文指定的,他会有一个警告,说我们给定的密码不是一个hash过的值,说白了就是没有经过加密的密码,这个密码是无法使用的,你使用123 是无法登录这个用户的,当然我们指定的shell是/sbin/nologin,你正常指定shell也是不能

我们可以使用openssl来生成一个加密的密码

[ansible@master ansible]$ openssl passwd -6
Password: 
Verifying - Password: 
$6$b4Ug/ub0EPkyRE5x$oN.c5c2ah.Ej.Eo8s3F0q1E5t1/MHCFanZZivkJ8S2ZzE8fR2I2e7uYL5HgZ5CLwo1MGMhnHd2mmFxkN49Kq20

将输出的这一段放在password字段就可以了

用户的删除

[ansible@master ansible]$ ansible all -m user -a "name=natasha state=absent remove=yes"
192.168.200.210 | CHANGED => {
    "changed": true,
    "force": false,
    "name": "natasha",
    "remove": true,
    "state": "absent"
}

8. group模块

group模块是用来创建用户组的

8.1 group模块的选项

  • gid:指定组的gid
  • name:指定组名
  • state:创建还是删除组,选项
    • present
    • absent

8.2 group模块的使用

[ansible@master ansible]$ ansible all -m group -a "name=test gid=2024 state=present"
192.168.200.210 | CHANGED => {
    "changed": true,
    "gid": 2024,
    "name": "test",
    "state": "present",
    "system": false
}

# 删除组
[ansible@master ansible]$ ansible all -m group -a "name=test gid=2024 state=absent"
192.168.200.210 | CHANGED => {
    "changed": true,
    "name": "test",
    "state": "absent"
}

9. fetch模块

这个模块正好与copy模块相反,copy是将文件复制到远程,这个则是将远程文件收集到本地

9.1 fetch模块的选项

  • src:远程主机文件路径,只能是文件,不能是目录
  • dest:文件收集到本地的哪个路径
  • flat:默认为no,标识在主控端目录下以远程主机名的方式来显示文件目录结构,yes标识不用主机名的方式来显示,dest的结尾必须是 /

9.2 fetch模块的使用

# 将之前创建的hello文件收集到本地
[ansible@master ansible]$ ansible all -m fetch -a "src=/tmp/hello dest=./ "
192.168.200.210 | CHANGED => {
    "changed": true,
    "checksum": "74f4f4eb1947b9ca08e5e68d04d081808777f9a0",
    "dest": "/home/ansible/ansible/192.168.200.210/tmp/hello",
    "md5sum": "3cb95cfbe1035bce8c448fcaf80fe7d9",
    "remote_checksum": "74f4f4eb1947b9ca08e5e68d04d081808777f9a0",
    "remote_md5sum": null
}
[ansible@master ansible]$ ls
ansible.cfg   roles   user.yaml 192.168.200.210   inventory     set

这里就会有一个目录名是远程主机名,目录里面的内容就是我们收集过来的文件了

[ansible@master ansible]$ cat 192.168.200.210/tmp/hello 
hello,world
[ansible@master ansible]$ rm -rf 192.168.200.210/
[ansible@master ansible]$ ansible all -m fetch -a "src=/tmp/hello dest=./ flat=yes"
192.168.200.210 | CHANGED => {
    "changed": true,
    "checksum": "74f4f4eb1947b9ca08e5e68d04d081808777f9a0",
    "dest": "/home/ansible/ansible/hello",
    "md5sum": "3cb95cfbe1035bce8c448fcaf80fe7d9",
    "remote_checksum": "74f4f4eb1947b9ca08e5e68d04d081808777f9a0",
    "remote_md5sum": null
}
[ansible@master ansible]$ ls
ansible.cfg   hello   inventory   roles   set   user.yaml

如果为yes的话就会直接显示文件名

10. get_url模块

功能从网上下载文件,类似于wget命令

10.1 get_url模块的选项

  • url:下载的url
  • url_password / url_username:主要用于需要用户名和密码验证的情况
  • dest:保存到本地的哪个地方
  • mode:给定权限
  • owner:指定拥有人
  • group:指定所属组

10.2 get_url模块的使用

[ansible@master ansible]$ ansible all -m get_url -a "url=https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo dest=/tmp"
192.168.200.210 | CHANGED => {
    "changed": true,
    "checksum_dest": null,
    "checksum_src": "42cd41801c59a7d62b8d936249817bb29c66c9aa",
    "dest": "/tmp/Centos-vault-8.5.2111.repo",
    "elapsed": 0,
    "gid": 0,
    "group": "root",
    "md5sum": "3861ff439b02834d39b225045a5b0f97",
    "mode": "0644",
    "msg": "OK (2495 bytes)",
    "owner": "root",
    "size": 2495,
    "src": "/root/.ansible/tmp/ansible-tmp-1718867579.1066597-109801-88317862966284/tmp65039pbq",
    "state": "file",
    "status_code": 200,
    "uid": 0,
    "url": "https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo"
}

将centos8的yum源下载到了/tmp目录下

11. setup 模块

这个模块用来收集远程主机的信息,一般不需要指定参数

11.1 setup模块的使用

这个模块的使用方式有些特别,是将远程主机的信息收集过来之后供我们来看的,方便后面编写不同场景下的通用型playbook

[ansible@master ansible]$ ansible all -m setup  > host_info.yaml
[ansible@master ansible]$ vim host_info.yaml
92.168.200.210 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.200.210",
            "172.17.0.1",
            "10.245.149.0"
        ],
        "ansible_all_ipv6_addresses": [
            "fe80::20c:29ff:fe2c:d98",
            "fe80::ecee:eeff:feee:eeee"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "11/12/2020",
        "ansible_bios_version": "6.00",

信息很多,我没有全部粘贴,这个具体如何使用后面playbook再讲

标签:tmp,常用,ansible,state,Ansible,yum,模块,master
From: https://www.cnblogs.com/fsdstudy/p/18258735

相关文章

  • 实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
    另外:https://blog.csdn.net/asdhnkhn/article/details/133206543  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百三十八:64位WS2812B8*8xRGB5050LED模块ws2812s像素点阵屏知识点:WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源......
  • 关于数据库的一些常用操作
    数据定义语言(DDL)DDL主要用于创建、修改和删除数据库中的对象,如数据库、表、视图等。创建数据库sql复制代码CREATEDATABASE数据库名;选择数据库sql复制代码USE数据库名;创建表sql复制代码CREATETABLE表名(列名1数据类型1,列名2数据类型2,......
  • Spring5中常用的注解说明
    用于创建对象的注解相当于:<beanid=""class="">1.1@Component注解作用:把资源让 spring 来管理。相当于在 xml 中配置一个 bean。属性:value:指定bean的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名。首字母小写。1.2@Controller @Servic......
  • MFC---列表框控件ListBox、组合框控件Combo Box(常用控件)
    前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法。本文要讲的是列表框控件(ListBox)及其使用实例。列表框控件简介列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选中的项会高亮显示。列表框可分为单选列表框和多选列表框,顾名思义,单选列表框中......
  • 智能高效:SP22010-6电力模块助力电力行业升级
    SP22010-6高频电力模块:电力行业的革新者在电力技术日新月异的今天,SP22010-6高频电力模块凭借其卓越的性能和先进的技术,成为电力行业的新星。这款模块采用了高频技术,大大提高了电能的转换效率,为各种电力应用提供了更稳定、更高效的能源支持。SP22010-6不仅具备高效能,而且设计......
  • Vue 中 v-for 的全方位解读:含案例与 key 属性运用及常用数组方法
    目录v-for介绍v-forkey属性的使用Vue数组方法v-for介绍        v-for能够对数字、数组以及对象进行遍历。值得注意的是,当v-for与v-if一同运用时,v-for的优先级要高于v-if。正因如此,应尽量避免将v-if和v-for共同使用。特别是在嵌套使用的情况下,每一......
  • 【重写SpringFramework】第一章beans模块:填充对象(chapter 1-6)
    1.前言在对象实例化之后,我们需要对一些字段进行赋值,这一过程称之为对象的填充(populate)。填充对象由两部分组成,一是属性访问,二是自动装配(autowire)。属性访问的功能已经介绍过了,本节主要讨论的是自动装配的问题。自动装配也称依赖注入,包括两个部分,即环境变量解析和对象解析,......
  • 【重写SpringFramework】第一章beans模块:Bean的销毁(chapter 1-9)
    1.前言Bean的生命周期包括初始化和销毁操作,上节介绍了Bean初始化流程,本节来看Bean的销毁流程是如何实现的。在实际应用中,绝大多数对象并不需要执行销毁操作,但某些对象本身管理着一定的资源。当Spring容器关闭时,所有的对象都会被虚拟机回收。在此之前,这些特殊的对象......
  • 【重写SpringFramework】第一章beans模块:Bean的初始化(chapter 1-8)
    1.前言前边我们介绍了创建实例和填充对象的流程,这是整个创建流程最重要的工作。有时候用户需要对Bean进行自定义的操作,这一过程称为初始化。此外,还有一些比较特殊的对象,本身管理着一定的资源,当对象销毁时需要释放这些资源,因此我们还需要相应的销毁操作。初始化和销毁操作......
  • 常用的设计架构
    这个表中尝试把网上提到的10种架构设计模式做了分类,总体来说分为两类:服务器内设计模式:设计服务器灵活、高性能、高可用、可扩展分层事件总线主从MVC黑板服务与被服务者之间的设计模式:设计服务器和客户端之间的通信过程C/S管道-过滤器代理解释器点对点模......