当前位置: 首页 > news >正文

??Ansible——ad-hoc

文章目录

    • 一、ad-hoc介绍
      • 如何使用 Ansible Ad-Hoc 命令
        • 1. 基本语法
        • 2. 示例
      • 应用场景
      • 注意事项
    • 二、Ansible模块
      • Ansible模块的参数
  • 下面模块的说明测试验证???????????
      • shell模块
      • command模块
      • script模块
      • file模块
      • copy模块
      • yum模块
      • yum-repository模块
      • service模块
      • systemd模块
      • user模块
      • group模块
      • mount模块
      • unarchive模块
      • mysql_db
        • 动作
        • 测试
      • mysql_user
        • 动作
        • 测试:
  • To DO????

一、ad-hoc介绍

在这里插入图片描述

“Ad-hoc"这个词组的全称就是"ad
hoc”,它本身就是一个完整的拉丁语短语,意思是“为了这个目的”或“特别为此”。在英语中,它通常用来描述临时的、特别的或即兴的解决方案或决策。在技术领域,尤其是在Ansible这样的自动化工具中,"ad-hoc"命令指的是那些不需要预先编写完整剧本(playbook)就能执行的一次性任务。因此,"ad-hoc"并没有一个更长的全称,它本身就是一个完整的术语。
“Ad-hoc"这个词组的全称就是"ad
hoc”,它本身就是一个完整的拉丁语短语,意思是“为了这个目的”或“特别为此”。在英语中,它通常用来描述临时的、特别的或即兴的解决方案或决策。在技术领域,尤其是在Ansible这样的自动化工具中,"ad-hoc"命令指的是那些不需要预先编写完整剧本(playbook)就能执行的一次性任务。因此,"ad-hoc"并没有一个更长的全称,它本身就是一个完整的术语。
"ad-hoc"这个词的发音是 [ˌæd ˈhɒk](英式发音)或 [ˌæd ˈhɑːk](美式发音)。其中 “ad” 读作
“æd”,“hoc” 读作 “hɒk”(英式)或 “hɑːk”(美式)。这个词组通常作为一个整体来读,不分开。 Ansible 的
ad-hoc 命令是一个强大的功能,允许你在没有编写 Ansible playbook
的情况下,直接在目标主机上执行命令。它提供了一种快速且灵活的方式来执行各种任务,比如配置更改、系统检查和软件安装。

Ansible 的 ad-hoc 命令是一种即时执行单次任务的方式,无需创建和维护 playbook。它通过命令行直接指定要执行的模块和参数,并将这些指令应用于目标主机或主机组。

如何使用 Ansible Ad-Hoc 命令

1. 基本语法
ansible <主机组> -m <模块> -a "<模块参数>"
  • <主机组>: 目标主机或主机组的名称,在 Ansible 的 inventory 文件中定义。
  • <模块>: 要使用的 Ansible 模块,比如 pingcommandshellyum 等。
  • <模块参数>: 传递给模块的参数,通常是以键值对的形式。
2. 示例
  • 测试主机连通性

    ansible all -m ping
    

    这个命令会使用 ping 模块来测试所有主机的连通性。如果主机正常响应,它会返回 pong

  • 执行远程命令

    ansible webservers -m shell -a "uptime"
    

    这个命令会在所有 webservers 主机组中的主机上执行 uptime 命令,显示系统的运行时间和负载信息。

  • 安装软件包

    ansible dbservers -m yum -a "name=httpd state=present"
    

    这个命令会在 dbservers 主机组中的所有主机上使用 yum 模块安装 httpd 软件包。

  • 复制文件

    ansible all -m copy -a "src=/local/path/to/file dest=/remote/path/to/file"
    

    这个命令会将本地路径 /local/path/to/file 复制到远程主机的路径 /remote/path/to/file

应用场景

  1. 快速测试和调试: Ad-hoc 命令非常适合用来快速测试某些功能或调试问题,而不需要编写完整的 playbook。

  2. 一次性操作: 对于一些一次性的配置更改或操作,比如安装一个软件包或重启服务,ad-hoc 命令是一个高效的选择。

  3. 批量管理: 使用 ad-hoc 命令可以同时对多个主机执行相同的操作,比如更新系统或执行安全检查。

注意事项

  • 权限: 确保你有权限在目标主机上执行所需的操作,有些操作可能需要 root 权限。
  • 安全: 使用 ad-hoc 命令时要小心,以避免对生产环境造成不必要的影响。
  • 性能: 对于大规模的操作或复杂的任务,建议使用 playbook,以便更好地管理和维护配置。

通过 ad-hoc 命令,你可以快速、灵活地管理和配置你的服务器,帮助你在日常工作中提高效率。

二、Ansible模块

Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署和任务自动化。Ansible 的模块是执行任务的基本单元,每个模块都是一个 Python 脚本或插件,用于与目标系统交互。模块的通用组成包括以下几个部分:

  1. 模块的入口点

    • 模块通常由一个名为 main 的函数或类的实例化来定义,这是模块的执行入口。
  2. 参数定义

    • 模块接收参数,这些参数通过 Ansible 的任务定义传递。参数可以在模块的 argument_spec 中定义。它们描述了模块可以接受的选项、数据类型、是否必需等。
  3. 逻辑处理

    • 模块包含实现特定功能的核心逻辑。例如,创建文件、安装软件包、修改配置等。这部分的代码处理传递给模块的参数,执行必要的操作,并产生相应的结果。
  4. 返回结果

    • 模块需要以特定格式返回结果,通常是 JSON 格式。结果包含任务的成功状态、返回的消息、可能的变更等信息。Ansible 根据这些信息来报告任务的状态给用户。
  5. 错误处理

    • 模块应具备处理和报告错误的能力。如果模块在执行过程中遇到问题,它应能以清晰的方式报告错误,并返回相应的错误信息。
  6. 文档字符串

    • 模块通常包含一个文档字符串,描述模块的功能、参数及用法。这有助于用户理解如何使用该模块。
  7. 依赖管理

    • 某些模块可能需要依赖其他 Python 库或系统工具。在模块中,可以通过导入相关库或检查系统环境来管理这些依赖。
  8. 测试和调试

    • 模块应包含测试和调试功能,以确保其在不同环境下的正确性和可靠性。这可以包括内置测试用例或调试输出。

以下是一个简单的 Ansible 模块示例(用 Python 编写):

#!/usr/bin/pythonfrom ansible.module_utils.basic import AnsibleModuledef run_module():module_args = dict(name=dict(type='str', required=True),state=dict(type='str', required=True, choices=['present', 'absent']))result = dict(changed=False,original_message='',message='')module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)name = module.params['name']state = module.params['state']# Implement module logic hereif state == 'present':result['changed'] = Trueresult['message'] = 'Item {} is present'.format(name)elif state == 'absent':result['changed'] = Trueresult['message'] = 'Item {} is absent'.format(name)module.exit_json(**result)def main():run_module()if __name__ == '__main__':main()

这个示例模块接受两个参数 namestate,然后根据 state 的值生成响应的消息。根据具体实现的复杂性,模块的组成和功能可能会有所不同,但这些基本组成部分是大多数 Ansible 模块所共有的。
在这里插入图片描述

Ansible模块的参数

Ansible 的模块可以用于自动化系统配置和管理,模块通常有一些通用的参数,虽然具体的参数取决于模块的类型和功能。以下是一些常用的 Ansible 模块的通用参数及其说明:

  1. name:

    • 描述: 指定资源的名称或目标。
    • 示例: 在 package 模块中,name 用于指定要安装或删除的软件包的名称。
  2. state:

    • 描述: 定义资源的目标状态。
    • 选项:
      • presentinstalled:资源应存在(如安装包、文件等)。
      • absentremoved:资源应不存在。
      • started:服务应启动。
      • stopped:服务应停止。
      • restarted:服务应重新启动。
      • latest:例如软件包应更新到最新版本。
    • 示例: 在 service 模块中,state 可以设置为 startedstopped
  3. src:

    • 描述: 指定源文件或目录路径。
    • 示例: 在 copy 模块中,src 用于指定本地文件路径,准备复制到目标主机。
  4. dest:

    • 描述: 指定目标路径。
    • 示例: 在 copy 模块中,dest 用于指定文件应该复制到的路径。
  5. user:

    • 描述: 指定执行操作的用户。
    • 示例: 在 file 模块中,user 用于设置文件或目录的所有者。
  6. group:

    • 描述: 指定文件或目录所属的组。
    • 示例: 在 file 模块中,group 用于设置文件或目录的组。
  7. mode:

    • 描述: 设置文件或目录的权限模式。
    • 示例: 在 file 模块中,mode 用于设置权限,例如 0755
  8. delegate_to:

    • 描述: 指定将任务委托到其他主机执行。
    • 示例: 用于在 Ansible Playbook 中将特定任务委托到不同的主机。
  9. args:

    • 描述: 用于传递其他参数,模块通常会接受以字典形式提供的额外参数。
    • 示例: 在一些模块中,如 commandargs 可以用于指定额外的命令行参数。
  10. with_items:

    • 描述: 用于循环处理列表中的每一项。
    • 示例: 在 yum 模块中,可以使用 with_items 来逐个安装列表中的软件包。
  11. register:

    • 描述: 将任务的结果存储在变量中,以便后续使用。
    • 示例: 在 Playbook 中,可以用 register 将任务结果保存为变量以便进一步操作。
  12. when:

    • 描述: 根据条件判断是否执行任务。
    • 示例: 在 Playbook 中使用 when 来控制任务的执行条件。

这些参数通常可以与具体的 Ansible 模块结合使用,以实现复杂的自动化任务。模块的文档会提供详细的参数说明和示例,可以查阅 Ansible 官方文档 来获取更多具体的模块信息。

Ansible 是一个强大的自动化工具,它使用模块来执行各种任务。每个模块都有自己特定的参数,但有一些通用的参数可以在多个模块中使用。以下是
Ansible 模块常见的通用参数及其说明:

  1. become

    • 说明:用于提升权限。设置为 yes 时,模块会使用提权工具(如 sudo)来执行任务。
    • 示例become: yes
  2. become_user

    • 说明:指定提权后的用户身份。become 参数为 yes 时,这个参数会指定使用哪个用户来执行任务。
    • 示例become_user: www-data
  3. become_method

    • 说明:指定提权的方法。常用的值包括 sudo, su, pbrun, pfexec, doas 等。
    • 示例become_method: sudo
  4. delegate_to

    • 说明:指定将任务委派给其他主机来执行,而不是当前主机。
    • 示例delegate_to: dbserver.example.com
  5. ignore_errors

    • 说明:设置为 yes 时,即使任务失败也会继续执行其他任务。用于容忍某些任务失败。
    • 示例ignore_errors: yes
  6. register

    • 说明:将任务的输出结果保存到变量中,以便后续任务使用。
    • 示例register: result
  7. until

    • 说明:指定一个条件,任务将反复执行直到条件成立或者达到最大重试次数。
    • 示例until: result.rc == 0
  8. retries

    • 说明:与 until 配合使用,指定任务最大重试次数。
    • 示例retries: 5
  9. delay

    • 说明:与 untilretries 配合使用,指定每次重试之间的等待时间(以秒为单位)。
    • 示例delay: 10
  10. timeout

    • 说明:设置任务的超时时间(以秒为单位),超出时间后任务将被中断。
    • 示例timeout: 60

这些通用参数帮助你在编写 Ansible
剧本时更好地控制任务的执行方式和处理结果。具体模块可能会有自己的专用参数,但了解这些通用参数可以让你更加灵活地管理和优化自动化任务。

下面模块的说明测试验证???????????

shell模块

ansible web_group -m shell -a 'df -h'
ansible web_group -m shell -a 'ps -ef | grep nginx'

command模块

不能全部识别shell中的特殊符号,如:command无法使用管道符“|”

验证:

ansible web_group -m command -a 'ps -ef | grep nginx'

script模块

管理机脚本推送到其他机器中

ansible web_group -m script -a '/root/test_script_module.sh'

file模块

在这里插入图片描述
有什么用:

动作:

状态:

copy模块

在这里插入图片描述

yum模块

有什么用:

动作:

  • 1
  • 2
  • 3

状态:

  • 1
  • 2
ansible db01 -m yum -a "name=mariadb-server state=present"

yum-repository模块

有什么用:

动作:
根据仓库文件的内容的选项:

  • name
    表示仓库的名字

  • description
    对仓库的描述信息

  • baseurl

  • file

  • owner

  • group

  • gpgcheck

    • =yes
    • =no
  • enabled

    • =yes
    • =no

状态:

  • state=present
    创建

  • state=absent
    删除

在这里插入图片描述

#删除仓库:
ansible web01 -m yum_repository -a 'name=nginx-stable-repos state=absent'

service模块

有什么用:

动作:

  • name
    服务名

状态:

  • started
  • stopped
  • restarted
  • reloaded

systemd模块

在这里插入图片描述

user模块

在这里插入图片描述

group模块

在这里插入图片描述

mount模块

在这里插入图片描述

unarchive模块

在这里插入图片描述

mysql_db

动作

在这里插入图片描述

测试
---
- hosts: db01tasks:- name: 创建名为test_db的数据库mysql_db:name: test_dblogin_user: rootlogin_password: 4439

mysql_user

动作

1、name
mysql里的数据库的用户

2、host
数据库访问的主机域

3、password
指定数据库访问的用户对应的密码

4、priv
指定权限,如:wp_db.*:ALL

5、login_user
启动mysql服务的登录用户(如果已设置了的话)

6、login_password
启动mysql服务的登录用户对应的密码

测试:

管理机远程连接数据库服务器的数据库服务并设置库的登录用户

To DO????

---tasks:- name: 启动mariadb服务service:name: mariadbstate: started- name: 安装Ansible需要连接数据库的Python服务yum:name: MySQL-pythonstate: present- name: 设置test_db数据库的用户# To Do ??????????

http://www.mrgr.cn/news/29398.html

相关文章:

  • 活动系统开发之采用设计模式与非设计模式的区别-后台功能总结
  • 函数题 6-9 统计个位数字【PAT】
  • 建立这一新框架以应对人才紧缺时期的敏捷内容运营
  • 论文速递 | 基于MIC-ICEEMD-RIME-DHKELM的碳排放预测模型研究
  • 解决nginx代理SSE接口的响应没有流式返回
  • MUNIK谈ASPICE系列专题分享(一)什么是ASPICE?
  • 农产品交易平台的设计与实现
  • 该州允许AI帮助裁定失业申请
  • linux 内核代码学习(九)--Linux内核启动和文件系统
  • 【工具】Java Excel转图片
  • 基于SpringBoot的在线教育平台的设计与实现
  • 高密原型验证系统解决方案(上篇)
  • 【Elasticsearch系列十一】聚合 DSL API
  • html,css基础知识点笔记(二)
  • UE4_后期处理六—复古电视效果
  • RTX 4090 系列即将停产,RTX 5090 系列蓄势待发
  • uniapp 发布苹果IOS详细流程,包括苹果开发者公司账号申请、IOS证书、.p12证书文件等
  • 上海人工智能实验室开源视频生成模型Vchitect 2.0 可生成20秒高清视频
  • 项目实战 (13)--- 内部并发多线程一致性处理
  • 回收站永久删除的文件还能恢复吗?教你恢复技巧