Search code examples
amazon-web-servicesamazon-ec2ansiblejinja2

Convert Ansible variable to integer for arithmetic


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.


Solution

  • 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