all:
  children:
    zuul_unreachable:
      hosts: {}
  hosts:
    debian-bookworm:
      ansible_connection: ssh
      ansible_host: 2a13:1a81:8000:3124:f816:3eff:fe59:ba8d
      ansible_port: 22
      ansible_python_interpreter: auto
      ansible_user: zuul
      nodepool:
        az: nova
        cloud: regiocloud-a-ci
        external_id: b9d6df7e-3182-4535-a64c-437b22533c22
        host_id: 82101243836454d7401d5893feae9e2c5df7cc291646d8a99b33b53b
        interface_ip: 2a13:1a81:8000:3124:f816:3eff:fe59:ba8d
        label: debian-bookworm
        node_properties: {}
        private_ipv4: 10.128.7.171
        private_ipv6: null
        provider: regiocloud-a
        public_ipv4: 81.163.192.235
        public_ipv6: 2a13:1a81:8000:3124:f816:3eff:fe59:ba8d
        region: null
        slot: null
  vars:
    zuul:
      _inheritance_path:
      - '<Job base explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-config/zuul.d/jobs.yaml@main#2>'
      - '<Job mypy explicit: None implied: {MatchAny:{ImpliedBranchMatcher:main}}
        source: osism/zuul-jobs/.zuul.yaml@main#42>'
      - '<Job mypy explicit: None implied: None source: osism/python-osism/.zuul.yaml@main#138>'
      ansible_version: '9'
      attempts: 1
      branch: main
      build: b08e131b783f46f293673c5a6bcdb04e
      build_refs:
      - branch: main
        change: '2371'
        change_message: "sonic: document config ownership regimes\n\n## Problem\n\nSONiC
          config is written to two stores with deliberately different ownership disciplines,
          and only one was documented:\n\n- `config_db.json` \u2014 *table-level ownership*:
          the generator owns whole tables and drops-and-rebuilds them every regen.
          Safe because the file has no external co-owner.\n- NetBox device `local_context_data`
          \u2014 co-owned with other generators (`frr_parameters`, `netplan_parameters`),
          so `save_config_to_netbox` owns only its `sonic_config` key: it carries
          the existing context forward and overwrites just that key, so the value
          written back always still holds the siblings. A distinct regime \u2014 *partitioned
          key ownership*.\n\nThe contrast was implicit, inviting a future change to
          \"simplify\" the exporter into writing back a context that holds only `sonic_config`
          and drops the siblings.\n\n## Why the existing lock wasn't enough\n\nThe
          sibling preservation is already enforced by tests in `test_exporter.py`.
          But that lock wasn't discoverable: the tests asserted a bare dict equality,
          so a regression failed with only a dict diff. An author who didn't already
          know the contract could read the test as stale and weaken it \u2014 instead
          of recognizing the broken behavior, which is exactly the regression the
          test guards against.\n\n## Change\n\nMake the lock teach at the point of
          failure (docs and test messages only \u2014 no behavior change):\n\n- Add
          the regime, its reason, and the deciding factor (an external co-owner) to
          the `save_config_to_netbox` docstring.\n- Name both regimes in the `generate_sonic_config`
          ownership-model docstring, so the two read as one model.\n- Give the sibling-preservation
          assertions an explanatory message that states the partitioned-key-ownership
          contract and points to the docstring, so a regression surfaces the reasoning
          rather than a bare diff.\n\n## Related\n\n- osism/python-osism#2340"
        change_url: https://github.com/osism/python-osism/pull/2371
        commit_id: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
        patchset: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      buildset: 85ccb40833de4aafbc5eb7a919c09c2e
      buildset_refs:
      - branch: main
        change: '2371'
        change_message: "sonic: document config ownership regimes\n\n## Problem\n\nSONiC
          config is written to two stores with deliberately different ownership disciplines,
          and only one was documented:\n\n- `config_db.json` \u2014 *table-level ownership*:
          the generator owns whole tables and drops-and-rebuilds them every regen.
          Safe because the file has no external co-owner.\n- NetBox device `local_context_data`
          \u2014 co-owned with other generators (`frr_parameters`, `netplan_parameters`),
          so `save_config_to_netbox` owns only its `sonic_config` key: it carries
          the existing context forward and overwrites just that key, so the value
          written back always still holds the siblings. A distinct regime \u2014 *partitioned
          key ownership*.\n\nThe contrast was implicit, inviting a future change to
          \"simplify\" the exporter into writing back a context that holds only `sonic_config`
          and drops the siblings.\n\n## Why the existing lock wasn't enough\n\nThe
          sibling preservation is already enforced by tests in `test_exporter.py`.
          But that lock wasn't discoverable: the tests asserted a bare dict equality,
          so a regression failed with only a dict diff. An author who didn't already
          know the contract could read the test as stale and weaken it \u2014 instead
          of recognizing the broken behavior, which is exactly the regression the
          test guards against.\n\n## Change\n\nMake the lock teach at the point of
          failure (docs and test messages only \u2014 no behavior change):\n\n- Add
          the regime, its reason, and the deciding factor (an external co-owner) to
          the `save_config_to_netbox` docstring.\n- Name both regimes in the `generate_sonic_config`
          ownership-model docstring, so the two read as one model.\n- Give the sibling-preservation
          assertions an explanatory message that states the partitioned-key-ownership
          contract and points to the docstring, so a regression surfaces the reasoning
          rather than a bare diff.\n\n## Related\n\n- osism/python-osism#2340"
        change_url: https://github.com/osism/python-osism/pull/2371
        commit_id: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
        patchset: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
        src_dir: src/github.com/osism/python-osism
        topic: null
      change: '2371'
      change_message: "sonic: document config ownership regimes\n\n## Problem\n\nSONiC
        config is written to two stores with deliberately different ownership disciplines,
        and only one was documented:\n\n- `config_db.json` \u2014 *table-level ownership*:
        the generator owns whole tables and drops-and-rebuilds them every regen. Safe
        because the file has no external co-owner.\n- NetBox device `local_context_data`
        \u2014 co-owned with other generators (`frr_parameters`, `netplan_parameters`),
        so `save_config_to_netbox` owns only its `sonic_config` key: it carries the
        existing context forward and overwrites just that key, so the value written
        back always still holds the siblings. A distinct regime \u2014 *partitioned
        key ownership*.\n\nThe contrast was implicit, inviting a future change to
        \"simplify\" the exporter into writing back a context that holds only `sonic_config`
        and drops the siblings.\n\n## Why the existing lock wasn't enough\n\nThe sibling
        preservation is already enforced by tests in `test_exporter.py`. But that
        lock wasn't discoverable: the tests asserted a bare dict equality, so a regression
        failed with only a dict diff. An author who didn't already know the contract
        could read the test as stale and weaken it \u2014 instead of recognizing the
        broken behavior, which is exactly the regression the test guards against.\n\n##
        Change\n\nMake the lock teach at the point of failure (docs and test messages
        only \u2014 no behavior change):\n\n- Add the regime, its reason, and the
        deciding factor (an external co-owner) to the `save_config_to_netbox` docstring.\n-
        Name both regimes in the `generate_sonic_config` ownership-model docstring,
        so the two read as one model.\n- Give the sibling-preservation assertions
        an explanatory message that states the partitioned-key-ownership contract
        and points to the docstring, so a regression surfaces the reasoning rather
        than a bare diff.\n\n## Related\n\n- osism/python-osism#2340"
      change_url: https://github.com/osism/python-osism/pull/2371
      child_jobs: []
      commit_id: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
      event_id: 98ef17e0-671b-11f1-81f4-7d26a6dc9437
      executor:
        hostname: 521e9411259a
        inventory_file: /var/lib/zuul/builds/b08e131b783f46f293673c5a6bcdb04e/ansible/inventory.yaml
        log_root: /var/lib/zuul/builds/b08e131b783f46f293673c5a6bcdb04e/work/logs
        result_data_file: /var/lib/zuul/builds/b08e131b783f46f293673c5a6bcdb04e/work/results.json
        src_root: /var/lib/zuul/builds/b08e131b783f46f293673c5a6bcdb04e/work/src
        work_root: /var/lib/zuul/builds/b08e131b783f46f293673c5a6bcdb04e/work
      include_vars: []
      items:
      - branch: main
        change: '2371'
        change_message: "sonic: document config ownership regimes\n\n## Problem\n\nSONiC
          config is written to two stores with deliberately different ownership disciplines,
          and only one was documented:\n\n- `config_db.json` \u2014 *table-level ownership*:
          the generator owns whole tables and drops-and-rebuilds them every regen.
          Safe because the file has no external co-owner.\n- NetBox device `local_context_data`
          \u2014 co-owned with other generators (`frr_parameters`, `netplan_parameters`),
          so `save_config_to_netbox` owns only its `sonic_config` key: it carries
          the existing context forward and overwrites just that key, so the value
          written back always still holds the siblings. A distinct regime \u2014 *partitioned
          key ownership*.\n\nThe contrast was implicit, inviting a future change to
          \"simplify\" the exporter into writing back a context that holds only `sonic_config`
          and drops the siblings.\n\n## Why the existing lock wasn't enough\n\nThe
          sibling preservation is already enforced by tests in `test_exporter.py`.
          But that lock wasn't discoverable: the tests asserted a bare dict equality,
          so a regression failed with only a dict diff. An author who didn't already
          know the contract could read the test as stale and weaken it \u2014 instead
          of recognizing the broken behavior, which is exactly the regression the
          test guards against.\n\n## Change\n\nMake the lock teach at the point of
          failure (docs and test messages only \u2014 no behavior change):\n\n- Add
          the regime, its reason, and the deciding factor (an external co-owner) to
          the `save_config_to_netbox` docstring.\n- Name both regimes in the `generate_sonic_config`
          ownership-model docstring, so the two read as one model.\n- Give the sibling-preservation
          assertions an explanatory message that states the partitioned-key-ownership
          contract and points to the docstring, so a regression surfaces the reasoning
          rather than a bare diff.\n\n## Related\n\n- osism/python-osism#2340"
        change_url: https://github.com/osism/python-osism/pull/2371
        commit_id: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
        patchset: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
        project:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          name: osism/python-osism
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
        topic: null
      job: mypy
      jobtags: []
      max_attempts: 3
      message: c29uaWM6IGRvY3VtZW50IGNvbmZpZyBvd25lcnNoaXAgcmVnaW1lcwoKIyMgUHJvYmxlbQoKU09OaUMgY29uZmlnIGlzIHdyaXR0ZW4gdG8gdHdvIHN0b3JlcyB3aXRoIGRlbGliZXJhdGVseSBkaWZmZXJlbnQgb3duZXJzaGlwIGRpc2NpcGxpbmVzLCBhbmQgb25seSBvbmUgd2FzIGRvY3VtZW50ZWQ6CgotIGBjb25maWdfZGIuanNvbmAg4oCUICp0YWJsZS1sZXZlbCBvd25lcnNoaXAqOiB0aGUgZ2VuZXJhdG9yIG93bnMgd2hvbGUgdGFibGVzIGFuZCBkcm9wcy1hbmQtcmVidWlsZHMgdGhlbSBldmVyeSByZWdlbi4gU2FmZSBiZWNhdXNlIHRoZSBmaWxlIGhhcyBubyBleHRlcm5hbCBjby1vd25lci4KLSBOZXRCb3ggZGV2aWNlIGBsb2NhbF9jb250ZXh0X2RhdGFgIOKAlCBjby1vd25lZCB3aXRoIG90aGVyIGdlbmVyYXRvcnMgKGBmcnJfcGFyYW1ldGVyc2AsIGBuZXRwbGFuX3BhcmFtZXRlcnNgKSwgc28gYHNhdmVfY29uZmlnX3RvX25ldGJveGAgb3ducyBvbmx5IGl0cyBgc29uaWNfY29uZmlnYCBrZXk6IGl0IGNhcnJpZXMgdGhlIGV4aXN0aW5nIGNvbnRleHQgZm9yd2FyZCBhbmQgb3ZlcndyaXRlcyBqdXN0IHRoYXQga2V5LCBzbyB0aGUgdmFsdWUgd3JpdHRlbiBiYWNrIGFsd2F5cyBzdGlsbCBob2xkcyB0aGUgc2libGluZ3MuIEEgZGlzdGluY3QgcmVnaW1lIOKAlCAqcGFydGl0aW9uZWQga2V5IG93bmVyc2hpcCouCgpUaGUgY29udHJhc3Qgd2FzIGltcGxpY2l0LCBpbnZpdGluZyBhIGZ1dHVyZSBjaGFuZ2UgdG8gInNpbXBsaWZ5IiB0aGUgZXhwb3J0ZXIgaW50byB3cml0aW5nIGJhY2sgYSBjb250ZXh0IHRoYXQgaG9sZHMgb25seSBgc29uaWNfY29uZmlnYCBhbmQgZHJvcHMgdGhlIHNpYmxpbmdzLgoKIyMgV2h5IHRoZSBleGlzdGluZyBsb2NrIHdhc24ndCBlbm91Z2gKClRoZSBzaWJsaW5nIHByZXNlcnZhdGlvbiBpcyBhbHJlYWR5IGVuZm9yY2VkIGJ5IHRlc3RzIGluIGB0ZXN0X2V4cG9ydGVyLnB5YC4gQnV0IHRoYXQgbG9jayB3YXNuJ3QgZGlzY292ZXJhYmxlOiB0aGUgdGVzdHMgYXNzZXJ0ZWQgYSBiYXJlIGRpY3QgZXF1YWxpdHksIHNvIGEgcmVncmVzc2lvbiBmYWlsZWQgd2l0aCBvbmx5IGEgZGljdCBkaWZmLiBBbiBhdXRob3Igd2hvIGRpZG4ndCBhbHJlYWR5IGtub3cgdGhlIGNvbnRyYWN0IGNvdWxkIHJlYWQgdGhlIHRlc3QgYXMgc3RhbGUgYW5kIHdlYWtlbiBpdCDigJQgaW5zdGVhZCBvZiByZWNvZ25pemluZyB0aGUgYnJva2VuIGJlaGF2aW9yLCB3aGljaCBpcyBleGFjdGx5IHRoZSByZWdyZXNzaW9uIHRoZSB0ZXN0IGd1YXJkcyBhZ2FpbnN0LgoKIyMgQ2hhbmdlCgpNYWtlIHRoZSBsb2NrIHRlYWNoIGF0IHRoZSBwb2ludCBvZiBmYWlsdXJlIChkb2NzIGFuZCB0ZXN0IG1lc3NhZ2VzIG9ubHkg4oCUIG5vIGJlaGF2aW9yIGNoYW5nZSk6CgotIEFkZCB0aGUgcmVnaW1lLCBpdHMgcmVhc29uLCBhbmQgdGhlIGRlY2lkaW5nIGZhY3RvciAoYW4gZXh0ZXJuYWwgY28tb3duZXIpIHRvIHRoZSBgc2F2ZV9jb25maWdfdG9fbmV0Ym94YCBkb2NzdHJpbmcuCi0gTmFtZSBib3RoIHJlZ2ltZXMgaW4gdGhlIGBnZW5lcmF0ZV9zb25pY19jb25maWdgIG93bmVyc2hpcC1tb2RlbCBkb2NzdHJpbmcsIHNvIHRoZSB0d28gcmVhZCBhcyBvbmUgbW9kZWwuCi0gR2l2ZSB0aGUgc2libGluZy1wcmVzZXJ2YXRpb24gYXNzZXJ0aW9ucyBhbiBleHBsYW5hdG9yeSBtZXNzYWdlIHRoYXQgc3RhdGVzIHRoZSBwYXJ0aXRpb25lZC1rZXktb3duZXJzaGlwIGNvbnRyYWN0IGFuZCBwb2ludHMgdG8gdGhlIGRvY3N0cmluZywgc28gYSByZWdyZXNzaW9uIHN1cmZhY2VzIHRoZSByZWFzb25pbmcgcmF0aGVyIHRoYW4gYSBiYXJlIGRpZmYuCgojIyBSZWxhdGVkCgotIG9zaXNtL3B5dGhvbi1vc2lzbSMyMzQw
      patchset: 9bb74397bf3eb87f8a7378329e7c69c54fc46ca4
      pipeline: check
      playbook_context:
        playbook_projects:
          trusted/project_0/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          trusted/project_1/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
          trusted/project_2/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_0/github.com/osism/zuul-jobs:
            canonical_name: github.com/osism/zuul-jobs
            checkout: main
            commit: 0c74c57cedff2b36bb37ca68a5338d1c49991496
          untrusted/project_1/github.com/osism/zuul-config:
            canonical_name: github.com/osism/zuul-config
            checkout: main
            commit: 688445d15ac2c497396b682f69c57ccd484f5f25
          untrusted/project_2/github.com/osism/openinfra-zuul-jobs:
            canonical_name: github.com/osism/openinfra-zuul-jobs
            checkout: master
            commit: 038dd8b856c62af4433c8477c5cb3d0480847059
        playbooks:
        - path: untrusted/project_0/github.com/osism/zuul-jobs/playbooks/mypy/run.yaml
          roles:
          - checkout: main
            checkout_description: zuul branch
            link_name: ansible/playbook_0/role_0/zuul-config
            link_target: untrusted/project_1/github.com/osism/zuul-config
            role_path: ansible/playbook_0/role_0/zuul-config/roles
          - checkout: master
            checkout_description: project default branch
            link_name: ansible/playbook_0/role_1/openinfra-zuul-jobs
            link_target: untrusted/project_2/github.com/osism/openinfra-zuul-jobs
            role_path: ansible/playbook_0/role_1/openinfra-zuul-jobs/roles
          - checkout: main
            checkout_description: playbook branch
            link_name: ansible/playbook_0/role_2/zuul-jobs
            link_target: untrusted/project_0/github.com/osism/zuul-jobs
            role_path: ansible/playbook_0/role_2/zuul-jobs/roles
      post_review: false
      post_timeout: null
      pre_timeout: null
      project:
        canonical_hostname: github.com
        canonical_name: github.com/osism/python-osism
        name: osism/python-osism
        short_name: python-osism
        src_dir: src/github.com/osism/python-osism
      projects:
        github.com/osism/python-osism:
          canonical_hostname: github.com
          canonical_name: github.com/osism/python-osism
          checkout: main
          checkout_description: zuul branch
          commit: 2218f1053fac85efce4492f065a8beab4db7a663
          name: osism/python-osism
          required: false
          short_name: python-osism
          src_dir: src/github.com/osism/python-osism
      ref: refs/pull/2371/head
      resources: {}
      tenant: osism
      timeout: 1800
      topic: null
      voting: true
