请求将Python脚本转换为Ansible模块并编写对应Playbook
将Python字符串分割脚本转为Ansible模块及Playbook实现
一、自定义Ansible模块实现
模块代码(fruit_parser.py)
#!/usr/bin/python from ansible.module_utils.basic import AnsibleModule def main(): module_args = dict( fruit_string=dict(type='str', required=True) ) module = AnsibleModule( argument_spec=module_args, supports_check_mode=True ) fruit_str = module.params['fruit_string'] # 分割字符串并去除每个元素的前后空格 fruit_list = [item.strip() for item in fruit_str.split(',')] # 生成目标格式的列表 result_list = [{"category": "fruit", "name": fruit} for fruit in fruit_list] module.exit_json(changed=False, fruits=result_list) if __name__ == '__main__': main()
模块使用说明
- 将该文件放在Ansible的模块目录(比如
./library)下 - 在Playbook中调用时,传入需要分割的字符串参数
fruit_string
二、基于Ansible默认模块的Playbook实现
无需自定义模块,直接用Ansible内置过滤器和核心模块实现:
Playbook代码(parse_fruits.yml)
--- - name: 分割水果字符串并生成键值对 hosts: localhost gather_facts: false vars: input_string: "apple ,banana ,cherry ,orange" tasks: - name: 分割字符串并处理空格 set_fact: fruit_list: "{{ input_string.split(',') | map('strip') | list }}" - name: 生成目标格式的键值对列表 set_fact: formatted_fruits: "{{ formatted_fruits | default([]) + [{'category': 'fruit', 'name': item}] }}" loop: "{{ fruit_list }}" - name: 输出结果 debug: var: formatted_fruits
三、执行结果说明
两种方式最终输出的结果格式均符合要求:
[ {"category": "fruit", "name": "apple"}, {"category": "fruit", "name": "banana"}, {"category": "fruit", "name": "cherry"}, {"category": "fruit", "name": "orange"} ]
内容的提问来源于stack exchange,提问作者Palani
相关产品推荐
相关产品推荐

