normalize docs in cache/connection plugins (#9453)

Normalize doc blocks for plugins
pull/9452/head
Alexei Znamensky 2024-12-30 01:34:33 +13:00 committed by GitHub
parent 1de16e50f1
commit 040cd0ca50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 428 additions and 442 deletions

View File

@ -7,46 +7,46 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Unknown (!UNKNOWN) author: Unknown (!UNKNOWN)
name: memcached name: memcached
short_description: Use memcached DB for cache short_description: Use memcached DB for cache
description:
- This cache uses JSON formatted, per host records saved in memcached.
requirements:
- memcache (python lib)
options:
_uri:
description: description:
- This cache uses JSON formatted, per host records saved in memcached. - List of connection information for the memcached DBs.
requirements: default: ['127.0.0.1:11211']
- memcache (python lib) type: list
options: elements: string
_uri: env:
description: - name: ANSIBLE_CACHE_PLUGIN_CONNECTION
- List of connection information for the memcached DBs ini:
default: ['127.0.0.1:11211'] - key: fact_caching_connection
type: list section: defaults
elements: string _prefix:
env: description: User defined prefix to use when creating the DB entries.
- name: ANSIBLE_CACHE_PLUGIN_CONNECTION type: string
ini: default: ansible_facts
- key: fact_caching_connection env:
section: defaults - name: ANSIBLE_CACHE_PLUGIN_PREFIX
_prefix: ini:
description: User defined prefix to use when creating the DB entries - key: fact_caching_prefix
type: string section: defaults
default: ansible_facts _timeout:
env: default: 86400
- name: ANSIBLE_CACHE_PLUGIN_PREFIX type: integer
ini:
- key: fact_caching_prefix
section: defaults
_timeout:
default: 86400
type: integer
# TODO: determine whether it is OK to change to: type: float # TODO: determine whether it is OK to change to: type: float
description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire.
env: env:
- name: ANSIBLE_CACHE_PLUGIN_TIMEOUT - name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
ini: ini:
- key: fact_caching_timeout - key: fact_caching_timeout
section: defaults section: defaults
''' """
import collections import collections
import os import os

View File

@ -8,41 +8,41 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
name: pickle name: pickle
short_description: Pickle formatted files. short_description: Pickle formatted files
description:
- This cache uses Python's pickle serialization format, in per host files, saved to the filesystem.
author: Brian Coca (@bcoca)
options:
_uri:
required: true
description: description:
- This cache uses Python's pickle serialization format, in per host files, saved to the filesystem. - Path in which the cache plugin will save the files.
author: Brian Coca (@bcoca) env:
options: - name: ANSIBLE_CACHE_PLUGIN_CONNECTION
_uri: ini:
required: true - key: fact_caching_connection
description: section: defaults
- Path in which the cache plugin will save the files type: path
env: _prefix:
- name: ANSIBLE_CACHE_PLUGIN_CONNECTION description: User defined prefix to use when creating the files.
ini: env:
- key: fact_caching_connection - name: ANSIBLE_CACHE_PLUGIN_PREFIX
section: defaults ini:
type: path - key: fact_caching_prefix
_prefix: section: defaults
description: User defined prefix to use when creating the files type: string
env: _timeout:
- name: ANSIBLE_CACHE_PLUGIN_PREFIX default: 86400
ini: description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire.
- key: fact_caching_prefix env:
section: defaults - name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
type: string ini:
_timeout: - key: fact_caching_timeout
default: 86400 section: defaults
description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire type: float
env: """
- name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
ini:
- key: fact_caching_timeout
section: defaults
type: float
'''
try: try:
import cPickle as pickle import cPickle as pickle

118
plugins/cache/redis.py vendored
View File

@ -6,67 +6,67 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Unknown (!UNKNOWN) author: Unknown (!UNKNOWN)
name: redis name: redis
short_description: Use Redis DB for cache short_description: Use Redis DB for cache
description:
- This cache uses JSON formatted, per host records saved in Redis.
requirements:
- redis>=2.4.5 (python lib)
options:
_uri:
description: description:
- This cache uses JSON formatted, per host records saved in Redis. - A colon separated string of connection information for Redis.
requirements: - The format is V(host:port:db:password), for example V(localhost:6379:0:changeme).
- redis>=2.4.5 (python lib) - To use encryption in transit, prefix the connection with V(tls://), as in V(tls://localhost:6379:0:changeme).
options: - To use redis sentinel, use separator V(;), for example V(localhost:26379;localhost:26379;0:changeme). Requires redis>=2.9.0.
_uri: type: string
description: required: true
- A colon separated string of connection information for Redis. env:
- The format is V(host:port:db:password), for example V(localhost:6379:0:changeme). - name: ANSIBLE_CACHE_PLUGIN_CONNECTION
- To use encryption in transit, prefix the connection with V(tls://), as in V(tls://localhost:6379:0:changeme). ini:
- To use redis sentinel, use separator V(;), for example V(localhost:26379;localhost:26379;0:changeme). Requires redis>=2.9.0. - key: fact_caching_connection
type: string section: defaults
required: true _prefix:
env: description: User defined prefix to use when creating the DB entries.
- name: ANSIBLE_CACHE_PLUGIN_CONNECTION type: string
ini: default: ansible_facts
- key: fact_caching_connection env:
section: defaults - name: ANSIBLE_CACHE_PLUGIN_PREFIX
_prefix: ini:
description: User defined prefix to use when creating the DB entries - key: fact_caching_prefix
type: string section: defaults
default: ansible_facts _keyset_name:
env: description: User defined name for cache keyset name.
- name: ANSIBLE_CACHE_PLUGIN_PREFIX type: string
ini: default: ansible_cache_keys
- key: fact_caching_prefix env:
section: defaults - name: ANSIBLE_CACHE_REDIS_KEYSET_NAME
_keyset_name: ini:
description: User defined name for cache keyset name. - key: fact_caching_redis_keyset_name
type: string section: defaults
default: ansible_cache_keys version_added: 1.3.0
env: _sentinel_service_name:
- name: ANSIBLE_CACHE_REDIS_KEYSET_NAME description: The redis sentinel service name (or referenced as cluster name).
ini: type: string
- key: fact_caching_redis_keyset_name env:
section: defaults - name: ANSIBLE_CACHE_REDIS_SENTINEL
version_added: 1.3.0 ini:
_sentinel_service_name: - key: fact_caching_redis_sentinel
description: The redis sentinel service name (or referenced as cluster name). section: defaults
type: string version_added: 1.3.0
env: _timeout:
- name: ANSIBLE_CACHE_REDIS_SENTINEL default: 86400
ini: type: integer
- key: fact_caching_redis_sentinel
section: defaults
version_added: 1.3.0
_timeout:
default: 86400
type: integer
# TODO: determine whether it is OK to change to: type: float # TODO: determine whether it is OK to change to: type: float
description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire.
env: env:
- name: ANSIBLE_CACHE_PLUGIN_TIMEOUT - name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
ini: ini:
- key: fact_caching_timeout - key: fact_caching_timeout
section: defaults section: defaults
''' """
import re import re
import time import time

68
plugins/cache/yaml.py vendored
View File

@ -8,42 +8,42 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
name: yaml name: yaml
short_description: YAML formatted files. short_description: YAML formatted files
description:
- This cache uses YAML formatted, per host, files saved to the filesystem.
author: Brian Coca (@bcoca)
options:
_uri:
required: true
description: description:
- This cache uses YAML formatted, per host, files saved to the filesystem. - Path in which the cache plugin will save the files.
author: Brian Coca (@bcoca) env:
options: - name: ANSIBLE_CACHE_PLUGIN_CONNECTION
_uri: ini:
required: true - key: fact_caching_connection
description: section: defaults
- Path in which the cache plugin will save the files type: string
env: _prefix:
- name: ANSIBLE_CACHE_PLUGIN_CONNECTION description: User defined prefix to use when creating the files.
ini: env:
- key: fact_caching_connection - name: ANSIBLE_CACHE_PLUGIN_PREFIX
section: defaults ini:
type: string - key: fact_caching_prefix
_prefix: section: defaults
description: User defined prefix to use when creating the files type: string
env: _timeout:
- name: ANSIBLE_CACHE_PLUGIN_PREFIX default: 86400
ini: description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire.
- key: fact_caching_prefix env:
section: defaults - name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
type: string ini:
_timeout: - key: fact_caching_timeout
default: 86400 section: defaults
description: Expiration timeout in seconds for the cache plugin data. Set to 0 to never expire type: integer
env:
- name: ANSIBLE_CACHE_PLUGIN_TIMEOUT
ini:
- key: fact_caching_timeout
section: defaults
type: integer
# TODO: determine whether it is OK to change to: type: float # TODO: determine whether it is OK to change to: type: float
''' """
import codecs import codecs

View File

@ -10,79 +10,66 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Maykel Moya (!UNKNOWN) <mmoya@speedyrails.com> author: Maykel Moya (!UNKNOWN) <mmoya@speedyrails.com>
name: chroot name: chroot
short_description: Interact with local chroot short_description: Interact with local chroot
description:
- Run commands or put/fetch files to an existing chroot on the Ansible controller.
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing chroot on the Ansible controller. - The path of the chroot you want to access.
options: type: string
remote_addr: default: inventory_hostname
description: vars:
- The path of the chroot you want to access. - name: inventory_hostname
type: string - name: ansible_host
default: inventory_hostname executable:
vars: description:
- name: inventory_hostname - User specified executable shell.
- name: ansible_host type: string
executable: ini:
description: - section: defaults
- User specified executable shell key: executable
type: string env:
ini: - name: ANSIBLE_EXECUTABLE
- section: defaults vars:
key: executable - name: ansible_executable
env: default: /bin/sh
- name: ANSIBLE_EXECUTABLE chroot_exe:
vars: description:
- name: ansible_executable - User specified chroot binary.
default: /bin/sh type: string
chroot_exe: ini:
description: - section: chroot_connection
- User specified chroot binary key: exe
type: string env:
ini: - name: ANSIBLE_CHROOT_EXE
- section: chroot_connection vars:
key: exe - name: ansible_chroot_exe
env: default: chroot
- name: ANSIBLE_CHROOT_EXE disable_root_check:
vars: description:
- name: ansible_chroot_exe - Do not check that the user is not root.
default: chroot ini:
disable_root_check: - section: chroot_connection
description: key: disable_root_check
- Do not check that the user is not root. env:
ini: - name: ANSIBLE_CHROOT_DISABLE_ROOT_CHECK
- section: chroot_connection vars:
key: disable_root_check - name: ansible_chroot_disable_root_check
env: default: false
- name: ANSIBLE_CHROOT_DISABLE_ROOT_CHECK type: bool
vars: version_added: 7.3.0
- name: ansible_chroot_disable_root_check """
default: false
type: bool
version_added: 7.3.0
'''
EXAMPLES = r""" EXAMPLES = r"""
# Plugin requires root privileges for chroot, -E preserves your env (and location of ~/.ansible):
# sudo -E ansible-playbook ...
#
# Static inventory file
# [chroots]
# /path/to/debootstrap
# /path/to/feboostrap
# /path/to/lxc-image
# /path/to/chroot
# playbook
---
- hosts: chroots - hosts: chroots
connection: community.general.chroot connection: community.general.chroot
tasks: tasks:
- debug: - debug:
msg: "This is coming from chroot environment" msg: "This is coming from chroot environment"
""" """
import os import os

View File

@ -9,24 +9,24 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Michael Scherer (@mscherer) <misc@zarb.org> author: Michael Scherer (@mscherer) <misc@zarb.org>
name: funcd name: funcd
short_description: Use funcd to connect to target short_description: Use funcd to connect to target
description:
- This transport permits you to use Ansible over Func.
- For people who have already setup func and that wish to play with ansible, this permit to move gradually to ansible without
having to redo completely the setup of the network.
options:
remote_addr:
description: description:
- This transport permits you to use Ansible over Func. - The path of the chroot you want to access.
- For people who have already setup func and that wish to play with ansible, type: string
this permit to move gradually to ansible without having to redo completely the setup of the network. default: inventory_hostname
options: vars:
remote_addr: - name: ansible_host
description: - name: ansible_func_host
- The path of the chroot you want to access. """
type: string
default: inventory_hostname
vars:
- name: ansible_host
- name: ansible_func_host
'''
HAVE_FUNC = False HAVE_FUNC = False
try: try:

View File

@ -8,47 +8,47 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = """ DOCUMENTATION = r"""
author: Stéphane Graber (@stgraber) author: Stéphane Graber (@stgraber)
name: incus name: incus
short_description: Run tasks in Incus instances via the Incus CLI. short_description: Run tasks in Incus instances using the Incus CLI
description:
- Run commands or put/fetch files to an existing Incus instance using Incus CLI.
version_added: "8.2.0"
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing Incus instance using Incus CLI. - The instance identifier.
version_added: "8.2.0" type: string
options: default: inventory_hostname
remote_addr: vars:
description: - name: inventory_hostname
- The instance identifier. - name: ansible_host
type: string - name: ansible_incus_host
default: inventory_hostname executable:
vars: description:
- name: inventory_hostname - The shell to use for execution inside the instance.
- name: ansible_host type: string
- name: ansible_incus_host default: /bin/sh
executable: vars:
description: - name: ansible_executable
- The shell to use for execution inside the instance. - name: ansible_incus_executable
type: string remote:
default: /bin/sh description:
vars: - The name of the Incus remote to use (per C(incus remote list)).
- name: ansible_executable - Remotes are used to access multiple servers from a single client.
- name: ansible_incus_executable type: string
remote: default: local
description: vars:
- The name of the Incus remote to use (per C(incus remote list)). - name: ansible_incus_remote
- Remotes are used to access multiple servers from a single client. project:
type: string description:
default: local - The name of the Incus project to use (per C(incus project list)).
vars: - Projects are used to divide the instances running on a server.
- name: ansible_incus_remote type: string
project: default: default
description: vars:
- The name of the Incus project to use (per C(incus project list)). - name: ansible_incus_project
- Projects are used to divide the instances running on a server.
type: string
default: default
vars:
- name: ansible_incus_project
""" """
import os import os

View File

@ -10,28 +10,28 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Stephan Lohse (!UNKNOWN) <dev-github@ploek.org> author: Stephan Lohse (!UNKNOWN) <dev-github@ploek.org>
name: iocage name: iocage
short_description: Run tasks in iocage jails short_description: Run tasks in iocage jails
description:
- Run commands or put/fetch files to an existing iocage jail.
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing iocage jail - Path to the jail.
options: type: string
remote_addr: vars:
description: - name: ansible_host
- Path to the jail - name: ansible_iocage_host
type: string remote_user:
vars: description:
- name: ansible_host - User to execute as inside the jail.
- name: ansible_iocage_host type: string
remote_user: vars:
description: - name: ansible_user
- User to execute as inside the jail - name: ansible_iocage_user
type: string """
vars:
- name: ansible_user
- name: ansible_iocage_user
'''
import subprocess import subprocess

View File

@ -10,30 +10,30 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Ansible Core Team author: Ansible Core Team
name: jail name: jail
short_description: Run tasks in jails short_description: Run tasks in jails
description:
- Run commands or put/fetch files to an existing jail.
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing jail - Path to the jail.
options: type: string
remote_addr: default: inventory_hostname
description: vars:
- Path to the jail - name: inventory_hostname
type: string - name: ansible_host
default: inventory_hostname - name: ansible_jail_host
vars: remote_user:
- name: inventory_hostname description:
- name: ansible_host - User to execute as inside the jail.
- name: ansible_jail_host type: string
remote_user: vars:
description: - name: ansible_user
- User to execute as inside the jail - name: ansible_jail_user
type: string """
vars:
- name: ansible_user
- name: ansible_jail_user
'''
import os import os
import os.path import os.path

View File

@ -7,31 +7,31 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Joerg Thalheim (!UNKNOWN) <joerg@higgsboson.tk> author: Joerg Thalheim (!UNKNOWN) <joerg@higgsboson.tk>
name: lxc name: lxc
short_description: Run tasks in lxc containers via lxc python library short_description: Run tasks in LXC containers using lxc python library
description:
- Run commands or put/fetch files to an existing LXC container using lxc python library.
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing lxc container using lxc python library - Container identifier.
options: type: string
remote_addr: default: inventory_hostname
description: vars:
- Container identifier - name: inventory_hostname
type: string - name: ansible_host
default: inventory_hostname - name: ansible_lxc_host
vars: executable:
- name: inventory_hostname default: /bin/sh
- name: ansible_host description:
- name: ansible_lxc_host - Shell executable.
executable: type: string
default: /bin/sh vars:
description: - name: ansible_executable
- Shell executable - name: ansible_lxc_executable
type: string """
vars:
- name: ansible_executable
- name: ansible_lxc_executable
'''
import os import os
import shutil import shutil

View File

@ -7,48 +7,48 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Matt Clay (@mattclay) <matt@mystile.com> author: Matt Clay (@mattclay) <matt@mystile.com>
name: lxd name: lxd
short_description: Run tasks in LXD instances via C(lxc) CLI short_description: Run tasks in LXD instances using C(lxc) CLI
description:
- Run commands or put/fetch files to an existing instance using C(lxc) CLI.
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing instance using C(lxc) CLI. - Instance (container/VM) identifier.
options: - Since community.general 8.0.0, a FQDN can be provided; in that case, the first component (the part before C(.)) is
remote_addr: used as the instance identifier.
description: type: string
- Instance (container/VM) identifier. default: inventory_hostname
- Since community.general 8.0.0, a FQDN can be provided; in that case, the first component (the part before C(.)) vars:
is used as the instance identifier. - name: inventory_hostname
type: string - name: ansible_host
default: inventory_hostname - name: ansible_lxd_host
vars: executable:
- name: inventory_hostname description:
- name: ansible_host - Shell to use for execution inside instance.
- name: ansible_lxd_host type: string
executable: default: /bin/sh
description: vars:
- Shell to use for execution inside instance. - name: ansible_executable
type: string - name: ansible_lxd_executable
default: /bin/sh remote:
vars: description:
- name: ansible_executable - Name of the LXD remote to use.
- name: ansible_lxd_executable type: string
remote: default: local
description: vars:
- Name of the LXD remote to use. - name: ansible_lxd_remote
type: string version_added: 2.0.0
default: local project:
vars: description:
- name: ansible_lxd_remote - Name of the LXD project to use.
version_added: 2.0.0 type: string
project: vars:
description: - name: ansible_lxd_project
- Name of the LXD project to use. version_added: 2.0.0
type: string """
vars:
- name: ansible_lxd_project
version_added: 2.0.0
'''
import os import os
from subprocess import Popen, PIPE from subprocess import Popen, PIPE

View File

@ -12,34 +12,33 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
name: qubes name: qubes
short_description: Interact with an existing QubesOS AppVM short_description: Interact with an existing QubesOS AppVM
description:
- Run commands or put/fetch files to an existing Qubes AppVM using qubes tools.
author: Kushal Das (@kushaldas)
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing Qubes AppVM using qubes tools. - VM name.
type: string
author: Kushal Das (@kushaldas) default: inventory_hostname
vars:
- name: ansible_host
options: remote_user:
remote_addr: description:
description: - The user to execute as inside the VM.
- VM name. type: string
type: string default: The I(user) account as default in Qubes OS.
default: inventory_hostname vars:
vars: - name: ansible_user
- name: ansible_host
remote_user:
description:
- The user to execute as inside the VM.
type: string
default: The I(user) account as default in Qubes OS.
vars:
- name: ansible_user
# keyword: # keyword:
# - name: hosts # - name: hosts
''' """
import subprocess import subprocess

View File

@ -10,13 +10,13 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Michael Scherer (@mscherer) <misc@zarb.org> author: Michael Scherer (@mscherer) <misc@zarb.org>
name: saltstack name: saltstack
short_description: Allow ansible to piggyback on salt minions short_description: Allow ansible to piggyback on salt minions
description: description:
- This allows you to use existing Saltstack infrastructure to connect to targets. - This allows you to use existing Saltstack infrastructure to connect to targets.
''' """
import os import os
import base64 import base64

View File

@ -11,22 +11,22 @@
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = ''' DOCUMENTATION = r"""
author: Ansible Core Team author: Ansible Core Team
name: zone name: zone
short_description: Run tasks in a zone instance short_description: Run tasks in a zone instance
description:
- Run commands or put/fetch files to an existing zone.
options:
remote_addr:
description: description:
- Run commands or put/fetch files to an existing zone. - Zone identifier.
options: type: string
remote_addr: default: inventory_hostname
description: vars:
- Zone identifier - name: ansible_host
type: string - name: ansible_zone_host
default: inventory_hostname """
vars:
- name: ansible_host
- name: ansible_zone_host
'''
import os import os
import os.path import os.path