千家信息网

Ansible常用模块的介绍和使用

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,这篇文章为大家分享Ansible常用模块的介绍和使用。文章涵盖inventory主机清单、YAML语言介绍、实现playbook剧本等内容,希望大家通过这篇文章能有所收获。inventory主机清单a
千家信息网最后更新 2025年12月04日Ansible常用模块的介绍和使用

这篇文章为大家分享Ansible常用模块的介绍和使用。文章涵盖inventory主机清单、YAML语言介绍、实现playbook剧本等内容,希望大家通过这篇文章能有所收获。

inventory主机清单

ansible默认的主机清单是/etc/ansible/hosts文件,主机清单可以手动设置,也可以通过Dynamic Inventory动态生成,一般主机名使用FQDN
vim /etc/ansible/hosts[webserver]                          #方括号设置组名www1.example.org              #定义被监控主机,这边可以是主机名也可以是IP地址,主机名需要修改/etc/hosts文件www2.example.org:2222     #冒号后定义远程连接端口,默认是ssh的22端口
如果是名称类似的主机,可以使用列表的方式标识各个主机
[webserver]www[01:50].example.org ansible_ssh_user=root ansible_ssh_pass=123456[dbbservers]db-[a:f].example.org

inventory变量

  • 主机变量
[webserver]www1.magedu.com http_port=80 maxRequestsChild=808www2.magedu.com http_port=8080 maxRequestsChild=909
  • 组变量
[servers:vars]ntp_server=ntp.example.orgnfs_server=nfs.example.org
  • 组嵌套
[apache]http1.example.orghttp2.example.org[nginx]ngx1.example.orgngx2.example.org[webservers:children]apachenginx
  • inventory变量参数
参数说明
ansible_ssh_host将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置
ansible_ssh_portssh端口号.如果不是默认的端口号,通过此变量设置
ansible_ssh_user默认的 ssh 用户名
ansible_ssh_passssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_ssh_private_key_filessh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况
ansible_ssh_common_args此设置附加到sftp,scp和ssh的缺省命令行
ansible_sftp_extra_args此设置附加到默认sftp命令行
ansible_scp_extra_args此设置附加到默认scp命令行
ansible_ssh_extra_args此设置附加到默认ssh命令行
ansible_ssh_pipelining确定是否使用SSH管道. 这可以覆盖ansible.cfg中得设置
ansible_shell_type目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'
ansible_python_interpreter目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
ansible_*_interpreter这里的"*"可以是ruby 或perl 或其他语言的解释器,作用和ansible_python_interpreter 类似
ansible_shell_executable这将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的配置,默认为/bin/sh

YAML标记语言

YAML:另一种标记语言。是用来写配置文件的语言,非常简洁和强大。YAML语法和其他语言类似,也可以表达散列表、标量等数据结构。结构通过空格来展示;序列里配置项通过-来代表;Map里键值用:来分隔;YAML的扩展名为yaml
  • 基本语法规则

    1.大小写敏感2.使用缩进表示层级关系3.缩进时不允许使用Tab键,只允许使用空格。4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • YAML支持的数据结构
    1.对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)例如:name:Example Developer    键     值2.数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)例如:-Apple   -Orange3.纯量:单个的、不可再分的值例如:number:12.30   sure:true

yaml实例:

name:zhangsanage:20name:lisiage:22people:
-name:zhangsan      age:20      -name:lisi      age:22

Ansible剧本-playbook

Playbook是一种完全不同的运用ansible的方式,类似与saltstack的state状态文件。ad-hoc无法持久使用,playbook可以持久使用。playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务。通过task调用ansible的模板将多个play组织在一个playbook中运行。

Playbook核心元素

名称含义
Hosts执行的远程主机列表
Tasks任务集,即调用模块完成的某操作
Varniables变量,内置变量或自定义变量在playbook中调用
Templates模板,即使用模板语法的文件,比如配置文件等
Handlers处理器,和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
tags标签,指定某条任务执行,用于选择运行playbook中的部分代码
Roles角色

Playbook语法

1、playbook使用yaml语法格式,后缀可以是yaml,也可以是yml。在单一的一个playbook文件中,可以连续三个连子号(---)区分多个play。还有选择性的连续三个点好(...)用来表示play的结尾,也可省略。2、当行开始正常写playbook的内容,一般都会写上描述该playbook的功能。3、使用#号注释代码。4、缩进必须统一,不能空格和tab混用。缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行实现的。5、YAML文件内容和Linux系统大小写判断方式保持一致,是区分大小写的,k/v的值均需大小写敏感6、k/v的值可同行写也可以换行写。同行使用:分隔。v可以是个字符串,也可以是一个列表7、一个完整的代码块功能需要最少元素包括 name: task

实例演示:

vim a.yaml- hosts: webserver                  #定义的主机组,即应用的主机  vars:                             #定义变量    http_port: 80    max_clients: 200  user: root  tasks:                               #执行的任务  - name: ensure apache is at the latest version    yum: pkg=httpd state=latest  - name: write the apache config file    template: src=/srv/httpd.j2 dest=/etc/httpd.conf    notify:    - restart apache  - name: ensure apache is running    service: name=httpd state=started  handlers:                         #处理器    - name: restart apache      service: name=httpd state=restarted
  • 执行一个playbook的格式
ansible-playbook [yaml文件名]

实例演示:

#执行剧本ansible-playbook ping.yaml

参数:

-k(-ask-pass)           用来交互输入ssh密码-K(-ask-become-pass)    用来交互输入sudo密码-u                      指定用户

补充命令:

#检查yaml文件的语法是否正确ansible-playbook nginx.yaml --syntax-check#检查tasks任务ansible-playbook nginx.yaml --list-task#检查生效的主机ansible-playbook nginx.yaml --list-hosts#指定从某个task开始运行ansible-playbook nginx.yaml --start-at-task='Copy Nginx.conf'

hosts和users介绍

实例演示:

vim a.yaml- hosts: webserver               #指定主机组,可以是一个或多个组。  remote_user: root              #指定远程主机执行的用户名#执行剧本ansible-playbook a.yaml 
  • 在原有基础上为每个任务定义远程执行用户
!vim- hosts: mysql  remote_user: root               tasks:    - name: test connection      ping:      remote_user: mysql          #指定远程主机执行tasks的运行用户为mysql#执行playbook剧本ansible-playbook ping.yml -k #验证语法ansible-playbook a.yml --syntax-check#执行剧本ansible-playbook a.yml 
  • 指定远程主机sudo切换用户
!vim- hosts: mysql  remote_user: root              become: yes                  #2.6版本以后的参数,之前是sudo,意思为切换用户运行  become_user: mysql          #指定sudo用户为mysql#执行playbook剧本ansible-playbook ping.yml -K#执行剧本ansible-playbook a.yml 

tasks列表和action

1.Play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。2.每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,'action'的值将会用作输出信息中标记特定的task。3.定义一个task,常见的格式:"module: options" 例如:yum: name=httpd4.ansible的自带模块中,command模块和shell模块无需使用key=value格式

实例演示:

  • 实例1
vim a.yml - hosts: webserver  remote_user: root  tasks:   - name: disable selinux     command: '/sbin/setenforce 0'   - name: make sure apache is running     service: name=httpd state=started#play中只要执行命令的返回值不为0,就会报错,tasks停止#检查语法ansible-playbook a.yml --syntax-check#执行剧本ansible-playbook a.yml #检查结果rpm -q httpd

修改如下内容:

!vim- hosts: webserver  remote_user: root  tasks:   - name: disable selinux     command: '/sbin/setenforce 0'     ignore_errors: True             #忽略错误,强制返回成功   - name: make sure apache is running     service: name=httpd state=started#检查语法ansible-playbook a.yml --syntax-check#执行剧本ansible-playbook a.yml 
  • 实例2
vim b.yml - hosts: webserver  remote_user: root  tasks:   - name: create nginx group     group: name=nginx system=yes gid=208   - name: create nginx user     user: name=nginx uid=208 group=nginx system=yes- hosts: mysql  remote_user: root  tasks:   - name: copy file to mysql     copy: src=/etc/inittab dest=/opt/inittab.back#检查语法ansible-playbook b.yml --syntax-check#执行剧本ansible-playbook b.yml

Handlers介绍

Handlers也是一些task的列表,和一般的task并没有什么区别。是由通知者进行的notify,如果没有被notify,则Handlers不会执行,假如被notify了,则Handlers被执行不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handlers也只会被执行一次

实例演示:

vim c.yml- hosts: webserver  remote_user: root  tasks:   - name: install httpd package     yum: name=httpd state=latest   - name: install configuration file for httpd     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf     notify:      -restart httpd   - name: start httpd service     service: enabled=true name=httpd state=started  handlers:   - name: restart httpd     service: name=httpd state=restarted#检查语法ansible-playbook c.yml --syntax-check#执行剧本ansible-playbook c.yml

亦可引入一些变量:

!vim- hosts: webserver  remote_user: root  vars:  - package: httpd  - service: httpd  tasks:   - name: install httpd package     yum: name={{package}} state=latest   - name: install configuration file for httpd     copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf     notify:      -restart httpd   - name: start httpd service     service: enabled=true name={{service}} state=started  handlers:   - name: restart httpd     service: name={{service}} state=restarted#检查语法ansible-playbook c.yml --syntax-check#执行剧本ansible-playbook c.yml

playbook使用变量的方法

1.通过ansible命令传递

实例演示:

#编辑如下ymlvim a.yml- hosts: mysql  remote_user: root  vars:  - user:  tasks:  - name: add new user    user: name={{user}}#执行剧本ansible-playbook a.yml -e "user=testvar"#执行命令查看文件ansible mysql -m command -a 'tail /etc/passwd'

2.直接在yaml中定义变量---如上handlers示例

3.直接引用一些变量

实例演示:

  • 引用ansible的固定变量
vim test.yml- hosts: mysql  remote_user: root  tasks:   - name: copy file     copy: content="{{ansible_all_ipv4_addresses}}," dest=/opt/vars.txt#执行剧本ansible-playbook test.yml#在122主机上查看vars.txt文件内容cat /opt/vars.txt
  • 引用主机变量
vim /etc/ansible/hosts#在mysql组的主机后面添加如下内容[mysql]192.168.142.122 testvar="42.122"    #定义testvar变量的值为42.122vim test.yml      #添加{{testvar}}主机变量- hosts: mysql  remote_user: root  tasks:   - name: copy file     copy: content="{{ansible_all_ipv4_addresses}},{{testvar}}" dest=/opt/vars.txt#执行剧本ansible-playbook test.yml#在122主机上查看vars.txt文件内容cat /opt/vars.txt

条件测试

如果需要根据变量、facts(setup)或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用when子句。在task后添加when子句即可使用条件测试:when子句支持正则表达式或语法。

实例演示:

vim when.yml- hosts: mysql  remote_user: root  tasks:    - name: "shutdown CentOS"      command: /sbin/shutdown -h now      when: ansible_distribution == "CentOS"#执行剧本,执行后会发现192.168.142.122主机已经被关机ansible-playbook when.yml 
  • 多条件判断
vim when.yml- hosts: mysql  remote_user: root  tasks:    - name: "shut down CentOS 6 systems"      command: /sbin/shutdown -r now      when:        - ansible_distribution == "CentOS"        - ansible_distribution_major_version == "6"#执行剧本ansible-playbook when.yml 
  • 组条件判断
vim when.yml- hosts: mysql  remote_user: root  tasks:    - name: "shut down CentOS 6 and Debian 7 systems"      command: /sbin/shutdown -t now      when: (ansible_distribution == "CentOS" and ansible_distribution_major_version == "6") or            (ansible_distribution == "Debian" and ansible_distribution_major_version == "7")#执行剧本ansible-playbook when.yml 
  • 自定义变量进行条件测试
vim when.yml- hosts: all  vars:    exist: "True"  tasks:  - name: creaet file    command:  touch /tmp/test.txt    when: exist | match("True")  - name: delete file    command:  rm -rf /tmp/test.txt    when: exist | match("False")#执行剧本ansible-playbook when.yml 

迭代

当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句指明迭代的元素列表即可。

实例演示:

vim  d.yml- hosts: webserver  remote_user: root  tasks:    - name: "Install Packages"      yum: name={{ item }} state=latest      with_items:        - httpd        - mysql-server        - php#检查语法ansible-playbook d.yml --syntax-check#执行剧本ansible-playbook d.yml#在所有主机上查看是否有指定添加的用户tail -5 /etc/passwd

亦可自行定义:

vim e.yml- hosts: webserver  remote_user: root  tasks:    - name: "Add users"      user: name={{ item.name }} state=present groups={{ item.groups }}      with_items:        - { name:'test1', groups:'wheel'}        - { name:'test2', groups:'root'}#检查语法ansible-playbook e.yml --syntax-check#执行剧本ansible-playbook e.yml#在所有主机上查看是否有指定添加的用户tail -5 /etc/passwd

Templates模块

#创建工作目录mkdir templates#复制配置文件cp /etc/httpd/conf/httpd.conf templates/httpd.conf.02#修改httpd.conf.02文件vim templates/httpd.conf.02Listen {{http_port}}ServerName {{ansible_fqdn}}MaxClients {{maxClients}}#修改ansible/hosts文件vim /etc/ansible/hosts[webserver]192.168.142.121 http_port=80 maxClients=100192.168.142.122 http_port=8080 maxClients=200#编写剧本vim apache.yml- hosts: webserver  remote_user: root  vars:   - package: httpd   - service: httpd  tasks:   - name: install httpd package     yum: name={{package}} state=latest   - name: install configuration file for httpd     template: src=/root/templates/httpd.conf.2 dest=/etc/httpd/conf/httpd.conf     notify:      - restart httpd   - name: start httpd service     service: enabled=true name={{service}} state=started  handlers:   - name: restart httpd     service: name={{service}} state=restarted#检查语法ansible-playbook e.yml --syntax-check#执行剧本ansible-playbook apache.yml
#在两台被管理服务器上查看grep -i listen /etc/httpd/conf/httpd.confgrep -i maxClient /etc/httpd/conf/httpd.confgrep -i servername /etc/httpd/conf/httpd.conf

tags模块

在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了。格式如下:
vim hosts.yml- hosts: webserver  remote_user: root  tasks:    - name: Copy hosts file      copy: src=/etc/hosts dest=/etc/hosts      tags:      - only    - name: touch file      file: path=/opt/hosts state=touch#检查语法ansible-playbook e.yml --syntax-check#执行剧本ansible-playbook hosts.yml --tags="only"ansible-playbook hosts.ym
事实上,不光可以为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。

实例演示:


vim hosts.yml
- hosts: webserver remote_user: root tasks: - name: Copy hosts file copy: src=/etc/hosts dest=/etc/hosts tags: - only - name: touch file file: path=/opt/hosts state=touch tags: - always#检查语法ansible-playbook e.yml --syntax-check#为了不影响此次操作删除远程主机中/opt/hosts文件rm -rf /opt/hosts #执行剧本ansible-playbook hosts.yml --tags="only"
#分别在两台被管理服务器上去查看文件创建情况ls /opt/

看完上述内容,你们对Ansible常用模块有进一步的了解吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

主机 剧本 变量 文件 语法 检查 实例 任务 模块 内容 命令 用户 演示 多个 条件 运行 参数 格式 语言 配置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 前端如何实现登陆访问数据库 软件开发合同免责声明 山东济南联想服务器哪家好 消防开展网络安全大排查活动 全球科技互联网 博弈 四川正规网络技术分类推广 资深网络安全工程师的工资 java版服务器多少钱 互联网科技公司在外地开展 大学生做软件开发 mongo 文件服务器 cytoid为什么联系不到服务器 深圳市牛班网络技术有限公司 软件开发环境示例 分布式数据库中pec 计算机网络技术专业学习内容 政府单位网络安全讲座新闻稿 网络安全sass 蓟州区企业网络技术售后保障 新华互联网科技系列就业保障 前端如何实现登陆访问数据库 初级数据库工程师需要考试吗 数据库dts包的作用 互联网科技年会主持词 网络安全产业园何时能建成 不同人对同一个数据库表做操作 软件开发到一半换人风险 网络安全摸排情况说明 互联网发布的黑科技 网络安全采集分析研判通报制度
0