playbook example ansible_ssh_private_key_file ansible

example - ansible playbook hosts



resolver clave de diccionario o variable de parĂ¡metro en Ansible (2)

Funcionara para ti?

(rc=0)$ cat training.yml - hosts: localhost tags: so5 gather_facts: False vars: [ k1: ''key1'', k2: ''key2'', d1: "{ ''{{k1}}'': ''value1'', ''{{k2}}'': ''value2'', }", ] tasks: - debug: msg="{{item}}" with_dict: "{{d1}}" (rc=0)$ ansible-playbook training.yml -t so5 PLAY [localhost] **************************************************************** PLAY [localhost] **************************************************************** TASK: [debug msg="{{item}}"] ************************************************** ok: [localhost] => (item={''key'': ''key2'', ''value'': ''value2''}) => { "item": { "key": "key2", "value": "value2" }, "msg": "{''value'': ''value2'', ''key'': ''key2''}" } ok: [localhost] => (item={''key'': ''key1'', ''value'': ''value1''}) => { "item": { "key": "key1", "value": "value1" }, "msg": "{''value'': ''value1'', ''key'': ''key1''}" } PLAY RECAP ******************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 (rc=0)$

El truco es envolver la declaración de dict con comillas dobles. Ansible aplica esta traducción no documentada (pero consistente) y de mala calidad (el equivalente de ansible de la expansión de variable de shell) a la mayoría (no todos) de los valores YAML (todo lo que RHS indica '':'' ) en el libro de jugadas. Es una combinación de poner estas cadenas a través del motor Jinja2, el intérprete Python y el motor ansible en algún orden desconocido.

En Ansible, si trato de usar una variable como nombre de parámetro o nombre de clave, nunca se resuelve. Por ejemplo, si tengo {{ some_var }}: true , o:

template: "{{ resolve_me_to_src }}": "some_src"

las variables se utilizarán literalmente y nunca se resolverán. Mi caso de uso específico es usar esto con el módulo ec2, donde algunos de mis nombres de etiquetas se almacenan como variables:

- name: Provision a set of instances ec2: group: "{{ aws_security_group }}" instance_type: "{{ aws_instance_type }}" image: "{{ aws_ami_id }}" region: "{{ aws_region }}" vpc_subnet_id: "{{ aws_vpc_subnet_id }}" key_name: "{{ aws_key_name }}" wait: true count: "{{ num_machines }}" instance_tags: { "{{ some_tag }}": "{{ some_value }}", "{{ other_tag }}": "{{ other_value }}" }

¿Hay alguna manera de evitar esto? ¿Puedo marcar que quiero forzar la evaluación de alguna manera?


Otra opción: puedes probar algo como:

module_name: "{{ item.key }}={{ item.value }}" with_items: - { key: "option", value: "{{ any_value }}" }

Tenga en cuenta que todo está en línea y que estoy usando un igual (=) y que todo está envuelto con comillas dobles.