У меня есть файл 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 развернет приложение на новом сервере.