Home > Mobile >  Convert Ansible variable to integer for arithmetic
Convert Ansible variable to integer for arithmetic

Time:05-16

I would like to execute a command to obtain the current AWS EC2 launch template version in an integer format so I can do basic arithmetic on it to use in subsequent queries / deletes.

For example:

    tasks:
  - name: Lookup current default version of EC2 launch template
    command: aws ec2 describe-launch-template-versions --launch-template-id lt-xxx --filters Name=is-default-version,Value=true --query 'LaunchTemplateVersions[*].[VersionNumber]'
    delegate_to: localhost
    register: result

  - name: Show results
    debug:
      msg: '{{ result.stdout }}'
    delegate_to: localhost

If this output is '5' I would like to subtract 1 from it so I can execute an additional command to do the following:

aws ec2 delete-launch-template-versions --launch-template-id lt-xxx --versions {{result - 1}}

I realize this will not work as written, but this is the premise I'm going for.

CodePudding user response:

Convert the string to an integer. For example

    - command: echo 5
      register: result
    - command: "echo {{ result.stdout|int - 1 }}"
      register: result
    - debug:
        var: result.stdout

gives

  result.stdout: '4'

The type of the command return values' attribute stdout is string. See the results below

    - command: echo 5
      register: result
    - debug:
        msg: |-
          result.stdout: {{ result.stdout }}
          result.stdout|type_debug: {{ result.stdout|type_debug }}
          result.stdout|int|type_debug: {{ result.stdout|int|type_debug }}
  msg: |-
    result.stdout: 5
    result.stdout|type_debug: AnsibleUnsafeText
    result.stdout|int|type_debug: int
  • Related