??Ansible——ad-hoc

打印 上一主题 下一主题

主题 651|帖子 651|积分 1955

一、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. 基本语法

  1. ansible <主机组> -m <模块> -a "<模块参数>"
复制代码


  • <主机组>: 目标主机或主机组的名称,在 Ansible 的 inventory 文件中定义。
  • <模块>: 要利用的 Ansible 模块,比如 ping、command、shell、yum 等。
  • <模块参数>: 传递给模块的参数,通常是以键值对的形式。
2. 示例



  • 测试主机连通性
    1. ansible all -m ping
    复制代码
    这个下令会利用 ping 模块来测试全部主机的连通性。假如主机正常响应,它会返回 pong。
  • 实验远程下令
    1. ansible webservers -m shell -a "uptime"
    复制代码
    这个下令会在全部 webservers 主机组中的主机上实验 uptime 下令,表现系统的运行时间和负载信息。
  • 安装软件包
    1. ansible dbservers -m yum -a "name=httpd state=present"
    复制代码
    这个下令会在 dbservers 主机组中的全部主机上利用 yum 模块安装 httpd 软件包。
  • 复制文件
    1. ansible all -m copy -a "src=/local/path/to/file dest=/remote/path/to/file"
    复制代码
    这个下令会将本地路径 /local/path/to/file 复制到远程主机的路径 /remote/path/to/file。
应用场景


  • 快速测试和调试: Ad-hoc 下令非常得当用来快速测试某些功能或调试问题,而不需要编写完备的 playbook。
  • 一次性操作: 对于一些一次性的设置更改或操作,比如安装一个软件包或重启服务,ad-hoc 下令是一个高效的选择。
  • 批量管理: 利用 ad-hoc 下令可以同时对多个主机实验雷同的操作,比如更新系统或实验安全检查。
注意事项



  • 权限: 确保你有权限在目标主机上实验所需的操作,有些操作大概需要 root 权限。
  • 安全: 利用 ad-hoc 下令时要小心,以制止对生产环境造成不必要的影响。
  • 性能: 对于大规模的操作或复杂的使命,发起利用 playbook,以便更好地管理和维护设置。
通过 ad-hoc 下令,你可以快速、机动地管理和设置你的服务器,帮助你在一样平常工作中进步服从。
二、Ansible模块

Ansible 是一个开源的自动化工具,用于设置管理、应用程序部署和使命自动化。Ansible 的模块是实验使命的基本单位,每个模块都是一个 Python 脚本或插件,用于与目标系统交互。模块的通用组成包罗以下几个部门:

  • 模块的入口点

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

  • 参数定义

    • 模块吸取参数,这些参数通过 Ansible 的使命定义传递。参数可以在模块的 argument_spec 中定义。它们形貌了模块可以担当的选项、数据范例、是否必需等。

  • 逻辑处理

    • 模块包含实现特定功能的焦点逻辑。例如,创建文件、安装软件包、修改设置等。这部门的代码处理传递给模块的参数,实验必要的操作,并产生相应的结果。

  • 返回结果

    • 模块需要以特定格式返回结果,通常是 JSON 格式。结果包含使命的乐成状态、返回的消息、大概的变更等信息。Ansible 根据这些信息来报告使命的状态给用户。

  • 错误处理

    • 模块应具备处理和报告错误的本领。假如模块在实验过程中遇到问题,它应能以清楚的方式报告错误,并返回相应的错误信息。

  • 文档字符串

    • 模块通常包含一个文档字符串,形貌模块的功能、参数及用法。这有助于用户理解怎样利用该模块。

  • 依靠管理

    • 某些模块大概需要依靠其他 Python 库或系统工具。在模块中,可以通过导入相干库或检查系统环境来管理这些依靠。

  • 测试和调试

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

以下是一个简单的 Ansible 模块示例(用 Python 编写):
  1. #!/usr/bin/python
  2. from ansible.module_utils.basic import AnsibleModule
  3. def run_module():
  4.     module_args = dict(
  5.         name=dict(type='str', required=True),
  6.         state=dict(type='str', required=True, choices=['present', 'absent'])
  7.     )
  8.     result = dict(
  9.         changed=False,
  10.         original_message='',
  11.         message=''
  12.     )
  13.     module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)
  14.     name = module.params['name']
  15.     state = module.params['state']
  16.     # Implement module logic here
  17.     if state == 'present':
  18.         result['changed'] = True
  19.         result['message'] = 'Item {} is present'.format(name)
  20.     elif state == 'absent':
  21.         result['changed'] = True
  22.         result['message'] = 'Item {} is absent'.format(name)
  23.     module.exit_json(**result)
  24. def main():
  25.     run_module()
  26. if __name__ == '__main__':
  27.     main()
复制代码
这个示例模块担当两个参数 name 和 state,然后根据 state 的值生成响应的消息。根据具体实现的复杂性,模块的组成和功能大概会有所不同,但这些基本组成部门是大多数 Ansible 模块所共有的。

Ansible模块的参数

Ansible 的模块可以用于自动化系统设置和管理,模块通常有一些通用的参数,固然具体的参数取决于模块的范例和功能。以下是一些常用的 Ansible 模块的通用参数及其阐明:
1. name:



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



  • 形貌: 定义资源的目标状态。
  • 选项:

    • present 或 installed:资源应存在(如安装包、文件等)。
    • absent 或 removed:资源应不存在。
    • started:服务应启动。
    • stopped:服务应停止。
    • restarted:服务应重新启动。
    • latest:例如软件包应更新到最新版本。

  • 示例: 在 service 模块中,state 可以设置为 started 或 stopped。
3. src:



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



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



  • 形貌: 指定实验操作的用户。
  • 示例: 在 file 模块中,user 用于设置文件或目次的全部者。
6. group:



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



  • 形貌: 设置文件或目次的权限模式。
  • 示例: 在 file 模块中,mode 用于设置权限,例如 0755。
为什么是“0755”而不是“755” :

在这种环境下,mode参数通常用于指定文件的访问权限。数字0755是一个八进制数,用于Unix和类Unix系统中设置文件权限。这里的0755表示:


  • 0:表示这是一个八进制数。
  • 7:代表文件全部者(owner)具有读(4)、写(2)和实验(1)权限,总和为7。
  • 第二个5:代表与文件全部者同组的用户(group)具有读(4)和实验(1)权限,总和为5。
  • 第三个5:代表其他用户(others)也具有读(4)和实验(1)权限,总和为5。
因此,0755意味着文件全部者可以完全控制文件,而同组用户和其他用户可以读取和实验文件,但不能写入。
在Unix和类Unix系统中,权限数字通常以八进制形式表示,所以0755中的前导0是必要的,它告诉系统这是一个八进制数。假如你只写755,系统会将其解释为十进制数,这将导致不同的权限设置。
十进制数755转换为八进制是0b111 101 101,这在八进制中表示为0755。但是,假如你在设置权限时利用755而不是0755,系统会将其解释为十进制数755,这在八进制中现实上是0b544,这会导致不同的权限设置,通常不是你想要的。
因此,为了确保权限正确设置为全部者全部权限,组和其他用户读/实验权限,你应该利用0755。
在编程中,特别是在Python语言中,0b是一个二进制数的前缀。当你在数字前面加上0b,它告诉解释器这个数字是一个二进制数。例如,0b1011是一个二进制数,它等价于十进制数11。
然而,在你提到的上下文中,0755是一个八进制数,不是二进制数。在Unix和类Unix系统中,文件权限通常以八进制数的形式表示。八进制数的前缀是0,而不是0b。所以,0755是一个八进制数,它表示文件的权限设置。
总结一下:


  • 0b前缀用于表示二进制数。
  • 0前缀用于表示八进制数。
  • 没有前缀的数字默认是十进制数。
8. delegate_to:



  • 形貌: 指定将使命委托到其他主机实验。
  • 示例: 用于在 Ansible Playbook 中将特定使命委托到不同的主机。
9. args:



  • 形貌: 用于传递其他参数,模块通常会担当以字典形式提供的额外参数。
  • 示例: 在一些模块中,如 command,args 可以用于指定额外的下令行参数。
10. with_items:



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



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



  • 形貌: 根据条件判断是否实验使命。
  • 示例: 在 Playbook 中利用 when 来控制使命的实验条件。
这些参数通常可以与具体的 Ansible 模块结合利用,以实现复杂的自动化使命。模块的文档会提供具体的参数阐明和示例,可以查阅 Ansible 官方文档 来获取更多具体的模块信息。
   Ansible 是一个强大的自动化工具,它利用模块来实验各种使命。每个模块都有本身特定的参数,但有一些通用的参数可以在多个模块中利用。以下是
Ansible 模块常见的通用参数及其阐明:
  

  • become

    • 阐明:用于提拔权限。设置为 yes 时,模块会利用提权工具(如 sudo)来实验使命。
    • 示例:become: yes

  • become_user

    • 阐明:指定提权后的用户身份。become 参数为 yes 时,这个参数会指定利用哪个用户来实验使命。
    • 示例:become_user: www-data

  • become_method

    • 阐明:指定提权的方法。常用的值包罗 sudo, su, pbrun, pfexec, doas 等。
    • 示例:become_method: sudo

  • delegate_to

    • 阐明:指定将使命委派给其他主机来实验,而不是当前主机。
    • 示例:delegate_to: dbserver.example.com

  • ignore_errors

    • 阐明:设置为 yes 时,纵然使命失败也会继续实验其他使命。用于容忍某些使命失败。
    • 示例:ignore_errors: yes

  • register

    • 阐明:将使命的输出结果保存到变量中,以便后续使命利用。
    • 示例:register: result

  • until

    • 阐明:指定一个条件,使命将反复实验直到条件成立或者达到最大重试次数。
    • 示例:until: result.rc == 0

  • retries

    • 阐明:与 until 共同利用,指定使命最大重试次数。
    • 示例:retries: 5

  • delay

    • 阐明:与 until 和 retries 共同利用,指定每次重试之间的等待时间(以秒为单位)。
    • 示例:delay: 10

  • timeout

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

  这些通用参数帮助你在编写 Ansible
脚本时更好地控制使命的实验方式和处理结果。具体模块大概会有本身的专用参数,但了解这些通用参数可以让你更加机动地管理和优化自动化使命。
  To-Do 下面模块的阐明测试验证???????????

shell模块

  1. ansible web_group -m shell -a 'df -h'
复制代码
  1. ansible web_group -m shell -a 'ps -ef | grep nginx'
复制代码
command模块

不能全部识别shell中的特殊符号,如:command无法利用管道符“|”
验证:
  1. ansible web_group -m command -a 'ps -ef | grep nginx'
复制代码
script模块

管理机脚本推送到其他机器中
  1. ansible web_group -m script -a '/root/test_script_module.sh'
复制代码
file模块


有什么用:

动作选项:

怎样同时创建多个目次?

可以通过利用 with_items 循环来实现。下面是一个示例使命:
  1. - name: Create multiple directories
  2.   file:
  3.     path: "{{ item }}"
  4.     state: directory
  5.   with_items:
  6.     - /path/to/dir1
  7.     - /path/to/dir2
  8.     - /path/to/dir3
复制代码
将需要创建的目次路径更换为你本身的路径即可。
copy模块


yum模块

有什么用:

动作选项:



  • 1
  • 2
  • 3
  1. 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
    删除

  1. #删除仓库:
  2. ansible web01 -m yum_repository -a 'name=nginx-stable-repos state=absent'
复制代码
service模块

有什么用:

动作选项:



  • name
    服务名
  • state=

    • started

    • stopped

    • restarted

    • reloaded


systemd模块


user模块


group模块


mount模块


unarchive模块


mysql_db

什么用

用于创建、删除和管理 MySQL 数据库。你可以通过该模块指定命据库的名称、字符集、排序规则等属性。
动作选项


确保目标主机有可以或许操控MySQL数据库的模块MySQL-python

否则,会有以下报错:下面的mysql_user模块也是一样的

测试

  1. ---
  2. - name: The playbook to create database test_db
  3.   hosts: db01
  4.   become: no
  5.   tasks:
  6.     - name: to ensure the MySQL-python is installed in database server
  7.       yum:
  8.         name: MySQL-python
  9.         state: present
  10.     - name: to ensure the mariadb-server service is actived
  11.       service:
  12.         name: mariadb
  13.         state: started
  14.     - name: to create the database test_db
  15.       mysql_db:
  16.         login_user: root
  17.         login_password: 4439
  18.         name: test_db2
  19.         state: present
复制代码

mysql_user

有什么用

用于创建、修改和删除 MySQL 用户。你可以设置用户的权限、主机限制、暗码等属性。
动作选项

1、name
mysql里的数据库的用户
2、host
数据库访问的主机域
3、password
指定命据库访问的用户对应的暗码
4、priv
指定权限(privileges),如:wp_db.*:ALL
5、login_user
启动mysql服务的登任命户(假如已设置了的话)
6、login_password
启动mysql服务的登任命户对应的暗码
7、state
- present
- absent
测试:

管理机远程毗连数据库服务器的数据库服务并设置库的登任命户
  1. ---
  2. - name: the playbook to creat user of a database
  3.   hosts: db01
  4.   become: no
  5.   tasks:
  6.     - name: 确保安装Ansible需要连接数据库的Python服务
  7.           yum:
  8.             name: MySQL-python
  9.             state: present
  10.     - name: 确保已启动mariadb服务
  11.       service:
  12.         name: mariadb
  13.         state: started   
  14.         - name: 设置test_db数据库的用户
  15.           mysql_user:
  16.             login_user: root
  17.             login_password: 4439
  18.             name: test_db_user1
  19.             host: '172.16.1.%'
  20.             password: 4439
  21.             priv: 'test_db.*:ALL'            
  22.                   # <==>
  23.                   # mysql -u root -p4439
  24.                   # create user 'test_db_user1'@'172.16.1.%' identified by '4439';
  25.                   # grant all privileges on test_db.* to 'test_db_user1'@'172.16.1.%' with grant option;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

南七星之家

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表