From eb3f49f00ffe763fa5258c72d5c6571550e04226 Mon Sep 17 00:00:00 2001 From: makotocc0107 <1424018999@qq.com> Date: Tue, 24 Sep 2024 16:53:57 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=A2=9E=E6=B7=BB]=E5=A2=9E=E5=8A=A0=E4=BA=86?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E9=85=8D=E7=BD=AE=E6=9C=8D=E5=8A=A1=EF=BC=8C?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=AF=BB=E5=8F=96=E7=BD=91=E7=BB=9C=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=8F=8A=E5=AF=B9=E5=BA=94=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 1 + management-panel/Dockerfile | 6 +-- .../app/Filament/Pages/ManageNetwork.php | 47 ++++++++++++++++++- .../app/Services/NetworkService.php | 45 ++++++++++++++++++ 4 files changed, 95 insertions(+), 4 deletions(-) create mode 100644 management-panel/app/Services/NetworkService.php diff --git a/docker-compose.yml b/docker-compose.yml index e5fa575..dc2f622 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,6 +22,7 @@ services: - etcd - prometheus restart: always + network_mode: host node-exporter: build: docker/node_exporter # privileged: true diff --git a/management-panel/Dockerfile b/management-panel/Dockerfile index 79c2e7f..e739f96 100644 --- a/management-panel/Dockerfile +++ b/management-panel/Dockerfile @@ -5,7 +5,7 @@ FROM openeuler/openeuler:24.03 AS dev # 更新系统和安装软件包 RUN dnf update -y && \ - dnf install -y git php-cli php-bcmath php-mbstring php-pdo php-pecl-zip php-opcache php-sodium php-intl php-pear php-devel c-ares-devel libcurl-devel openssl-devel brotli brotli-devel && \ + dnf install -y git php-cli php-bcmath php-mbstring php-pdo php-pecl-zip php-opcache php-sodium php-intl php-pear php-devel c-ares-devel libcurl-devel openssl-devel brotli brotli-devel net-tools && \ dnf clean all && \ rm -rf /var/cache/dnf/* @@ -43,7 +43,7 @@ RUN npm config set registry https://registry.npmmirror.com && \ FROM openeuler/openeuler:24.03 AS runtime RUN dnf update -y \ - && dnf install php-cli php-bcmath php-mbstring php-pdo php-pecl-zip php-posix php-sodium php-xml php-intl php-opcache c-ares libcurl openssl brotli -y \ + && dnf install php-cli php-bcmath php-mbstring php-pdo php-pecl-zip php-posix php-sodium php-xml php-intl php-opcache c-ares libcurl openssl brotli net-tools -y \ && dnf clean all && rm -rf /var/cache/dnf/* RUN mkdir -p /usr/lib64/php/modules/ @@ -82,4 +82,4 @@ RUN chmod +x /app/entrypoint.sh \ EXPOSE 8000 # 设置工作目录 -WORKDIR /app \ No newline at end of file +WORKDIR /app diff --git a/management-panel/app/Filament/Pages/ManageNetwork.php b/management-panel/app/Filament/Pages/ManageNetwork.php index 1158cbd..e401fe9 100644 --- a/management-panel/app/Filament/Pages/ManageNetwork.php +++ b/management-panel/app/Filament/Pages/ManageNetwork.php @@ -2,6 +2,7 @@ namespace App\Filament\Pages; +use App\Services\NetworkService; use App\Settings\NetworkSettings; use Filament\Forms; use Filament\Forms\Form; @@ -19,10 +20,53 @@ class ManageNetwork extends SettingsPage protected static ?string $navigationLabel = '网络连接配置管理'; protected static ?string $title = '网络连接配置管理'; + public function form(Form $form): Form { + // 获取当前网络接口 + $interfaces = NetworkService::getNetworkInterfaces(); + return $form ->schema([ + // 添加网络接口选择框 + Select::make('network_interface') + ->label('选择网络接口') + ->options(array_combine(array_keys($interfaces), array_keys($interfaces))) + ->reactive() + ->afterStateUpdated(function ($state, callable $set) use ($interfaces) { + // 调试输出:检查当前选择的接口 + error_log("选择的接口: " . $state); + + // 当选择框的值更新时,自动填充对应的网络信息 + if (isset($interfaces[$state])) { + $set('ip', $interfaces[$state]['ip'] ?? '无IP地址'); + $set('mask', $interfaces[$state]['mask'] ?? '无子网掩码'); + // 假设我们通过其他方式获取网关(如手动输入或自动获取) +// $set('gateway', '自动获取或手动输入的值'); + error_log("ip " . $interfaces[$state]['ip']); + error_log("mask " . $interfaces[$state]['mask']); + } + else{ + error_log("未找到接口:" . $state); + } + }), + + // 动态显示端口信息 + Fieldset::make('端口信息') + ->schema([ + TextInput::make('ip') + ->label("IP地址") + ->readOnly() // 禁用以表示这是自动填充的字段 + ->reactive(), + TextInput::make('mask') + ->label('子网掩码') + ->readOnly() + ->reactive(), + ]) + ->visible(fn($get) => !is_null($get('network_interface'))) // 检查是否有选择的接口 + ->reactive(), + + // DHCP选项 Select::make('dhcp_enabled') ->options([ true => "是", @@ -33,7 +77,8 @@ class ManageNetwork extends SettingsPage ->required() ->reactive(), - Fieldset::make() + // 动态显示的网络信息字段 + Fieldset::make('网络配置') ->schema([ TextInput::make('ip_address') ->label("IP地址") diff --git a/management-panel/app/Services/NetworkService.php b/management-panel/app/Services/NetworkService.php new file mode 100644 index 0000000..2b08fd7 --- /dev/null +++ b/management-panel/app/Services/NetworkService.php @@ -0,0 +1,45 @@ + null, + 'mask' => null, + ]; + } + // 匹配 IPv4 地址 + if ($interface && preg_match('/inet ([\d\.]+)/', $line, $matches)) { + $interfaces[$interface]['ip'] = $matches[1]; + } + // 匹配子网掩码 + if ($interface && preg_match('/netmask ([\d\.]+)/', $line, $matches)) { + $interfaces[$interface]['mask'] = $matches[1]; + } + } + + // 输出调试信息,检查解析到的接口 + error_log(print_r($interfaces, true)); + + return $interfaces; + } + +}