So You Want to Contribute…

For general information on contributing to OpenStack, please check out the contributor guide to get started. It covers all the basics that are common to all OpenStack projects: the accounts you need, the basics of interacting with our Gerrit review system, how we communicate as a community, etc.

Below will cover the more project specific information you need to get started with Cyborg.

Communication

We use the #openstack-cyborg channel on the OFTC IRC network.

The weekly meetings happen in this channel. You can find the meeting times, previous meeting logs and proposed meeting agendas at Cyborg Team Meeting Page.

The openstack-discuss mailing list is another way we make announcement and discuss some topics in public. Cyborg related discussions usually start with tag:[cyborg]. Theopenstack-discussArchiveshttp://lists.openstack.org/pipermail/openstack-discuss/

Contacting the Maintainers

Beginning with the 2027.1 cycle, Cyborg uses a tiered maintainer model that delegates review and approval rights by repository and responsibility. The model gives contributors a path to take on wider responsibilities without requiring immediate membership in the project-wide core team.

Contact maintainers through Gerrit, the #openstack-cyborg IRC channel, or the openstack-discuss mailing list. If the first person you contact cannot help, they can direct you to an appropriate maintainer or subject-matter expert. See Cyborg Maintainers Guide for the team structure, membership expectations, review policy, and advice on getting a change reviewed.

New Feature Planning

Track a proposed feature with a Cyborg Launchpad blueprint. With team agreement, a small feature may instead use a wishlist bug. API, database, and RPC changes require a specification in the cyborg-specs repository. Most other non-trivial features should also have one. See Cyborg Maintainers Guide for planning and approval guidance.

Task Tracking

We track our tasks in the Launchpad.

Planned goals follow the OpenStack release schedule and are tracked as Cyborg blueprints. If you are looking for a smaller introductory task, ask in the IRC meeting.

Reporting a Bug

You found an issue and want to make sure we are aware of it? You can do so on Launchpad. More info about Launchpad usage can be found on OpenStack docs page. But before you report a bug or register a new feature, we recommend you to check if it is already registered there. Otherwise, it might be a duplicated patch and will be abandoned. If you’re still confused, as a more efficient way, we encourage you to go and ask PTL and cores in the IRC channel directly. Or mail PTL if IRC is not convenient for you.

Getting Your Patch Merged

Changes must pass the required Zuul checks and receive Code-Review +2 and Workflow +1 from maintainers authorized for the repository and branch. Independent review is encouraged; one authorized approver may provide both votes.

See Cyborg Maintainers Guide for approval conventions, guidance on preparing changes, and help getting review attention.

Project Team Lead Duties

All common PTL duties are enumerated in the PTL guide.

API Policy Targets

Cyborg API controllers use the request context as the policy target. The @authorize_wsgi.authorize_wsgi decorator must be the outermost (first) decorator on an API method. Policy checks receive a target containing the caller’s project_id and user_id:

{
    'project_id': context.project_id,
    'user_id': context.user_id,
}

This is important for project-scoped persona rules such as project_id:%(project_id)s. Passing an empty target would make those checks fail for non-admin project users.

Global resources, such as device profiles, should use admin-only policy rules rather than relying on an empty target. If an API needs policy to enforce ownership of an existing resource, fetch the resource first and pass a target built from the resource’s project or user fields.

ARQ ownership is enforced below the API policy check. ExtARQ.get(), ExtARQ.list(), and ExtARQ.destroy() pass a project filter to the DB layer for non-admin contexts, and the DB methods apply that project_id filter before returning, updating, or deleting rows.