#!/bin/bash # This script contains helper functions for ensuring that dependencies # exist on a host system that are required to run Origin scripts. # os::util::ensure::system_binary_exists ensures that the # given binary exists on the system in the $PATH. # # Globals: # None # Arguments: # - 1: binary to search for # Returns: # None function os::util::ensure::system_binary_exists() { local binary="$1" if ! os::util::find::system_binary "${binary}" >/dev/null 2>&1; then os::log::error "Required \`${binary}\` binary was not found in \$PATH." return 1 fi } readonly -f os::util::ensure::system_binary_exists # os::util::ensure::built_binary_exists ensures that the # given binary exists on the system in the local output # directory for the current platform. If it doesn't, we # will attempt to build it if we can determine the correct # hack/build-go.sh target for the binary. # # This function will attempt to determine the correct # hack/build-go.sh target for the binary, but may not # be able to do so if the target doesn't live under # cmd/ or tools/. In that case, one should be given. # # Globals: # - OS_ROOT # Arguments: # - 1: binary to search for # - 2: optional build target for this binary # Returns: # None function os::util::ensure::built_binary_exists() { local binary="$1" local target="${2:-}" if ! os::util::find::built_binary "${binary}" >/dev/null 2>&1; then if [[ -z "${target}" ]]; then if [[ -d "${OS_ROOT}/cmd/${binary}" ]]; then target="cmd/${binary}" elif [[ -d "${OS_ROOT}/tools/${binary}" ]]; then target="tools/${binary}" elif [[ -d "${OS_ROOT}/tools/rebasehelpers/${binary}" ]]; then target="tools/rebasehelpers/${binary}" fi fi if [[ -n "${target}" ]]; then os::log::warn "No compiled \`${binary}\` binary was found. Attempting to build one using:" os::log::warn " $ hack/build-go.sh ${target}" "${OS_ROOT}/hack/build-go.sh" "${target}" else os::log::error "No compiled \`${binary}\` binary was found and no build target could be determined." os::log::error "Provide the binary and try running $0 again." return 1 fi fi } readonly -f os::util::ensure::built_binary_exists # os::util::ensure::gopath_binary_exists ensures that the # given binary exists on the system in $GOPATH. # # Globals: # - GOPATH # Arguments: # - 1: binary to search for # Returns: # None function os::util::ensure::gopath_binary_exists() { local binary="$1" if ! os::util::find::gopath_binary "${binary}" >/dev/null 2>&1; then os::log::error "Required \`${binary}\` binary was not found in \$GOPATH." return 1 fi } readonly -f os::util::ensure::gopath_binary_exists # os::util::ensure::iptables_privileges_exist tests if the # testing machine has iptables available and in PATH. Also # tests that the user can list iptables rules, trying with # `sudo` if it fails without. # # Globals: # None # Arguments: # None # Returns: # None function os::util::ensure::iptables_privileges_exist() { os::util::ensure::system_binary_exists 'iptables' if ! iptables --list >/dev/null 2>&1 && ! sudo iptables --list >/dev/null 2>&1; then os::log::error "You do not have \`iptables\` or \`sudo\` privileges. Kubernetes services will not work" os::log::error "without \`iptables\` access. See https://github.com/kubernetes/kubernetes/issues/1859." return 1 fi } readonly -f os::util::ensure::iptables_privileges_exist