Jinja2 Ansible 模板 - 需要帮助从变量中删除小数
Jinja2 Ansible Template - Need help removing decimal from a variable
我正在尝试为一个应用程序构建一个配置文件,它将提取 ansible_memtotal_mb 变量并获取该值的 50% 并将其用于服务器进程。挑战在于数学难免returns一位小数。应用程序配置文件不喜欢小数位,所以我需要去掉它。这是我正在尝试做的示例。 percona_memory_pool = "{{ ansible_memtotal_mb * ram_multiplier }}"
innodb_buffer_pool_instances = {% if (percona_memory_pool|int >= 16384) %} {{ (percona_memory_pool|int/8192)|round }}
{% else %} 8
{% endif %}
关键是要确保最终结果转换为 int 而不是 float,后者将以小数点显示。
这里是一个只使用过滤器的例子。 (注意:我没有改变你的计算逻辑,但它看起来并没有给出连贯的结果)
---
- hosts: localhost
gather_facts: false
tasks:
- debug:
msg: "{{
(percona_memory_pool | int >= 16384)
| ternary((percona_memory_pool | int / 8192), 8)
| round
| int
}}"
给出:
$ ansible-playbook playbook.yml -e percona_memory_pool=16383
PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************
TASK [debug] ************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "8"
}
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ ansible-playbook playbook.yml -e percona_memory_pool=16384
PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************
TASK [debug] ************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "2"
}
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
我正在尝试为一个应用程序构建一个配置文件,它将提取 ansible_memtotal_mb 变量并获取该值的 50% 并将其用于服务器进程。挑战在于数学难免returns一位小数。应用程序配置文件不喜欢小数位,所以我需要去掉它。这是我正在尝试做的示例。 percona_memory_pool = "{{ ansible_memtotal_mb * ram_multiplier }}"
innodb_buffer_pool_instances = {% if (percona_memory_pool|int >= 16384) %} {{ (percona_memory_pool|int/8192)|round }}
{% else %} 8
{% endif %}
关键是要确保最终结果转换为 int 而不是 float,后者将以小数点显示。
这里是一个只使用过滤器的例子。 (注意:我没有改变你的计算逻辑,但它看起来并没有给出连贯的结果)
---
- hosts: localhost
gather_facts: false
tasks:
- debug:
msg: "{{
(percona_memory_pool | int >= 16384)
| ternary((percona_memory_pool | int / 8192), 8)
| round
| int
}}"
给出:
$ ansible-playbook playbook.yml -e percona_memory_pool=16383
PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************
TASK [debug] ************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "8"
}
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ ansible-playbook playbook.yml -e percona_memory_pool=16384
PLAY [localhost] ********************************************************************************************************************************************************************************************************************************************************
TASK [debug] ************************************************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "2"
}
PLAY RECAP **************************************************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0