コード例 #1
0
def test_purge_on_delete_ignore(io_loop, client, server, environment):
    """
        Test purge on delete behavior for resources that have not longer purged_on_delete set
    """
    agent = Agent(io_loop,
                  "localhost", {"blah": "localhost"},
                  environment=environment)
    agent.start()
    aclient = agent._client

    # Version 1 with purge_on_delete true
    version = 1

    resources = [{
        'group': 'root',
        'hash': '89bf880a0dc5ffc1156c8d958b4960971370ee6a',
        'id': 'std::File[vm1,path=/tmp/file1],v=%d' % version,
        'owner': 'root',
        'path': '/tmp/file1',
        'permissions': 644,
        'purged': False,
        'reload': False,
        'requires': [],
        'purge_on_delete': True,
        'version': version
    }]

    res = yield client.put_version(tid=environment,
                                   version=version,
                                   resources=resources,
                                   unknowns=[],
                                   version_info={})
    assert res.code == 200

    # Release the model and set all resources as deployed
    result = yield client.release_version(environment, version, push=False)
    assert result.code == 200

    now = datetime.now()
    result = yield aclient.resource_action_update(
        environment, ['std::File[vm1,path=/tmp/file1],v=%d' % version],
        uuid.uuid4(), "deploy", now, now, "deployed", [], {})
    assert result.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["version"] == version
    assert result.result["model"]["total"] == len(resources)
    assert result.result["model"]["done"] == len(resources)
    assert result.result["model"]["released"]
    assert result.result["model"]["result"] == const.VersionState.success.name

    # Version 2 with purge_on_delete false
    version = 2

    resources = [{
        'group': 'root',
        'hash': '89bf880a0dc5ffc1156c8d958b4960971370ee6a',
        'id': 'std::File[vm1,path=/tmp/file1],v=%d' % version,
        'owner': 'root',
        'path': '/tmp/file1',
        'permissions': 644,
        'purged': False,
        'reload': False,
        'requires': [],
        'purge_on_delete': False,
        'version': version
    }]

    res = yield client.put_version(tid=environment,
                                   version=version,
                                   resources=resources,
                                   unknowns=[],
                                   version_info={})
    assert res.code == 200

    # Release the model and set all resources as deployed
    result = yield client.release_version(environment, version, push=False)
    assert result.code == 200

    now = datetime.now()
    result = yield aclient.resource_action_update(
        environment, ['std::File[vm1,path=/tmp/file1],v=%d' % version],
        uuid.uuid4(), "deploy", now, now, "deployed", [], {})
    assert result.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["version"] == version
    assert result.result["model"]["total"] == len(resources)
    assert result.result["model"]["done"] == len(resources)
    assert result.result["model"]["released"]
    assert result.result["model"]["result"] == const.VersionState.success.name

    # Version 3 with no resources
    version = 3
    resources = []
    res = yield client.put_version(tid=environment,
                                   version=version,
                                   resources=resources,
                                   unknowns=[],
                                   version_info={})
    assert res.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["version"] == version
    assert result.result["model"]["total"] == len(resources)
コード例 #2
0
def test_resource_update(io_loop, client, server, environment):
    """
        Test updating resources and logging
    """
    agent = Agent(io_loop,
                  "localhost", {"blah": "localhost"},
                  environment=environment)
    agent.start()
    aclient = agent._client

    version = int(time.time())

    resources = []
    for j in range(10):
        resources.append({
            'group':
            'root',
            'hash':
            '89bf880a0dc5ffc1156c8d958b4960971370ee6a',
            'id':
            'std::File[vm1,path=/tmp/file%d],v=%d' % (j, version),
            'owner':
            'root',
            'path':
            '/tmp/file%d' % j,
            'permissions':
            644,
            'purged':
            False,
            'reload':
            False,
            'requires': [],
            'version':
            version
        })

    res = yield client.put_version(tid=environment,
                                   version=version,
                                   resources=resources,
                                   unknowns=[],
                                   version_info={})
    assert (res.code == 200)

    result = yield client.release_version(environment, version, push=False)
    assert result.code == 200

    resource_ids = [x["id"] for x in resources]

    # Start the deploy
    action_id = uuid.uuid4()
    now = datetime.now()
    result = yield aclient.resource_action_update(environment, resource_ids,
                                                  action_id, "deploy", now)
    assert (result.code == 200)

    # Get the status from a resource
    result = yield client.get_resource(tid=environment,
                                       id=resource_ids[0],
                                       logs=True)
    assert (result.code == 200)
    logs = {x["action"]: x for x in result.result["logs"]}

    assert ("deploy" in logs)
    assert ("finished" not in logs["deploy"])
    assert ("messages" not in logs["deploy"])
    assert ("changes" not in logs["deploy"])

    # Send some logs
    result = yield aclient.resource_action_update(
        environment,
        resource_ids,
        action_id,
        "deploy",
        messages=[
            data.LogLine.log(const.LogLevel.INFO,
                             "Test log %(a)s %(b)s",
                             a="a",
                             b="b")
        ])
    assert (result.code == 200)

    # Get the status from a resource
    result = yield client.get_resource(tid=environment,
                                       id=resource_ids[0],
                                       logs=True)
    assert (result.code == 200)
    logs = {x["action"]: x for x in result.result["logs"]}

    assert ("deploy" in logs)
    assert ("messages" in logs["deploy"])
    assert (len(logs["deploy"]["messages"]) == 1)
    assert (logs["deploy"]["messages"][0]["msg"] == "Test log a b")
    assert ("finished" not in logs["deploy"])
    assert ("changes" not in logs["deploy"])

    # Finish the deploy
    now = datetime.now()
    changes = {
        x: {
            "owner": {
                "old": "root",
                "current": "inmanta"
            }
        }
        for x in resource_ids
    }
    result = yield aclient.resource_action_update(environment,
                                                  resource_ids,
                                                  action_id,
                                                  "deploy",
                                                  finished=now,
                                                  changes=changes)
    assert (result.code == 500)

    result = yield aclient.resource_action_update(environment,
                                                  resource_ids,
                                                  action_id,
                                                  "deploy",
                                                  status="deployed",
                                                  finished=now,
                                                  changes=changes)
    assert (result.code == 200)

    result = yield client.get_version(environment, version)
    assert (result.code == 200)
    assert result.result["model"]["done"] == 10
コード例 #3
0
def test_purge_on_delete(io_loop, client, server, environment):
    """
        Test purge on delete of resources
    """
    agent = Agent(io_loop,
                  "localhost", {"blah": "localhost"},
                  environment=environment)
    agent.start()
    aclient = agent._client

    version = 1

    resources = [{
        'group': 'root',
        'hash': '89bf880a0dc5ffc1156c8d958b4960971370ee6a',
        'id': 'std::File[vm1,path=/tmp/file1],v=%d' % version,
        'owner': 'root',
        'path': '/tmp/file1',
        'permissions': 644,
        'purged': False,
        'reload': False,
        'requires': [],
        'purge_on_delete': True,
        'version': version
    }, {
        'group': 'root',
        'hash': 'b4350bef50c3ec3ee532d4a3f9d6daedec3d2aba',
        'id': 'std::File[vm1,path=/tmp/file2],v=%d' % version,
        'owner': 'root',
        'path': '/tmp/file2',
        'permissions': 644,
        'purged': False,
        'reload': False,
        'purge_on_delete': True,
        'requires': ['std::File[vm1,path=/tmp/file1],v=%d' % version],
        'version': version
    }, {
        'group': 'root',
        'hash': '89bf880a0dc5ffc1156c8d958b4960971370ee6a',
        'id': 'std::File[vm1,path=/tmp/file3],v=%d' % version,
        'owner': 'root',
        'path': '/tmp/file3',
        'permissions': 644,
        'purged': False,
        'reload': False,
        'requires': [],
        'purge_on_delete': True,
        'version': version
    }]

    res = yield client.put_version(tid=environment,
                                   version=version,
                                   resources=resources,
                                   unknowns=[],
                                   version_info={})
    assert res.code == 200

    # Release the model and set all resources as deployed
    result = yield client.release_version(environment, version, push=False)
    assert result.code == 200

    now = datetime.now()
    result = yield aclient.resource_action_update(
        environment, ['std::File[vm1,path=/tmp/file1],v=%d' % version],
        uuid.uuid4(), "deploy", now, now, "deployed", [], {})
    assert result.code == 200

    result = yield aclient.resource_action_update(
        environment, ['std::File[vm1,path=/tmp/file2],v=%d' % version],
        uuid.uuid4(), "deploy", now, now, "deployed", [], {})
    assert result.code == 200

    result = yield aclient.resource_action_update(
        environment, ['std::File[vm1,path=/tmp/file3],v=%d' % version],
        uuid.uuid4(), "deploy", now, now, "deployed", [], {})
    assert result.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["version"] == version
    assert result.result["model"]["total"] == len(resources)
    assert result.result["model"]["done"] == len(resources)
    assert result.result["model"]["released"]
    assert result.result["model"]["result"] == const.VersionState.success.name

    # New version with only file3
    version = 2
    res3 = {
        'group': 'root',
        'hash': '89bf880a0dc5ffc1156c8d958b4960971370ee6a',
        'id': 'std::File[vm1,path=/tmp/file3],v=%d' % version,
        'owner': 'root',
        'path': '/tmp/file3',
        'permissions': 644,
        'purged': False,
        'reload': False,
        'requires': [],
        'purge_on_delete': True,
        'version': version
    }
    res = yield client.put_version(tid=environment,
                                   version=version,
                                   resources=[res3],
                                   unknowns=[],
                                   version_info={})
    assert result.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["total"] == 3

    # validate requires and provides
    file1 = [x for x in result.result["resources"] if "file1" in x["id"]][0]
    file2 = [x for x in result.result["resources"] if "file2" in x["id"]][0]
    file3 = [x for x in result.result["resources"] if "file3" in x["id"]][0]

    assert file1["attributes"]["purged"]
    assert file2["attributes"]["purged"]
    assert not file3["attributes"]["purged"]
コード例 #4
0
def test_get_resource_for_agent(io_loop, motor, server_multi, client,
                                environment):
    """
        Test the server to manage the updates on a model during agent deploy
    """
    agent = Agent(io_loop,
                  "localhost", {"nvblah": "localhost"},
                  environment=environment)
    agent.start()
    aclient = agent._client

    version = 1

    resources = [{
        'group':
        'root',
        'hash':
        '89bf880a0dc5ffc1156c8d958b4960971370ee6a',
        'id':
        'std::File[vm1.dev.inmanta.com,path=/etc/sysconfig/network],v=%d' %
        version,
        'owner':
        'root',
        'path':
        '/etc/sysconfig/network',
        'permissions':
        644,
        'purged':
        False,
        'reload':
        False,
        'requires': [],
        'version':
        version
    }, {
        'group': 'root',
        'hash': 'b4350bef50c3ec3ee532d4a3f9d6daedec3d2aba',
        'id': 'std::File[vm2.dev.inmanta.com,path=/etc/motd],v=%d' % version,
        'owner': 'root',
        'path': '/etc/motd',
        'permissions': 644,
        'purged': False,
        'reload': False,
        'requires': [],
        'version': version
    }, {
        'group':
        'root',
        'hash':
        '3bfcdad9ab7f9d916a954f1a96b28d31d95593e4',
        'id':
        'std::File[vm1.dev.inmanta.com,path=/etc/hostname],v=%d' % version,
        'owner':
        'root',
        'path':
        '/etc/hostname',
        'permissions':
        644,
        'purged':
        False,
        'reload':
        False,
        'requires': [],
        'version':
        version
    }, {
        'id':
        'std::Service[vm1.dev.inmanta.com,name=network],v=%d' % version,
        'name':
        'network',
        'onboot':
        True,
        'requires': [
            'std::File[vm1.dev.inmanta.com,path=/etc/sysconfig/network],v=%d' %
            version
        ],
        'state':
        'running',
        'version':
        version
    }]

    res = yield client.put_version(tid=environment,
                                   version=version,
                                   resources=resources,
                                   unknowns=[],
                                   version_info={})
    assert res.code == 200

    result = yield client.list_versions(environment)
    assert result.code == 200
    assert result.result["count"] == 1

    result = yield client.release_version(environment, version, push=False)
    assert result.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["version"] == version
    assert result.result["model"]["total"] == len(resources)
    assert result.result["model"]["released"]
    assert result.result["model"]["result"] == "deploying"

    result = yield aclient.get_resources_for_agent(environment,
                                                   "vm1.dev.inmanta.com")
    assert result.code == 200
    assert len(result.result["resources"]) == 3

    action_id = uuid.uuid4()
    now = datetime.now()
    result = yield aclient.resource_action_update(environment, [
        "std::File[vm1.dev.inmanta.com,path=/etc/sysconfig/network],v=%d" %
        version
    ], action_id, "deploy", now, now, "deployed", [], {})

    assert result.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["done"] == 1

    action_id = uuid.uuid4()
    now = datetime.now()
    result = yield aclient.resource_action_update(
        environment,
        ["std::File[vm1.dev.inmanta.com,path=/etc/hostname],v=%d" % version],
        action_id, "deploy", now, now, "deployed", [], {})
    assert result.code == 200

    result = yield client.get_version(environment, version)
    assert result.code == 200
    assert result.result["model"]["done"] == 2