@ -5,6 +5,7 @@ from nose.tools import raises
from ansible import errors
from ansible . inventory import Inventory
class TestInventory ( unittest . TestCase ) :
def setUp ( self ) :
@ -49,14 +50,14 @@ class TestInventory(unittest.TestCase):
def dir_inventory ( self ) :
return Inventory ( self . inventory_dir )
all_simple_hosts = [ ' jupiter ' , ' saturn ' , ' zeus ' , ' hera ' ,
' cerberus001 ' , ' cerberus002 ' , ' cerberus003 ' ,
' cottus99 ' , ' cottus100 ' ,
' poseidon ' , ' thor ' , ' odin ' , ' loki ' ,
' thrudgelmir0 ' , ' thrudgelmir1 ' , ' thrudgelmir2 ' ,
' thrudgelmir3 ' , ' thrudgelmir4 ' , ' thrudgelmir5 ' ,
' Hotep-a ' , ' Hotep-b ' , ' Hotep-c ' ,
' BastC ' , ' BastD ' , ' neptun ' , ]
all_simple_hosts = [ ' jupiter ' , ' saturn ' , ' zeus ' , ' hera ' ,
' cerberus001 ' , ' cerberus002 ' , ' cerberus003 ' ,
' cottus99 ' , ' cottus100 ' ,
' poseidon ' , ' thor ' , ' odin ' , ' loki ' ,
' thrudgelmir0 ' , ' thrudgelmir1 ' , ' thrudgelmir2 ' ,
' thrudgelmir3 ' , ' thrudgelmir4 ' , ' thrudgelmir5 ' ,
' Hotep-a ' , ' Hotep-b ' , ' Hotep-c ' ,
' BastC ' , ' BastD ' , ' neptun ' , ]
#####################################
### Empty inventory format tests
@ -93,36 +94,36 @@ class TestInventory(unittest.TestCase):
inventory = self . simple_inventory ( )
hosts = inventory . list_hosts ( " norse " )
expected_hosts = [ ' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' thor ' , ' odin ' , ' loki ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_simple_ungrouped ( self ) :
inventory = self . simple_inventory ( )
hosts = inventory . list_hosts ( " ungrouped " )
expected_hosts = [ ' jupiter ' , ' saturn ' ,
' thrudgelmir0 ' , ' thrudgelmir1 ' , ' thrudgelmir2 ' ,
' thrudgelmir3 ' , ' thrudgelmir4 ' , ' thrudgelmir5 ' ]
expected_hosts = [ ' jupiter ' , ' saturn ' ,
' thrudgelmir0 ' , ' thrudgelmir1 ' , ' thrudgelmir2 ' ,
' thrudgelmir3 ' , ' thrudgelmir4 ' , ' thrudgelmir5 ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_simple_combined ( self ) :
inventory = self . simple_inventory ( )
hosts = inventory . list_hosts ( " norse:greek " )
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' ,
' cerberus001 ' , ' cerberus002 ' , ' cerberus003 ' ,
' cottus99 ' , ' cottus100 ' ,
' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' ,
' cerberus001 ' , ' cerberus002 ' , ' cerberus003 ' ,
' cottus99 ' , ' cottus100 ' ,
' thor ' , ' odin ' , ' loki ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_simple_restrict ( self ) :
inventory = self . simple_inventory ( )
restricted_hosts = [ ' hera ' , ' poseidon ' , ' thor ' ]
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' ,
' cerberus001 ' , ' cerberus002 ' , ' cerberus003 ' ,
' cottus99 ' , ' cottus100 ' ,
' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' ,
' cerberus001 ' , ' cerberus002 ' , ' cerberus003 ' ,
' cottus99 ' , ' cottus100 ' ,
' thor ' , ' odin ' , ' loki ' ]
inventory . restrict_to ( restricted_hosts )
hosts = inventory . list_hosts ( " norse:greek " )
@ -137,12 +138,12 @@ class TestInventory(unittest.TestCase):
def test_simple_string_ipv4 ( self ) :
inventory = Inventory ( ' 127.0.0.1,192.168.1.1 ' )
hosts = inventory . list_hosts ( )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' 127.0.0.1 ' , ' 192.168.1.1 ' ] ) )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' 127.0.0.1 ' , ' 192.168.1.1 ' ] ) )
def test_simple_string_ipv4_port ( self ) :
inventory = Inventory ( ' 127.0.0.1:2222,192.168.1.1 ' )
hosts = inventory . list_hosts ( )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' 127.0.0.1 ' , ' 192.168.1.1 ' ] ) )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' 127.0.0.1 ' , ' 192.168.1.1 ' ] ) )
def test_simple_string_ipv4_vars ( self ) :
inventory = Inventory ( ' 127.0.0.1:2222,192.168.1.1 ' )
@ -152,12 +153,12 @@ class TestInventory(unittest.TestCase):
def test_simple_string_ipv6 ( self ) :
inventory = Inventory ( ' FE80:EF45::12:1,192.168.1.1 ' )
hosts = inventory . list_hosts ( )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' FE80:EF45::12:1 ' , ' 192.168.1.1 ' ] ) )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' FE80:EF45::12:1 ' , ' 192.168.1.1 ' ] ) )
def test_simple_string_ipv6_port ( self ) :
inventory = Inventory ( ' [FE80:EF45::12:1]:2222,192.168.1.1 ' )
hosts = inventory . list_hosts ( )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' FE80:EF45::12:1 ' , ' 192.168.1.1 ' ] ) )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' FE80:EF45::12:1 ' , ' 192.168.1.1 ' ] ) )
def test_simple_string_ipv6_vars ( self ) :
inventory = Inventory ( ' [FE80:EF45::12:1]:2222,192.168.1.1 ' )
@ -167,12 +168,12 @@ class TestInventory(unittest.TestCase):
def test_simple_string_fqdn ( self ) :
inventory = Inventory ( ' foo.example.com,bar.example.com ' )
hosts = inventory . list_hosts ( )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' foo.example.com ' , ' bar.example.com ' ] ) )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' foo.example.com ' , ' bar.example.com ' ] ) )
def test_simple_string_fqdn_port ( self ) :
inventory = Inventory ( ' foo.example.com:2222,bar.example.com ' )
hosts = inventory . list_hosts ( )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' foo.example.com ' , ' bar.example.com ' ] ) )
self . assertEqual ( sorted ( hosts ) , sorted ( [ ' foo.example.com ' , ' bar.example.com ' ] ) )
def test_simple_string_fqdn_vars ( self ) :
inventory = Inventory ( ' foo.example.com:2222,bar.example.com ' )
@ -191,26 +192,26 @@ class TestInventory(unittest.TestCase):
inventory = self . simple_inventory ( )
vars = inventory . get_variables ( ' hera ' )
expected = { ' ansible_ssh_port ' : 3000 ,
' group_names ' : [ ' greek ' ] ,
' inventory_hostname ' : ' hera ' ,
' inventory_hostname_short ' : ' hera ' }
expected = { ' ansible_ssh_port ' : 3000 ,
' group_names ' : [ ' greek ' ] ,
' inventory_hostname ' : ' hera ' ,
' inventory_hostname_short ' : ' hera ' }
assert vars == expected
def test_large_range ( self ) :
inventory = self . large_range_inventory ( )
hosts = inventory . list_hosts ( )
self . assertEqual ( sorted ( hosts ) , sorted ( ' bob %03i ' % i for i in range ( 0 , 143 ) ) )
self . assertEqual ( sorted ( hosts ) , sorted ( ' bob %03i ' % i for i in range ( 0 , 143 ) ) )
def test_subset ( self ) :
inventory = self . simple_inventory ( )
inventory . subset ( ' odin;thor,loki ' )
self . assertEqual ( sorted ( inventory . list_hosts ( ) ) , sorted ( [ ' thor ' , ' odin ' , ' loki ' ] ) )
self . assertEqual ( sorted ( inventory . list_hosts ( ) ) , sorted ( [ ' thor ' , ' odin ' , ' loki ' ] ) )
def test_subset_range ( self ) :
inventory = self . simple_inventory ( )
inventory . subset ( ' greek[0-2];norse[0] ' )
self . assertEqual ( sorted ( inventory . list_hosts ( ) ) , sorted ( [ ' zeus ' , ' hera ' , ' thor ' ] ) )
self . assertEqual ( sorted ( inventory . list_hosts ( ) ) , sorted ( [ ' zeus ' , ' hera ' , ' thor ' ] ) )
def test_subet_range_empty_group ( self ) :
inventory = self . simple_inventory ( )
@ -220,11 +221,11 @@ class TestInventory(unittest.TestCase):
def test_subset_filename ( self ) :
inventory = self . simple_inventory ( )
inventory . subset ( ' @ ' + os . path . join ( self . test_dir , ' restrict_pattern ' ) )
self . assertEqual ( sorted ( inventory . list_hosts ( ) ) , sorted ( [ ' thor ' , ' odin ' ] ) )
self . assertEqual ( sorted ( inventory . list_hosts ( ) ) , sorted ( [ ' thor ' , ' odin ' ] ) )
@raises ( errors . AnsibleError )
def testinvalid_entry ( self ) :
Inventory ( ' 1234 ' )
Inventory ( ' 1234 ' )
###################################################
### INI file advanced tests
@ -240,7 +241,7 @@ class TestInventory(unittest.TestCase):
g = ' g ' , h = ' h ' , i = " ' i \" " , j = ' " j ' ,
rga = ' 1 ' , rgb = ' 2 ' , rgc = ' 3 ' ,
inventory_hostname = ' rtp_a ' , inventory_hostname_short = ' rtp_a ' ,
group_names = [ ' eastcoast ' , ' nc ' , ' redundantgroup ' , ' redundantgroup2 ' , ' redundantgroup3 ' , ' rtp ' , ' us ' ]
group_names = [ ' eastcoast ' , ' nc ' , ' redundantgroup ' , ' redundantgroup2 ' , ' redundantgroup3 ' , ' rtp ' , ' us ' ]
)
print vars
print expected
@ -249,9 +250,9 @@ class TestInventory(unittest.TestCase):
def test_complex_group_names ( self ) :
inventory = self . complex_inventory ( )
tests = {
' host1 ' : [ ' role1 ' , ' role3 ' ] ,
' host2 ' : [ ' role1 ' , ' role2 ' ] ,
' host3 ' : [ ' role2 ' , ' role3 ' ]
' host1 ' : [ ' role1 ' , ' role3 ' ] ,
' host2 ' : [ ' role1 ' , ' role2 ' ] ,
' host3 ' : [ ' role2 ' , ' role3 ' ]
}
for host , roles in tests . iteritems ( ) :
group_names = inventory . get_variables ( host ) [ ' group_names ' ]
@ -275,11 +276,10 @@ class TestInventory(unittest.TestCase):
def test_complex_enumeration ( self ) :
expected1 = [ ' rtp_b ' ]
expected2 = [ ' rtp_a ' , ' rtp_b ' ]
expected3 = [ ' rtp_a ' , ' rtp_b ' , ' rtp_c ' , ' tri_a ' , ' tri_b ' , ' tri_c ' ]
expected4 = [ ' rtp_b ' , ' orlando ' ]
expected4 = [ ' rtp_b ' , ' orlando ' ]
expected5 = [ ' blade-a-1 ' ]
inventory = self . complex_inventory ( )
@ -303,34 +303,34 @@ class TestInventory(unittest.TestCase):
@raises ( errors . AnsibleError )
def test_invalid_range ( self ) :
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_incorrect_range ' ) )
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_incorrect_range ' ) )
@raises ( errors . AnsibleError )
def test_missing_end ( self ) :
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_missing_end ' ) )
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_missing_end ' ) )
@raises ( errors . AnsibleError )
def test_incorrect_format ( self ) :
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_incorrect_format ' ) )
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_incorrect_format ' ) )
@raises ( errors . AnsibleError )
def test_alpha_end_before_beg ( self ) :
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_alpha_end_before_beg ' ) )
Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_alpha_end_before_beg ' ) )
def test_combined_range ( self ) :
i = Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_combined_range ' ) )
i = Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_combined_range ' ) )
hosts = i . list_hosts ( ' test ' )
expected_hosts = [ ' host1A ' , ' host2A ' , ' host1B ' , ' host2B ' ]
expected_hosts = [ ' host1A ' , ' host2A ' , ' host1B ' , ' host2B ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_leading_range ( self ) :
i = Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_leading_range ' ) )
i = Inventory ( os . path . join ( self . test_dir , ' inventory ' , ' test_leading_range ' ) )
hosts = i . list_hosts ( ' test ' )
expected_hosts = [ ' 1.host ' , ' 2.host ' , ' A.host ' , ' B.host ' ]
expected_hosts = [ ' 1.host ' , ' 2.host ' , ' A.host ' , ' B.host ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
hosts2 = i . list_hosts ( ' test2 ' )
expected_hosts2 = [ ' 1.host ' , ' 2.host ' , ' 3.host ' ]
expected_hosts2 = [ ' 1.host ' , ' 2.host ' , ' 3.host ' ]
assert sorted ( hosts2 ) == sorted ( expected_hosts2 )
###################################################
@ -340,38 +340,38 @@ class TestInventory(unittest.TestCase):
inventory = self . script_inventory ( )
hosts = inventory . list_hosts ( )
expected_hosts = [ ' jupiter ' , ' saturn ' , ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' jupiter ' , ' saturn ' , ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
print " Expected: %s " % ( expected_hosts )
print " Got : %s " % ( hosts )
print " Expected: %s " % expected_hosts
print " Got : %s " % hosts
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_script_all ( self ) :
inventory = self . script_inventory ( )
hosts = inventory . list_hosts ( ' all ' )
expected_hosts = [ ' jupiter ' , ' saturn ' , ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' jupiter ' , ' saturn ' , ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_script_norse ( self ) :
inventory = self . script_inventory ( )
hosts = inventory . list_hosts ( " norse " )
expected_hosts = [ ' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' thor ' , ' odin ' , ' loki ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_script_combined ( self ) :
inventory = self . script_inventory ( )
hosts = inventory . list_hosts ( " norse:greek " )
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
assert sorted ( hosts ) == sorted ( expected_hosts )
def test_script_restrict ( self ) :
inventory = self . script_inventory ( )
restricted_hosts = [ ' hera ' , ' poseidon ' , ' thor ' ]
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
expected_hosts = [ ' zeus ' , ' hera ' , ' poseidon ' , ' thor ' , ' odin ' , ' loki ' ]
inventory . restrict_to ( restricted_hosts )
hosts = inventory . list_hosts ( " norse:greek " )
@ -389,7 +389,7 @@ class TestInventory(unittest.TestCase):
print " VARS= %s " % vars
assert vars == { ' hammer ' : True ,
assert vars == { ' hammer ' : True ,
' group_names ' : [ ' norse ' ] ,
' inventory_hostname ' : ' thor ' ,
' inventory_hostname_short ' : ' thor ' }
@ -417,15 +417,17 @@ class TestInventory(unittest.TestCase):
auth = inventory . get_variables ( ' neptun ' ) [ ' auth ' ]
assert auth == ' YWRtaW46YWRtaW4= '
# test disabled as needs to be updated to model desired behavior
#
#def test_dir_inventory(self):
# inventory = self.dir_inventory()
# vars = inventory.get_variables('zeus')
#
# print "VARS=%s" % vars
#
# assert vars == {'inventory_hostname': 'zeus',
# 'inventory_hostname_short': 'zeus',
# 'group_names': ['greek', 'major-god', 'ungrouped'],
# 'var_a': '1#2'}
def test_dir_inventory ( self ) :
inventory = self . dir_inventory ( )
host_vars = inventory . get_variables ( ' zeus ' )
expected_vars = { ' inventory_hostname ' : ' zeus ' ,
' inventory_hostname_short ' : ' zeus ' ,
' group_names ' : [ ' greek ' , ' major-god ' , ' ungrouped ' ] ,
' var_a ' : ' 2#3 ' }
print " HOST VARS= %s " % host_vars
print " EXPECTED VARS= %s " % expected_vars
assert host_vars == expected_vars