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

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

# (c) 2012-2014, Michael DeHaan <michael.dehaan@gmail.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 ansible.inventory.group import Group 

from ansible.utils.vars import combine_vars, get_unique_id 

 

__all__ = ['Host'] 

 

 

class Host: 

''' a single ansible host ''' 

 

# __slots__ = [ 'name', 'vars', 'groups' ] 

 

def __getstate__(self): 

return self.serialize() 

 

def __setstate__(self, data): 

return self.deserialize(data) 

 

def __eq__(self, other): 

if not isinstance(other, Host): 

return False 

return self._uuid == other._uuid 

 

def __ne__(self, other): 

return not self.__eq__(other) 

 

def __hash__(self): 

return hash(self.name) 

 

def __str__(self): 

return self.get_name() 

 

def __repr__(self): 

return self.get_name() 

 

def serialize(self): 

groups = [] 

for group in self.groups: 

groups.append(group.serialize()) 

 

return dict( 

name=self.name, 

vars=self.vars.copy(), 

address=self.address, 

uuid=self._uuid, 

groups=groups, 

implicit=self.implicit, 

) 

 

def deserialize(self, data): 

self.__init__(gen_uuid=False) 

 

self.name = data.get('name') 

self.vars = data.get('vars', dict()) 

self.address = data.get('address', '') 

self._uuid = data.get('uuid', None) 

self.implicit = data.get('implicit', False) 

 

groups = data.get('groups', []) 

for group_data in groups: 

g = Group() 

g.deserialize(group_data) 

self.groups.append(g) 

 

def __init__(self, name=None, port=None, gen_uuid=True): 

 

self.vars = {} 

self.groups = [] 

self._uuid = None 

 

self.name = name 

self.address = name 

 

94 ↛ 95line 94 didn't jump to line 95, because the condition on line 94 was never true if port: 

self.set_variable('ansible_port', int(port)) 

 

97 ↛ 99line 97 didn't jump to line 99, because the condition on line 97 was never false if gen_uuid: 

self._uuid = get_unique_id() 

self.implicit = False 

 

def get_name(self): 

return self.name 

 

def populate_ancestors(self): 

# populate ancestors 

for group in self.groups: 

self.add_group(group) 

 

def add_group(self, group): 

 

# populate ancestors first 

for oldg in group.get_ancestors(): 

113 ↛ 112line 113 didn't jump to line 112, because the condition on line 113 was never false if oldg not in self.groups: 

self.add_group(oldg) 

 

# actually add group 

if group not in self.groups: 

self.groups.append(group) 

 

def remove_group(self, group): 

 

if group in self.groups: 

self.groups.remove(group) 

 

# remove exclusive ancestors, xcept all! 

for oldg in group.get_ancestors(): 

if oldg.name != 'all': 

for childg in self.groups: 

if oldg in childg.get_ancestors(): 

break 

else: 

self.remove_group(oldg) 

 

def set_variable(self, key, value): 

self.vars[key] = value 

 

def get_groups(self): 

return self.groups 

 

def get_magic_vars(self): 

results = {} 

results['inventory_hostname'] = self.name 

results['inventory_hostname_short'] = self.name.split('.')[0] 

results['group_names'] = sorted([g.name for g in self.get_groups() if g.name != 'all']) 

 

return results 

 

def get_vars(self): 

return combine_vars(self.vars, self.get_magic_vars())