回答
由于YAML无效,但您想将其编辑为YAML,您应该将其设置为有效的YAML。如果发生错误,您可能不会拥有YAML 编辑模式的所有优势。
如果saltstate允许您更改block_start_string
和 variable_start_string
Jinja2的使用可以改变{%
成#%
(或 ###%
如果#%
和###%
自然地发生在你的源),并且还 变化{{
到<{
(或<<{
,你得到这个想法)。如果你想打电话 Jinja2的直接,你会然后再传递到FireSystemLoader
: block_start_string='<{'
和variable_start_string='#%'
如果上述 是可能的,那么你必须改变你的输入文件只有一次, 做到这一点与编辑。
如果你无法控制saltstate做理智的事情,你仍然没有 卡住了,你有使用Python, ruamel.yaml
和一些 支持包做多一点(免责声明:我是那些包的作者)。 安装带有:
pip install ruamel.yaml[jinja2] ruamel.std.pathlib
然后编辑之前运行该程序:
from ruamel.yaml import YAML
from ruamel.std.pathlib import Path
yamlj2 = YAML(typ='jinja2')
yamlrt = YAML()
yaml_flow_style = YAML()
yaml_flow_style.default_flow_style = True
in_file = Path('init.sls')
backup_file = Path('init.sls.org')
in_file.copy(backup_file)
data = yamlj2.load(in_file)
with in_file.open('w') as fp:
# write the header with info needed for revers
fp.write('# ruamel.yaml.jinja2: ') # no EOL
yaml_flow_style.dump(yamlj2._plug_in_jinja2, fp)
yamlrt.dump(data, fp)
这改变了违规的Jinja2序列和添加一个单行头注释与用于该文件的实际模式。然后您应该能够 编辑init.sls
文件而不会收到所有这些错误。
在致电saltstate,不要运行以下命令:
from ruamel.yaml import YAML
from ruamel.std.pathlib import Path
in_file = Path('init.sls')
yamlj2 = YAML(typ='jinja2')
yamlrt = YAML()
yamlnort = YAML(typ='safe')
with in_file.open() as fp:
yamlj2._plug_in_jinja2 = yamlnort.load(fp.readline().split(':', 1)[1])
data = yamlrt.load(fp)
yamlj2.dump(data, in_file)
如果你有这些文件的多个,你可能想利用你的 文件名从sys.argv中[1]。您可能实际上是从第二个Python程序调用salstate程序(即解码并运行)。
原谅我无知,我是新来的VSC。我了解Python,但我不明白这将如何在VSC中工作。 –
@MoAli在** VSC中这不起作用**,它使文件更正YAML,因此当您使用VSC打开它时,它不会显示您发布的图像指示的问题。唯一的问题就是你必须确保盐酸盐能够接受这些变化,或者在启动盐酸盐之前将这些变化回退。顺便说一句,你确定你正在使用salstate而不是[salststack](https://en.wikipedia.org/wiki/Salt_(software)) – Anthon
感谢您的澄清。我正在使用saltstack。 salt中的.sls文件被称为saltstate,因此被称为saltstate。 –
- 1. 暂时关闭铃声
- 2. NHibernate - 暂时关闭标识
- 3. 暂停和关闭
- 4. Resharper可以暂时关闭吗?
- 5. Heroku:暂时关闭应用程序
- 6. 暂时关闭打字自动完成
- 7. 暂时关闭自动屏幕旋转
- 8. 如何暂时关闭静态页面?
- 9. 如何暂时关闭Turbo Boost?
- 10. 如何在YAML中表示PHP关闭?
- 11. 如何在删除记录时暂时关闭此错误?
- 12. 当应用程序暂时关闭时,不会调用UIApplicationWillEnterForegroundNotification
- 13. 如何暂停关闭RadWindow关闭事件?
- 14. Parent关闭时关闭Python
- 15. 自动关闭暂存缓冲区
- 16. 在Matlab中关闭/暂停过程
- 17. 如何在关闭之前暂停cmd?
- 18. VSC++ 2010:-Zm135
- 19. 当屏幕关闭时,Internet连接显然暂停
- 20. 如何使用脚本暂时关闭某些unix cronjobs
- 21. jQuery requestAnimationFrame在关闭浏览器焦点时禁用暂停
- 22. 单击关闭图标时暂停或停止视频
- 23. Python:在应用程序关闭时暂停for循环
- 24. Howto暂时关闭Visual Studio 2010中的自动格式化
- 25. 暂时关闭数据库表 - 如何优化?
- 26. 打开VAS - 服务暂时关闭(证书过期)
- 27. 关闭弹出窗口时暂停当前视频
- 28. 暂时关闭基于导轨的网站
- 29. Chrome开发工具:暂时关闭事件
- 30. Javascript Opera - 关闭文档正文滚动(暂时)
为什么VSC甚至认为它应该应用YAML语法检查,它显然不是基于内容的YAML文件,也不是基于文件扩展名('.sls') – Anthon
你是对的,它不是YAML语法,而是最接近因为saltstate语法(yaml + jinja)还不被支持,所以没有可用的插件可用。这个.sls扩展名为yaml的原因是因为我的filename_association集合。 –