Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

# (c) 2012, Daniel Hokka Zakrisson <daniel@hozac.com> 

# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.com> and others 

# (c) 2017, Toshio Kuratomi <tkuratomi@ansible.com> 

# 

# This file is part of Ansible 

# 

# Ansible is free software: you can redistribute it and/or modify 

# it under the terms of the GNU General Public License as published by 

# the Free Software Foundation, either version 3 of the License, or 

# (at your option) any later version. 

# 

# Ansible is distributed in the hope that it will be useful, 

# but WITHOUT ANY WARRANTY; without even the implied warranty of 

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

# GNU General Public License for more details. 

# 

# You should have received a copy of the GNU General Public License 

# along with Ansible. If not, see <http://www.gnu.org/licenses/>. 

 

# Make coding more python3-ish 

from __future__ import (absolute_import, division, print_function) 

__metaclass__ = type 

 

from abc import ABCMeta 

 

from ansible import constants as C 

from ansible.module_utils.six import with_metaclass, string_types 

 

try: 

from __main__ import display 

except ImportError: 

from ansible.utils.display import Display 

display = Display() 

 

# Global so that all instances of a PluginLoader will share the caches 

MODULE_CACHE = {} 

PATH_CACHE = {} 

PLUGIN_PATH_CACHE = {} 

 

 

def get_plugin_class(obj): 

if isinstance(obj, string_types): 

return obj.lower().replace('module', '') 

else: 

return obj.__class__.__name__.lower().replace('module', '') 

 

 

class AnsiblePlugin(with_metaclass(ABCMeta, object)): 

 

# allow extra passthrough parameters 

allow_extras = False 

 

def __init__(self): 

self._options = {} 

 

def get_option(self, option, hostvars=None): 

57 ↛ 58line 57 didn't jump to line 58, because the condition on line 57 was never true if option not in self._options: 

option_value = C.config.get_config_value(option, plugin_type=get_plugin_class(self), plugin_name=self._load_name, variables=hostvars) 

self.set_option(option, option_value) 

return self._options.get(option) 

 

def set_option(self, option, value): 

self._options[option] = value 

 

def set_options(self, task_keys=None, var_options=None, direct=None): 

''' 

Sets the _options attribute with the configuration/keyword information for this plugin 

 

:arg task_keys: Dict with playbook keywords that affect this option 

:arg var_options: Dict with either 'conneciton variables' 

:arg direct: Dict with 'direct assignment' 

''' 

 

if not self._options: 

# load config options if we have not done so already, if vars provided we should be mostly done 

self._options = C.config.get_plugin_options(get_plugin_class(self), self._load_name, keys=task_keys, variables=var_options) 

 

# they can be direct options overriding config 

if direct: 

for k in self._options: 

if k in direct: 

self.set_option(k, direct[k]) 

 

# allow extras/wildcards from vars that are not directly consumed in configuration 

85 ↛ 86line 85 didn't jump to line 86, because the condition on line 85 was never true if self.allow_extras and var_options and '_extras' in var_options: 

self.set_option('_extras', var_options['_extras']) 

 

def _check_required(self): 

# FIXME: standarize required check based on config 

pass