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 hammer
Alternatively you can build hammer
from source if you have Go installed:
git clone [email protected]: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.
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-DOMAIN
This 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-DOMAIN
An 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 run
Or just run both with:
make test
Special thanks to @blgm for letting an internal tool he created serve as the basis for this tool.