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

Che CLI Refactoring #3646

Merged
merged 4 commits into from
Jan 10, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
22 changes: 11 additions & 11 deletions dockerfiles/base/scripts/base/cli/cli-functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -118,24 +118,24 @@ initiate_offline_or_network_mode(){

grab_initial_images() {
# Prep script by getting default image
if [ "$(docker images -q alpine:3.4 2> /dev/null)" = "" ]; then
info "cli" "Pulling image alpine:3.4"
log "docker pull alpine:3.4 >> \"${LOGS}\" 2>&1"
if [ "$(docker images -q ${UTILITY_IMAGE_ALPINE} 2> /dev/null)" = "" ]; then
info "cli" "Pulling image ${UTILITY_IMAGE_ALPINE}"
log "docker pull ${UTILITY_IMAGE_ALPINE} >> \"${LOGS}\" 2>&1"
TEST=""
docker pull alpine:3.4 >> "${LOGS}" > /dev/null 2>&1 || TEST=$?
docker pull ${UTILITY_IMAGE_ALPINE} >> "${LOGS}" > /dev/null 2>&1 || TEST=$?
if [ "$TEST" = "1" ]; then
error "Image alpine:3.4 unavailable. Not on dockerhub or built locally."
error "Image ${UTILITY_IMAGE_ALPINE} unavailable. Not on dockerhub or built locally."
return 2;
fi
fi

if [ "$(docker images -q eclipse/che-ip:nightly 2> /dev/null)" = "" ]; then
info "cli" "Pulling image eclipse/che-ip:nightly"
log "docker pull eclipse/che-ip:nightly >> \"${LOGS}\" 2>&1"
if [ "$(docker images -q ${UTILITY_IMAGE_CHEIP} 2> /dev/null)" = "" ]; then
info "cli" "Pulling image ${UTILITY_IMAGE_CHEIP}"
log "docker pull ${UTILITY_IMAGE_CHEIP} >> \"${LOGS}\" 2>&1"
TEST=""
docker pull eclipse/che-ip:nightly >> "${LOGS}" > /dev/null 2>&1 || TEST=$?
docker pull ${UTILITY_IMAGE_CHEIP} >> "${LOGS}" > /dev/null 2>&1 || TEST=$?
if [ "$TEST" = "1" ]; then
error "Image eclipse/che-ip:nightly unavailable. Not on dockerhub or built locally."
error "Image ${UTILITY_IMAGE_CHEIP} unavailable. Not on dockerhub or built locally."
return 2;
fi
fi
Expand Down Expand Up @@ -460,7 +460,7 @@ confirm_operation() {
port_open() {
debug $FUNCNAME

docker run -d -p $1:$1 --name fake alpine:3.4 httpd -f -p $1 -h /etc/ > /dev/null 2>&1
docker run -d -p $1:$1 --name fake ${UTILITY_IMAGE_ALPINE} httpd -f -p $1 -h /etc/ > /dev/null 2>&1
NETSTAT_EXIT=$?
docker rm -f fake > /dev/null 2>&1

Expand Down
4 changes: 2 additions & 2 deletions dockerfiles/base/scripts/base/commands/cmd_action.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ cmd_action() {
server_is_booted ${CURRENT_CHE_SERVER_CONTAINER_ID}; then

# Not loaded as part of the init process to save on download time
update_image_if_not_found eclipse/che-action:nightly
docker_run -it eclipse/che-action:nightly "$@"
update_image_if_not_found ${UTILITY_IMAGE_CHEACTION}
docker_run -it ${UTILITY_IMAGE_CHEACTION} "$@"

return
fi
Expand Down
2 changes: 1 addition & 1 deletion dockerfiles/base/scripts/base/commands/cmd_backup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ cmd_backup() {
docker_run -v "${CHE_HOST_CONFIG}":/root${CHE_CONTAINER_ROOT} \
-v "${CHE_HOST_BACKUP}":/root/backup \
$(cmd_backup_extra_args) \
alpine:3.4 sh -c "tar czf /root/backup/${CHE_BACKUP_FILE_NAME} -C /root${CHE_CONTAINER_ROOT} . --exclude='backup' --exclude='instance/dev' --exclude='instance/logs' ${TAR_EXTRA_EXCLUDE}"
${UTILITY_IMAGE_ALPINE} sh -c "tar czf /root/backup/${CHE_BACKUP_FILE_NAME} -C /root${CHE_CONTAINER_ROOT} . --exclude='backup' --exclude='instance/dev' --exclude='instance/logs' ${TAR_EXTRA_EXCLUDE}"
info ""
info "backup" "Codenvy data saved in ${CHE_HOST_BACKUP}/${CHE_BACKUP_FILE_NAME}"
}
Expand Down
4 changes: 2 additions & 2 deletions dockerfiles/base/scripts/base/commands/cmd_config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ cmd_config() {
# in development mode to avoid permissions issues we copy tomcat assembly to ${CHE_INSTANCE}
# if ${CHE_FORMAL_PRODUCT_NAME} development tomcat exist we remove it
if [[ -d "${CHE_CONTAINER_INSTANCE}/dev" ]]; then
log "docker_run -v \"${CHE_HOST_INSTANCE}/dev\":/root/dev alpine:3.4 sh -c \"rm -rf /root/dev/*\""
log "docker_run -v \"${CHE_HOST_INSTANCE}/dev\":/root/dev ${UTILITY_IMAGE_ALPINE} sh -c \"rm -rf /root/dev/*\""

# Super weird bug - sometimes, the RM command doesn't wipe everything, so we have to repeat it a couple times
until config_directory_is_empty; do
docker_run -v "${CHE_HOST_INSTANCE}/dev":/root/dev alpine:3.4 sh -c "rm -rf /root/dev/${CHE_MINI_PRODUCT_NAME}-tomcat" > /dev/null 2>&1 || true
docker_run -v "${CHE_HOST_INSTANCE}/dev":/root/dev ${UTILITY_IMAGE_ALPINE} sh -c "rm -rf /root/dev/${CHE_MINI_PRODUCT_NAME}-tomcat" > /dev/null 2>&1 || true
done

log "rm -rf \"${CHE_HOST_INSTANCE}/dev\" >> \"${LOGS}\""
Expand Down
8 changes: 4 additions & 4 deletions dockerfiles/base/scripts/base/commands/cmd_destroy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ cmd_destroy() {
--cli)
DESTROY_CLI="true"
shift ;;
*) error "Unknown parameter: $1" ; return 2 ;;
*) error "Unknown parameter: $1; did you mean --quiet or --cli?" ; return 2 ;;
esac
done

Expand All @@ -42,14 +42,14 @@ cmd_destroy() {
info "destroy" "Deleting instance and config..."

log "docker_run -v \"${CHE_HOST_CONFIG}\":${CHE_CONTAINER_ROOT} \
alpine:3.4 sh -c \"rm -rf /root${CHE_CONTAINER_ROOT}/docs \
${UTILITY_IMAGE_ALPINE} sh -c \"rm -rf /root${CHE_CONTAINER_ROOT}/docs \
&& rm -rf /root${CHE_CONTAINER_ROOT}/instance \
&& rm -rf /root${CHE_CONTAINER_ROOT}/${CHE_MINI_PRODUCT_NAME}.env\""
# Super weird bug. For some reason on windows, this command has to be run 3x for everything
# to be destroyed properly if you are in dev mode.
until directory_is_empty; do
docker_run -v "${CHE_HOST_CONFIG}":/root${CHE_CONTAINER_ROOT} \
alpine:3.4 sh -c "rm -rf /root${CHE_CONTAINER_ROOT}/docs \
${UTILITY_IMAGE_ALPINE} sh -c "rm -rf /root${CHE_CONTAINER_ROOT}/docs \
; rm -rf /root${CHE_CONTAINER_ROOT}/instance \
; rm -rf /root${CHE_CONTAINER_ROOT}/${CHE_MINI_PRODUCT_NAME}.env" > /dev/null 2>&1 || true
done
Expand All @@ -61,7 +61,7 @@ cmd_destroy() {
# If they pass destroy --cli then we will also destroy the CLI
if [[ "${DESTROY_CLI}" = "true" ]]; then
info "destroy" "Deleting cli.log..."
docker_run -v "${CLI_DIR}":/root/cli alpine:3.4 sh -c "rm -rf /root/cli/cli.log"
docker_run -v "${CLI_DIR}":/root/cli ${UTILITY_IMAGE_ALPINE} sh -c "rm -rf /root/cli/cli.log"
fi
}

Expand Down
19 changes: 11 additions & 8 deletions dockerfiles/base/scripts/base/commands/cmd_dir.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,18 @@
#

cmd_dir() {
debug $FUNCNAME

if [[ $# -eq 0 ]] ; then
error "dir command is requiring a local folder to be given as argument"
return 2;
fi

local HOST_FOLDER_TO_USE=${1}
CHE_LOCAL_REPO=false
if [[ "${CHEDIR_MOUNT}" != "not set" ]]; then
local HOST_FOLDER_TO_USE="${CHEDIR_MOUNT}"
else
local HOST_FOLDER_TO_USE="${DATA_MOUNT}"

warning "':/chedir' not mounted - using ${DATA_MOUNT} as source location"
fi

# Not loaded as part of the init process to save on download time
update_image_if_not_found eclipse/che-dir:nightly
docker_run -it -v ${HOST_FOLDER_TO_USE}:${HOST_FOLDER_TO_USE} eclipse/che-dir:nightly "$@"
update_image_if_not_found ${UTILITY_IMAGE_CHEDIR}
docker_run -it -v ${HOST_FOLDER_TO_USE}:${HOST_FOLDER_TO_USE} ${UTILITY_IMAGE_CHEDIR} ${HOST_FOLDER_TO_USE} "$@"
}
4 changes: 2 additions & 2 deletions dockerfiles/base/scripts/base/commands/cmd_network.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ cmd_network() {
info "-------- CONNECTIVITY TEST --------"
info "---------------------------------------"
# Start a fake workspace agent
log "docker run -d -p 12345:80 --name fakeagent alpine:3.4 httpd -f -p 80 -h /etc/ >> \"${LOGS}\""
docker run -d -p 12345:80 --name fakeagent alpine:3.4 httpd -f -p 80 -h /etc/ >> "${LOGS}"
log "docker run -d -p 12345:80 --name fakeagent ${UTILITY_IMAGE_ALPINE} httpd -f -p 80 -h /etc/ >> \"${LOGS}\""
docker run -d -p 12345:80 --name fakeagent ${UTILITY_IMAGE_ALPINE} httpd -f -p 80 -h /etc/ >> "${LOGS}"

AGENT_INTERNAL_IP=$(docker inspect --format='{{.NetworkSettings.IPAddress}}' fakeagent)
AGENT_INTERNAL_PORT=80
Expand Down
10 changes: 9 additions & 1 deletion dockerfiles/base/scripts/base/commands/cmd_offline.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ cmd_offline() {
readarray -t STACK_IMAGE_LIST < /version/$CHE_VERSION/images-stacks

# List all images to be saved
if [ $1 = "--list" ]; then
if [[ $# -gt 0 ]] && [[ $1 = "--list" ]]; then
# First display mandatory
info "offline" "Listing images to save for offline usage"
info ""
Expand Down Expand Up @@ -54,6 +54,14 @@ cmd_offline() {
info "offline" "Saving ${CHE_MINI_PRODUCT_NAME} cli image..."
save_image ${CHE_IMAGE_FULLNAME}

info "offline" "Saving utility images..."
download_and_save_image "${UTILITY_IMAGE_CHEIP}"
download_and_save_image "${UTILITY_IMAGE_ALPINE}"
download_and_save_image "${UTILITY_IMAGE_CHEACTION}"
download_and_save_image "${UTILITY_IMAGE_CHEDIR}"
download_and_save_image "${UTILITY_IMAGE_CHETEST}"
download_and_save_image "${UTILITY_IMAGE_CHEMOUNT}"

info "offline" "Saving ${CHE_MINI_PRODUCT_NAME} system images..."
IFS=$'\n'
for SINGLE_IMAGE in $IMAGE_LIST; do
Expand Down
14 changes: 7 additions & 7 deletions dockerfiles/base/scripts/base/commands/cmd_restore.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,13 @@ cmd_restore() {

# remove config and instance folders
log "docker_run -v \"${CHE_HOST_CONFIG}\":${CHE_CONTAINER_ROOT} \
alpine:3.4 sh -c \"rm -rf /root${CHE_CONTAINER_ROOT}/docs \
&& rm -rf /root${CHE_CONTAINER_ROOT}/instance \
&& rm -rf /root${CHE_CONTAINER_ROOT}/${CHE_MINI_PRODUCT_NAME}.env\""
${UTILITY_IMAGE_ALPINE} sh -c \"rm -rf /root${CHE_CONTAINER_ROOT}/docs \
; rm -rf /root${CHE_CONTAINER_ROOT}/instance \
; rm -rf /root${CHE_CONTAINER_ROOT}/${CHE_MINI_PRODUCT_NAME}.env\""
docker_run -v "${CHE_HOST_CONFIG}":/root${CHE_CONTAINER_ROOT} \
alpine:3.4 sh -c "rm -rf /root${CHE_CONTAINER_ROOT}/docs \
&& rm -rf /root${CHE_CONTAINER_ROOT}/instance \
&& rm -rf /root${CHE_CONTAINER_ROOT}/${CHE_MINI_PRODUCT_NAME}.env"
${UTILITY_IMAGE_ALPINE} sh -c "rm -rf /root${CHE_CONTAINER_ROOT}/docs \
; rm -rf /root${CHE_CONTAINER_ROOT}/instance \
; rm -rf /root${CHE_CONTAINER_ROOT}/${CHE_MINI_PRODUCT_NAME}.env"

info "restore" "Recovering ${CHE_FORMAL_PRODUCT_NAME} data..."

Expand All @@ -54,5 +54,5 @@ cmd_restore() {
docker_run -v "${CHE_HOST_CONFIG}":/root${CHE_CONTAINER_ROOT} \
-v "${CHE_HOST_BACKUP}/${CHE_BACKUP_FILE_NAME}":"/root/backup/${CHE_BACKUP_FILE_NAME}" \
$(cmd_restore_extra_args) \
alpine:3.4 sh -c "tar xf /root/backup/${CHE_BACKUP_FILE_NAME} -C /root${CHE_CONTAINER_ROOT}"
${UTILITY_IMAGE_ALPINE} sh -c "tar xf /root/backup/${CHE_BACKUP_FILE_NAME} -C /root${CHE_CONTAINER_ROOT}"
}
2 changes: 1 addition & 1 deletion dockerfiles/base/scripts/base/commands/cmd_start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ cmd_start_check_ports() {

# If dev mode is on, then we also need to check the debug port set by the user for availability
if debug_server; then
USER_DEBUG_PORT=$(docker_run --env-file="${REFERENCE_CONTAINER_ENVIRONMENT_FILE}" alpine sh -c 'echo $CHE_DEBUG_PORT')
USER_DEBUG_PORT=$(docker_run --env-file="${REFERENCE_CONTAINER_ENVIRONMENT_FILE}" ${UTILITY_IMAGE_ALPINE} sh -c 'echo $CHE_DEBUG_PORT')

if [[ "$USER_DEBUG_PORT" = "" ]]; then
# If the user has not set a debug port, then use the default
Expand Down
4 changes: 3 additions & 1 deletion dockerfiles/base/scripts/base/commands/cmd_sync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ cmd_sync() {
return 2;
fi

update_image_if_not_found ${UTILITY_IMAGE_CHEMOUNT}

# Determine the mount path to do the mount
info "mount" "Starting sync process to ${SYNC_MOUNT}"

Expand All @@ -30,7 +32,7 @@ cmd_sync() {
-e CHE_VERSION=${CHE_VERSION} \
--name che-mount \
-v "${SYNC_MOUNT}":/mnthost \
eclipse/che-mount:nightly $*
${UTILITY_IMAGE_CHEMOUNT} $*

# Docker doesn't seem to normally clean up this container
docker rm -f che-mount
Expand Down
1 change: 1 addition & 0 deletions dockerfiles/base/scripts/base/docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@ check_mounts() {
REPO_MOUNT=$(get_container_folder ":/repo")
SYNC_MOUNT=$(get_container_folder ":/sync")
UNISON_PROFILE_MOUNT=$(get_container_folder ":/unison")
CHEDIR_MOUNT=$(get_container_folder ":/chedir")

if [[ "${DATA_MOUNT}" = "not set" ]]; then
info "Welcome to $CHE_FORMAL_PRODUCT_NAME!"
Expand Down
8 changes: 8 additions & 0 deletions dockerfiles/base/scripts/base/startup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,14 @@ init_constants() {

DEFAULT_CHE_LICENSE=false
CHE_LICENSE=${CHE_LICENSE:-${DEFAULT_CHE_LICENSE}}

# Replace all of these with digests
UTILITY_IMAGE_ALPINE="alpine:3.4"
UTILITY_IMAGE_CHEIP="eclipse/che-ip:nightly"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we use ${CHE_VERSION} instead of nightly ? until it's using digests

UTILITY_IMAGE_CHEACTION="eclipse/che-action:nightly"
UTILITY_IMAGE_CHEDIR="eclipse/che-dir:nightly"
UTILITY_IMAGE_CHETEST="eclipse/che-test:nightly"
UTILITY_IMAGE_CHEMOUNT="eclipse/che-mount:nightly"
}


Expand Down
2 changes: 1 addition & 1 deletion dockerfiles/cli/scripts/cli.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#

cli_pre_init() {
GLOBAL_HOST_IP=${GLOBAL_HOST_IP:=$(docker_run --net host eclipse/che-ip:nightly)}
GLOBAL_HOST_IP=${GLOBAL_HOST_IP:=$(docker_run --net host ${UTILITY_IMAGE_CHEIP})}
DEFAULT_CHE_HOST=$GLOBAL_HOST_IP
CHE_HOST=${CHE_HOST:-${DEFAULT_CHE_HOST}}
DEFAULT_CHE_PORT=8080
Expand Down
5 changes: 3 additions & 2 deletions dockerfiles/cli/scripts/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@ OPTIONAL DOCKER PARAMETERS:
-v <LOCAL_PATH>:/repo ${CHE_MINI_PRODUCT_NAME} git repo - uses local binaries
-v <LOCAL_PATH>:/sync Where remote ws files will be copied with sync command
-v <LOCAL_PATH>:/unison Where unison profile for optimizing sync command resides
-v <LOCAL_PATH>:/chedir Soure repository to convert into workspace with Chedir utility

COMMANDS:
action <action-name> Start action on ${CHE_MINI_PRODUCT_NAME} instance
backup Backups ${CHE_MINI_PRODUCT_NAME} configuration and data to ${CHE_CONTAINER_ROOT}/backup volume mount
config Generates a ${CHE_MINI_PRODUCT_NAME} config from vars; run on any start / restart
destroy Stops services, and deletes ${CHE_MINI_PRODUCT_NAME} instance data
dir <path> <command> Use Chefile feature in the directory <path>
dir <command> Use Chedir and Chefile in the directory mounted to :/chedir
download Pulls Docker images for the current ${CHE_MINI_PRODUCT_NAME} version
help This message
info Displays info about ${CHE_MINI_PRODUCT_NAME} and the CLI
Expand All @@ -40,7 +41,7 @@ COMMANDS:
ssh <wksp-name> [machine-name] SSH to a workspace if SSH agent enabled
start Starts ${CHE_MINI_PRODUCT_NAME} services
stop Stops ${CHE_MINI_PRODUCT_NAME} services
sync <wksp-name> Synchronize workspace with current working directory
sync <wksp-name> Synchronize workspace with local directory mounted to :/sync
test <test-name> Start test on ${CHE_MINI_PRODUCT_NAME} instance
upgrade Upgrades ${CHE_MINI_PRODUCT_NAME} from one version to another with migrations and backups
version Installed version and upgrade paths
Expand Down