Repository: Azure/WALinuxAgent
Pull request #2509 (2022-02-14 23:09:46)

ignore firewall packets reset error, check enable firewall config flag and extend cgroup extension monitoring expiry time
<!-- DO NOT DELETE THIS TEMPLATE -->

## Description

Issue # <!-- if any -->
<!--
Please add an informative description that covers that changes made by the pull request. 
This checklist is used to make sure that common issues in a pull request are addressed.
This will expedite the process of getting your pull request merged and avoid extra work on your part to fix issues discovered during the review process.
-->

---

### PR information
- [ ] The title of the PR is clear and informative.
- [ ] There are a small number of commits, each of which has an informative message. This means that previously merged commits do not appear in the history of the PR. For information on cleaning up the commits in your pull request, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md).
- [ ] If applicable, the PR references the bug/issue that it fixes in the description.
- [ ] New Unit tests were added for the changes made

### Quality of Code and Contribution Guidelines
- [ ] I have read the [contribution guidelines](https://github.com/Azure/WALinuxAgent/blob/master/.github/CONTRIBUTING.md).

codecov[bot]: # [Codecov](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure) Report
> Merging [#2509](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure) (6c80b55) into [develop](https://codecov.io/gh/Azure/WALinuxAgent/commit/daad9fb4486f26b8729d7333c134eb810c501f0b?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure) (daad9fb) will **decrease** coverage by `0.02%`.
> The diff coverage is `75.00%`.

[![Impacted file tree graph](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509/graphs/tree.svg?width=650&height=150&src=pr&token=ae90E2KYCw&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure)](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure)

```diff
@@             Coverage Diff             @@
##           develop    #2509      +/-   ##
===========================================
- Coverage    71.84%   71.81%   -0.03%     
===========================================
  Files          101      101              
  Lines        15080    15082       +2     
  Branches      2392     2393       +1     
===========================================
- Hits         10834    10831       -3     
- Misses        3763     3767       +4     
- Partials       483      484       +1     
```


| [Impacted Files](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure) | Coverage Δ | |
|---|---|---|
| [azurelinuxagent/common/conf.py](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure#diff-YXp1cmVsaW51eGFnZW50L2NvbW1vbi9jb25mLnB5) | `79.05% <0.00%> (ø)` | |
| [azurelinuxagent/common/osutil/default.py](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure#diff-YXp1cmVsaW51eGFnZW50L2NvbW1vbi9vc3V0aWwvZGVmYXVsdC5weQ==) | `59.27% <100.00%> (-0.22%)` | :arrow_down: |
| [azurelinuxagent/ga/update.py](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure#diff-YXp1cmVsaW51eGFnZW50L2dhL3VwZGF0ZS5weQ==) | `88.80% <100.00%> (+0.02%)` | :arrow_up: |
| [azurelinuxagent/common/event.py](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure#diff-YXp1cmVsaW51eGFnZW50L2NvbW1vbi9ldmVudC5weQ==) | `85.36% <0.00%> (-0.68%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure). Last update [daad9fb...6c80b55](https://codecov.io/gh/Azure/WALinuxAgent/pull/2509?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=Azure).


Patch:
diff --git a/azurelinuxagent/common/conf.py b/azurelinuxagent/common/conf.py
index daf9d0e5..af23a04c 100644
--- a/azurelinuxagent/common/conf.py
+++ b/azurelinuxagent/common/conf.py
@@ -160,7 +160,7 @@ __STRING_OPTIONS__ = {
     "ResourceDisk.MountOptions": None,
     "ResourceDisk.Filesystem": "ext3",
     "AutoUpdate.GAFamily": "Prod",
-    "Debug.CgroupMonitorExpiryTime": "2022-01-31",
+    "Debug.CgroupMonitorExpiryTime": "2022-03-31",
     "Debug.CgroupMonitorExtensionName": "Microsoft.Azure.Monitor.AzureMonitorLinuxAgent",
 }
 
@@ -546,11 +546,11 @@ def get_agent_cpu_quota(conf=__conf__):
 
 def get_cgroup_monitor_expiry_time (conf=__conf__):
     """
-    cgroups monitoring disabled after expiry time
+    cgroups monitoring for pilot extensions disabled after expiry time
 
     NOTE: This option is experimental and may be removed in later versions of the Agent.
     """
-    return conf.get("Debug.CgroupMonitorExpiryTime", "2022-01-31")
+    return conf.get("Debug.CgroupMonitorExpiryTime", "2022-03-31")
 
 def get_cgroup_monitor_extension_name (conf=__conf__):
     """
diff --git a/azurelinuxagent/common/osutil/default.py b/azurelinuxagent/common/osutil/default.py
index f18ff904..d2ae36e8 100644
--- a/azurelinuxagent/common/osutil/default.py
+++ b/azurelinuxagent/common/osutil/default.py
@@ -167,9 +167,10 @@ class DefaultOSUtil(object):
                         return int(m.group(1))
 
             except Exception as e:
-                if isinstance(e, CommandError) and e.returncode == 3:  # pylint: disable=E1101
-                    # Transient error  that we ignore.  This code fires every loop
+                if isinstance(e, CommandError) and (e.returncode == 3 or e.returncode == 4):  # pylint: disable=E1101
+                    # Transient error that we ignore returncode 3. This code fires every loop
                     # of the daemon (60m), so we will get the value eventually.
+                    # ignore returncode 4 as temporary fix (RULE_REPLACE failed (Invalid argument))
                     return 0
                 logger.warn("Failed to get firewall packets: {0}", ustr(e))
                 return -1
diff --git a/azurelinuxagent/ga/update.py b/azurelinuxagent/ga/update.py
index f5785bc4..8d4f0a24 100644
--- a/azurelinuxagent/ga/update.py
+++ b/azurelinuxagent/ga/update.py
@@ -1300,6 +1300,9 @@ class UpdateHandler(object):
 
     def _add_accept_tcp_firewall_rule_if_not_enabled(self, dst_ip):
 
+        if not conf.enable_firewall():
+            return
+
         def _execute_run_command(command):
             # Helper to execute a run command, returns True if no exception
             # Here we primarily check if an  iptable rule exist. True if it exits , false if not


Test patch:
diff --git a/tests/common/osutil/test_default.py b/tests/common/osutil/test_default.py
index 0f7d445f..2817a634 100644
--- a/tests/common/osutil/test_default.py
+++ b/tests/common/osutil/test_default.py
@@ -716,6 +716,13 @@ Match host 192.168.1.2\n\
                 mock_iptables.set_command(osutil.get_firewall_packets_command(mock_iptables.wait), exit_code=3, output="can't initialize iptables table `security': iptables who? (do you need to insmod?)")
                 self.assertEqual(0, osutil.DefaultOSUtil().get_firewall_dropped_packets())
 
+    def test_get_firewall_dropped_packets_should_ignore_returncode_4(self):
+
+        with TestOSUtil._mock_iptables() as mock_iptables:
+            with patch.object(osutil, '_enable_firewall', True):
+                mock_iptables.set_command(osutil.get_firewall_packets_command(mock_iptables.wait), exit_code=4, output="iptables v1.8.2 (nf_tables): RULE_REPLACE failed (Invalid argument): rule in chain OUTPUT")
+                self.assertEqual(0, osutil.DefaultOSUtil().get_firewall_dropped_packets())
+
     def test_get_firewall_dropped_packets(self):
 
         destination = '168.63.129.16'
diff --git a/tests/ga/test_update.py b/tests/ga/test_update.py
index 013c9223..f9f1034a 100644
--- a/tests/ga/test_update.py
+++ b/tests/ga/test_update.py
@@ -1708,87 +1708,131 @@ class TestUpdate(UpdateTestCase):
 
         with TestOSUtil._mock_iptables() as mock_iptables:
             with _get_update_handler(test_data=DATA_FILE) as (update_handler, _):
-                with patch.object(osutil, '_enable_firewall', True):
-                    # drop rule is present
-                    mock_iptables.set_command(AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                                                           wait=mock_iptables.wait), exit_code=0)
-                    # non root tcp iptable rule is absent
-                    mock_iptables.set_command(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait), exit_code=1)
-                    update_handler.run(debug=True)
-
-                    drop_check_command = TestOSUtil._command_to_string(AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                                                                                    wait=mock_iptables.wait))
-                    accept_tcp_check_rule = TestOSUtil._command_to_string(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait))
-                    accept_tcp_insert_rule = TestOSUtil._command_to_string(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.INSERT_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait))
-
-                    # Filtering the mock iptable command calls with only the once related to this test.
-                    filtered_mock_iptable_calls = [cmd for cmd in mock_iptables.command_calls if cmd in [drop_check_command, accept_tcp_check_rule, accept_tcp_insert_rule]]
-
-                    self.assertEqual(len(filtered_mock_iptable_calls), 3, "Incorrect number of calls to iptables: [{0}]".format(mock_iptables.command_calls))
-                    self.assertEqual(filtered_mock_iptable_calls[0], drop_check_command,
-                                     "The first command should check the drop rule")
-                    self.assertEqual(filtered_mock_iptable_calls[1], accept_tcp_check_rule,
-                                     "The second command should check the accept rule")
-                    self.assertEqual(filtered_mock_iptable_calls[2], accept_tcp_insert_rule,
-                                     "The third command should add the accept rule")
+                with patch('azurelinuxagent.common.conf.enable_firewall', return_value=True):
+                    with patch.object(osutil, '_enable_firewall', True):
+                        # drop rule is present
+                        mock_iptables.set_command(
+                            AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                         mock_iptables.destination,
+                                                                         wait=mock_iptables.wait), exit_code=0)
+                        # non root tcp iptable rule is absent
+                        mock_iptables.set_command(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                                       mock_iptables.destination,
+                                                                                       wait=mock_iptables.wait),
+                                                  exit_code=1)
+
+                        update_handler._add_accept_tcp_firewall_rule_if_not_enabled(mock_iptables.destination)
+
+                        drop_check_command = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                         mock_iptables.destination,
+                                                                         wait=mock_iptables.wait))
+                        accept_tcp_check_rule = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                 mock_iptables.destination,
+                                                                 wait=mock_iptables.wait))
+                        accept_tcp_insert_rule = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.INSERT_COMMAND,
+                                                                 mock_iptables.destination,
+                                                                 wait=mock_iptables.wait))
+
+                        # Filtering the mock iptable command calls with only the ones related to this test.
+                        filtered_mock_iptable_calls = [cmd for cmd in mock_iptables.command_calls if
+                                                       cmd in [drop_check_command, accept_tcp_check_rule,
+                                                               accept_tcp_insert_rule]]
+
+                        self.assertEqual(len(filtered_mock_iptable_calls), 3,
+                                         "Incorrect number of calls to iptables: [{0}]".format(
+                                             mock_iptables.command_calls))
+                        self.assertEqual(filtered_mock_iptable_calls[0], drop_check_command,
+                                         "The first command should check the drop rule")
+                        self.assertEqual(filtered_mock_iptable_calls[1], accept_tcp_check_rule,
+                                         "The second command should check the accept rule")
+                        self.assertEqual(filtered_mock_iptable_calls[2], accept_tcp_insert_rule,
+                                         "The third command should add the accept rule")
 
     def test_it_should_not_set_dns_tcp_iptable_if_drop_unavailable(self):
 
         with TestOSUtil._mock_iptables() as mock_iptables:
             with _get_update_handler(test_data=DATA_FILE) as (update_handler, _):
-                with patch.object(osutil, '_enable_firewall', True):
-                    # drop rule is not available
-                    mock_iptables.set_command(AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                                                           wait=mock_iptables.wait), exit_code=1)
-
-                    update_handler.run(debug=True)
-
-                    drop_check_command = TestOSUtil._command_to_string(AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                                                                                    wait=mock_iptables.wait))
-                    accept_tcp_check_rule = TestOSUtil._command_to_string(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait))
-                    accept_tcp_insert_rule = TestOSUtil._command_to_string(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.INSERT_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait))
-
-                    # Filtering the mock iptable command calls with only the once related to this test.
-                    filtered_mock_iptable_calls = [cmd for cmd in mock_iptables.command_calls if cmd in [drop_check_command, accept_tcp_check_rule, accept_tcp_insert_rule]]
-
-                    self.assertEqual(len(filtered_mock_iptable_calls), 1, "Incorrect number of calls to iptables: [{0}]".format(mock_iptables.command_calls))
-                    self.assertEqual(filtered_mock_iptable_calls[0], drop_check_command,
-                                     "The first command should check the drop rule")
+                with patch('azurelinuxagent.common.conf.enable_firewall', return_value=True):
+                    with patch.object(osutil, '_enable_firewall', True):
+                        # drop rule is not available
+                        mock_iptables.set_command(
+                            AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                         mock_iptables.destination,
+                                                                         wait=mock_iptables.wait), exit_code=1)
+
+                        update_handler._add_accept_tcp_firewall_rule_if_not_enabled(mock_iptables.destination)
+
+                        drop_check_command = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                         mock_iptables.destination,
+                                                                         wait=mock_iptables.wait))
+                        accept_tcp_check_rule = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                 mock_iptables.destination,
+                                                                 wait=mock_iptables.wait))
+                        accept_tcp_insert_rule = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.INSERT_COMMAND,
+                                                                 mock_iptables.destination,
+                                                                 wait=mock_iptables.wait))
+
+                        # Filtering the mock iptable command calls with only the ones related to this test.
+                        filtered_mock_iptable_calls = [cmd for cmd in mock_iptables.command_calls if
+                                                       cmd in [drop_check_command, accept_tcp_check_rule,
+                                                               accept_tcp_insert_rule]]
+
+                        self.assertEqual(len(filtered_mock_iptable_calls), 1,
+                                         "Incorrect number of calls to iptables: [{0}]".format(
+                                             mock_iptables.command_calls))
+                        self.assertEqual(filtered_mock_iptable_calls[0], drop_check_command,
+                                         "The first command should check the drop rule")
 
     def test_it_should_not_set_dns_tcp_iptable_if_drop_and_accept_available(self):
 
         with TestOSUtil._mock_iptables() as mock_iptables:
             with _get_update_handler(test_data=DATA_FILE) as (update_handler, _):
-                with patch.object(osutil, '_enable_firewall', True):
-                    # drop rule is available
-                    mock_iptables.set_command(AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                                                           wait=mock_iptables.wait), exit_code=0)
-                    # non root tcp iptable rule is available
-                    mock_iptables.set_command(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait), exit_code=0)
-
-                    update_handler.run(debug=True)
-
-                    drop_check_command = TestOSUtil._command_to_string(AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                                                                                    wait=mock_iptables.wait))
-                    accept_tcp_check_rule = TestOSUtil._command_to_string(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait))
-                    accept_tcp_insert_rule = TestOSUtil._command_to_string(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.INSERT_COMMAND, mock_iptables.destination,
-                                                             wait=mock_iptables.wait))
-
-                    # Filtering the mock iptable command calls with only the once related to this test.
-                    filtered_mock_iptable_calls = [cmd for cmd in mock_iptables.command_calls if cmd in [drop_check_command, accept_tcp_check_rule, accept_tcp_insert_rule]]
-
-                    self.assertEqual(len(filtered_mock_iptable_calls), 2, "Incorrect number of calls to iptables: [{0}]".format(mock_iptables.command_calls))
-                    self.assertEqual(filtered_mock_iptable_calls[0], drop_check_command,
-                                     "The first command should check the drop rule")
-                    self.assertEqual(filtered_mock_iptable_calls[1], accept_tcp_check_rule,
-                                     "The second command should check the accept rule")
+                with patch('azurelinuxagent.common.conf.enable_firewall', return_value=True):
+                    with patch.object(osutil, '_enable_firewall', True):
+                        # drop rule is available
+                        mock_iptables.set_command(
+                            AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                         mock_iptables.destination,
+                                                                         wait=mock_iptables.wait), exit_code=0)
+                        # non root tcp iptable rule is available
+                        mock_iptables.set_command(AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                                       mock_iptables.destination,
+                                                                                       wait=mock_iptables.wait),
+                                                  exit_code=0)
+
+                        update_handler._add_accept_tcp_firewall_rule_if_not_enabled(mock_iptables.destination)
+
+                        drop_check_command = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_wire_non_root_drop_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                         mock_iptables.destination,
+                                                                         wait=mock_iptables.wait))
+                        accept_tcp_check_rule = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.CHECK_COMMAND,
+                                                                 mock_iptables.destination,
+                                                                 wait=mock_iptables.wait))
+                        accept_tcp_insert_rule = TestOSUtil._command_to_string(
+                            AddFirewallRules.get_accept_tcp_rule(AddFirewallRules.INSERT_COMMAND,
+                                                                 mock_iptables.destination,
+                                                                 wait=mock_iptables.wait))
+
+                        # Filtering the mock iptable command calls with only the ones related to this test.
+                        filtered_mock_iptable_calls = [cmd for cmd in mock_iptables.command_calls if
+                                                       cmd in [drop_check_command, accept_tcp_check_rule,
+                                                               accept_tcp_insert_rule]]
+
+                        self.assertEqual(len(filtered_mock_iptable_calls), 2,
+                                         "Incorrect number of calls to iptables: [{0}]".format(
+                                             mock_iptables.command_calls))
+                        self.assertEqual(filtered_mock_iptable_calls[0], drop_check_command,
+                                         "The first command should check the drop rule")
+                        self.assertEqual(filtered_mock_iptable_calls[1], accept_tcp_check_rule,
+                                         "The second command should check the accept rule")
 
     @contextlib.contextmanager
     def _setup_test_for_ext_event_dirs_retention(self):
diff --git a/tests/test_agent.py b/tests/test_agent.py
index 56ac1604..f5a3b90b 100644
--- a/tests/test_agent.py
+++ b/tests/test_agent.py
@@ -36,7 +36,7 @@ Debug.CgroupCheckPeriod = 300
 Debug.CgroupDisableOnProcessCheckFailure = True
 Debug.CgroupDisableOnQuotaCheckFailure = True
 Debug.CgroupLogMetrics = False
-Debug.CgroupMonitorExpiryTime = 2022-01-31
+Debug.CgroupMonitorExpiryTime = 2022-03-31
 Debug.CgroupMonitorExtensionName = Microsoft.Azure.Monitor.AzureMonitorLinuxAgent
 Debug.EnableFastTrack = False
 Debug.EnableGAVersioning = False