Adding single quotes when I use regex_search('[^=]*$')

Hello Everyone,
When I use the regex_search in tasks, it is adding single quotes in the starting and end.
Like for this -

  • sw01 GigabitEthernet0/0 IF-MIB.ifSpeed = 1000000000
    when I use regex_search-

  • name: SET FACT - Interface SPEED -1
    set_fact:
    speeds: “{{ item.0 | regex_search(‘[^=]*$’) | regex_replace(’ ', ‘’) }}”

Converting above value to -

ok: [localhost] => (item=[‘sw01 GigabitEthernet0/0 IF-MIB.ifSpeed = 1000000000’])

My goal is fetch the value after ‘=’
sw01 GigabitEthernet0/0 IF-MIB.ifSpeed = 1000000000
to
1000000000

please advise.

Maybe you can use split.

item.split(“=”)[1]

should refer to what is at the right of “=”.

Thank you,
This is how I wrote-

  • name: SET FACT - Interface SPEED -1
    set_fact:
    speed_list1: “{{ item.split(‘=’)[1] | default(omit) }}”
    with_items:

  • ‘{{ speed_list }}’

  • name: Debug Speed
    debug: msg=“{{ speed_list1 }}”

Still the output is same-

TASK [Debug Speed] **************************************************************************************************************************************************
ok: [localhost] =>
msg: ’ 0’

Hello Everyone,
When I use the regex_search in tasks, it is adding single quotes in the starting and end.
Like for this -
- sw01 GigabitEthernet0/0 IF-MIB.ifSpeed = 1000000000
when I use regex_search-
- name: SET FACT - Interface SPEED -1
set_fact:
speeds: "{{ item.0 | regex_search('[^=]*$') | regex_replace(' ', '') }}"

Converting above value to -
ok: [localhost] => (item=['sw01 GigabitEthernet0/0 IF-MIB.ifSpeed = 1000000000'])

My goal is fetch the value after '='
sw01 GigabitEthernet0/0 IF-MIB.ifSpeed = 1000000000
to
1000000000

please advise.

The regex_search filter is superfluous in this case, try:

   regex_replace('^.*=(.*)$', '\\1')

\\1 references the part of the string matched by (.*).

Regards
         Racke

Thank you so much, Racke.
It worked like a charm. I was using it with rest API in JSON format. When I debug, it was adding single quotes(‘) but when I passed the command in URI module as you advised, it was not adding single quotes (’).

Thanks once again!!!

Hello Racke,
I’m trying to pass the numeric values of an variable into JSON.

  • name: Device ID
    set_fact:
    “device_id”: “{{ device_item_netbox.id }}”

  • name: DEBUG - DEVICE ID
    debug: msg=“{{ device_id }}”

Output -

TASK [DEBUG - DEVICE ID] ********************************************************************************************************************************************
ok: [localhost] =>
msg: ‘3483’

When I try to pass the same into JSON body-

  • name: Create Interface - Netbox
    uri:
    url: “{{ netbox_url }}/api/dcim/interfaces/”
    return_content: yes
    method: POST
    validate_certs: false
    status_code: 200,201
    headers:
    Authorization: “Token {{ netbox_server_token }}”
    body_format: json
    body:
    {
    “device”: “{{ device_id }}”,
    “name”: “GigabitEthernet0/0”,
    “mac_address”: “0001e896655b”,
    “type”: “10gbase-t”,
    “enabled”: “true”,
    “description”: “GigabitEthernet0/0”
    }

Verbose output -

fatal: [localhost]: FAILED! => changed=false
allow: GET, POST, HEAD, OPTIONS, TRACE
api_version: ‘2.8’
content: ‘{“non_field_errors”:[“The fields device, name must make a unique set.”]}’
content_length: ‘72’
content_type: application/json
elapsed: 0
invocation:
module_args:
attributes: null
body:
description: GigabitEthernet0/0
device: ‘3483’
enabled: ‘true’
mac_address: 0001e896655b
name: GigabitEthernet0/0
type: 10gbase-t

But when I add something with variables like below, it removes adding quotes -

body:
{
“device”: “{{ device_id }} m”,

Verbose output -

module_args:
attributes: null
body:
description: GigabitEthernet0/0
device: 3483 m

Please advise how can I fetch/pass only numeric digits without quotes.

Try something like this
“device”: “{{ device_id | int }}”