def test_pillar_targets(): minion_id = os.environ['TEST_MINION_ID'] ntp_server_param = NTP.param_spec('server') # add data for all minions group user pillar pu = PillarUpdater(targets=provisioner.ALL_MINIONS) pr = PillarResolver(targets=provisioner.ALL_MINIONS) value_all = '1.2.3.4' pu.update(NTP(server=value_all)) pu.apply() get_res = pr.get([ntp_server_param]) assert get_res[minion_id][ntp_server_param] == value_all # add data to minion's user pillar pu = PillarUpdater(targets=minion_id) pr = PillarResolver(targets=minion_id) value_minion_1 = '1.2.3.5' pu.update(NTP(server=value_minion_1)) pu.apply() get_res = pr.get([ntp_server_param]) assert get_res[minion_id][ntp_server_param] == value_minion_1 # add data to another minion's user pillar minion_id_2 = minion_id + '_2' pu = PillarUpdater(targets=minion_id_2) value_minion_2 = '1.2.3.6' pu.update(NTP(server=value_minion_2)) with pytest.raises(provisioner.errors.SaltNoReturnError): pu.apply() pr = PillarResolver(targets=minion_id) get_res = pr.get([ntp_server_param]) # value for minion_1 is not changed assert get_res[minion_id][ntp_server_param] == value_minion_1
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
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'}}}