我正在寻找Ansible来提取N-1 DIR,即当前日期-1(昨天的文件)并提取那些文件以将数据复制到目标位置。
我写了类似下面的内容,但失败了latest_file:
- name: List
command: "hdfs dfs -ls /data/files"
register: hdfs_dir_list
- debug: var=hdfs_dir_list.stdout_lines
- name: Retrieve
set_fact:
latest_file: "{{ hdfs_dir_list.files | sort(attribute='date -1') | last }}"
- name: Copy
command: hadoop distcp "hdfs:///data/{{hdfs_dir_list}}" "/data/{{hdfs_dir_list}}"
不知道出什么问题了。您能帮我解决这段代码中缺少的内容吗?
Linux的 ansible
latest_file不是任务级别参数,而是set_fact模块的参数。因此,您需要正确缩进。始终记住,yaml在语法上具有重要的新行和缩进,如本简短易懂的教程所述
[Yaml是] JSON的严格超集,并添加了语法上重要的换行符和缩进,例如Python。但是,与Python不同,YAML不允许使用文字制表符来缩进。
此外,如@Matt P注释中所述,应尽可能采用仅yaml语法,并删除旧的key=value速记语法。
最后(当我在讨论的时候),良好实践检查ansible-lint人员会报告:
All tasks should be named Commands should not change things if nothing needs doing Variables should have spaces before and after: {{ var_name }} 尽管此后可能还有其他逻辑问题需要解决,但是这是如何修改示例任务以得到语法上正确的东西并遵循最新的最佳实践:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。