https://github.com/pivotal/hammer
Wrapper CLI for interacting with OM, BOSH and others for PCF environments
https://github.com/pivotal/hammer
cli esg golang pcf
Last synced: 2 months ago
JSON representation
Wrapper CLI for interacting with OM, BOSH and others for PCF environments
- Host: GitHub
- URL: https://github.com/pivotal/hammer
- Owner: pivotal
- License: apache-2.0
- Created: 2019-06-17T14:22:37.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2026-03-27T22:43:48.000Z (2 months ago)
- Last Synced: 2026-03-28T05:09:27.881Z (2 months ago)
- Topics: cli, esg, golang, pcf
- Language: Go
- Homepage:
- Size: 303 KB
- Stars: 13
- Watchers: 446
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Notice: NOTICE
Awesome Lists containing this project
README
# hammer - wrapper CLI for interacting with PCF environments
[](https://github.com/pivotal/hammer/actions)
## Installation
The latest build of the `hammer` cli is available from the releases page.
Download the tar for your platform, untar it, and move it to your $PATH.
Or using `brew` on macOS or Linux:
```bash
brew tap pivotal/hammer https://github.com/pivotal/hammer
brew install hammer
```
Alternatively you can build `hammer` from source if you have Go installed:
```bash
git clone git@github.com:pivotal/hammer.git && cd hammer && go install
```
You will also need to install, separately, any of the underlying cli tools that `hammer` will use in your workflow. `hammer` does not include `cf`, `bosh`, `om`, etc.
## Config
In order to run the `hammer` tool against a given environment you need to have an environment config file in the following format:
```json
{
"name": "ENVIRONMENT-NAME",
"ops_manager": {
"url": "OPSMAN-URL",
"client_id": "OPSMAN-CLIENT-ID",
"client_secret": "OPSMAN-CLIENT-SECRET",
"username": "OPSMAN-USERNAME",
"password": "OPSMAN-PASSWORD"
},
"ops_manager_private_key": "OPSMAN-RSA-PRIVATE-KEY",
"ops_manager_public_ip": "OPSMAN-PUBLIC-IP",
"ops_manager_ssh_user": "OPSMAN-SSH-USER",
"sys_domain": "PAS-SYSTEM-DOMAIN",
"pks_api": {
"url": "PKS-API-URL"
}
}
```
Or the equivalent in yaml:
```yaml
name: ENVIRONMENT-NAME
ops_manager:
client_id: OPSMAN-CLIENT-ID
client_secret: OPSMAN-CLIENT-SECRET
password: OPSMAN-PASSWORD
url: OPSMAN-URL
username: OPSMAN-USERNAME
ops_manager_private_key: OPSMAN-RSA-PRIVATE-KEY
ops_manager_public_ip: OPSMAN-PUBLIC-IP
ops_manager_ssh_user: OPSMAN-SSH-USER
pks_api:
url: PKS-API-URL
sys_domain: PAS-SYSTEM-DOMAIN
```
This file can then be passed into the tool via `hammer -t path-to-env-config `.
`ops_manager_ssh_user` is an optional field and if not set then `hammer -t path-to-env-config ssh opsman` will use
`ubuntu` to ssh to the OpsManager VM, if users need to ssh via a different username they should set this as appropriate.
Only one set of `ops_manager.client_id` and `ops_manager.client_secret` or `ops_manager.username` and `ops_manager.password`
need to be specified, if both sets are specified then in line with `om` the client details will be used.
NB: `sys_domain` and `pks_api.url` are only needed for using `hammer cf-login` and `hammer pks-login` respectively.
### Multiple environments in a single config
The config file can contain a list of environments in previously defined structure, such as:
```json
[{
"name": "ENVIRONMENT-NAME-1",
"ops_manager": {
"url": "OPSMAN-URL",
"client_id": "OPSMAN-CLIENT-ID",
"client_secret": "OPSMAN-CLIENT-SECRET",
"username": "OPSMAN-USERNAME",
"password": "OPSMAN-PASSWORD"
},
"ops_manager_private_key": "OPSMAN-RSA-PRIVATE-KEY",
"ops_manager_public_ip": "OPSMAN-PUBLIC-IP",
"ops_manager_ssh_user": "OPSMAN-SSH-USER",
"sys_domain": "PAS-SYSTEM-DOMAIN",
"pks_api": {
"url": "PKS-API-URL"
}
},
{
"name": "ENVIRONMENT-NAME-2",
"ops_manager": {
"url": "OPSMAN-URL",
"client_id": "OPSMAN-CLIENT-ID",
"client_secret": "OPSMAN-CLIENT-SECRET",
"username": "OPSMAN-USERNAME",
"password": "OPSMAN-PASSWORD"
},
"ops_manager_private_key": "OPSMAN-RSA-PRIVATE-KEY",
"ops_manager_public_ip": "OPSMAN-PUBLIC-IP",
"ops_manager_ssh_user": "OPSMAN-SSH-USER",
"sys_domain": "PAS-SYSTEM-DOMAIN",
"pks_api": {
"url": "PKS-API-URL"
}
}]
```
Or the equivalent in yaml:
```yaml
- name: ENVIRONMENT-NAME-1
ops_manager:
client_id: OPSMAN-CLIENT-ID
client_secret: OPSMAN-CLIENT-SECRET
password: OPSMAN-PASSWORD
url: OPSMAN-URL
username: OPSMAN-USERNAME
ops_manager_private_key: OPSMAN-RSA-PRIVATE-KEY
ops_manager_public_ip: OPSMAN-PUBLIC-IP
ops_manager_ssh_user: OPSMAN-SSH-USER
pks_api:
url: PKS-API-URL
sys_domain: PAS-SYSTEM-DOMAIN
- name: ENVIRONMENT-NAME-2
ops_manager:
client_id: OPSMAN-CLIENT-ID
client_secret: OPSMAN-CLIENT-SECRET
password: OPSMAN-PASSWORD
url: OPSMAN-URL
username: OPSMAN-USERNAME
ops_manager_private_key: OPSMAN-RSA-PRIVATE-KEY
ops_manager_public_ip: OPSMAN-PUBLIC-IP
ops_manager_ssh_user: OPSMAN-SSH-USER
pks_api:
url: PKS-API-URL
sys_domain: PAS-SYSTEM-DOMAIN
```
An environment can then be specified via `hammer -t path-to-env-config -e environment-name `. If an environment
name is not specified then the first environment in the config will be used.
## Development
Unit and integration tests can be run if you have [Ginkgo](https://github.com/onsi/ginkgo) installed:
```bash
ginkgo -r .
```
Linters can also be run using [golangci-lint](https://github.com/golangci/golangci-lint):
```bash
golangci-lint run
```
Or just run both with:
```bash
make test
```
---
Special thanks to [@blgm](https://github.com/blgm) for letting an internal tool he created serve as the basis for this tool.