Вот моя книга игр, я не использовал логический тип напрямую для совместимости с предыдущей версией, которая была получена из инвентаря, я посмотрел книгу пьес и увидел when: cluster_allinone == "true"
, который я, возможно, забыл изменить при выполнении сценария, поэтому я хотел переопределить значение cluster_allinone
, не изменяя предыдущую книгу правил.
- name: check node counnt
hosts: all:!gaop-vip-addresses
tasks:
- name: Get the number of nodes in group2
set_fact:
worker_count: "{{ groups['k8s-worker'] | length }}"
- debug:
var: worker_count
- name: set cluster_allinone var
set_fact:
cluster_allinone: 'true'
when: (worker_count | int) == 0
- name: set cluster_allinone var
set_fact:
cluster_allinone: 'false'
when: (worker_count | int) > 0
- debug:
var: cluster_allinone
- debug:
msg: single
when: cluster_allinone == "true"
- debug:
msg: mutil
when: cluster_allinone == "false"
Но cluster_allinone
, похоже, имеет логический тип, я пробовал to_json
и ternary('true', 'false')
.
- name: set cluster_allinone var
set_fact:
temp: 'true'
when: (worker_count | int) == 0
- name: set cluster_allinone var
set_fact:
temp: 'false'
when: (worker_count | int) > 0
--- try but fail
- name: set cluster_allinone var
set_fact:
cluster_allinone: "{{temp | to_json}}"
- name: set cluster_allinone var
set_fact:
cluster_allinone: "{{(worker_count | int) == 0}}"
- name: set cluster_allinone var
set_fact:
cluster_allinone: "{{temp | ternary('true', 'false')}}"
ansible --version
ansible 2.4.5.0
config file = /data/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /data/ansible/lib/ansible
executable location = /data/ansible/bin/ansible
python version = 2.7.12 (default, Nov 19 2018, 06:48:02) [GCC 5.4.0 20160609]
Потратил на это слишком много времени, любая помощь приветствуется!
Чтобы обеспечить совместимость с существующей книгой воспроизведения и правильно обрабатывать переменную «cluster_allinone» как строку («true» или «false»), вы можете настроить свою книгу воспроизведения, используя «set_fact», чтобы явно установить переменную «cluster_allinone» как строка, основанная на worker_count. Вы можете исправить следующее:
name: Получить количество узлов в группе2. set_fact: worker_count: "{{ groups['k8s-worker'] | длина }}"
отлаживать: вар: worker_count
имя: установите для параметраuster_allinone var значение true, если worker_count равен 0 set_fact: Cluster_allinone: 'истина' когда: (worker_count | int) == 0
имя: установите для параметраuster_allinone var значение false, если значение worker_count больше 0. set_fact: Cluster_allinone: 'ложь' когда: (worker_count | int) > 0
отлаживать: вар: кластер_аллиноне
отлаживать: сообщение: сингл когда: Cluster_allinone == "истина"
отлаживать: сообщение: несколько когда: Cluster_allinone == "ложь" Удачи!!!
Спасибо, но это не решило мою проблему. Кажется, мой первый абзац в пьесе - это ответ, который вы дали. Кроме того, ваш ответ звучит как Ай, который в сообществе статичен.
Узнайте, как правильно форматировать код.
См. Булевы переменные. Действительно, тип кластера_allinone — bool.
- set_fact:
cluster_allinone: 'true'
- debug:
msg: "{{ cluster_allinone | type_debug }}"
дает
msg: bool
Используйте его как логическое значение. Это упростит код
- debug:
msg: single
when: cluster_allinone
- debug:
msg: multi
when: not cluster_allinone
дает
msg: single
Example of a complete playbook for testing
- hosts: localhost
tasks:
- set_fact:
cluster_allinone: true
- debug:
msg: single
when: cluster_allinone
- debug:
msg: multi
when: not cluster_allinone
Спасибо, я понимаю, что вы имеете в виду, но еще один вопрос: я установил cluster_allinone = false
в файле инвентаря и отлаживал его - debug: msg: "{{ cluster_allinone | type_debug }}"
, ok: [192.168.1.52] => { "msg": "unicode" }
,Знаете ли вы, как преобразовать его в логический тип?
@HuaJFrame, через bool-фильтр .
Если вы планируете присвоить переменной стиль INI, преобразуйте ее явно в логическое значение when: cluster_allinone | bool
. Проблема в том, что стиль INI всегда является строкой.
Нет абсолютной необходимости в задачах
set_fact
и запрошенном преобразовании типов, см. ответ Владимира. Дополнительную информацию см. также в разделе Ansible: как сохранить переменный тип данных в set_fact? и Bool-фильтр в Ansible не выводит true для непустых строк.