Pipy Repo design took its inspirations from Git repo and Git Ops design ideas. It stores documents like configuration, data, scripts (called codebase) in tree structure format (stored internally as key-value pair) and made accessible as a Virtual File System.
Pipy Repo provides a graphical user interface similar to the Development Console for easy codebase development and maintenance. Documentation is built into the graphical user interface along with built-in functions API and types. You can enable GUI, Pipy tutorials during build-time. Refer to Build Instructions for more information.
To start a proxy node with codebase stored in Pipy Repo, you can provide an HTTP URL like http://repo.flomesh.cn/myrepo/service-x-proxy/, this will enable Pipy to synchronize its contents via REST API from codebase at regular intervals. When specifying a local filesystem path, you can specify a subdirectory. Then the proxy node synchronizes only the contents of the subdirectory specified. Similar to Git Ops, Pipy resources are stored globally, but only those associated with them are retrieved at execution time.
When the Proxy node connects to the Pipy Repo codebase, the Pipy Repo records the status of the node as an active, and Pipy Repo will query the state of active node to find for changes and react appropriately. Similar to concepts of registering a service and sending heart beat signals periodically. Pipy Repo communicates with an HTTP REST API, so your codebase can be stored on local LAN or WAN.
Pipy Repo exposes REST Endpoint to provide CRUD operations. In the servicemesh scenario, the adaptor can be used as the control plane and interconnects with various management platforms through REST apis.
Below diagram shows the concepts of codebase states and versioning mechanism. A codebase that is modified but not published won't be made visible to proxy node.
Code bases can be stand-alone, or they can have an inheritance-like relationship. But in Pipy Repo, they are called Base and Derivative.
Based on the base version, you can modify the base version of the script and configuration, or add new script configuration see Usage Instructions
Codebase inheritance enables code reuse at more granular level while still giving you freedom of writing highly cohesive, separting concerns like code and configuration, writing modular scripts.