def test_vars_files_for_host(self): # host != None # vars in filename2 # no vars in filename3 # make a vars file fd, temp_path = mkstemp() f = open(temp_path, "wb") f.write("foo: bar\n") f.close() # build play attributes playbook = FakePlayBook() ds = { "hosts": "localhost", "vars_files": ["{{ temp_path }}"]} basedir = "." playbook.VARS_CACHE['localhost']['temp_path'] = temp_path # create play and do first run play = Play(playbook, ds, basedir) # the second run is started by calling update_vars_files play.update_vars_files(['localhost']) os.remove(temp_path) assert 'foo' in play.playbook.VARS_CACHE['localhost'], "vars_file vars were not loaded into vars_cache" assert play.playbook.VARS_CACHE['localhost']['foo'] == 'bar', "foo does not equal bar"
def test_vars_files_two_vars_different_scope(self): # # Use a play var and an inventory var to create the filename # # self.playbook.inventory.get_variables(host) # {'group_names': ['ungrouped'], 'inventory_hostname': 'localhost', # 'ansible_ssh_user': '******', 'inventory_hostname_short': 'localhost'} # make a temp dir temp_dir = mkdtemp() # make a temp file fd, temp_file = mkstemp(dir=temp_dir) f = open(temp_file, "wb") f.write("foo: bar\n") f.close() # build play attributes playbook = FakePlayBook() playbook.inventory.hosts['localhost'] = { 'inventory_hostname': os.path.basename(temp_file) } ds = { "hosts": "localhost", "vars": { "temp_dir": os.path.dirname(temp_file) }, "vars_files": ["{{ temp_dir + '/' + inventory_hostname }}"] } basedir = "." # create play and do first run play = Play(playbook, ds, basedir) # do the host run play.update_vars_files(['localhost']) # cleanup shutil.rmtree(temp_dir) assert 'foo' not in play.vars_file_vars, \ "mixed scope vars_file loaded into play vars" assert 'foo' in play.playbook.VARS_CACHE['localhost'], \ "differently scoped templated vars_files filename not loaded" assert play.playbook.VARS_CACHE['localhost']['foo'] == 'bar', \ "foo is not bar"
def test_vars_files_two_vars_different_scope(self): # # Use a play var and an inventory var to create the filename # # self.playbook.inventory.get_variables(host) # {'group_names': ['ungrouped'], 'inventory_hostname': 'localhost', # 'ansible_ssh_user': '******', 'inventory_hostname_short': 'localhost'} # make a temp dir temp_dir = mkdtemp() # make a temp file fd, temp_file = mkstemp(dir=temp_dir) f = open(temp_file, "wb") f.write("foo: bar\n") f.close() # build play attributes playbook = FakePlayBook() playbook.inventory.hosts['localhost'] = {'inventory_hostname': os.path.basename(temp_file)} ds = { "hosts": "localhost", "vars": { "temp_dir": os.path.dirname(temp_file)}, "vars_files": ["{{ temp_dir + '/' + inventory_hostname }}"]} basedir = "." # create play and do first run play = Play(playbook, ds, basedir) # do the host run play.update_vars_files(['localhost']) # cleanup shutil.rmtree(temp_dir) assert 'foo' not in play.vars, \ "mixed scope vars_file loaded into play vars" assert 'foo' in play.playbook.VARS_CACHE['localhost'], \ "differently scoped templated vars_files filename not loaded" assert play.playbook.VARS_CACHE['localhost']['foo'] == 'bar', \ "foo is not bar"