Я хотел бы проверить, если admin_token
определяется в моем keystone.conf
файл. Для этого я хочу использовать Ansible. Однако даже если атрибут присутствует в файле, задача не выполняется.
Я сравнил две задачи с lineinfile
модуль (то же регулярное выражение, состояние присутствует, а затем отсутствует). В первом задании Ansible не нашел строчки. Однако он нашел это во втором задании. В файл не вносятся никакие изменения.
Откуда это могло взяться?
PLAY [Docker] ******************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [keystone]
TASK [Check admin_token is present] *******************************************************************************
fatal: [keystone]: FAILED! => {"changed": false, "msg": "line is required with state=present"}
...ignoring
TASK [Check admin_token not present] *******************************************************************************
changed: [keystone]
TASK [debug] *******************************************************************************************************
ok: [keystone] => {
"comment_admin_token_1": {
"changed": false,
"failed": true,
"msg": "line is required with state=present"
}
}
TASK [debug] *******************************************************************************************************
ok: [keystone] => {
"comment_admin_token_2": {
"backup": "",
"changed": true,
"diff": [
{
"after": "",
"after_header": "/etc/keystone/keystone.conf (content)",
"before": "",
"before_header": "/etc/keystone/keystone.conf (content)"
},
{
"after_header": "/etc/keystone/keystone.conf (file attributes)",
"before_header": "/etc/keystone/keystone.conf (file attributes)"
}
],
"failed": false,
"found": 1,
"msg": "1 line(s) removed"
}
}
PLAY RECAP *********************************************************************************************************
keystone : ok=5 changed=1 unreachable=0 failed=0
Здесь после пьесы
- name: Docker
hosts: containers
connection: docker
tasks:
- name: Check admin_token is present
lineinfile:
path: /etc/keystone/keystone.conf
regexp: '^admin_token *= *.*'
state: present
register: comment_admin_token_disabled
ignore_errors: yes
check_mode: yes
- name: Check admin_token not present
lineinfile:
path: /etc/keystone/keystone.conf
regexp: '^admin_token *= *.*'
state: absent
register: comment_admin_token_disabled
ignore_errors: yes
check_mode: yes
В lineinfile
модуль предназначен для редактировать файлы, а не просто проверить их содержимое и, следовательно, требует от вас замены line
когда вы указываете state=present
. Поскольку вы не указали замену, вы получите сообщение об ошибке: "line is required with state=present"
.
Как решить проблему, зависит от контекста, который вы не указали в своем вопросе. Но я думаю, вам следует установить admin_token
в замене line
. Например:
line: "admin_token={{keystone_admin_token}}"