def get_databag_attributes(self, atlas_set_header, databag_set_name): """ Returns all items of a databag given the header and databag name in the atlas config file. """ data_bag_attr = {} base_path = self.ah_obj.get_atlas_config_data("chef_module", 'chef-base-path') api = chef.autoconfigure(base_path) chef_databags = self.ah_obj.get_atlas_config_data( atlas_set_header, databag_set_name)[1] for databag in chef_databags.keys(): data_bag = DataBag(databag, api) key_list = {} items = chef_databags[databag]['items'].keys() for item_index in items: key_list = chef_databags[databag]['items'][item_index]['keys'] chef_databag_item = DataBagItem(databag, item_index, api) for item_keys, item_values in chef_databag_item.iteritems(): if item_keys in key_list: data_bag_attr[item_keys] = item_values elif type(item_values) == dict: data_bag_attr[item_keys] = {} for key in key_list: attr_values = self.ah_obj.get_nested_attribute_values( item_values, key) data_bag_attr[item_keys][key] = attr_values return data_bag_attr
def getDataBag(self, target_system): '''get databag.''' from chef import DataBag try: return DataBag(target_system, api=self.api) except Exception as error: logging.error('%s failed to get databag of %s', self.NAME, target_system) logging.exception(error) raise error
def test_create_item(self): value = self.random() bag_name = self.random() bag = DataBag.create(bag_name) self.register(bag) item_name = self.random() item = DataBagItem.create(bag, item_name, foo=value) self.assertIn('foo', item) self.assertEqual(item['foo'], value) self.assertIn(item_name, bag) bag2 = DataBag(bag_name) self.assertIn(item_name, bag2) item2 = bag2[item_name] self.assertIn('foo', item) self.assertEqual(item['foo'], value)
def test_direct_item_bag(self): bag = DataBag('test_1') item = DataBagItem(bag, 'item_1') self.assertEqual(item['test_attr'], 1) self.assertEqual(item['other'], 'foo')
def test_item(self): bag = DataBag('test_1') item = bag['item_1'] self.assertEqual(item['test_attr'], 1) self.assertEqual(item['other'], 'foo')
def test_keys(self): bag = DataBag('test_1') self.assertItemsEqual(bag.keys(), ['item_1', 'item_2']) self.assertItemsEqual(iter(bag), ['item_1', 'item_2'])
def _get_databag(self, target_system): """get databag.""" from chef import DataBag return DataBag(target_system, api=self.api_)