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

# Copyright (c) 2017 Ansible Project 

# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) 

 

from __future__ import (absolute_import, division, print_function) 

__metaclass__ = type 

 

DOCUMENTATION = r''' 

inventory: host_list 

version_added: "2.4" 

short_description: Parses a 'host list' string 

description: 

- Parses a host list string as a comma separated values of hosts 

- This plugin only applies to inventory strings that are not paths and contain a comma. 

''' 

 

EXAMPLES = r''' 

# define 2 hosts in command line 

# ansible -i '10.10.2.6, 10.10.2.4' -m ping all 

 

# DNS resolvable names 

# ansible -i 'host1.example.com, host2' -m user -a 'name=me state=absent' all 

 

# just use localhost 

# ansible-playbook -i 'localhost,' play.yml -c local 

''' 

 

import os 

 

from ansible.errors import AnsibleError, AnsibleParserError 

from ansible.module_utils._text import to_bytes, to_native 

from ansible.parsing.utils.addresses import parse_address 

from ansible.plugins.inventory import BaseInventoryPlugin 

 

 

class InventoryModule(BaseInventoryPlugin): 

 

NAME = 'host_list' 

 

def verify_file(self, host_list): 

 

valid = False 

b_path = to_bytes(host_list, errors='surrogate_or_strict') 

43 ↛ 44line 43 didn't jump to line 44, because the condition on line 43 was never true if not os.path.exists(b_path) and ',' in host_list: 

valid = True 

return valid 

 

def parse(self, inventory, loader, host_list, cache=True): 

''' parses the inventory file ''' 

 

super(InventoryModule, self).parse(inventory, loader, host_list) 

 

try: 

for h in host_list.split(','): 

h = h.strip() 

if h: 

try: 

(host, port) = parse_address(h, allow_ranges=False) 

except AnsibleError as e: 

self.display.vvv("Unable to parse address from hostname, leaving unchanged: %s" % to_native(e)) 

host = h 

port = None 

 

if host not in self.inventory.hosts: 

self.inventory.add_host(host, group='ungrouped', port=port) 

except Exception as e: 

raise AnsibleParserError("Invalid data from string, could not parse: %s" % to_native(e))