Ansible部署VSFTP服务器语法错误排查及正确语法请求
修复后的VSFTP配置Ansible Playbook
你的Playbook存在两个核心语法问题:
block块内的任务未正确缩进,导致Ansible无法识别块内的任务层级结构with_items中含特殊字符(=)的字符串未用引号包裹,触发YAML解析错误
以下是修正后的完整代码:
--- - name: 部署VSFTP服务器 hosts: ftpservers # 运行FTP服务的服务器组名 tasks: - block: - name: 在RHEL上安装VSFTP包 yum: name: vsftpd state: present # 可选:仅针对RHEL/CentOS系列系统执行 when: ansible_os_family == 'RedHat' - block: - name: 修改VSFTP配置文件 lineinfile: dest: /etc/vsftpd/vsftpd.conf backup: yes backrefs: yes state: present regexp: "{{ item.regexp }}" line: "{{ item.line }}" with_items: - { regexp: 'anonymous_enable=NO', line: 'anonymous_enable=YES' } - { regexp: '^#?anon_upload_enable', line: 'anon_upload_enable=YES' } - { regexp: '^#?anon_mkdir_write_enable', line: 'anon_mkdir_write_enable=YES' } # 可选:仅在VSFTP包已安装时执行 when: ansible_facts.packages.vsftpd is defined - block: - name: 启动并启用VSFTP服务 service: name: vsftpd state: restarted enabled: yes
关键修正说明
- 缩进规范:每个
block内的任务统一缩进一层,严格遵循YAML层级语法 - 字符串转义:给含
=的配置项内容添加单引号,避免YAML将其误判为键值对结构 - 正则优化:为
anon_upload_enable和anon_mkdir_write_enable的正则添加^#?,可匹配注释状态的配置项,确保替换覆盖所有情况 - 条件增强:新增系统类型与包存在性判断,提升Playbook的兼容性与健壮性
内容的提问来源于stack exchange,提问作者Amar
相关产品推荐
相关产品推荐

