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,不然不能上外网

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

具体代码

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();
        }

执行

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

查看结果

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

显示已经修改!!

总结:

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

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

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


本文完


原文始发于微信公众号(怒放de每一天):ubuntu20动态修改ip,springboot中yaml的内容的读取,修改,写入

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/316853.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!