Ansible:如何在set_fact模块中对整数变量进行算术运算?

2024-01-03

有谁知道如何在set_fact模块中对整数变量进行算术赋值?目前,我设法通过使用 Jinja2 模板使用 String 变量来做到这一点,如下所示:

    - set_fact:
        flagStr: "0"

    - name: Add by one one one
      set_fact: 
        flagStr: "{{flagStr|int + 1 + 1 + 1}}"

    - name: debug total
      debug:
        msg:
          - "{{flagStr}}"

结果将返回 3 作为预期输出。但是,我不知道如何对整数变量执行此操作,因为以相同的方式执行此操作会返回错误。

我试过像这样:

- set_fact:
        flagInt: 0

    - name: Add by one
      set_fact: 
        flagInt: flagStr + 1           #will return as 'flagInt + 1' 
        flagInt: {{flagInt}} + 1       #will return as syntax error
        flagInt: "{{flagInt}}" + 1     #will return as syntax error
        flagInt: "{{flagInt}} + 1"     #will return as '0 + 1'

    - name: debug total
      debug:
        msg:
          - "{{flagInt}}"

Q: “我不知道如何对整数变量执行此操作,因为以同样的方式执行它会返回错误。”

答:你没有这样做。与第一个示例相比,第二个示例中的所有四个选项都不同。事实上,在第一个示例中使用字符串和整数时都会给出相同的结果。

有必要评估表达式“{{ }}”。如果变量flagStr是一个整数flagStr: 0没有必要将其转换为整数。它也不疼。下面的任务按预期工作。

    - set_fact:
        flagStr: 0
    - set_fact:
        flagStr: "{{ flagStr + 1 + 1 + 1 }}"
    - debug:
        var: flagStr

Notes

  1. 了解这一点很有用flagStr: 0是一个整数,但是flagStr: "{{ flagStr + 1 + 1 + 1 }}"是一个字符串
    - set_fact:
        flagStr: 0
    - debug:
        var: flagStr|type_debug
    - set_fact:
        flagStr: "{{ flagStr + 1 + 1 + 1 }}"
    - debug:
        var: flagStr
    - debug:
        var: flagStr|type_debug

gives

TASK [set_fact] ****************************************************
ok: [localhost]

TASK [debug] *******************************************************
ok: [localhost] => 
  flagStr|type_debug: int

TASK [set_fact] ****************************************************
ok: [localhost]

TASK [debug] *******************************************************
ok: [localhost] => 
  flagStr: '3'

TASK [debug] *******************************************************
ok: [localhost] => 
  flagStr|type_debug: str
  1. 如果要重复操作,需要将字符串转换为整数
    - set_fact:
        flagStr: "{{ flagStr|int + 1 + 1 + 1 }}"

否则任务会失败

msg: ' ({{ flagStr + 1 + 1 + 1 }}) 上发生意外的模板类型错误:只能将 str (不是“int”)连接到 str'

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ansible:如何在set_fact模块中对整数变量进行算术运算? 的相关文章

  • C++ 将数字转换为单词

    我在一本书中发现了这个将数字转换为单词的程序 初始程序转换数字 1 1000 但随后要求您修改程序以接受最多 1 000 000 的数字 我可以处理 20 999 以内的数字 但无法处理超过 20 999 的数字 我一整天都在修改它 并在网
  • C++:通过隐式构造函数初始化 int 变量

    我正在学习 C 我对 int 变量的初始化有点困惑 此代码 包括注释 是 Nawaz 在本主题中的答案的复制 粘贴为什么 C 需要用户提供的默认构造函数来默认构造 const 对象 https stackoverflow com quest
  • 如何在 YAML 中使用 IF ELSE 和变量?

    我正在使用 Ansible Tower 的 YAML 文件 其中包含以下信息 name Package Deployment block name Update package package yum update cache True u
  • C 中 long int 和 int 的大小显示 4 个字节 [重复]

    这个问题在这里已经有答案了 我做了以下实验来了解系统中 long int 和 int 的大小 系统规格 64位Windows 7 gcc MinGW 编译器 日食CDT 我对得到的输出感到困惑 我没有理由支持我的程序的结果 如果有人对此有任
  • 在 Ansible 中将 Python 脚本的输出转换为 dict

    我有一个名为test py这是 usr bin python a A 2 nB 5 print a 现在 在我的 Ansible 剧本中 我正在运行此脚本并使用此任务将输出注册到变量 name Create variable from th
  • 将变量内容复制到事实中后,Ansible 会抛出错误

    我有变量 其中包含带有其他模板引擎标记的字符串 不幸的是它们是三个花括号 如果我直接使用这些变量 一切都很好 如果我将它们复制到事实中以便随后修改它们 Ansible 会抛出错误 示例剧本 hosts localhost connectio
  • jenkins 管道中的该模块需要 boto3 和 botocore

    我正在尝试通过 jenkins groovy 脚本运行 ansible playbook 但不断收到错误 boto3 is required 我已经安装了 boto3 pip list boto grep boto boto3 1 20 3
  • 如何根据任务或任务集切换用户?

    我的 ansible 手册中反复出现的主题是我经常必须使用 sudo 权限执行命令 sudo yes 因为我想为某个用户执行此操作 理想情况下 我宁愿使用 sudo 切换到该用户并正常执行命令 因为这样我就不必执行通常的后命令清理工作 例如
  • 即使在开始时已经输入,Ansible 同步也会提示密码

    Ansible v1 6 5 的同步模块提示输入密码 Enter passphrase for key 尽管我一开始就已经输入了运行剧本 知道为什么吗 我使用以下选项运行我的剧本 u myuser ask sudo pass private
  • 将事实收集到事实缓存的最快方法

    我正在尝试让 Ansible 与 limit 一起工作 为此我需要有关其他主机的事实 我正在使用fact caching进行缓存 我应该运行什么命令 以便它只收集所有主机上的所有事实并缓存它们 而不运行任何任务 像这样的东西设置模块 htt
  • 用于下载文件的 S3 模块在 ansible 中不起作用

    这是为从 S3 存储桶 artefact test 下载文件而编写的 ansible 代码 name Download customization artifacts from S3 s3 bucket artefact test obje
  • 在 ansible 角色中引用 defaults/main.yml 中的变量

    我的角色设置如下 角色 测试 任务 main yml name Generate people files template src test j2 dest tmp item name cfg loop people 角色 测试 模板 t
  • 如何将文件从 Ansible Tower 上传到 Artifactory?

    我每次都会收到此错误 但仅在尝试从 Ansible Tower 上传到 Artifactory 时出现在特定文件上 这些文件都是在清单主机上创建的Oracle Collection Tool 然后在上传到 Artifactory 之前获取到
  • 如何在 C++ 中打印带前缀 + 的正数

    有没有办法在 C 中打印整数及其符号 即默认情况下 如果数字为负数 我们会得到一个 印有标志 同理我们可以得到 在正数之前 int x 1 cout lt lt x lt
  • 如果不满足某些条件,如何跳过ansible剧本中的所有其他剧本?

    我在下面的剧本中有多个剧本 如果不满足某些条件 我想忽略所有其他戏剧 因此 对于下面的示例 如果我在中找不到任何新文件Play1然后我不想执行Play2 and Play3根本没有 它应该跳过它 我怎样才能做到这一点 I have end
  • 使用 ansible SSH 到远程服务器

    我正在使用 ansible 来自动化一些任务 其中之一要求我ssh到服务器A 然后从A到B 然后从B到C 我似乎找不到任何方法来做到这一点 有什么建议么 鉴于您不使用 Paramiko 进行 ssh transport ssh https
  • 如何配置 Ansible 跳过两个堡垒主机?

    我想编写一个 Ansible 剧本 使用 Ansible 2 7 5 它将在到达目标服务器之前跳过两个主机来执行诸如安装 docker 和 python 等操作 我能够让 Ansible 通过一台主机跳转到server1通过将其添加到我的h
  • mysql 中 int(11) 列的大小是多少(以字节为单位)?

    柱子的尺寸是多少int 11 在mysql中以字节为单位 该列中可以存储的最大值 An INT无论指定什么长度 都将始终为 4 个字节 TINYINT 1 字节 8 位 SMALLINT 2 字节 16 位 MEDIUMINT 3 字节 2
  • Ansible git clone“权限被拒绝”但直接 git clone 工作

    我在使用 Ansible 时遇到了一个令人不安的问题 我使用当前主机的 ssh 密钥在我的环境中设置 git 克隆 name Add user Public Key copy src Users alexgrs ssh id rsa pub
  • 如何使用 Ansible when 条件在文件中搜索字符串

    我有一个变量中用 n 分隔的搜索字符串列表listofips 我想在文件中搜索该字符串hello csv在我的下面playbook dir 我可能遇到一些语法问题 我不确定 但下面是我尝试过的 set fact listofips 10 0

随机推荐