Поиск и замена текста из файла yaml, используя Java - PullRequest
0 голосов
/ 29 января 2020

У меня есть файл XML, который содержит информацию о сервере, на котором развернуто мое приложение.

<?xml version="1.0" encoding="UTF8"?>

<model identifier="id28142c8761fd4649891b346b0573c2e1" xsi:schemaLocation="http://www.opengroup.org/xsd/archimate/3.0/ http://www.opengroup.org/xsd/archimate/3.0/archimate3_Diagram.xsd>
<name>Model package 2</name>
<elements>

<element identifier="id77" xsi:type="CommunicationNetwork">
    <name xml:lang="en">Intra Network</name>
</element>

<element identifier="id78" xsi:type="Device">
    <name xml:lang="en">Operations Laptop p011xxxxxx</name>
</element>

<element identifier="id75" xsi:type="Node">
    <name xml:lang="en">x01133361</name>
</element>

<element identifier="id80" xsi:type="SystemSoftware">
    <name xml:lang="en">Linux OS</name>
</element>

<element identifier="id81" xsi:type="Artifact">
    <name xml:lang="en">Private IP: 10.115.1.8</name>
</element>

</elements>
</model>

Я извлек IP-адрес из файла XML, используя Java XPath.

import java.io.File;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Demo {

    public String s;
    public static void main(String[] args) {
        try {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             Document doc = factory.newDocumentBuilder().parse(new File("demo.xml"));

             XPathFactory xFactory = XPathFactory.newInstance();
             XPath xPath = xFactory.newXPath();
             XPathExpression exp = 
             xPath.compile("/model/elements/element/name[contains(translate(text(), 
            'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'private')]");

             NodeList nl = (NodeList)exp.evaluate(doc.getFirstChild(), XPathConstants.NODESET);
             for (int index = 0; index < nl.getLength(); index++) 
             {

                 Node node = nl.item(index);
                 String s = node.getTextContent();
                 String n = s.replace("Private IP: ","");
                 System.out.println(n);
             }            
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
}

Вывод этого кода:

10.115.1.8

Теперь я хочу отправить этот IP-адрес в файл yaml (предпочтительно в файл gitlab-ci.yml) в качестве моего приложения развертывается с использованием GitLab CI.

Есть ли способ найти строку или текст (существующий IP-адрес) в файле yaml и заменить его новой строкой или текстом (новый IP-адрес)?

Заранее спасибо.

Сторона Примечание: Файл XML фактически экспортирован из модели системы ArchiMate. Итак, основная идея всей этой работы заключается в том, что, если будет запущен новый сервер, мне просто нужно обновить модель ArchiMate, указав IP-адрес нового сервера, и GitLab CI развернет приложение на новом сервере.

...