def test_all_tasks_run_after_error(env, admin_remote, remove_service,
                                   rename_role, nova_conf_on_cmpt):
    """Test to check that all tasks are executed after 'error' state of one of them

    Steps to reproduce:
    1. Delete 'p_heat-engine' service in order to have error for 'primary-heat'
    2. Make change in os config
    3. Rename keystone role
    4. Run 'fuel2 env nodes deploy' with --noop option
    5. Check that all messages are in result
    """
    p_ctrl = env.primary_controller
    node2, changes = nova_conf_on_cmpt
    msg1 = ("/Pcmk_resource[p_heat-engine]/ensure', u'message': "
            "u'current_value absent, should be present (noop)'")
    msg2 = ("Nova_config[{0}/{1}]/value', u'message': u'current_value {2}, "
            "should be False (noop)").format(*changes[0])
    msg3 = ("/Keystone_role[SwiftOperator]/ensure', u'message': "
            "u'current_value absent, should be present (noop)'")
    task = noop_common.run_noop_nodes_deploy(admin_remote, env,
                                             nodes=[p_ctrl, node2])
    cmd_res_error = admin_remote.execute(
        "fuel deployment-tasks --tid {0} --status error".format(task.id))
    assert "primary-heat" in cmd_res_error.stdout_string
    exp_messages = [(p_ctrl.id, msg1), (node2.id, msg2), (p_ctrl.id, msg3)]
    assert noop_common.are_messages_in_summary_results(admin_remote, task.id,
                                                       exp_messages)
def test_changes_for_several_nodes(env, admin_remote, nova_conf_on_cmpt,
                                   delete_micro_flavor, puppet_file_new_mod):
    """Test to check the noop run for several nodes at the same time

    Steps to reproduce:
    1. Make different custom changes for different nodes
    2. Execute 'fuel2 env nodes deploy' with --noop
    3. Wait for task finishing
    4. Execute 'fuel deployment-tasks --tid <task_id> --include-summary'
    5. Check that result contains the expected data for all nodes
    """
    node1, changes = nova_conf_on_cmpt
    node2 = env.primary_controller
    node3 = puppet_file_new_mod['node']
    task = noop_common.run_noop_nodes_deploy(admin_remote, env,
                                             nodes=[node1, node2, node3])
    msg1 = ("Nova_config[{0}/{1}]/value', u'message': u'current_value {2}, "
            "should be False (noop)").format(*changes[0])
    msg2 = ("/Exec[create-m1.micro-flavor]/returns', u'message': "
            "u'current_value notrun, should be 0 (noop)'")
    msg3 = ("u'message': u'current_value {0}, "
            "should be 0644 (noop)'".format(puppet_file_new_mod['new_mod']))
    exp_messages = [(node1.id, msg1), (node2.id, msg2), (node3.id, msg3)]
    assert noop_common.are_messages_in_summary_results(admin_remote, task.id,
                                                       exp_messages)
def test_redeploy_whole_env(env, admin_remote, stop_service,
                            nova_conf_on_cmpt, disable_user):
    """Test to check the noop run feature for changes in whole env

    Steps to reproduce:
    1. Stop the service neutron-metadata-agent on controller
    2. Modify nova config on compute
    3. Disable user 'glare'
    4. Execute 'fuel2 env redeploy --noop'
    5. Wait for task finishing
    6. Execute 'fuel deployment-tasks --tid <task_id> --include-summary'
    7. Check that result contains the expected data
    """

    task = noop_common.run_noop_env_deploy(admin_remote, env,
                                           command='redeploy')

    expected_messages = []
    msg1 = ("/Service[neutron-metadata]/ensure', u'message': "
            "u'current_value stopped, should be running (noop)")
    for node in env.get_nodes_by_role('controller'):
        expected_messages.append((node.id, msg1))
    node2, changes = nova_conf_on_cmpt
    msg2 = ("Nova_config[{0}/{1}]/value', u'message': u'current_value {2}, "
            "should be False (noop)").format(*changes[0])
    expected_messages.append((node2.id, msg2))
    node3 = env.primary_controller
    msg3 = ("/Keystone_user[glare]/enabled', u'message': "
            "u'current_value false, should be true (noop)'")
    expected_messages.append((node3.id, msg3))
    assert noop_common.are_messages_in_summary_results(admin_remote, task.id,
                                                       expected_messages)
def test_stop_service(env, admin_remote, stop_service):
    """Test to check the noop run feature for stopped service

    Steps to reproduce:
    1. Stop the service neutron-metadata-agent on controller
    2. Execute 'deploy noop'
    3. Wait for task finishing
    4. Execute 'fuel deployment-tasks --tid <task_id> --include-summary'
    5. Check that result contains the expected data
    """

    nodes = env.get_nodes_by_role('controller')
    task = noop_common.run_noop_nodes_deploy(admin_remote, env, nodes=nodes)
    msg = ("/Service[neutron-metadata]/ensure', u'message': "
           "u'current_value stopped, should be running (noop)")
    expected_messages = []
    for node in nodes:
        expected_messages.append((node.id, msg))
    assert noop_common.are_messages_in_summary_results(admin_remote, task.id,
                                                       expected_messages)
def test_default_graph(env, admin_remote, glance_api_conf, nova_conf_on_cmpt,
                       puppet_file_new_owner):
    """Test to check the noop run feature for changes in whole env

    Steps to reproduce:
    1. Modify glance config on controller
    2. Modify nova config on compute
    3. Change owner of /etc/logrotate.d/apache2 on controller
    4. Execute 'fuel2 graph execute -t custom'
    5. Wait for task finishing
    6. Execute 'fuel deployment-tasks --tid <task_id> --include-summary'
    7. Check that result contains the expected data
    """

    nodes = []
    expected_messages = []

    node1, changes = glance_api_conf
    msg1 = ("Glance_api_config[{0}/{1}]/value', u'message': "
            "u'current_value {2}, should be False".format(*changes[0]))
    nodes.append(node1)
    expected_messages.append((node1.id, msg1))

    node2, changes = nova_conf_on_cmpt
    msg2 = ("Nova_config[{0}/{1}]/value', u'message': u'current_value {2}, "
            "should be False (noop)").format(*changes[0])
    nodes.append(node2)
    expected_messages.append((node2.id, msg2))

    node3 = puppet_file_new_owner['node']
    msg4 = ("u'message': u'current_value {0}, should be root (noop)'".
            format(puppet_file_new_owner['new_owner']))
    nodes.append(node3)
    expected_messages.append((node3.id, msg4))

    task = noop_common.run_noop_graph_execute(admin_remote, env,
                                              nodes=nodes,
                                              g_type='default')
    assert noop_common.are_messages_in_summary_results(admin_remote, task.id,
                                                       expected_messages)