Пример #1
0
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
Пример #2
0
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
Пример #3
0
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'}}}