Add a Singleton metaclass, use it with Display (#48935)

* Add a Singleton class, use it with Display

* update six import

* Move remaining failes to display singleton

* Fix rebase issues

* Singleton improvements

* Add code-smell for 'from __main__ import display'. ci_complete

* s/self/cls/g

* Add docs for no-main-display

* Address linting issues

* Add changelog fragment. ci_complete

* Implement reentrant lock for class instantiation in Singleton

* Add Display singleton porting guide
This commit is contained in:
Matt Martz
2018-11-20 17:06:51 -06:00
committed by GitHub
parent 54a2f21f93
commit 9773a1f289
149 changed files with 407 additions and 766 deletions

View File

@@ -40,16 +40,13 @@ from ansible.module_utils.six import with_metaclass, string_types
from ansible.module_utils._text import to_bytes, to_text
from ansible.parsing.dataloader import DataLoader
from ansible.release import __version__
from ansible.utils.display import Display
from ansible.utils.path import unfrackpath
from ansible.utils.vars import load_extra_vars, load_options_vars
from ansible.vars.manager import VariableManager
from ansible.parsing.vault import PromptVaultSecret, get_file_vault_secret
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
class SortedOptParser(optparse.OptionParser):

View File

@@ -18,8 +18,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
########################################################
from ansible import constants as C
from ansible.cli import CLI
from ansible.errors import AnsibleError, AnsibleOptionsError
@@ -29,16 +27,11 @@ from ansible.parsing.splitter import parse_kv
from ansible.playbook import Playbook
from ansible.playbook.play import Play
from ansible.plugins.loader import get_all_plugin_loaders
from ansible.utils.display import Display
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
########################################################
class AdHocCLI(CLI):
''' is an extra-simple tool/framework/API for doing 'remote things'.
this command allows you to define and run a single task 'playbook' against a set of hosts

View File

@@ -16,14 +16,10 @@ from ansible.errors import AnsibleError, AnsibleOptionsError
from ansible.module_utils._text import to_native, to_text
from ansible.parsing.yaml.dumper import AnsibleDumper
from ansible.utils.color import stringc
from ansible.utils.display import Display
from ansible.utils.path import unfrackpath
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
class ConfigCLI(CLI):

View File

@@ -46,12 +46,9 @@ from ansible.playbook.play import Play
from ansible.plugins.loader import module_loader, fragment_loader
from ansible.utils import plugin_docs
from ansible.utils.color import stringc
from ansible.utils.display import Display
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
class ConsoleCLI(CLI, cmd.Cmd):

View File

@@ -35,13 +35,10 @@ from ansible.parsing.metadata import extract_metadata
from ansible.parsing.plugin_docs import read_docstub
from ansible.parsing.yaml.dumper import AnsibleDumper
from ansible.plugins.loader import action_loader, fragment_loader
from ansible.utils.display import Display
from ansible.utils.plugin_docs import BLACKLIST, get_docstring
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
class DocCLI(CLI):

View File

@@ -41,12 +41,9 @@ from ansible.galaxy.role import GalaxyRole
from ansible.galaxy.token import GalaxyToken
from ansible.module_utils._text import to_native, to_text
from ansible.playbook.role.requirement import RoleRequirement
from ansible.utils.display import Display
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
class GalaxyCLI(CLI):

View File

@@ -27,12 +27,9 @@ from ansible.inventory.host import Host
from ansible.plugins.loader import vars_loader
from ansible.parsing.dataloader import DataLoader
from ansible.utils.vars import combine_vars
from ansible.utils.display import Display
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
INTERNAL_VARS = frozenset(['ansible_diff_mode',
'ansible_facts',

View File

@@ -15,8 +15,6 @@
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
########################################################
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
@@ -28,12 +26,9 @@ from ansible.errors import AnsibleError, AnsibleOptionsError
from ansible.executor.playbook_executor import PlaybookExecutor
from ansible.playbook.block import Block
from ansible.playbook.play_context import PlayContext
from ansible.utils.display import Display
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
class PlaybookCLI(CLI):

View File

@@ -18,7 +18,6 @@
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
########################################################
import datetime
import os
import platform
@@ -34,16 +33,11 @@ from ansible.errors import AnsibleOptionsError
from ansible.module_utils._text import to_native, to_text
from ansible.plugins.loader import module_loader
from ansible.utils.cmd_functions import run_cmd
from ansible.utils.display import Display
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
########################################################
class PullCLI(CLI):
''' is used to up a remote copy of ansible on each managed node,
each set to run via cron and update playbook source via a source repository.

View File

@@ -28,12 +28,9 @@ from ansible.errors import AnsibleOptionsError
from ansible.module_utils._text import to_text, to_bytes
from ansible.parsing.dataloader import DataLoader
from ansible.parsing.vault import VaultEditor, VaultLib, match_encrypt_secret
from ansible.utils.display import Display
try:
from __main__ import display
except ImportError:
from ansible.utils.display import Display
display = Display()
display = Display()
class VaultCLI(CLI):