Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

App image #31

Open
wants to merge 181 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
181 commits
Select commit Hold shift + click to select a range
b181e96
add ingress
m3dwards Sep 17, 2024
c23b5ac
Merge pull request #607 from bitcoin-dev-project/ingress
m3dwards Sep 19, 2024
a414082
add constants related to the helm binary
mplsgrant Sep 18, 2024
1d49f06
`setup` shoehorn in an option to download helm
mplsgrant Sep 18, 2024
5ba32a0
`project`: add a better arch_map
mplsgrant Sep 21, 2024
3d8bb99
`constants`: add blessed helm metadata
mplsgrant Sep 21, 2024
07104ee
`project`: get blessed helm version
mplsgrant Sep 21, 2024
c69f222
control: fetch and stream pod logs without kubectl
pinheadmz Sep 18, 2024
5f46b8a
control: add --debug option to run WIP scenarios
pinheadmz Sep 18, 2024
7bc5ba7
v1.1.3
pinheadmz Sep 23, 2024
ec33ace
`project`: fix arch<->uname mapping
mplsgrant Sep 23, 2024
53f0171
remove dead code
mplsgrant Sep 24, 2024
9e890ed
Merge pull request #612 from pinheadmz/debug-sc
m3dwards Sep 27, 2024
44adc3e
shorten user prompt
mplsgrant Sep 27, 2024
c7678a5
support "arm64"
mplsgrant Sep 27, 2024
82b5e47
update missing arch error message
mplsgrant Sep 27, 2024
d80c333
apidocs: fix help for `logs`
pinheadmz Sep 27, 2024
9b7a5c9
Update apidocs on
pinheadmz Sep 27, 2024
3ae7026
scenarios: remove unecessary import logic
pinheadmz Sep 24, 2024
8ac9219
scenarios: move test_framework in here
pinheadmz Sep 24, 2024
076346d
scenarios: get -- --help before using any helm or k8s commands
pinheadmz Sep 24, 2024
b5eeea1
scenarios: add main() to all files
pinheadmz Sep 25, 2024
8d8ae24
charts: plain python image for scenarios
pinheadmz Sep 25, 2024
b72904e
control: use zipapp to create archive
pinheadmz Sep 25, 2024
1b37969
test: move test scenarios to resources/scenarios
pinheadmz Sep 25, 2024
3e60889
project: exclude test scenarios
pinheadmz Sep 25, 2024
77e932a
lint
pinheadmz Sep 25, 2024
2ab431b
remove commander image deployment from CI
pinheadmz Sep 25, 2024
f2a3222
scenarios: use initContainer
pinheadmz Sep 26, 2024
371fc20
move test scenarios to subdirectory and add optional --source_dir
pinheadmz Sep 28, 2024
5ee0c8b
clean up rebase on main, lint
pinheadmz Sep 28, 2024
4ca3464
Merge pull request #621 from pinheadmz/testframework-cp
m3dwards Sep 30, 2024
e6ac03e
Update apidocs on
m3dwards Sep 30, 2024
d343793
Merge pull request #610 from mplsgrant/2024-09-install-helm
m3dwards Sep 30, 2024
6c23e2a
lint
pinheadmz Sep 30, 2024
f582a7f
charts: split off defaultConfig from [node] config
pinheadmz Oct 1, 2024
7bcbe06
add node-specific config values in 6_node_network
pinheadmz Oct 1, 2024
8bdbf6a
k8s: add `get_pod`
mplsgrant Oct 1, 2024
23a8e21
control: fix `_logs` to look for primary container
mplsgrant Oct 1, 2024
3298bc7
control: fix stream handling
mplsgrant Oct 1, 2024
04352d4
bitcoin: add primary container logic to `rpc`
mplsgrant Oct 1, 2024
0ab373f
make ruff happy
mplsgrant Oct 1, 2024
ff4b8d7
scenarios: miner_std should accept single --tank option
pinheadmz Oct 2, 2024
43e3240
add constants as they appear in the helm charts
mplsgrant Oct 2, 2024
8301302
use constants in the `log` function
mplsgrant Oct 2, 2024
9a7a973
use constant in the bitcoin `rpc` function
mplsgrant Oct 2, 2024
d2e277d
Merge pull request #626 from mplsgrant/2024-10-fix-logs-container
mplsgrant Oct 2, 2024
a011310
delete old items: graph resource & setup scripts
mplsgrant Oct 2, 2024
d4d74e6
use `pod_log` in `grep_logs`
mplsgrant Oct 2, 2024
76f3387
test: cover defaultConfig / config options when creating network
pinheadmz Oct 3, 2024
9825a50
Merge pull request #630 from mplsgrant/2024-10-remove-graph-and-scripts
pinheadmz Oct 3, 2024
6b3ed49
Merge pull request #631 from mplsgrant/2024-10-use-pod_log-in-grep_log
pinheadmz Oct 3, 2024
6299243
Merge pull request #627 from pinheadmz/miner-std-single
pinheadmz Oct 3, 2024
81d0297
Merge pull request #622 from pinheadmz/splitconf
m3dwards Oct 3, 2024
d98edc7
chart: set rpcpassword as a value, add to labels for scenarios
pinheadmz Oct 4, 2024
228c674
chart: get configured rpcpassword from chart for prometheus exporter
pinheadmz Oct 4, 2024
2fbbf8c
Merge pull request #632 from pinheadmz/rpcpass
m3dwards Oct 4, 2024
5c3e501
tool: pin ruff version
willcl-ark Oct 1, 2024
649e3ae
add vulnerable nodes
willcl-ark Sep 26, 2024
b6e4bc6
image: don't build vulnerable in debug
willcl-ark Oct 7, 2024
7b4dd1e
Merge pull request #625 from willcl-ark/pin-ruff
pinheadmz Oct 7, 2024
35c190c
add kubectl constants
mplsgrant Oct 7, 2024
945ff6b
offer to install kubectl
mplsgrant Oct 7, 2024
56bc1c3
constants: make the default namespace "default"
mplsgrant Sep 27, 2024
c848848
constants: add `wargames` prefix
mplsgrant Sep 27, 2024
39db0b5
constants: add k8s internal namespaces
mplsgrant Sep 27, 2024
4683dc9
refactor: namespaces.yaml, namespace-defaults.yaml
josibake Sep 13, 2024
305c189
charts: allow users access to services
mplsgrant Sep 24, 2024
61cff4a
charts: add namespace to sa permissions
mplsgrant Sep 27, 2024
f34113a
deploy: allow a namespace parameter in `deploy`
josibake Sep 13, 2024
bb0e9cb
admin: add create_kubeconfigs func
mplsgrant Oct 1, 2024
542f38a
service_accounts: add sa func to admin section
mplsgrant Oct 1, 2024
4518cc6
namespaces: remove the dir from the `namespaces`
mplsgrant Sep 24, 2024
714eff0
namespaces: flesh out wargames prefix
mplsgrant Sep 30, 2024
2bcf737
status: add namespace to `status`
mplsgrant Sep 27, 2024
527e583
workflow: add test to git workflow
mplsgrant Sep 30, 2024
997ca62
k8s: add ns, sa, and config helper funcs
mplsgrant Oct 1, 2024
fc77971
k8s: fix static_client type
mplsgrant Sep 27, 2024
ab42fc3
k8s: update getting namespace logic
mplsgrant Sep 27, 2024
0a2bd1a
k8s: ignore internal namespaces
mplsgrant Sep 27, 2024
ffdfec2
k8s & control: query all namespaces
mplsgrant Oct 1, 2024
b9ebff9
k8s: add optional ns to get_pod_exit_stats
mplsgrant Oct 1, 2024
a22cea8
k8s: add optional ns to delete_pod
mplsgrant Oct 1, 2024
e2aeecd
k8s: add optional ns to get_edges
mplsgrant Oct 1, 2024
1a25418
k8s: add optional ns to snapshot_bitcoin_datadir
mplsgrant Oct 1, 2024
ac11388
k8s: add optional ns to wait_for_init
mplsgrant Oct 1, 2024
9c0f82c
k8s: add optional ns to pod_log
mplsgrant Oct 1, 2024
f1d8d5c
k8s: add optional ns to wait_for_pod
mplsgrant Oct 1, 2024
1593cfe
k8s: add optional ns to write_file_to_container
mplsgrant Oct 1, 2024
402ee83
k8s: add namespace to `wait_for_init`
mplsgrant Oct 1, 2024
1ecdcdf
network: add namespace to `network` `_connected`
mplsgrant Oct 1, 2024
6242838
control: use namespace log in `down`
mplsgrant Sep 27, 2024
76897d3
control & test base: prevent hasty `down`s
mplsgrant Sep 27, 2024
159ac61
control: clean up `down` command
mplsgrant Oct 1, 2024
9da42aa
control: add ns to `logs`
mplsgrant Oct 1, 2024
cd00478
control: add namespace to `run`
mplsgrant Oct 1, 2024
a05e0c7
control: add imports
mplsgrant Oct 1, 2024
f0b2d4b
control: ignore logging namespaces
mplsgrant Oct 1, 2024
5100b0a
bitcoin: add ns to `rpc`
mplsgrant Oct 1, 2024
59913cd
bitcoin: add ns to `debug_log` and `grep_logs`
mplsgrant Oct 1, 2024
c94c7a3
bitcoin: add ns to `messages` and `get_messages`
mplsgrant Oct 1, 2024
7acf45d
deploy: enable deploying to all user namespaces
mplsgrant Oct 2, 2024
ea1827c
test base: add namespace to get_pod_exit_status
mplsgrant Oct 1, 2024
8b6e9da
testing: add e2e namespace/admin test
mplsgrant Sep 30, 2024
3f91d0b
admin.md: add admin documentation
mplsgrant Sep 24, 2024
e1c277c
k8s: add `continue` to `wait_for_init`
mplsgrant Oct 1, 2024
2c15b6c
testing: remove mention of minikube
mplsgrant Oct 3, 2024
6709805
tesing: use a temporary directory
mplsgrant Oct 3, 2024
70a736f
admin: update create_kubeconfig description
mplsgrant Oct 3, 2024
809eb5c
admin: spelling nit
mplsgrant Oct 3, 2024
1feed7a
DRY out the namespace check
mplsgrant Oct 3, 2024
e40ea68
testing: finish replacing minikube logic
mplsgrant Oct 3, 2024
d47073c
ruff get_default_namespace_or
mplsgrant Oct 3, 2024
e208c0e
testing: bring service account checking "in house"
mplsgrant Oct 3, 2024
7135973
service_accounts: remove func from `admin` section
mplsgrant Oct 3, 2024
30af65a
admin: make kubeconfig a dict
mplsgrant Oct 3, 2024
5188108
constants: use labels to select pods for `log`
mplsgrant Oct 3, 2024
2bb87ec
rename to `get_namespaces_by_type`
mplsgrant Oct 3, 2024
2cf8292
k8s: add `can_delete_pods` function
mplsgrant Oct 3, 2024
d6f4ed3
control: update `down` with `can_delete_pods`
mplsgrant Oct 3, 2024
bfc778b
admin.md: update namespace deploy command
mplsgrant Oct 3, 2024
ae19f28
bitcoin: make ruff happy
mplsgrant Oct 3, 2024
e7dbaf1
k8s: add open/write kubeconfig fn; add K8sError
mplsgrant Oct 4, 2024
5a38e92
constants: remove --create-namespace
mplsgrant Oct 4, 2024
7320758
testing: specify `warnettest` in named items
mplsgrant Oct 4, 2024
4876415
testing: update test to include cleanup
mplsgrant Oct 4, 2024
971afb9
constants: does graph_test.py need --create-namespace?
mplsgrant Oct 4, 2024
506bd58
k8s: get raw config values from kubectl
mplsgrant Oct 4, 2024
02cf9e5
k8s: get cluster from current context
mplsgrant Oct 4, 2024
a9239a7
auth: update auth func to avoid flattening
mplsgrant Oct 4, 2024
ed5fb00
admin: get raw cluster for auth file
mplsgrant Oct 4, 2024
6ecc017
bitcoin: update `message` to take tank-a.namespace
mplsgrant Oct 4, 2024
21815f0
deploy: fix override path
mplsgrant Oct 7, 2024
1024bcf
`admin.md`: reword deploy documentation
mplsgrant Oct 7, 2024
8024236
removing --create-namespace from constants
m3dwards Oct 7, 2024
82cf687
removing --create-namespace from constants
m3dwards Oct 7, 2024
d9b3e1d
gitignore: add kubeconfigs dir
mplsgrant Oct 7, 2024
6f18eb8
k8s: use mv to prevent scenario getting cut off
mplsgrant Oct 7, 2024
424eba8
k8s: add `sync` to make sure the data is written
mplsgrant Oct 7, 2024
26ca399
Merge pull request #616 from mplsgrant/2024-09-create-kube-configs-st…
pinheadmz Oct 8, 2024
ebdc0e4
Merge pull request #620 from willcl-ark/vulnerable-nodes
pinheadmz Oct 8, 2024
02ef87a
Update apidocs on
pinheadmz Oct 8, 2024
b3985bc
fork observer: get RPC ports dynamically for regtest/signet
pinheadmz Oct 8, 2024
4beff8b
Merge pull request #637 from pinheadmz/fo-port
pinheadmz Oct 8, 2024
5773805
v1.1.4
pinheadmz Oct 8, 2024
a0c42ef
tanks: use addnode instead of connect
willcl-ark Oct 9, 2024
456018e
switch to addnode in all networks in repo
pinheadmz Oct 9, 2024
6bb625d
charts: remove dead configmap formerly used for warnet.json
pinheadmz Oct 9, 2024
b900df5
Merge pull request #643 from willcl-ark/addnode-not-connect
pinheadmz Oct 9, 2024
e271751
namespaces: give SAs access to `get` `pod/status`
mplsgrant Oct 9, 2024
2289cd1
namespaces: allow SA to update and patch
mplsgrant Oct 9, 2024
2d62f59
namespace_test: extend from Scenarios test
mplsgrant Oct 9, 2024
20eaa72
namespace_test: remove unnecessary network chart
mplsgrant Oct 9, 2024
d2be471
namespace test: small fixups
mplsgrant Oct 9, 2024
6684692
Merge pull request #634 from mplsgrant/2024-10-install-kubectl
pinheadmz Oct 9, 2024
c3f8154
scenarios test: add test for `run ... --debug`
mplsgrant Oct 9, 2024
5b50ff5
fork-observer: add reachable tank addr in description for each card
pinheadmz Oct 9, 2024
101cd6e
p2p_interface: adjust to ">= 1"
mplsgrant Oct 10, 2024
a74b689
users: check for ~/.kube and create if needed
mplsgrant Oct 10, 2024
2713057
users: make the .kube directory creation better
mplsgrant Oct 10, 2024
0107297
bump to 1.1.6
m3dwards Oct 10, 2024
26b1910
Merge pull request #646 from pinheadmz/fo-addr
pinheadmz Oct 10, 2024
e12dc8e
Merge pull request #644 from mplsgrant/2024-10-podstatus-run-debug
pinheadmz Oct 10, 2024
cccf11b
Merge pull request #647 from mplsgrant/2024-10-check-for-kube-folder
pinheadmz Oct 10, 2024
43831a5
v1.1.7
pinheadmz Oct 10, 2024
4f7eca1
setup: check that docker desktop users have enabled kubernetes
pinheadmz Oct 11, 2024
1b539f0
warnet logs: sort by pod age (newest first), and handle namespaces
pinheadmz Oct 11, 2024
f9ea0ef
deploy: redirect user to run if scenario was likely intent
pinheadmz Oct 11, 2024
f76c753
Merge pull request #652 from pinheadmz/run-deploy
pinheadmz Oct 11, 2024
493aeb1
Merge pull request #650 from pinheadmz/dd-k8s
pinheadmz Oct 11, 2024
577cdbb
Merge pull request #651 from pinheadmz/recent-logs
pinheadmz Oct 11, 2024
4a7f71b
skip unknown args in api docs
pinheadmz Oct 11, 2024
0a72e96
avoid apidocs failure
pinheadmz Oct 11, 2024
4f07d35
Update apidocs on
pinheadmz Oct 11, 2024
4055480
pushing lint to main bc its friday
pinheadmz Oct 11, 2024
4d3302c
v1.1.8
pinheadmz Oct 11, 2024
ca5be2a
fix namespace bug in _logs()
pinheadmz Oct 15, 2024
4586ddc
Merge pull request #653 from pinheadmz/fix-recent-logs
pinheadmz Oct 15, 2024
7974c5d
v1.1.9
pinheadmz Oct 15, 2024
5b2977a
add warnet-bundle Dockerfile
willcl-ark Sep 18, 2024
8d3423d
workflow to deploy app bundle
willcl-ark Sep 18, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
.git
.github

**/__pycache__
.trunk
.venv
.envrc
build
dist
**/*.egg-info
Expand Down
91 changes: 91 additions & 0 deletions .github/workflows/deploy-app.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Publish Warnet app bundle image
on:
push:
branches:
- main
tags:
- '*'
pull_request:
branches:
- main
env:
REGISTRY_IMAGE: ${{ secrets.DOCKERHUB_USERNAME }}/warnet-app
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64
steps:
- name: Prepare
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
file: resources/images/warnet-bundle/Dockerfile
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
- name: Export digest
run: |
mkdir -p /tmp/digests
digest="${{ steps.build.outputs.digest }}"
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: /tmp/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest
needs:
- build
steps:
- name: Download digests
uses: actions/download-artifact@v4
with:
path: /tmp/digests
pattern: digests-*
merge-multiple: true
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create manifest list and push
working-directory: /tmp/digests
run: |
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
- name: Inspect image
run: |
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
61 changes: 0 additions & 61 deletions .github/workflows/deploy.yml

This file was deleted.

80 changes: 15 additions & 65 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,59 +16,39 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: eifinger/setup-uv@v1
- run: uvx ruff check .
- name: Install a specific version of uv
uses: astral-sh/setup-uv@v3
with:
version: "0.4.4"
enable-cache: true
- run: uvx [email protected] check .

ruff-format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v2
- name: Install a specific version of uv
uses: astral-sh/setup-uv@v3
with:
version: "latest"
version: "0.4.4"
enable-cache: true
- run: uvx ruff format . --check

build-image:
needs: [ruff, ruff-format]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and export
uses: docker/build-push-action@v5
with:
file: resources/images/commander/Dockerfile
context: .
tags: bitcoindevproject/warnet-commander:latest
cache-from: type=gha
cache-to: type=gha,mode=max
outputs: type=docker,dest=/tmp/commander.tar

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: commander
path: /tmp/commander.tar
- run: uvx [email protected] format . --check

test:
needs: [build-image]
needs: [ruff, ruff-format]
runs-on: ubuntu-latest
strategy:
matrix:
test:
- conf_test.py
- dag_connection_test.py
- graph_test.py
- logging_test.py
- rpc_test.py
- services_test.py
- signet_test.py
- scenarios_test.py
- namespace_admin_test.py
steps:
- uses: actions/checkout@v4
- uses: azure/[email protected]
Expand All @@ -78,11 +58,8 @@ jobs:
with:
cpus: max
memory: 4000m
- name: Download commander artifact
uses: actions/download-artifact@v4
with:
name: commander
path: /tmp
- name: Start minikube's loadbalancer tunnel
run: minikube tunnel &> /dev/null &
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v2
with:
Expand All @@ -92,12 +69,6 @@ jobs:
run: uv python install $PYTHON_VERSION
- name: Install project
run: uv sync --all-extras --dev
- name: Install commander image
run: |
echo loading commander image into minikube docker
eval $(minikube -p minikube docker-env)
docker load --input /tmp/commander.tar
docker image ls -a
- name: Run tests
run: |
source .venv/bin/activate
Expand All @@ -122,24 +93,3 @@ jobs:
name: kubernetes-logs-${{ matrix.test }}
path: ./k8s-logs
retention-days: 5
test-without-mk:
runs-on: ubuntu-latest
strategy:
matrix:
test:
- graph_test.py
steps:
- uses: actions/checkout@v4
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v2
with:
version: "latest"
enable-cache: true
- name: Install Python
run: uv python install $PYTHON_VERSION
- name: Install project
run: uv sync --all-extras --dev
- name: Run tests
run: |
source .venv/bin/activate
./test/${{matrix.test}}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ warnet.egg-info
.env
dist/
build/
**/kubeconfigs/
69 changes: 69 additions & 0 deletions docs/admin.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Admin

## Connect to your cluster

Ensure you are connected to your cluster because Warnet will use your current configuration to generate configurations for your users.

```shell
$ warnet status
```

Observe that the output of the command matches your cluster.

## Create an *admin* directory

```shell
$ mkdir admin
$ cd admin
$ warnet admin init
```

Observe that there are now two folders within the *admin* directory: *namespaces* and *networks*

## The *namespaces* directory
This directory contains a Helm chart named *two_namespaces_two_users*.

Modify this chart based on the number of teams and users you have.

Deploy the *two_namespaces_two_users* chart.

```shell
$ warnet deploy namespaces/two_namespaces_two_users
```

Observe that this creates service accounts and namespaces in the cluster:

```shell
$ kubectl get ns
$ kubectl get sa -A
```

### Creating Warnet invites
A Warnet invite is a Kubernetes config file.

Create invites for each of your users.

```shell
$ warnet admin create-kubeconfigs
```

Observe the *kubeconfigs* directory. It holds invites for each user.

### Using Warnet invites
Users can connect to your wargame using their invite.

```shell
$ warnet auth alice-wargames-red-team-kubeconfig
```

### Set up a network for your users
Before letting the users into your cluster, make sure to create a network of tanks for them to view.


```shell
$ warnet deploy networks/mynet --to-all-users
```

Observe that the *wargames-red-team* namespace now has tanks in it.

**TODO**: What's the logging approach here?
Loading
Loading