Sorry if this has been answered somewhere but I couldn’t find anything that really addressed this, or I’m really dense about how best to solve this problem.
I have a variable that should be either a fully-qualified domain name or an IP address. I want to throw a warning or error if the variable is not set to one of the two, or even optionally just use the ansible_ssh_host or ansible_inventory_hostname if there is no match. I’m not sure how to actually do the conditional check, though. The “when:” conditional statement doesn’t seem to give me the options I want natively, so should I be dropping into only_if and jinja2/python syntax instead? Any other suggestions?
“I want to throw a warning or error if the variable is not set to one of the two,”
- debug: msg=“Hey, this might sound crazy, but this variable is not set to duck or goose”
when: “var_name != 'duck and variable != ‘goose’”
"or even optionally just use the ansible_ssh_host or ansible_inventory_hostname if there is no match. "
{{ var_name | default(ansible_ssh_host) }}
only_if has been a deprecated feature for ages, and when absolutely does everything you want.
Sorry, I guess I wasn’t clear in my original post. I need to test for a FQDN vs. just a machine name. So if the variable is appended with “.domain.com” it’s okay. I won’t be matching a specific string, so it’s more of a “contains” type thing. If it was regexp I’d be writing something like “..domain.com". If it’s an IP address (not a specific one, mind you, just a valid IP) - meaning if I was using regexp I’d do something like (might not compile, but you probably know what I mean) "\d.\d*.\d*.\d*”. If it doesn’t match those two situations I’ll go with the default - although I like your default statement - I didn’t know about that.
I know only_if has been deprecated (and I’m glad!) - all my scripts use “when” now, just not sure how to do a conditional substring search.
Sorry for the confusion.
when: variable.find('somestring') != -1
Ahh, perfect. Thanks Serge, I’ll give that a go.
also:
when: “‘something’ in variable”
you have to quote it because you’ll have non-matching string quotes otherwise, but it at least doesn’t look like Python (for those that want to avoid it)
Thanks Michael. It appears that a “not in” isn’t an option?
Wouldn’t take it - syntax error. Was that perhaps added in 1.4? I’m still on 1.3.
Not added in 1.4, just Jinja
Probably wants the not before the statement
– Michael
I’ll try that. I didn’t see the “not” in jinja docs but I might have missed it. Thanks.