Module lineinfile模块与Ansible变量字典的作用不正确
我的代码正在删除My.cnf文件中套接字变量的所有实例,然后使用正确的变量和文件位置重新填充该文件 删除部分工作正常,但是插入在第一行之后退出。因此,它会直接在[mysqladmin]下插入正确的“socket”行,但不会添加到文件的其余部分Module lineinfile模块与Ansible变量字典的作用不正确,module,ansible,Module,Ansible,我的代码正在删除My.cnf文件中套接字变量的所有实例,然后使用正确的变量和文件位置重新填充该文件 删除部分工作正常,但是插入在第一行之后退出。因此,它会直接在[mysqladmin]下插入正确的“socket”行,但不会添加到文件的其余部分 另外,如果可能的话,我希望在头和新套接字声明之间有一行空格 我试过2.0.2版和2.2.0版,但都没有达到预期效果。Ansible完全按照预期工作行填充模块用于确保特定行位于指定文件中。模块名称字面上描述了其功能:“文件中的行”。它不是“文件中的行”或“
另外,如果可能的话,我希望在头和新套接字声明之间有一行空格
我试过2.0.2版和2.2.0版,但都没有达到预期效果。Ansible完全按照预期工作<代码>行填充模块用于确保特定行位于指定文件中。模块名称字面上描述了其功能:“文件中的行”。它不是“文件中的行”或“文件的一部分中的行” 只能为线条指定一种图案:
socket = /mysql/run/mysqld.sock
因此,在Ansible确保它存在(可能是插入它)之后,所有进一步调用“确保它存在”都不会再次插入它,因为它已经存在(声明式编程就是这样工作的)
在值之后指定不同的insert\u并不重要,因为like是相同的,并且
之后的insert\u不是条件的一部分
尽管您没有显示配置文件的确切语法,但它看起来像INI样式的格式(它也像常规的MySQL选项文件,这是一个INI文件),因此您可以尝试使用。lineinfle
正常工作(请参阅)
你的任务是:
我的代码正在删除My.cnf文件中套接字变量的所有实例,然后用正确的变量和文件位置重新填充该文件
那为什么不用呢
请记住:
用户可以通过确保相同的模式永远不会匹配任何替换来保持幂等性
因此,您可能需要将regexp
^socket.$
更改为只匹配“错误”的内容应替换的值,以防止不必要地更改任务状态。问题是什么?不幸的是,如果变量名和变量定义之间有选项卡,ini_文件模块将不起作用。因此,您修改现有文件的运气不佳。如果要使用Ansible实现模板,而无需使用自己的解析器,则需要使用模板。
socket = /mysql/run/mysqld.sock
- replace:
dest: /etc/mysql/my.cnf
regexp: '^socket.*$'
replace: 'socket = /mysql/run/mysqld.sock'