Skip to content
Draft
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
61 changes: 41 additions & 20 deletions install_script.sh.template
Original file line number Diff line number Diff line change
Expand Up @@ -1233,6 +1233,8 @@ if [[ "$agent_flavor" == "datadog-fips-agent" ]]; then
fi
fi

ddot_use_installer=
ddot_oci_tag="latest"
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ "$agent_major_version" != "7" ] || { [ -n "$agent_minor_version_without_patch" ] && [ "${agent_minor_version_without_patch}" -lt 69 ]; } then
ERROR_MESSAGE="The datadog-agent-ddot is only available since version AGENT_MAJOR_VERSION_PLACEHOLDER.69.3 and requested minor version is $agent_minor_version"
Expand All @@ -1241,11 +1243,26 @@ 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=
# Starting from 7.78.0, DDOT is installed via datadog-installer extension install
if [ -z "$agent_minor_version_without_patch" ] || [ "${agent_minor_version_without_patch}" -ge 78 ]; then
ddot_use_installer=true
if [ -n "$agent_minor_version_without_patch" ]; then
if echo "${agent_minor_version}" | grep -q '~'; then
ddot_oci_tag="${agent_major_version}.$(echo "${agent_minor_version}" | sed 's/~/-/')"
else
ddot_oci_tag="${agent_major_version}.${agent_minor_version}-1"
fi
fi
fi
fi
if [ -n "$TESTING_DDOT_OCI_TAG" ]; then
ddot_oci_tag="$TESTING_DDOT_OCI_TAG"
fi
if [ -n "$TESTING_APT_URL" ] || [ -n "$TESTING_YUM_URL" ]; then
ddot_oci_registry=${DD_INSTALLER_REGISTRY_URL_AGENT_PACKAGE:-"installtesting.datad0g.com"}
else
ddot_oci_registry=${DD_INSTALLER_REGISTRY_URL_AGENT_PACKAGE:-$([[ "$DD_SITE" == "datad0g.com" ]] && echo "install.datad0g.com" || echo "install.datadoghq.com")}
fi

if [ -n "$remote_updates" ] && { [ -n "$agent_minor_version_without_patch" ] && [ "$agent_minor_version_without_patch" -lt 69 ]; }; then
echo -e "\033[33mWarning: Remote Agent Management is not supported for Agent versions less than 7.69 (General Availability).\n\033[0m"
Expand Down Expand Up @@ -1335,7 +1352,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_use_installer" ]; 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 @@ -1383,15 +1400,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_use_installer" ]; 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

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.

Did some testing and found that the rpm -> oci upgrade was failing

Suggested change
# When upgrading to 7.78+, DDOT is managed via OCI extension install.
# Remove the legacy datadog-agent-ddot RPM first to avoid strict version
# dependency conflicts that prevent yum from upgrading datadog-agent.
if [ -n "$ddot_use_installer" ] && rpm -q datadog-agent-ddot &>/dev/null; then
echo -e " \033[33mRemoving legacy datadog-agent-ddot RPM package before upgrade...\n\033[0m"
$sudo_cmd yum -y remove datadog-agent-ddot
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 "SYSTEMD_OFFLINE=${SYSTEMD_OFFLINE:-0} DATADOG_TRACE_ID=${DATADOG_TRACE_ID} DATADOG_PARENT_ID=${DATADOG_PARENT_ID} DD_INSTALLER_REGISTRY_URL=${DD_INSTALLER_REGISTRY_URL} 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} DD_INSTALLER_REGISTRY_URL=${DD_INSTALLER_REGISTRY_URL} yum -y install $dnf_flag ${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.

Do we also need to set DD_INSTALLER_REGISTRY_URL_AGENT_PACKAGE on the install commands? We're using DD_INSTALLER_REGISTRY_URL_AGENT_PACKAGE for ddot_oci_registry but this env var isn't passed to the install commands. So if DD_INSTALLER_REGISTRY_URL_AGENT_PACKAGE is set without DD_INSTALLER_REGISTRY_URL, we get the following error in upgrades/downgrades:

could not download image using install.datadoghq.com/agent-package:7.78.0-rc.2-1: GET https://install.datadoghq.com/v2/agent-package/manifests/7.78.0-rc.2-1: unexpected status code 404 Not Found: <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>v2/agent-package/manifests/7.78.0-rc.2-1</Key><RequestId>EKNAE187CXD0RGH9</RequestId><HostId>zKo74kJNoNUgVjJfMUt7hjw+WGUoiyZ4lbB2E1x04XKbAhoiLxEKmqDos7a+qyZYXffbCInF2bI=</HostId></Error>
could not download image using install.datadoghq.com/agent-package:7.78.0-rc.2-1: GET https://gcr.io/v2/datadoghq/agent-package/manifests/7.78.0-rc.2-1: MANIFEST_UNKNOWN: Failed to fetch "7.78.0-rc.2-1"
failed to restore extensions: could not install extensions: could not download package: could not download package: could not download image from any registry: could not download image using install.datadoghq.com/agent-package:7.78.0-rc.2-1: GET https://install.datadoghq.com/v2/agent-package/manifests/7.78.0-rc.2-1: unexpected status code 404 Not Found: <?xml version="1.0" encoding="UTF-8"?>
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>v2/agent-package/manifests/7.78.0-rc.2-1</Key><RequestId>EKNAE187CXD0RGH9</RequestId><HostId>zKo74kJNoNUgVjJfMUt7hjw+WGUoiyZ4lbB2E1x04XKbAhoiLxEKmqDos7a+qyZYXffbCInF2bI=</HostId></Error>; could not download image using install.datadoghq.com/agent-package:7.78.0-rc.2-1: GET https://gcr.io/v2/datadoghq/agent-package/manifests/7.78.0-rc.2-1: MANIFEST_UNKNOWN: Failed to fetch "7.78.0-rc.2-1"
W: --force-yes is deprecated, use one of the options starting with --allow instead.

if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_use_installer" ]; 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 +1473,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_use_installer" ]; 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 +1524,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_use_installer" ]; 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 @@ -1546,7 +1563,7 @@ If the cause is unclear, please contact Datadog support.
$sudo_cmd rm -rf "/opt/datadog-agent/python-scripts/__pycache__"
fi

if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_use_installer" ]; 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 +1584,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 "POLICYRCD='${POLICYRCD}' DD_INSTALLER_REGISTRY_URL='${DD_INSTALLER_REGISTRY_URL}' 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_use_installer" ]; 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 +1670,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_use_installer" ]; 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_use_installer" ]; then
$sudo_cmd zypper --non-interactive --no-gpg-checks refresh datadog-ddot
fi

Expand Down Expand Up @@ -1731,19 +1748,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_use_installer" ]; 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_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_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) ||:
fi

if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ] && [ -z "$ddot_use_installer" ]; 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 @@ -2223,8 +2240,12 @@ fi

# DDOT configuration update
if [ -n "$DD_OTELCOLLECTOR_ENABLED" ]; then
update_ddot "$sudo_cmd" "$config_file"
manage_otel_config "$sudo_cmd" "$otel_config_file" "$apikey" "$site"
if [ -n "$ddot_use_installer" ]; then
$sudo_cmd datadog-installer extension install "oci://${ddot_oci_registry}/agent-package:${ddot_oci_tag}" "ddot"
else
update_ddot "$sudo_cmd" "$config_file"
manage_otel_config "$sudo_cmd" "$otel_config_file" "$apikey" "$site"
fi
fi

if [ -e "$(dirname $dd_environment_file)" ]; then
Expand Down
Loading