{"id":15686496,"url":"https://github.com/thenets/receptor-demo","last_synced_at":"2025-11-08T17:30:37.355Z","repository":{"id":184234708,"uuid":"671529079","full_name":"thenets/receptor-demo","owner":"thenets","description":null,"archived":false,"fork":false,"pushed_at":"2023-08-04T16:14:49.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-14T21:46:56.794Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thenets.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-27T14:23:04.000Z","updated_at":"2023-07-27T14:24:08.000Z","dependencies_parsed_at":"2024-10-23T19:33:09.462Z","dependency_job_id":"72c5ab6d-0a96-4879-b19e-af0d2166b518","html_url":"https://github.com/thenets/receptor-demo","commit_stats":null,"previous_names":["thenets/receptor-demo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Freceptor-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Freceptor-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Freceptor-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thenets%2Freceptor-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thenets","download_url":"https://codeload.github.com/thenets/receptor-demo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239558934,"owners_count":19658934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T17:40:27.349Z","updated_at":"2025-11-08T17:30:37.299Z","avatar_url":"https://github.com/thenets.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"https://github.com/ansible/receptor\n\n## What's the main features?\n\n- Allows the invoke process to be executed in a remote machine.\n- The nodes in the mesh must be connected to each other, but they don't need to be directly connected.\n- It's the communication layer between all Automation Controller components. Example:\n    - It behaves like a VPN, incapsulating the data share across `control` node and `execution_node`\n- It also works with a socket file.\n\n## Knowledge to understand what Receptor can do\n\n- How Linux file descriptors works\n\t- The differences between `stdin`, `stdout`, and `stderr`\n- How Linux sockets work\n\t- Mainly how socket files works\n- What's the OSI Model (https://en.wikipedia.org/wiki/OSI_model)\n\t- Layer 3+4+5: How UDP/TCP works?\n\t- Layer 7: Receptor exists here\n\n## How the Receptor mesh works?\n\nAll the components in the Receptor mesh can exchange packages among themselves, even if the components are separated beyond multiple hops (indirect connection).\n\nBy default, all the communication is bi-directional.\n\n- Example: https://github.com/ansible/receptor/tree/devel/tools/examples/simple-network\n\n![diagram](https://github.com/ansible/receptor/raw/devel/tools/examples/simple-network/simple-network-diagram.png)\n\n## Security features\n\nReceptor has security features that allows:\n- Node authentication, denying access from not knowing nodes\n- Firewall-like rules, preventing packaging being forward to no allowed nodes\n- Work signed, it restrict the execution of `works` to specific nodes\n\n## How the workunit works?\n\nThe `work` is the work that can be invoked, locally or remotely. When invoked, it generates a `workunit`.\n\nUse cases:\n- One Receptor node can invoke a local `work`. In this case, it will also responsible for the `workunit` created, including the state handling.\n- One Receptor node can invoke a remote `work`. In this case, it will send the request to the remote instance, that instance will be responsible for the execution, and it will report back the state and the output stream.\n\n## The Receptor test suite\n\n- receptor\n\t- https://github.com/ansible/receptor/tree/devel/tests\n\t- Written in Golang\n\t- It tests the receptor binary directly, importing it as a library for the most scenarios\n\n- receptorctl\n\t- https://github.com/ansible/receptor/tree/devel/receptorctl/tests\n\t- Written in Python\n\t- It consumes the receptor as an external package, simulating the integration like we have between the Automation Controller and Receptor\n\n## receptorctl\n\nA Python library that interface with the Receptor mesh.\n\n- It's a python library that can be imported AND it's also a CLI\n- It connects to a Linux socket file or TCP socket (so far, we don't have any use case in the Automation Controller that uses the UDP protocol, but the source-code exists in the receptor code-base)\n\nThe test suite allows to:\n- Test the CLI\n- Test the mesh with multiples scenarios","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenets%2Freceptor-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthenets%2Freceptor-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthenets%2Freceptor-demo/lists"}