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:
brew tap pivotal/hammer https://github.com/pivotal/hammer
brew install hammerAlternatively you can build hammer from source if you have Go installed:
git clone [email protected]:pivotal/hammer.git && cd hammer && go installYou 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.
In order to run the hammer tool against a given environment you need to have an environment config file in the following format:
{
"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:
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-DOMAINThis file can then be passed into the tool via hammer -t path-to-env-config <command>.
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.
The config file can contain a list of environments in previously defined structure, such as:
[{
"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:
- 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-DOMAINAn environment can then be specified via hammer -t path-to-env-config -e environment-name <command>. If an environment
name is not specified then the first environment in the config will be used.
Unit and integration tests can be run if you have Ginkgo installed:
ginkgo -r .Linters can also be run using golangci-lint:
golangci-lint runOr just run both with:
make testSpecial thanks to @blgm for letting an internal tool he created serve as the basis for this tool.