Ansible 使用playbook文件运行

本文介绍了如何使用Ansible的playbook进行配置管理和部署。详细阐述了yaml语法规范,包括name、tasks、hosts、variables、templates、handlers和roles等元素,并讲解了执行playbook的命令及其相关选项,如指定主机、用户、传入变量等。示例中展示了使用playbook安装并启动httpd服务的过程。

 ansible playbooks 是使用ansible简单的配置管理部署系统的基础,使用YAML语法格式的配置文件。每一个playbook中包含一系列的任务。使用ansible playbook可以更方便的管理、维护多态主机。

1、yaml语法

    yaml是”YAML Ain't a Markup Language”的缩写,即不是一种标记性语言,它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。

yaml编写playbook配置文件的规范:

(1)首行以”---”(3个减号)开始,且需顶行首写。

(2)使用#号注释代码。

(3)缩进必须是统一的,不能空格和tab混用

(4)缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的。

(5)YAML文件内容和Linux系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写敏感。

(6)k/v的值可同行写也可换行写。同行使用:分隔,换行写需要以”-”分隔。

(7)一个完整的代码块功能需最少元素需包括 name: task。

(8)一个name只能包括一个task

设置设置在.yml文件中Tab键为两个空格

[ansible@server1 ~]$ vim .vimrc
[ansible@server1 ~]$ cat .vimrc 
autocmd filetype yaml setlocal ai ts=2 sw=2 et

2、编写执行ansible playbook

(1)Playbook的主要组成元素

    Hosts: 运行指定任务的目标主机,可以是主机,也可以是主机组,支持正则表达式。

    Tasks: 任务列表,一个playbook配置文件中只能有一个tasks,一个tasks下可以编排多个任务。

    Varniables: 变量

   Templates: 模板,使用templates可以针对不同的主机定制不同参数。

   Handlers: 由特定条件触发的任务,监控资源改变时才会触发,需要配合notify使用。

   Roles: Playbook的按固定目录结构组成

(2)执行playbook

    playbook执行时使用”ansible-playbook”命令后跟写好的yaml格式的playbook文件即可,

但在执行前最好检查下playbook文件语法是否正确 -C

(3)playbook在执行时还可以跟其他的一些选项:

    1)指定执行的主机或主机组:

      playbook在执行时默认会在据配置文件在”hosts”中定义的主机及主机组上去执行,如果不想在配置文件中指定的主机上去执行,可以使用”--limit”指定主机。

2)指定执行playbook的用户

      playbook在执行时默认会使用配置文件中”remote_user”指定的用户去执行,如果想使用别的用户去执行,可以使用参数”--remote-user”指定用户去执行。如果使用参数指定的用户没有做ssh安全认证,则可以使用参数”--ask-sudo-pass”在执行命令时根据提示输入密码即可正常执行。

3)执行playbook时传入变量

   执行playbook时,如果在”hosts”配置文件中及playbook中定义了变量并在执行时参入变量,则优先使用执行时用参数传入的变量,其次使用playbook中的变量,最后使用”inventory”文件中定义的变量。

   在执行playbook时可以使用”-e”选项后跟”key1=value1,key2=value2”的方式传入变量。

)其他可使用的选项

          -i(--inventory=PATH):指定inventory文件,默认文件是/etc/ansible/hosts

         -v(--verbose):显示详细的输出,也可使用-vvvv显示精确到每分钟的输出

         -f(--forks=NUM):指定并发执行的任务数,默认为5,可根据服务器的性能进行调节

         -C(--check):检测模式,playbook中定义的所有任务将在每台远程主机上进行检测,但不执行。


使用ansible playbook安装启动httpd服务

编写playbook.yml文件

---
- hosts: db
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present

    - name: copy index.html
      copy:
        src: files/index.html
        dest: /var/www/html/index.html

    - name: configure httpd
      copy:
        src: files/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
        owner: root
        group: root
        mode: 644
      notify: restart httpd

    - name: start httpd  and firewalld
      service:
        name: "{{ item }}"
        state: started
      loop:
        - httpd
        - firewalld

    - name: configure firewalld
      firewalld:
        service: httpd
        permanent: yes
        immediate: yes
        state: enabled

  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted

复制httpd配置文件模板

写入发布页面

检测文件 并 运行

 

server3服务开启

80端口开启

修改files中的配置文件模板端口

重新运行后,server3 端口变为8080

 

<think>好的,我现在需要回答用户关于AnsiblePlaybook文件扩展名的问题。用户之前已经问过类似的问题,现在再次确认到底是使用.yaml还是.yml。我需要结合之前的回答和用户提供的引用内容来给出准确的答复。首先,用户提供的引用里提到Playbook使用YAML格式编写,但没有明确说明扩展名。引用[1]和[2]中的例子使用了.yml扩展名,比如webserver.yml和web.yml。这说明在示例中,Ansible接受.yml作为扩展名。而引用[3]提到Playbook采用YAML语言编写,但同样没有指定扩展名。不过YAML文件常见的扩展名有.yaml和.yml,两者都是合法的。 根据我之前的知识,Ansible确实支持两种扩展名,但官方文档可能更倾向于.yaml,因为YAML的官方推荐扩展名是.yaml。不过社区中很多人使用.yml,因为它更简短。用户之前的回答里也提到两种扩展名都可以,但建议团队统一使用一种。现在用户再次询问,需要明确回答两者都正确,但可能有习惯上的差异。 需要检查是否有官方文档的明确说明。根据Ansible的文档,Playbook是YAML文件,所以扩展名可以是.yaml或.yml。例如,在Ansible的官方示例中,常见的是.yml,但这不是强制性的。因此,在回答中需要指出两者均可,没有功能区别,同时引用用户提供的例子中的.yml使用情况作为支持。另外,用户可能关心是否存在潜在的问题,比如某些工具是否只认其中一个扩展名。但根据Ansible的处理方式,只要内容正确,扩展名不影响执行。语法检查命令如ansible-playbook --syntax-check对两者都适用,如引用[1]和[2]所示。最后,要确保回答结构清晰,先直接回答问题,再解释原因,提供示例,并注意事项。同时生成相关问题,帮助用户深入理解。</think>### Ansible Playbook 文件扩展名的正确选择 在 Ansible 中,Playbook 文件既可以使用 **`.yaml`** 也可以使用 **`.yml`** 作为扩展名,两者完全等价且功能无差异[^1][^2][^3]。以下从多个角度详细说明: --- ### 1. **扩展名的技术兼容性** - **YAML 规范支持**:YAML 官方推荐使用 `.yaml` 作为扩展名,但 `.yml` 也被广泛接受。Ansible 对两者均兼容,例如: ```bash ansible-playbook playbook.yml # 使用 .yml 扩展名 ansible-playbook playbook.yaml # 使用 .yam扩展名 ``` - **语法验证兼容性**:无论扩展名是 `.yml` 还是 `.yaml`,均可以通过 `ansible-playbook --syntax-check` 命令验证语法[^1][^2]: ```bash ansible-playbook --syntax-check webserver.yml # 验证成功示例[^1] ansible-playbook --syntax-check playbooks/web.yml # 验证成功示例[^2] ``` --- ### 2. **实际应用中的选择建议** - **团队协作一致性**:建议在项目中统一使用一种扩展名,避免混用。例如: - 若团队习惯简洁性,可优先选择 `.yml`(更常见于社区示例)[^3]。 - 若需严格遵循 YAML 官方规范,则选择 `.yaml`。 - **文件内容优先级**:扩展名不影响 Playbook 的执行,**内容是否符合 YAML 语法**才是关键。例如: ```yaml --- - name: 安装 Apache hosts: webservers tasks: - name: 确保 Apache 已安装 yum: name: httpd state: present ``` 无论保存为 `install_apache.yml` 还是 `install_apache.yaml`,只要内容合法,均可正常运行--- ### 3. **注意事项** - **避免语法错误**:YAML 对缩进和格式敏感,需确保内容正确。例如: - 错误缩进会导致解析失败:`tasks` 下的任务需缩进 2 或 4 空格。 - 使用 `|` 或 `>` 处理多行字符串时需注意格式。 - **工具兼容性**:极少数第三方工具可能仅支持特定扩展名,但 Ansible 本身无此限制。 --- ### 示例对比 | 扩展名 | 示例文件内容 | 执行命令 | |--------|--------------|----------| | `.yml` | `webserver.yml`[^1] | `ansible-playbook webserver.yml` | | `.yaml` | `webserver.yaml` | `ansible-playbook webserver.yaml` | --- ### 总结 - **功能无差别**:`.yml` 和 `.yaml` 在 Ansible 中完全等效。 - **选择建议**:根据团队规范或习惯选择其一,并保持统一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值