Skip to content

Commit ead57b2

Browse files
committed
incorporate review comments
Signed-off-by: Mayank Singh <mayankfz@gmail.com>
1 parent 27b33b4 commit ead57b2

7 files changed

Lines changed: 118 additions & 21 deletions

File tree

CODEOWNERS

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818
/azurelinuxagent/common/rdma.py @longlimsft
1919
/azurelinuxagent/pa/rdma/ @longlimsft
2020

21+
#
22+
# Azure Container Linux (ACL)
23+
#
24+
/azurelinuxagent/common/osutil/acl.py @mayankfz
25+
/config/acl/ @mayankfz
26+
/init/acl/ @mayankfz
27+
2128
#
2229
# Linux Agent team
2330
#
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
#
2+
# Copyright 2018 Microsoft Corporation
3+
#
4+
# Licensed under the Apache License, Version 2.0 (the "License");
5+
# you may not use this file except in compliance with the License.
6+
# You may obtain a copy of the License at
7+
#
8+
# http://www.apache.org/licenses/LICENSE-2.0
9+
#
10+
# Unless required by applicable law or agreed to in writing, software
11+
# distributed under the License is distributed on an "AS IS" BASIS,
12+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
# See the License for the specific language governing permissions and
14+
# limitations under the License.
15+
#
16+
# Requires Python 2.6+ and Openssl 1.0+
17+
#
18+
# Azure Container Linux (ACL) is an immutable, sysext-based distro derived
19+
# from Flatcar. This osutil is a standalone copy of MarinerOSUtil with
20+
# ACL-specific overrides so that future Azure-Linux changes do not
21+
# inadvertently affect the immutable ACL image.
22+
#
23+
24+
from azurelinuxagent.common.osutil.default import DefaultOSUtil
25+
26+
27+
class AclOSUtil(DefaultOSUtil):
28+
def __init__(self):
29+
super(AclOSUtil, self).__init__()
30+
self.jit_enabled = True
31+
32+
@staticmethod
33+
def get_systemd_unit_file_install_path():
34+
# ACL delivers waagent as a sysext; /usr is read-only.
35+
# Writable systemd units must go to /etc/systemd/system.
36+
return "/etc/systemd/system"
37+
38+
@staticmethod
39+
def get_agent_bin_path():
40+
return "/usr/bin"
41+
42+
def is_dhcp_enabled(self):
43+
return True
44+
45+
def start_network(self):
46+
self._run_command_without_raising(["systemctl", "start", "systemd-networkd"], log_error=False)
47+
48+
def restart_if(self, ifname=None, retries=None, wait=None):
49+
self._run_command_without_raising(["systemctl", "restart", "systemd-networkd"])
50+
51+
def restart_ssh_service(self):
52+
# ACL uses sshd.socket for socket-activated SSH (similar to
53+
# Flatcar/CoreOS). Restarting sshd.service would conflict with
54+
# the active sshd.socket.
55+
pass
56+
57+
def stop_dhcp_service(self):
58+
self._run_command_without_raising(["systemctl", "stop", "systemd-networkd"], log_error=False)
59+
60+
def start_dhcp_service(self):
61+
self._run_command_without_raising(["systemctl", "start", "systemd-networkd"], log_error=False)
62+
63+
def start_agent_service(self):
64+
self._run_command_without_raising(["systemctl", "start", "{0}".format(self.service_name)], log_error=False)
65+
66+
def stop_agent_service(self):
67+
self._run_command_without_raising(["systemctl", "stop", "{0}".format(self.service_name)], log_error=False)
68+
69+
def register_agent_service(self):
70+
self._run_command_without_raising(["systemctl", "enable", "{0}".format(self.service_name)], log_error=False)
71+
72+
def unregister_agent_service(self):
73+
self._run_command_without_raising(["systemctl", "disable", "{0}".format(self.service_name)], log_error=False)
74+
75+
def get_dhcp_pid(self):
76+
return self._get_dhcp_pid(["pidof", "systemd-networkd"])
77+
78+
def conf_sshd(self, disable_password):
79+
pass

azurelinuxagent/common/osutil/factory.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import azurelinuxagent.common.logger as logger
2020
from azurelinuxagent.common.version import DISTRO_NAME, DISTRO_CODE_NAME, DISTRO_VERSION, DISTRO_FULL_NAME
2121
from azurelinuxagent.common.utils.distro_version import DistroVersion
22+
from .acl import AclOSUtil
2223
from .alpine import AlpineOSUtil
2324
from .arch import ArchUtil
2425
from .bigip import BigIpOSUtil
@@ -146,6 +147,9 @@ def _get_osutil(distro_name, distro_code_name, distro_version, distro_full_name)
146147
if distro_name == "iosxe":
147148
return IosxeOSUtil()
148149

150+
if "azure container linux" in distro_full_name.lower():
151+
return AclOSUtil()
152+
149153
if distro_name in ["mariner", "azurelinux"]:
150154
return MarinerOSUtil()
151155

azurelinuxagent/common/osutil/mariner.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@
1717
#
1818

1919
from azurelinuxagent.common.osutil.default import DefaultOSUtil
20-
from azurelinuxagent.common.version import DISTRO_FULL_NAME
2120

2221

2322
class MarinerOSUtil(DefaultOSUtil):
2423
def __init__(self):
2524
super(MarinerOSUtil, self).__init__()
2625
self.jit_enabled = True
27-
self.distro_full_name = DISTRO_FULL_NAME
2826

2927
@staticmethod
3028
def get_systemd_unit_file_install_path():
@@ -44,10 +42,6 @@ def restart_if(self, ifname=None, retries=None, wait=None):
4442
self._run_command_without_raising(["systemctl", "restart", "systemd-networkd"])
4543

4644
def restart_ssh_service(self):
47-
# ACL uses sshd.socket for socket-activated SSH (similar to Flatcar/CoreOS).
48-
# Restarting sshd.service would conflict with the active sshd.socket.
49-
if "azure container linux" in self.distro_full_name.lower():
50-
return
5145
self._run_command_without_raising(["systemctl", "restart", "sshd"])
5246

5347
def stop_dhcp_service(self):

config/acl/waagent.conf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
Extensions.Enabled=y
66

7-
Provisioning.Agent=waagent
7+
# Auto-detect the provisioning agent (coreos-cloudinit or waagent).
8+
Provisioning.Agent=auto
89
Provisioning.DeleteRootPassword=n
910
Provisioning.RegenerateSshHostKeyPair=n
1011
Provisioning.SshHostKeyPairType=auto

init/acl/10-waagent-sysext.conf

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,13 @@
1+
# Drop-in for multi-user.target on Azure Container Linux (ACL).
2+
#
3+
# WALinuxAgent is delivered as a systemd-sysext image. Sysext units are
4+
# only visible after systemd-sysext.service merges the overlay, which
5+
# happens *after* the default target is already queued. Without an
6+
# explicit "Upholds=", systemd has no dependency edge to pull
7+
# waagent.service into the boot transaction.
8+
#
9+
# "Upholds=" (systemd 249+) is a soft requirement: it starts the unit
10+
# whenever multi-user.target is active but does not fail the target if
11+
# waagent.service cannot start.
112
[Unit]
213
Upholds=waagent.service

setup.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -164,23 +164,24 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912
164164
src=["config/clearlinux/waagent.conf"])
165165
set_systemd_files(data_files, dest=systemd_dir_path,
166166
src=["init/clearlinux/waagent.service"])
167+
elif name in ["mariner", "azurelinux"] and "azure container linux" in fullname.lower():
168+
set_bin_files(data_files, dest=agent_bin_path)
169+
set_logrotate_files(data_files)
170+
set_conf_files(data_files, dest="/etc",
171+
src=["config/acl/waagent.conf"])
172+
set_systemd_files(data_files, dest=systemd_dir_path,
173+
src=["init/acl/waagent.service"])
174+
multi_user_target_drop_in_dir = os.path.join(systemd_dir_path, "multi-user.target.d")
175+
set_systemd_files(data_files, dest=multi_user_target_drop_in_dir,
176+
src=["init/acl/10-waagent-sysext.conf"])
167177
elif name in ["mariner", "azurelinux"]:
168178
set_bin_files(data_files, dest=agent_bin_path)
169179
set_logrotate_files(data_files)
170-
if "azure container linux" in fullname.lower():
171-
set_conf_files(data_files, dest="/etc",
172-
src=["config/acl/waagent.conf"])
173-
set_systemd_files(data_files, dest=systemd_dir_path,
174-
src=["init/acl/waagent.service"])
175-
multi_user_target_drop_in_dir = os.path.join(systemd_dir_path, "multi-user.target.d")
176-
set_systemd_files(data_files, dest=multi_user_target_drop_in_dir,
177-
src=["init/acl/10-waagent-sysext.conf"])
178-
else:
179-
set_conf_files(data_files, dest="/etc",
180-
src=["config/mariner/waagent.conf"])
181-
set_systemd_files(data_files, dest=systemd_dir_path,
182-
src=["init/mariner/waagent.service"])
183-
set_udev_files(data_files)
180+
set_conf_files(data_files, dest="/etc",
181+
src=["config/mariner/waagent.conf"])
182+
set_systemd_files(data_files, dest=systemd_dir_path,
183+
src=["init/mariner/waagent.service"])
184+
set_udev_files(data_files)
184185
elif name == 'ubuntu':
185186
set_conf_files(data_files, src=["config/ubuntu/waagent.conf"])
186187
set_logrotate_files(data_files)

0 commit comments

Comments
 (0)