{"id":23469898,"url":"https://github.com/vapor-ware/synse-ipmi-plugin","last_synced_at":"2025-04-14T16:33:45.968Z","repository":{"id":31936792,"uuid":"130918675","full_name":"vapor-ware/synse-ipmi-plugin","owner":"vapor-ware","description":"IPMI plugin for Synse","archived":false,"fork":false,"pushed_at":"2021-12-13T16:11:34.000Z","size":123,"stargazers_count":6,"open_issues_count":1,"forks_count":2,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-21T22:03:10.311Z","etag":null,"topics":["ipmi","plugin","synse","synse-ipmi-plugin","synse-plugin"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vapor-ware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-04-24T22:02:37.000Z","updated_at":"2024-05-16T03:21:41.000Z","dependencies_parsed_at":"2022-07-30T17:38:06.342Z","dependency_job_id":null,"html_url":"https://github.com/vapor-ware/synse-ipmi-plugin","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapor-ware%2Fsynse-ipmi-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapor-ware%2Fsynse-ipmi-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapor-ware%2Fsynse-ipmi-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vapor-ware%2Fsynse-ipmi-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vapor-ware","download_url":"https://codeload.github.com/vapor-ware/synse-ipmi-plugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248916607,"owners_count":21182837,"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":["ipmi","plugin","synse","synse-ipmi-plugin","synse-plugin"],"created_at":"2024-12-24T15:36:46.980Z","updated_at":"2025-04-14T16:33:45.924Z","avatar_url":"https://github.com/vapor-ware.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://build.vio.sh/buildStatus/icon?job=vapor-ware/synse-ipmi-plugin/master)](https://build.vio.sh/blue/organizations/jenkins/vapor-ware%2Fsynse-ipmi-plugin/activity)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fvapor-ware%2Fsynse-ipmi-plugin.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fvapor-ware%2Fsynse-ipmi-plugin?ref=badge_shield)\n\n# Synse IPMI Plugin\n\nA general-purpose IPMI plugin for [Synse Server][synse-server].\n\n## Getting Started\n\n### Getting\n\nYou can get the IPMI plugin as a pre-built binary from a [release][plugin-release], or\nas a Docker image.\n\n```bash\ndocker pull vaporio/ipmi-plugin\n```\n\nIf you wish to use a development build, fork/clone the repo and build the plugin\nfrom source.\n\n### Running\n\nThe IPMI plugin requires the IPMI-enabled servers it will communicate with to be configured.\nAs such, running the plugin without additional configuration will cause it to fail. As an\nexample of how to configure and get started with running the IPMI plugin, a simple example\ndeployment exists within the [example](example) directory. It runs Synse Server, the IPMI plugin,\nand a basic IPMI simulator.\n\nTo run it,\n\n```bash\ncd example\ndocker-compose up -d\n```\n\nYou can then use Synse's HTTP API or the [Synse CLI][synse-cli] to query Synse for plugin data.\nAdditionally, if you have `ipmitool`, you can use that to interface with the IPMI Simulator\nused in the deployment.\n\n```console\n$ ipmitool -H 127.0.0.1 -p 623 -U ADMIN -P ADMIN -I lanplus chassis status\nSystem Power         : on\nPower Overload       : false\nPower Interlock      : inactive\nMain Power Fault     : false\nPower Control Fault  : false\nPower Restore Policy : always-off\nLast Power Event     :\nChassis Intrusion    : inactive\nFront-Panel Lockout  : inactive\nDrive Fault          : false\nCooling/Fan Fault    : false\n```\n\n## Plugin Configuration\n\nPlugin and device configuration are described in detail in the [SDK Documentation][sdk-docs].\n\nWhen deploying, you will need to provide your own plugin configuration (`config.yaml`)\nwith dynamic configuration defined. This is how the IPMI plugin knows about which BMCs\nto communicate with. It will query the configured BMC(s) at runtime to determine their\ncapabilities and any devices they may have.\n\nAs an example:\n\n```yaml\ndynamicRegistration:\n  config:\n  - hostname: 10.1.2.3\n    port: 623\n    username: ADMIN\n    password: ADMIN\n    interface: lanplus\n  - hostname: 10.1.2.4\n    port: 623\n    username: ADMIN\n    password: ADMIN\n    interface: lanplus\n```\n\n### Dynamic Registration Options\n\nBelow are the fields that are expected in each of the dynamic registration items.\nIf no default is specified (`-`), the field is required.\n\n| Field     | Description | Default |\n| --------- | ----------- | --- |\n| path      | The path to the `ipmitool` binary. Since this is run as a container, this generally never needs to be set in configuration, as `ipmitool` is on the container PATH. | `ipmitool` |\n| hostname  | The address/hostname of the BMC to connect to.  | `-` |\n| port      | The port of the BMC to connect to. This is usually 623. | `-` |\n| username  | The user on the BMC to run commands as. | `-` |\n| password  | The password for user authentication on the BMC, if set. | `-` |\n| interface | The transport interface. Must be one of: `lan`, `lanplus` | `-` |\n\n### Reading Outputs\n\nOutputs are referenced by name. A single device may have more than one instance\nof an output type. A value of `-` in the table below indicates that there is no value\nset for that field. The *built-in* section describes outputs this plugin uses which are [built-in to\nthe SDK](https://synse.readthedocs.io/en/latest/sdk/concepts/reading_outputs/#built-ins).\n\n**Built-in**\n\n| Name          | Description                          | Unit  | Type     | Precision |\n| ------------- | ------------------------------------ | :---: | -------- | :-------: |\n| state         | Power or LED state. (on/off)         | `-`   | `state`  | `-`       |\n| status        | Status of the boot target selection. | `-`   | `status` | `-`       |\n\n### Device Handlers\n\nDevice Handlers are referenced by name.\n\n| Name          | Description                                      | Outputs  | Read  | Write | Bulk Read | Listen |\n| ------------- | ------------------------------------------------ | -------- | :---: | :---: | :-------: | :----: |\n| boot_target   | A handler for chassis boot target.               | `status` | ✓     | ✓     | ✗         | ✗      |\n| chassis.led   | A handler for chassis identify, commonly an LED. | `state`  | ✓     | ✓     | ✗         | ✗      |\n| chassis.power | A handler for chassis power.                     | `state`  | ✓     | ✓     | ✗         | ✗      |\n\n### Write Values\n\nThis plugin supports the following values when writing to a device via a handler.\n\n| Handler       | Write Action  | Write Data | Description |\n| ------------- | :-----------: | :--------: | ----------- |\n| boot_target   | `target`      | `none`, `pxe`, `disk`, `safe`, `diag`, `cdrom`, `bios`, `rfloppy`, `rprimary`, `rcdrom`, `rdisk`, `floppy` | The boot target selection for the chassis. |\n| chassis.led   | `state`       | `on`, `off` | The power state to put the identify LED into. |\n| chassis.power | `state`       | `on`, `off`, `reset`, `cycle` | The power state to put the chassis into. |\n\n## Tested BMCs\n\nThis plugin has been tested against the `vaporio/ipmi-simulator` image. It has also been\ntested against the following hardware:\n\n- HPE Cloudline CL2200 G3 Server\n\nIf you have tested this on other hardware and found it to work, let us know! Open a PR\nand add to the list.\n\n## Compatibility\n\nBelow is a table describing the compatibility of plugin versions with Synse platform versions.\n\n|             | Synse v2 | Synse v3 |\n| ----------- | -------- | -------- |\n| plugin v1.x | ✓        | ✗        |\n| plugin v2.x | ✗        | ✓        |\n\n## Troubleshooting\n\n### Debugging\n\nThe plugin can be run in debug mode for additional logging. This is done by:\n\n- Setting the `debug` option  to `true` in the plugin configuration YAML\n\n  ```yaml\n  debug: true\n  ```\n\n- Passing the `--debug` flag when running the binary/image\n\n  ```\n  docker run vaporio/ipmi-plugin --debug\n  ```\n\n- Running the image with the `PLUGIN_DEBUG` environment variable set to `true`\n\n  ```\n  docker run -e PLUGIN_DEBUG=true vaporio/ipmi-plugin\n  ```\n\n### Developing\n\nA [development/debug Dockerfile](Dockerfile.dev) is provided in the project repository to enable\nbuilding image which may be useful when developing or debugging a plugin. The development image\nuses an ubuntu base, bringing with it all the standard command line  tools one would expect.\nTo build a development image:\n\n```\nmake docker-dev\n```\n\nThe built image will be tagged using the format `dev-{COMMIT}`, where `COMMIT` is the short commit for\nthe repository at the time. This image is not published as part of the CI pipeline, but those with access\nto the Docker Hub repo may publish manually.\n\n## Contributing / Reporting\n\nIf you experience a bug, would like to ask a question, or request a feature, open a\n[new issue](https://github.com/vapor-ware/synse-ipmi-plugin/issues) and provide as much\ncontext as possible. All contributions, questions, and feedback are welcomed and appreciated.\n\n## License\n\nThe Synse IPMI Plugin is licensed under GPLv3. See [LICENSE](LICENSE) for more info.\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fvapor-ware%2Fsynse-ipmi-plugin.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fvapor-ware%2Fsynse-ipmi-plugin?ref=badge_large)\n\n[synse-server]: https://github.com/vapor-ware/synse-server\n[synse-sdk]: https://github.com/vapor-ware/synse-sdk\n[synse-cli]: https://github.com/vapor-ware/synse-cli\n[plugin-release]: https://github.com/vapor-ware/synse-ipmi-plugin/releases\n[sdk-docs]: https://synse.readthedocs.io/en/latest/sdk/intro/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvapor-ware%2Fsynse-ipmi-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvapor-ware%2Fsynse-ipmi-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvapor-ware%2Fsynse-ipmi-plugin/lists"}