Trek is a CLI/ncurses explorer for HashiCorp Nomad clusters.
Get to revisions, and download a binary.
git clone https://github.com/franckverrot/trek.git
cd trek
make trek
TL;DR Start ./trek -help to get the usage prompt.
The CLI can be used without a UI. This allows scripting to access IP, ports, and other info exposed by Nomad.
Here's a list of options available:
nomad-address: address of the nomad cluster
list-jobs: list jobs running on the cluster
λ ./trek -list-jobs
* example
* example34
NOTE : this option also works in conjunction with display-format
job: select a specific job
λ trek -job example34
* cache34
* cache56
task-group: select a specific task group
λ trek -job example34 -task-group cache56
* example34.cache56[0]
allocation: select a specific allocation number
λ trek -job example34 -task-group cache56 -allocation 0
(0) redis5
(1) redis6
task-name: select a specific task name
λ trek -job example34 -task-group cache56 -allocation 0 -task-name redis6
* Name: redis6
* Node Name: feynman.local
* Node IP: 127.0.0.1
* Driver: docker
* image: redis:3.2
* port_map: [map[db:6379]]
* Dynamic Ports: 24832 (db)
display-format: Use the Go templating language to format output when describing a specific job, task group, allocation or task- Context-specific data made available:
- Job
TaskGroups(array of task groups): task groups part of the job definition
- Task Group
Allocations(array of allocations): allocations run by that task group
- Allocation
IP(string): node onto which we're running the selected allocationTasks(array of tasks): tasks being run by that allocation
- Task
IP(string): node onto which we're running the selected taskNetwork: network information (like ports)Environment: environment variables provided to the task
- Job
- Available functions:
{{Debug <x>}}: show raw representation of the data<x>{{DebugAll}}: show raw representation of everything provided to the template
- Examples:
- Context-specific data made available:
λ trek -job example34 -task-group cache56 -allocation 0 -task-name redis6 -display-format "{{DebugAll}}"
DEBUG ALL: {IP:127.0.0.1 Network:{Ports:map[db:{Value:23109 Reserved:false}]} Environment:map[FOO_BAR:{Value:baz_bat}]}
λ trek -job example34 -task-group cache56 -allocation 0 -task-name redis6 -display-format "{{Debug .Environment}}"
DEBUG: map[FOO_BAR:{Value:baz_bat}]
λ trek -job example34 -task-group cache56 -allocation 0 -task redis6 -display-format "{{range .Network.Ports}}{{$.IP}}:{{.Value}}{{println}}{{end}}"
127.0.0.1:31478
127.0.0.1:25142
./trek -ui=true
{ "Environments" : [ { "Name" : "development" , "Address" : "http://127.0.0.1:4646" }
]
}
Environments: List of environments (given a name and address) Trek can connect to
-
How do I ssh into an allocation's node?
λ ssh $(trek -job ... -task-group ... -allocation 0 -display-format "{{.IP}}")
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit.
- Send me a pull request. Bonus points for topic branches.
Copyright (c) 2019 Franck Verrot. MIT LICENSE. See LICENSE for details.
