def test_pillar_updater_update_values(some_param_gr, test_pillar, patch_logging): fpath = some_param_gr.param_spec('attr1').fpath.name # UNCHANGED pu = PillarUpdater() pu.update(some_param_gr(UNCHANGED)) assert pu.pillar(fpath) == {} # try to update again with pytest.raises(RuntimeError): pu.update(some_param_gr(UNCHANGED)) # DEFAULT (reset) pu = PillarUpdater() with pytest.raises(NotImplementedError): pu.update(some_param_gr(DEFAULT)) # UNDEFINED pu = PillarUpdater() pu.update(some_param_gr(UNDEFINED)) assert pu.pillar(fpath) == {'1': {'2': {'3': None}}} # MISSED pu = PillarUpdater() with pytest.raises(ValueError): pu.update(some_param_gr(MISSED)) # non special value pu = PillarUpdater() pu.update(some_param_gr('some-value')) assert pu.pillar(fpath) == {'1': {'2': {'3': 'some-value'}}}
def test_pillar_updater_update_rollback_dump(targets, some_param_gr, some_param_di, pillar_dir, pillar_host_dir_tmpl): if targets != ALL_MINIONS: pillar_dir = Path(pillar_host_dir_tmpl.format(minion_id=targets)) pillar_dir.mkdir(parents=True) input_param_group = some_param_gr('new-value1', 'new-value2') input_param_di = some_param_di('some_key', 'new-value3') attr1_param = some_param_gr.param_spec('attr1') attr2_param = some_param_gr.param_spec('attr2') attr3_param = input_param_di.param_spec() f1 = add_pillar_merge_prefix(pillar_dir / attr1_param.fpath.name) f2 = add_pillar_merge_prefix(pillar_dir / attr2_param.fpath.name) f3 = add_pillar_merge_prefix(pillar_dir / attr3_param.fpath.name) pillar_data = {'1': {'2': {'3': '4', '5': '6'}, 'di_parent': {}}} dump_yaml(f1, pillar_data) dump_yaml(f2, pillar_data) dump_yaml(f3, pillar_data) pu = PillarUpdater(targets=targets) # update (in memory only) pu.update(input_param_group, input_param_di) p1 = deepcopy(pillar_data) p1['1']['2']['3'] = input_param_group.attr1 assert pu.pillar(f1.name) == p1 assert load_yaml(f1) == pillar_data p2 = deepcopy(pillar_data) p2['1']['2']['5'] = input_param_group.attr2 assert pu.pillar(f2.name) == p2 assert load_yaml(f2) == pillar_data p3 = deepcopy(pillar_data) p3['1']['di_parent'] = {input_param_di.key_attr: input_param_di.value_attr} assert pu.pillar(f3.name) == p3 assert load_yaml(f3) == pillar_data # update on disk pu.dump() assert load_yaml(f1) == p1 assert load_yaml(f2) == p2 assert load_yaml(f3) == p3 # rolllback (in memory only) pu.rollback() assert pu.pillar(f1.name) == pillar_data assert load_yaml(f1) == p1 assert pu.pillar(f2.name) == pillar_data assert load_yaml(f2) == p2 assert pu.pillar(f3.name) == pillar_data assert load_yaml(f3) == p3 # rollback on disk pu.dump() assert load_yaml(f1) == pillar_data assert load_yaml(f2) == pillar_data assert load_yaml(f3) == pillar_data