主页 > 游戏开发  > 

ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入

ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入

文章目录 前言引入包yaml原始内容操作目标具体代码执行查看结果总结:

前言

之前有个需求,动态修改ubuntu20的ip,看了下: 本质上是修改01-netcfg.yaml文件,然后执行netplan apply就可以了。 所以,需求就变成了 如何对yaml文件的内容进行读取,修改,写入。

引入包

其实springboot提供了2个maven的包用于解析yaml(springboot的各种配置文件都是yaml),引入:

<!-- Jackson (用于JSON处理) --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- SnakeYAML (用于YAML解析和生成) --> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> </dependency> yaml原始内容 network: version: 2 renderer: networkd ethernets: eth0: dhcp4: false addresses: - 192.168.150.1/24 optional: true eth1: dhcp4: false addresses: - 192.168.150.1/24 optional: true enp3s0: dhcp4: true addresses: [] dhcp-identifier: mac optional: true enp4s0: dhcp4: true addresses: [] dhcp-identifier: mac optional: true enp6s0: dhcp4: true addresses: [] dhcp-identifier: mac optional: true enp7s0: dhcp4: true addresses: [] dhcp-identifier: mac optional: true enp8s0: dhcp4: false addresses: - 192.168.150.1/24 dhcp-identifier: mac optional: true 操作目标

目前的配置文件etho网卡是动态的获取ip,现在把配置文件ech修改如下: 固定ip:dhcp4 --》 false 添加网卡: gateway4: 172.16.10.254 设置ip地址: 设置dns,不然不能上外网

具体代码 public static void main(String[] args) { try { // Step 1: 读取YAML文件并加载为Map, 输入YAML文件路径 InputStream inputStream = new FileInputStream("01-netcfg.yaml"); Yaml yaml = new Yaml(); Map<String, Object> yamlMap = yaml.load(inputStream); // Step 2: 使用ObjectMapper将Map转换为JSON字符串 ObjectMapper om = new ObjectMapper(); String jsonStr = om.writeValueAsString(yamlMap); // Step 3: 将JSON字符串解析成JsonNode,便于修改 JsonNode rootNode = om.readTree(jsonStr); // Step 4: 修改eth0节点 JsonNode ethernetsNode = rootNode.path("network").path("ethernets"); // 获取eth0节点并修改其值 JsonNode eth0Node = ethernetsNode.path("eth0"); // 创建新的eth0配置 ((ObjectNode) eth0Node).put("dhcp4", false); ((ObjectNode) eth0Node).putArray("addresses").add("172.16.10.43/24"); ((ObjectNode) eth0Node).put("gateway4", "172.16.10.254"); // 设置新的DNS地址作为数组 JsonNode nameserversNode = eth0Node.path("nameservers"); // 使用ArrayNode来生成数组格式 ArrayNode arrayNode = om.createArrayNode(); arrayNode.add("114.114.114.114"); arrayNode.add("8.8.8.8"); arrayNode.add("8.8.4.4"); ((ObjectNode) nameserversNode).set("addresses", arrayNode); // Step 5: 将修改后的JsonNode转换为Map,这里就是将JsonNode转换为Map Map<String, Object> modifiedMap = om.convertValue(rootNode, Map.class); // Step 6: 使用SnakeYAML将修改后的Map转换为YAML格式 DumperOptions options = new DumperOptions(); options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); Yaml yamlWriter = new Yaml(options); StringWriter stringWriter = new StringWriter(); yamlWriter.dump(modifiedMap, stringWriter); // Step 7: 将新的YAML写回文件 try (BufferedWriter writer = new BufferedWriter(new FileWriter("01-netcfg.yaml"))) { writer.write(stringWriter.toString()); } System.out.println("YAML updated successfully!"); } catch (IOException e) { e.printStackTrace(); } 执行

查看结果

显示已经修改!!

总结:

文章主要介绍了如何使用Java操作YAML文件,具体实现了读取、修改和写入YAML文件的过程。通过引入Jackson和SnakeYAML两个包,实现了将YAML文件内容转换为Map,然后再将Map修改后重新转换为YAML格式并写回文件。

在具体操作目标上,通过代码示例实现了将原始YAML文件中的某一节点进行修改,包括修改网络配置,设置固定IP地址、网关、DNS等。最后展示了执行结果,并验证配置已经修改成功。

通过本文的示例,读者可以了解如何在Java中操作YAML文件,实现对YAML配置文件的动态修改,为实际项目中类似需求提供了解决思路和代码实现。


本文完

标签:

ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入