Skip to content
Open
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
83 changes: 65 additions & 18 deletions install_script.sh.template
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,38 @@ function remove_existing_datadog_installer_package() {
return "$exit_status"
}

function remove_existing_datadog_agent_ddot_package() {
local sudo_cmd="$1"
local os="$2"

local exit_status=0
if [ "$os" == "Debian" ]; then
$sudo_cmd apt list --installed "datadog-agent-ddot" 2>/dev/null | grep -q "datadog-agent-ddot" || exit_status=$?
elif [ "$os" == "Red Hat" ]; then
rpm -q datadog-agent-ddot || exit_status=$?
elif [ "$os" == "SUSE" ]; then
rpm -q datadog-agent-ddot || exit_status=$?
else
return 0
fi

if [ "$exit_status" -ne 0 ]; then
return 0
fi

echo -e "\033[33mRemoving legacy datadog-agent-ddot package before upgrade...\n\033[0m"
exit_status=0
if [ "$os" == "Debian" ]; then
$sudo_cmd apt-get remove -y --force-yes "datadog-agent-ddot" || exit_status=$?
elif [ "$os" == "Red Hat" ]; then
$sudo_cmd yum -y remove "datadog-agent-ddot" || exit_status=$?
elif [ "$os" == "SUSE" ]; then
$sudo_cmd zypper --non-interactive --no-refresh remove "datadog-agent-ddot" || exit_status=$?
fi

return "$exit_status"
}

function remove_existing_packages_for_fips_flavor() {
local sudo_cmd="$1"
local os="$2"
Expand Down Expand Up @@ -1241,9 +1273,13 @@ if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
report_telemetry
exit 1;
fi
# Starting from 7.78.0, DDOT is installed by the Agent post-install script
if [ -n "$agent_minor_version_without_patch" ] && [ "${agent_minor_version_without_patch}" -ge 78 ]; then
DD_OTELCOLLECTOR_ENABLED=

# For version < 7.78, DDOT is not installed by the Agent post-install script
ddot_installed_by_agent=
# Starting from 7.78.0, DDOT is installed by the Agent post-install script => no need to install it manually after
# If the agent version is not set, we consider that this is the latest version, thus >= 78
if [ -z "$agent_minor_version_without_patch" ] || [ "${agent_minor_version_without_patch}" -ge 78 ]; then
ddot_installed_by_agent=true
fi
fi

Expand Down Expand Up @@ -1335,7 +1371,7 @@ if [ "$OS" == "Red Hat" ]; then
# if some packages were previously pinned (using excludepkgs)
# this will unpin them as a side effect
$sudo_cmd sh -c "echo -e '[datadog]\nname = Datadog, Inc.\nbaseurl = https://${yum_url}/${yum_version_path}/${ARCHI}/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=${rpm_repo_gpgcheck}\npriority=1\ngpgkey=${gpgkeys}' > /etc/yum.repos.d/datadog.repo"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
$sudo_cmd sh -c "echo -e '[datadog-ddot]\nname = Datadog, Inc.\nbaseurl = https://${yum_url}/${ddot_yum_version_path}/${ARCHI}/\nenabled=0\ngpgcheck=1\nrepo_gpgcheck=${rpm_repo_gpgcheck}\npriority=1\ngpgkey=${gpgkeys}' > /etc/yum.repos.d/datadog-ddot.repo"
fi

Expand Down Expand Up @@ -1373,6 +1409,9 @@ if [ "$OS" == "Red Hat" ]; then
remove_existing_packages_for_fips_flavor "$sudo_cmd" "$OS"
fi
remove_existing_datadog_installer_package "$sudo_cmd" "$OS"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -n "$ddot_installed_by_agent" ]; then
remove_existing_datadog_agent_ddot_package "$sudo_cmd" "$OS"
fi

# Complete package_sources_setup
end_stage 0 "$(cat <<-END | tr -d '\n'
Expand All @@ -1383,15 +1422,15 @@ END

# packages can be empty if no_agent is set
if [ ${#packages[@]} -ne 0 ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
echo -e " \033[33mInstalling package(s): ${packages[*]} ${ddot_package}\n\033[0m"
else
echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m"
fi

# yum has a default retry of 10 https://github.com/Distrotech/yum/blob/f4e54aeed297158c563828aa3ebb93d0c8ce7e38/docs/yum.conf.5#L364-L366
$sudo_cmd bash -c "SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} DATADOG_TRACE_ID=${DATADOG_TRACE_ID} DATADOG_PARENT_ID=${DATADOG_PARENT_ID} yum -y --disablerepo='*' --enablerepo='datadog' install $dnf_flag ${packages[*]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) || $sudo_cmd bash -c "SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} yum -y install $dnf_flag ${packages[*]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2)
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
$sudo_cmd bash -c "DD_OTELCOLLECTOR_ENABLED='${DD_OTELCOLLECTOR_ENABLED}' DD_API_KEY='${apikey}' DD_SITE='${site}' DD_INSTALLER_REGISTRY_URL='${DD_INSTALLER_REGISTRY_URL}' SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} DATADOG_TRACE_ID=${DATADOG_TRACE_ID} DATADOG_PARENT_ID=${DATADOG_PARENT_ID} yum -y --disablerepo='*' --enablerepo='datadog' install $dnf_flag ${packages[*]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) || $sudo_cmd bash -c "DD_OTELCOLLECTOR_ENABLED='${DD_OTELCOLLECTOR_ENABLED}' DD_API_KEY='${apikey}' DD_SITE='${site}' DD_INSTALLER_REGISTRY_URL='${DD_INSTALLER_REGISTRY_URL}' SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} yum -y install $dnf_flag ${packages[*]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2)
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
$sudo_cmd bash -c "SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} DATADOG_TRACE_ID=${DATADOG_TRACE_ID} DATADOG_PARENT_ID=${DATADOG_PARENT_ID} yum -y --disablerepo='*' --enablerepo='datadog-ddot' install $dnf_flag ${ddot_package}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) || $sudo_cmd bash -c "SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} yum -y install $dnf_flag ${ddot_package}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2)
fi

Expand Down Expand Up @@ -1456,7 +1495,7 @@ elif [ "$OS" == "Debian" ]; then
$sudo_cmd sh -c "echo 'deb [signed-by=${apt_usr_share_keyring}] https://${apt_url}/ ${apt_repo_version}' > /etc/apt/sources.list.d/datadog.list"
$sudo_cmd sh -c "chmod a+r /etc/apt/sources.list.d/datadog.list"

if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
printf "\033[34m\n* Installing APT package sources for Datadog DDOT\n\033[0m\n"
$sudo_cmd sh -c "echo 'deb [signed-by=${apt_usr_share_keyring}] https://${apt_url}/ ${ddot_apt_repo_version}' > /etc/apt/sources.list.d/datadog-ddot.list"
$sudo_cmd sh -c "chmod a+r /etc/apt/sources.list.d/datadog-ddot.list"
Expand Down Expand Up @@ -1507,7 +1546,7 @@ If the failing repository is Datadog, please contact Datadog support.
*****
"
$sudo_cmd apt-get update -o Dir::Etc::sourcelist="sources.list.d/datadog.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
$sudo_cmd apt-get update -o Dir::Etc::sourcelist="sources.list.d/datadog-ddot.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
$sudo_cmd mv /etc/apt/sources.list.d/datadog-ddot.list /etc/apt/sources.list.d/datadog-ddot.list.disabled
fi
Expand Down Expand Up @@ -1540,13 +1579,16 @@ If the cause is unclear, please contact Datadog support.
remove_existing_packages_for_fips_flavor "$sudo_cmd" "$OS"
fi
remove_existing_datadog_installer_package "$sudo_cmd" "$OS"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -n "$ddot_installed_by_agent" ]; then
remove_existing_datadog_agent_ddot_package "$sudo_cmd" "$OS"
fi

if [ "$agent_flavor" == "datadog-agent" ]; then
# Old version of the install scripts created a __pycache__ directory in the python-scripts directory
$sudo_cmd rm -rf "/opt/datadog-agent/python-scripts/__pycache__"
fi

if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
echo -e " \033[33mInstalling package(s): ${packages[*]} ${ddot_package}\n\033[0m"
else
echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m"
Expand All @@ -1567,8 +1609,8 @@ END
)"
start_stage "install_agent_packages"

$sudo_cmd bash -c "POLICYRCD='${POLICYRCD}' apt-get install -o Acquire::Retries='5' -y --force-yes ${packages[*]} 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2)"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
$sudo_cmd bash -c "DD_OTELCOLLECTOR_ENABLED='${DD_OTELCOLLECTOR_ENABLED}' DD_API_KEY='${apikey}' DD_SITE='${site}' DD_INSTALLER_REGISTRY_URL='${DD_INSTALLER_REGISTRY_URL}' POLICYRCD='${POLICYRCD}' apt-get install -o Acquire::Retries='5' -y --force-yes ${packages[*]} 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2)"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
$sudo_cmd mv /etc/apt/sources.list.d/datadog-ddot.list.disabled /etc/apt/sources.list.d/datadog-ddot.list
$sudo_cmd bash -c "POLICYRCD='${POLICYRCD}' apt-get install -o Acquire::Retries='5' -y --force-yes ${ddot_package} 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2)"
$sudo_cmd mv /etc/apt/sources.list.d/datadog-ddot.list /etc/apt/sources.list.d/datadog-ddot.list.disabled
Expand Down Expand Up @@ -1653,15 +1695,15 @@ elif [ "$OS" == "SUSE" ]; then

echo -e "\033[34m\n* Installing YUM Repository for Datadog\n\033[0m"
$sudo_cmd sh -c "echo -e '[datadog]\nname=datadog\nenabled=1\nbaseurl=https://${yum_url}/suse/${yum_version_path}/${ARCHI}\ntype=rpm-md\ngpgcheck=1\nrepo_gpgcheck=${rpm_repo_gpgcheck}\ngpgkey=${gpgkeys}' > /etc/zypp/repos.d/datadog.repo"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
echo -e "\033[34m\n* Installing YUM Repository for DDOT\n\033[0m"
$sudo_cmd sh -c "echo -e '[datadog-ddot]\nname=datadog-ddot\nenabled=0\nbaseurl=https://${yum_url}/suse/${ddot_yum_version_path}/${ARCHI}\ntype=rpm-md\ngpgcheck=1\nrepo_gpgcheck=${rpm_repo_gpgcheck}\ngpgkey=${gpgkeys}' > /etc/zypp/repos.d/datadog-ddot.repo"
fi


echo -e "\033[34m\n* Refreshing repositories\n\033[0m"
$sudo_cmd zypper --non-interactive --no-gpg-checks refresh datadog
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
$sudo_cmd zypper --non-interactive --no-gpg-checks refresh datadog-ddot
fi

Expand Down Expand Up @@ -1723,6 +1765,9 @@ elif [ "$OS" == "SUSE" ]; then
remove_existing_packages_for_fips_flavor "$sudo_cmd" "$OS"
fi
remove_existing_datadog_installer_package "$sudo_cmd" "$OS"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -n "$ddot_installed_by_agent" ]; then
remove_existing_datadog_agent_ddot_package "$sudo_cmd" "$OS"
fi

# Complete package_sources_setup
end_stage 0 "$(cat <<-END | tr -d '\n'
Expand All @@ -1731,19 +1776,19 @@ END
)"
start_stage "install_agent_packages"
if [ ${#packages[@]} -ne 0 ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
echo -e " \033[33mInstalling package(s): ${packages[*]} ${ddot_package}\n\033[0m"
else
echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m"
fi
# Not yet retry mechanism in zypper, see https://github.com/openSUSE/zypper/issues/420
if [ -z "$sudo_cmd" ]; then
ZYPP_RPM_DEBUG="${ZYPP_RPM_DEBUG:-0}" SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} zypper --non-interactive --no-refresh install "${packages[@]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) ||:
DD_OTELCOLLECTOR_ENABLED="${DD_OTELCOLLECTOR_ENABLED}" DD_API_KEY="${apikey}" DD_SITE="${site}" DD_INSTALLER_REGISTRY_URL="${DD_INSTALLER_REGISTRY_URL}" ZYPP_RPM_DEBUG="${ZYPP_RPM_DEBUG:-0}" SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} zypper --non-interactive --no-refresh install "${packages[@]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) ||:
else
$sudo_cmd ZYPP_RPM_DEBUG="${ZYPP_RPM_DEBUG:-0}" SYSTEMD_OFFLINE="${SYSTEMD_OFFLINE:-0}" zypper --non-interactive --no-refresh install "${packages[@]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) ||:
$sudo_cmd DD_OTELCOLLECTOR_ENABLED="${DD_OTELCOLLECTOR_ENABLED}" DD_API_KEY="${apikey}" DD_SITE="${site}" DD_INSTALLER_REGISTRY_URL="${DD_INSTALLER_REGISTRY_URL}" ZYPP_RPM_DEBUG="${ZYPP_RPM_DEBUG:-0}" SYSTEMD_OFFLINE="${SYSTEMD_OFFLINE:-0}" zypper --non-interactive --no-refresh install "${packages[@]}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) ||:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The install here passes env vars directly, but the yum and apt install paths use a bash -c wrapper for the env vars. Should that be aligned here too for consistency?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

I don't want to change that, this has probably been done on purpose...

fi

if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_installed_by_agent" ]; then
if [ -z "$sudo_cmd" ]; then
ZYPP_RPM_DEBUG="${ZYPP_RPM_DEBUG:-0}" SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} zypper --non-interactive --no-refresh install "${ddot_package}" 2> >($sudo_cmd tee /tmp/ddog_install_error_msg >&2) ||:
else
Expand Down Expand Up @@ -2222,6 +2267,8 @@ elif [ ! "$no_agent" ]; then
fi

# DDOT configuration update
# Even if DDOT is installed by the agent, update_ddot still needs to run
# to enable otelcollector in datadog.yaml after datadog.yaml is written.
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
update_ddot "$sudo_cmd" "$config_file"
manage_otel_config "$sudo_cmd" "$otel_config_file" "$apikey" "$site"
Expand Down
1 change: 1 addition & 0 deletions test/dockertest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ docker run --rm --platform "$PLATFORM" \
-e DD_COMPLIANCE_CONFIG_ENABLED="${DD_COMPLIANCE_CONFIG_ENABLED}" \
-e DD_RUNTIME_SECURITY_CONFIG_ENABLED="${DD_RUNTIME_SECURITY_CONFIG_ENABLED}" \
-e DD_SYSTEM_PROBE_SERVICE_MONITORING_ENABLED="${DD_SYSTEM_PROBE_SERVICE_MONITORING_ENABLED}" \
-e DD_OTELCOLLECTOR_ENABLED="${DD_OTELCOLLECTOR_ENABLED}" \
-e DD_INSTALL_ONLY=true \
-e DD_AGENT_MINOR_VERSION="${MINOR_VERSION}" \
-e DD_AGENT_FLAVOR="${FLAVOR}" \
Expand Down