Skip to content

arista-netdevops-community/docker-avd-vscode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub Docker Pulls Docker Image Size (tag) Docker Image Version (tag latest semver)

VScode for AVD

About

This repository provides a Docker image running cdr/code-server preconfigued with Arista Validated Design environment.

Docker image: avdteam/vscode

Arista AVD Docker Image

Getting started

# Run avdteam/vscode container
$ docker run --rm -d -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 avdteam/vscode:latest

# Connect to your browser
$ open http://127.0.0.1:8080

As it is for development and local use only, there is no password protection ! Never expose container to untrust or Internet.

Container options

Generic settings

  • AVD_MODE: If set to demo, container will install AVD content to test it from get.avd.sh.
    • Supported mode: ['demo', 'toi']
  • AVD_PASSWORD: Allow user to set a password to use for VScode authentication. If not set, access is not protected by any password.
  • AVD_GIT_USER: Username to configure in .gitconfig file.
    • Can be set with AVD_GIT_USER=$(git config --get user.name)
  • AVD_GIT_EMAIL: Email to configure in .gitconfig file.
    • Can be set with AVD_GIT_EMAIL=$(git config --get user.email)
  • AVD_USER_EXTENSIONS_FILE: Allow user to installed additional VScode extensions
  • AVD_USER_REPOS: Path to a text file in your container with a list of repository to clone (1 repository per line)
  • AVD_USER_SCRIPT: Path to a shell script to execute during entrypoint execution.

User settings

These settings must be used to mount and edit file from your physical host.

  • AVD_UID: set uid for avd user in container.
  • AVD_GID: set gid for avd user in container.

Docker in Docker

Current container has docker installed and can be used in a Docker-in-Docker approach. To run docker, you must share your docker socket with container:

Docker Socket on Linux / Macos

-v /var/run/docker.sock:/var/run/docker.sock

Docker Socket on Windows

-v //var/run/docker.sock:/var/run/docker.sock

Examples

Use container to run demo content

docker run --rm -it -d \
    -e AVD_MODE=demo \
    -e AVD_GIT_USER=titom73 \
    -e AVD_GIT_EMAIL=tom@inetsix.net \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 8080:8080 \
    avdteam/vscode:latest

Use container to work on your local version

docker run --rm -it -d \
    -e AVD_GIT_USER=titom73 \
    -e AVD_GIT_EMAIL=tom@inetsix.net \
    -v ${PWD}/your-local-work:/home/avd/arista-ansible \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 8080:8080 \
    avdteam/vscode:latest

Use container with your custom extensions list

docker run --rm -it -d \
    -e AVD_USER_EXTENSIONS_FILE=my_settings/user-extensions.txt \
    -e AVD_GIT_USER=titom73 \
    -e AVD_GIT_EMAIL=tom@inetsix.net \
    -v ${PATH_TO_FOLDER_WITH_EXT_FILE}/tests:/home/avd/my_settings \
    -v ${PWD}/your-local-work:/home/avd/arista-ansible \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -p 8080:8080 \
    avdteam/vscode:latest

Deployment Scenario

Docker Compose

Easy to manage TOI and ATD with docker-compose command

# Start single node stack
$ docker-compose up -d
Creating network "avd-vscode_default" with the default driver
Creating avd-vscode_avd-coder_1 ... done

# get dynamic port mapping
$ docker-compose ps
         Name                 Command         State            Ports
-----------------------------------------------------------------------------
avd-vscode_avd-coder_1   /bin/entrypoint.sh   Up      0.0.0.0:55000->8080/tcp

# Scale up environment
$ docker-compose --scale avd-coder=3
Creating avd-vscode_avd-coder_2 ... done
Creating avd-vscode_avd-coder_3 ... done

$ docker-compose ps
         Name                 Command         State            Ports
-----------------------------------------------------------------------------
avd-vscode_avd-coder_1   /bin/entrypoint.sh   Up      0.0.0.0:55000->8080/tcp
avd-vscode_avd-coder_2   /bin/entrypoint.sh   Up      0.0.0.0:55002->8080/tcp
avd-vscode_avd-coder_3   /bin/entrypoint.sh   Up      0.0.0.0:55001->8080/tcp

Kubernetes deployment

$ kubectl apply -f k8s-deployment.yml
deployment.apps/avd-coder-deployment created
service/avd-coder-service created

$ kubectl get service
NAME                TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
avd-coder-service   NodePort   10.152.183.196   <none>        8080:31081/TCP   5s

Alias for shell rc file

# AVD VScode image name
export AVD_VSCODE_IMAGE=avdteam/vscode

# Version of AVD VScode image to use
export AVD_VSCODE_VERSION=latest

# Vscode container command line to start
base_avd_vsc() {
        container_id=$(docker run -P -it --rm -d \
          -e AVD_GIT_USER="$(git config --get user.name)" \
          -e AVD_GIT_EMAIL="$(git config --get user.email)" \
          -v /var/run/docker.sock:/var/run/docker.sock \
          -v ${PWD}/:/home/avd/local_projects \
          ${AVD_VSCODE_IMAGE}:${AVD_VSCODE_VERSION})
        echo "Container ${container_id} has been created ..."
        export mapped_port=$(docker inspect --format="{{(index (index .NetworkSettings.Ports \"8080/tcp\") 0).HostPort}}" ${container_id})
        echo "-> Open http://127.0.0.1:${mapped_port}/?folder=/home/avd"
}

# Stop all VScode isntances
avd-vsc-stop() {
  docker ps -a | grep -e "${AVD_VSCODE_IMAGE}" | gawk '{print $1}' | xargs docker stop
}

# Alias to start a new instance from where you are in shell
alias avd-vsc='base_avd_vsc'

# Update image from docker-hub
alias avd-vsc-update='docker pull ${AVD_VSCODE_IMAGE}:${AVD_VSCODE_VERSION}'

License

Project is published under Apache 2.0 License

About

VScode container to speed up AVD on-boarding

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors