mirror of https://github.com/ansible/ansible.git
Add uri, urn and url test plugins (#77423)
and docs! Co-authored-by: Tabah Baridule <dulemartins07@gmail.com> Co-authored-by: Felix Fontein <felix@fontein.de>pull/77916/head
parent
e4c0bbf885
commit
f7d7604454
@ -0,0 +1,2 @@
|
||||
minor_changes:
|
||||
- new tests url, uri and urn will verify string as such, but they don't check existance of the resource
|
@ -0,0 +1,46 @@
|
||||
# (c) Ansible Project
|
||||
|
||||
# Make coding more python3-ish
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
from urllib.parse import urlparse
|
||||
|
||||
|
||||
def is_uri(value, schemes=None):
|
||||
''' Will verify that the string passed is a valid 'URI', if given a list of valid schemes it will match those '''
|
||||
try:
|
||||
x = urlparse(value)
|
||||
isit = all([x.scheme is not None, x.path is not None, not schemes or x.scheme in schemes])
|
||||
except Exception as e:
|
||||
isit = False
|
||||
return isit
|
||||
|
||||
|
||||
def is_url(value, schemes=None):
|
||||
''' Will verify that the string passed is a valid 'URL' '''
|
||||
|
||||
isit = is_uri(value, schemes)
|
||||
if isit:
|
||||
try:
|
||||
x = urlparse(value)
|
||||
isit = bool(x.netloc or x.scheme == 'file')
|
||||
except Exception as e:
|
||||
isit = False
|
||||
return isit
|
||||
|
||||
|
||||
def is_urn(value):
|
||||
return is_uri(value, ['urn'])
|
||||
|
||||
|
||||
class TestModule(object):
|
||||
''' Ansible URI jinja2 test '''
|
||||
|
||||
def tests(self):
|
||||
return {
|
||||
# file testing
|
||||
'uri': is_uri,
|
||||
'url': is_url,
|
||||
'urn': is_urn,
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
DOCUMENTATION:
|
||||
name: uri
|
||||
author: Ansible Core
|
||||
version_added: "2.14"
|
||||
short_description: check if string is a valid URI
|
||||
description:
|
||||
- Validates that the input string conforms to the URI standard, optionally that is also in the list of schemas provided.
|
||||
options:
|
||||
_input:
|
||||
description: Possible URI.
|
||||
type: string
|
||||
required: True
|
||||
schemes:
|
||||
description: Subset of URI schemas to validate against, otherwise B(any) scheme is considered valid.
|
||||
type: list
|
||||
elements: string
|
||||
required: False
|
||||
EXAMPLES: |
|
||||
# URLs are URIs
|
||||
{{ 'http://example.com' is uri }}
|
||||
# but not all URIs are URLs
|
||||
{{ 'mailto://nowone@example.com' is uri }}
|
||||
# looking only for file transfers URIs
|
||||
{{ 'mailto://nowone@example.com' is not uri(schemes=['ftp', 'ftps', 'sftp', 'file']) }}
|
||||
# make sure URL conforms to the 'special schemas'
|
||||
{{ 'http://nobody:secret@example.com' is uri(['ftp', 'ftps', 'http', 'https', 'ws', 'wss']) }}
|
||||
RETURN:
|
||||
_value:
|
||||
description: Returns C(false) if the string is not a URI or the schema extracted does not match the supplied list.
|
||||
type: boolean
|
@ -0,0 +1,29 @@
|
||||
DOCUMENTATION:
|
||||
name: url
|
||||
author: Ansible Core
|
||||
version_added: "2.14"
|
||||
short_description: check if string is a valid URL
|
||||
description:
|
||||
- Validates a string to conform to the URL standard.
|
||||
options:
|
||||
_input:
|
||||
description: Possible URL.
|
||||
type: string
|
||||
required: True
|
||||
schemes:
|
||||
description: Subset of URI schemas to validate against, otherwise B(any) scheme is considered valid.
|
||||
type: list
|
||||
elements: string
|
||||
EXAMPLES: |
|
||||
# simple URL
|
||||
{{ 'http://example.com' is url }}
|
||||
# looking only for file transfers URIs
|
||||
{{ 'mailto://nowone@example.com' is not uri(schemes=['ftp', 'ftps', 'sftp', 'file']) }}
|
||||
# but it is according to standard
|
||||
{{ 'mailto://nowone@example.com' is not uri }}
|
||||
# more complex URL
|
||||
{{ 'ftp://admin:secret@example.com/path/to/myfile.yml' is url }}
|
||||
RETURN:
|
||||
_value:
|
||||
description: Returns C(false) if the string is not a URL, C(true) otherwise.
|
||||
type: boolean
|
@ -0,0 +1,21 @@
|
||||
DOCUMENTATION:
|
||||
name: urn
|
||||
author: Ansible Core
|
||||
version_added: "2.14"
|
||||
short_description: check if string is a valid URN
|
||||
description:
|
||||
- Validates that the input string conforms to the URN standard.
|
||||
options:
|
||||
_input:
|
||||
description: Possible URN.
|
||||
type: string
|
||||
required: True
|
||||
EXAMPLES: |
|
||||
# ISBN in URN format
|
||||
{{ 'urn:isbn:9780302376463' is urn }}
|
||||
# this is URL/URI but not URN
|
||||
{{ 'mailto://nowone@example.com' is not urn }}
|
||||
RETURN:
|
||||
_value:
|
||||
description: Returns C(true) if the string is a URN and C(false) if it is not.
|
||||
type: boolean
|
@ -0,0 +1 @@
|
||||
shippable/posix/group5
|
@ -0,0 +1,43 @@
|
||||
- name: urX tests
|
||||
vars:
|
||||
special: ['http', 'https', 'ftp', 'ftps', 'ws', 'wss', 'file']
|
||||
block:
|
||||
- name: Assert uri tests
|
||||
assert:
|
||||
that:
|
||||
- "'http://searchengine.tld' is uri" # simple case, urls are uris but not all uris are urls
|
||||
- "'ftp://searchengine.tld' is uri" # other scheme
|
||||
- "'file://etc/hosts' is uri"
|
||||
- "'mailto://me@example.com' is uri"
|
||||
- "'sftp://me@example.com' is uri"
|
||||
- "'asldkfjhalsidfthjo' is uri" # junk can look like uri (either implied scheme or empty path)
|
||||
- "'asldkfjhalsidfthjo' is not uri(special)" # validate against the schemes i know i need
|
||||
- "'http://admin:secret@example.com' is uri"
|
||||
- "'ftps://admin:secret@example.com' is uri"
|
||||
- "'admin:secret@example.com' is uri" # scheme is implied
|
||||
- "'http://admin:secret@example.com/myfile?parm=1¶m=2' is uri"
|
||||
- "'urn:isbn:9780307476463' is uri" # book ref
|
||||
|
||||
- name: Assert url tests
|
||||
assert:
|
||||
that:
|
||||
- "'http://searchengine.tld' is url" # simple case
|
||||
- "'htp://searchengine.tld' is not url(special)" # bad scheme for explicit expectations
|
||||
- "'htp://searchengine.tld' is url" # bad scheme, but valid if no explicit list
|
||||
- "'ftp://searchengine.tld' is url"
|
||||
- "'ftp://searchengine.tld' is url"
|
||||
- "'ftp:// searchengine.tld' is url"
|
||||
- "'file://etc/hosts' is url"
|
||||
- "'mailto://me@example.com' is url"
|
||||
- "'asldkfjhalsidfthjo' is not url" # junk
|
||||
- "'http://admin:secret@example.com' is url"
|
||||
- "'ftps://admin:secret@example.com' is url"
|
||||
- "'admin:secret@example.com' is not url"
|
||||
- "'http://admin:secret@example.com/myfile?parm=1¶m=2' is url"
|
||||
- "'urn:isbn:9780307476463' is not url" # book ref
|
||||
- name: assert urn
|
||||
assert:
|
||||
that:
|
||||
- "'urn:isbn:9780307476463' is urn" # book ref
|
||||
- "'ftps://admin:secret@example.com' is not urn"
|
||||
- "'admin:secret@example.com' is not urn"
|
Loading…
Reference in New Issue