mirror of https://github.com/Aidaho12/haproxy-wi
v8.0.2: Remove Grafana integration
Deleted the Grafana role from Ansible playbooks and related references in various files. This includes updates to HTML templates, route definitions, and database entries to ensure no remnants of Grafana configuration remain.pull/399/head
parent
94e7a23383
commit
1dbbf54986
|
@ -12,7 +12,6 @@ Web interface (user-friendly web GUI, alerting, monitoring and secure) for manag
|
|||
# Features:
|
||||
1. Installing and updating HAProxy, Nginx, Apache and Keepalived with Roxy-WI as a system service
|
||||
2. Installing and updating HAProxy and Nginx with Roxy-WI as a Docker service
|
||||
3. Installing and updating Grafana, Prometheus servers with Roxy-WI
|
||||
4. Installing and updating HAProxy, Nginx, Apache, Keepalived and Node exporters with Roxy-WI
|
||||
6. Downloading, updating and formatting GeoIP to the acceptable format for HAProxy with Roxy-WI
|
||||
7. Dynamic change of Maxconn, Black/white lists, add, edit or delete backend's IP address and port with saving changes to the config file
|
||||
|
|
|
@ -32,6 +32,12 @@ def before_request():
|
|||
|
||||
|
||||
def register_api(view, endpoint, url, pk='listener_id', pk_type='int'):
|
||||
view_func = view.as_view(endpoint)
|
||||
bp.add_url_rule(url, view_func=view_func, methods=['POST'])
|
||||
bp.add_url_rule(f'{url}/<{pk_type}:{pk}>', view_func=view_func, methods=['GET', 'PUT', 'PATCH', 'DELETE'])
|
||||
|
||||
|
||||
def register_api_for_not_api(view, endpoint, url, pk='listener_id', pk_type='int'):
|
||||
view_func = view.as_view(endpoint, True)
|
||||
bp.add_url_rule(url, view_func=view_func, methods=['POST'])
|
||||
bp.add_url_rule(f'{url}/<{pk_type}:{pk}>', view_func=view_func, methods=['GET', 'PUT', 'PATCH', 'DELETE'])
|
||||
|
@ -68,7 +74,7 @@ register_api(S3BackupView, 'backup_s3', '/server/backup/s3', 'backup_id')
|
|||
register_api(GitBackupView, 'backup_git', '/server/backup/git', 'backup_id')
|
||||
bp.add_url_rule('/server/<server_id>/ip', view_func=ServerIPView.as_view('server_ip_ip'), methods=['GET'])
|
||||
bp.add_url_rule('/server/<int:server_id>/ip', view_func=ServerIPView.as_view('server_ip'), methods=['GET'])
|
||||
register_api(CredView, 'cred', '/server/cred', 'cred_id')
|
||||
register_api_for_not_api(CredView, 'cred', '/server/cred', 'cred_id')
|
||||
bp.add_url_rule('/server/creds', view_func=CredsView.as_view('creds'), methods=['GET'])
|
||||
bp.add_url_rule('/server/portscanner/<server_id>', view_func=PortScannerView.as_view('port_scanner_ip'), methods=['GET', 'POST'])
|
||||
bp.add_url_rule('/server/portscanner/<int:server_id>', view_func=PortScannerView.as_view('port_scanner'), methods=['GET', 'POST'])
|
||||
|
|
|
@ -436,8 +436,6 @@ def default_values():
|
|||
{'name': 'roxy-wi-socket', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||
{'name': 'roxy-wi-prometheus-exporter', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||
{'name': 'roxy-wi-smon', 'current_version': '1.0', 'new_version': '0', 'is_roxy': 1, 'desc': ''},
|
||||
{'name': 'prometheus', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Prometheus service'},
|
||||
{'name': 'grafana-server', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Grafana service'},
|
||||
{'name': 'fail2ban', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Fail2ban service'},
|
||||
{'name': 'rabbitmq-server', 'current_version': '1.0', 'new_version': '1.0', 'is_roxy': 0, 'desc': 'Rabbitmq service'},
|
||||
]
|
||||
|
@ -613,6 +611,16 @@ def update_db_v_8_0_2():
|
|||
print("An error occurred:", e)
|
||||
|
||||
|
||||
def update_db_v_8_0_2_1():
|
||||
try:
|
||||
RoxyTool.delete().where(RoxyTool.name == 'prometheus').execute()
|
||||
RoxyTool.delete().where(RoxyTool.name == 'grafana-server').execute()
|
||||
except Exception as e:
|
||||
print("An error occurred:", e)
|
||||
else:
|
||||
print("Updating... DB has been updated to version 8.0.2-1")
|
||||
|
||||
|
||||
def update_ver():
|
||||
try:
|
||||
Version.update(version='8.0.2').execute()
|
||||
|
@ -640,4 +648,5 @@ def update_all():
|
|||
update_db_v_7_4()
|
||||
update_db_v_8()
|
||||
update_db_v_8_0_2()
|
||||
update_db_v_8_0_2_1()
|
||||
update_ver()
|
||||
|
|
|
@ -4,11 +4,10 @@ import app.modules.db.sql as sql
|
|||
from app.modules.service.installation import run_ansible
|
||||
|
||||
|
||||
def generate_exporter_inc(server_ip: str, ext_prom: int, ver: str, exporter: str) -> object:
|
||||
def generate_exporter_inc(server_ip: str,ver: str, exporter: str) -> object:
|
||||
inv = {"server": {"hosts": {}}}
|
||||
server_ips = [server_ip]
|
||||
inv['server']['hosts'][server_ip] = {
|
||||
'EXP_PROM': ext_prom,
|
||||
f'{exporter}_exporter_version': ver,
|
||||
'service': f'{exporter} exporter'
|
||||
}
|
||||
|
@ -28,10 +27,10 @@ def generate_exporter_inc(server_ip: str, ext_prom: int, ver: str, exporter: str
|
|||
return inv, server_ips
|
||||
|
||||
|
||||
def install_exporter(server_ip: str, ver: str, ext_prom: int, exporter: str) -> object:
|
||||
def install_exporter(server_ip: str, ver: str, exporter: str) -> object:
|
||||
service = f'{exporter.title()} exporter'
|
||||
try:
|
||||
inv, server_ips = generate_exporter_inc(server_ip, ext_prom, ver, exporter)
|
||||
inv, server_ips = generate_exporter_inc(server_ip, ver, exporter)
|
||||
return run_ansible(inv, server_ips, f'{exporter}_exporter'), 201
|
||||
except Exception as e:
|
||||
raise Exception(f'error: Cannot install {service}: {e}')
|
||||
|
|
|
@ -59,15 +59,6 @@ def generate_geoip_inv(server_ip: str, installed_service: str, geoip_update: int
|
|||
return inv, server_ips
|
||||
|
||||
|
||||
def generate_grafana_inv() -> object:
|
||||
inv = {"server": {"hosts": {}}}
|
||||
server_ips = []
|
||||
inv['server']['hosts']['localhost'] = {}
|
||||
server_ips.append('localhost')
|
||||
|
||||
return inv, server_ips
|
||||
|
||||
|
||||
def generate_kp_inv(json_data: json, installed_service) -> object:
|
||||
inv = {"server": {"hosts": {}}}
|
||||
server_ips = []
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import pytz
|
||||
from flask import render_template, request, g
|
||||
from flask import render_template, g
|
||||
from flask_jwt_extended import jwt_required
|
||||
|
||||
from app import scheduler
|
||||
|
@ -13,7 +13,6 @@ from app.middleware import get_user_params
|
|||
import app.modules.roxywi.roxy as roxy
|
||||
import app.modules.roxywi.auth as roxywi_auth
|
||||
import app.modules.roxywi.common as roxywi_common
|
||||
import app.modules.tools.smon as smon_mod
|
||||
import app.modules.tools.common as tools_common
|
||||
import app.modules.server.ssh as ssh_mod
|
||||
from app.views.admin.views import SettingsView
|
||||
|
|
|
@ -50,13 +50,12 @@ def install_exporter(exporter):
|
|||
json_data = request.get_json()
|
||||
server_ip = common.is_ip_or_dns(json_data['server_ip'])
|
||||
ver = common.checkAjaxInput(json_data['exporter_v'])
|
||||
ext_prom = common.checkAjaxInput(json_data['ext_prom'])
|
||||
|
||||
if exporter not in ('haproxy', 'nginx', 'apache', 'keepalived', 'node'):
|
||||
return jsonify({'status': 'failed', 'error': 'Wrong exporter'})
|
||||
|
||||
try:
|
||||
return exp_installation.install_exporter(server_ip, ver, ext_prom, exporter)
|
||||
return exp_installation.install_exporter(server_ip, ver, exporter)
|
||||
except Exception as e:
|
||||
return jsonify({'status': 'failed', 'error': f'Cannot install {exporter.title()} exporter: {e}'})
|
||||
|
||||
|
@ -67,15 +66,6 @@ def get_exporter_version(exporter, server_ip):
|
|||
return service_common.get_exp_version(server_ip, exporter)
|
||||
|
||||
|
||||
@bp.route('/grafana')
|
||||
def install_grafana():
|
||||
try:
|
||||
inv, server_ips = service_mod.generate_grafana_inv()
|
||||
return service_mod.run_ansible(inv, server_ips, 'grafana'), 201
|
||||
except Exception as e:
|
||||
return f'{e}'
|
||||
|
||||
|
||||
@bp.post('/waf/<service>/<server_ip>')
|
||||
def install_waf(service, server_ip):
|
||||
server_ip = common.is_ip_or_dns(server_ip)
|
||||
|
|
|
@ -1,97 +0,0 @@
|
|||
- hosts: localhost
|
||||
become: yes
|
||||
become_method: sudo
|
||||
roles:
|
||||
- role: cloudalchemy.prometheus
|
||||
environment:
|
||||
http_proxy: "{{PROXY}}"
|
||||
https_proxy: "{{PROXY}}"
|
||||
vars:
|
||||
prometheus_targets:
|
||||
node:
|
||||
- targets:
|
||||
- "{{ansible_hostname}}:9100"
|
||||
|
||||
- role: cloudalchemy.grafana
|
||||
environment:
|
||||
http_proxy: "{{PROXY}}"
|
||||
https_proxy: "{{PROXY}}"
|
||||
vars:
|
||||
grafana_security:
|
||||
admin_user: admin
|
||||
admin_password: admin
|
||||
grafana_datasources:
|
||||
- name: prometheus
|
||||
type: prometheus
|
||||
url: "http://{{ansible_default_ipv4.address}}:9090"
|
||||
basicAuth: false
|
||||
grafana_dashboards:
|
||||
- dashboard_id: 2428
|
||||
revision_id: 7
|
||||
datasource: prometheus
|
||||
- dashboard_id: 11879
|
||||
revision_id: 3
|
||||
datasource: prometheus
|
||||
- dashboard_id: 11074
|
||||
revision_id: 9
|
||||
datasource: prometheus
|
||||
tasks:
|
||||
- name: populate service facts
|
||||
service_facts:
|
||||
|
||||
- name: Open stat port for firewalld
|
||||
firewalld:
|
||||
port: "{{ item }}/tcp"
|
||||
state: enabled
|
||||
permanent: yes
|
||||
immediate: yes
|
||||
ignore_errors: yes
|
||||
no_log: True
|
||||
debugger: never
|
||||
when: (ansible_facts['os_family'] == "RedHat" or ansible_facts['os_family'] == 'CentOS') and ansible_facts.services["firewalld.service"]['state'] == "running"
|
||||
with_items: [ "3000", "9090" ]
|
||||
|
||||
- name: Open stat port for iptables
|
||||
iptables:
|
||||
chain: INPUT
|
||||
destination_port: "{{ item }}"
|
||||
jump: ACCEPT
|
||||
protocol: tcp
|
||||
ignore_errors: yes
|
||||
with_items: [ "3000", "9090" ]
|
||||
|
||||
- name: Ensure group "grafana" exists
|
||||
ansible.builtin.group:
|
||||
name: grafana
|
||||
state: present
|
||||
|
||||
- name: Add the Grafana user
|
||||
user:
|
||||
name: grafana
|
||||
shell: /sbin/nologin
|
||||
groups: grafana
|
||||
append: yes
|
||||
|
||||
- name: Create a directory if it does not exist
|
||||
file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
owner: grafana
|
||||
with_items:
|
||||
- /var/lib/grafana
|
||||
- /var/log/grafana
|
||||
- /etc/grafana
|
||||
|
||||
- name: Create grafana.ini
|
||||
file:
|
||||
path: /etc/grafana/grafana.ini
|
||||
owner: grafana
|
||||
group: grafana
|
||||
mode: '0644'
|
||||
state: touch
|
||||
|
||||
- name: Restart service Grafana, in all cases
|
||||
service:
|
||||
name: grafana-server
|
||||
state: restarted
|
|
@ -7,8 +7,6 @@
|
|||
'roxy-wi-smon': { 'name': 'SMON', 'desc': lang.admin_page.desc.smon_desc },
|
||||
'roxy-wi-socket': { 'name': 'Socket', 'desc': lang.admin_page.desc.socket_desc },
|
||||
'roxy-wi-prometheus-exporter': { 'name': 'Prometheus exporter', 'desc': 'Prometheus exporter exports Roxy-WI metrics' },
|
||||
'prometheus': { 'name': 'Prometheus', 'desc': 'Prometheus server' },
|
||||
'grafana-server': { 'name': 'Grafana', 'desc': 'Grafana server' },
|
||||
'fail2ban': { 'name': 'Fail2ban', 'desc': 'Fail2ban scans log files (e.g. /var/log/apache/error_log) and bans IPs that show the malicious signs' },
|
||||
'rabbitmq-server': { 'name': 'RabbitMQ', 'desc': 'RabbitMQ server' },
|
||||
}
|
||||
|
@ -41,9 +39,7 @@
|
|||
</td>
|
||||
<td class="padding10 first-collumn">
|
||||
{% if 'is not installed' in service.2['current_version'] or not service.2['current_version'] or service.2['current_version'] == '0' %}
|
||||
{% if service.0 in ('prometheus', 'grafana-server') %}
|
||||
<a href="/install#monitoring" class="ui-button ui-widget ui-corner-all" title="{{lang.words.install|title()}} {{service_name}}">{{lang.words.install|title()}}</a>
|
||||
{% elif service.0 in ('rabbitmq-server', 'fail2ban') %}
|
||||
{% if service.0 in ('rabbitmq-server', 'fail2ban') %}
|
||||
<a class="ui-button ui-widget ui-corner-all" href="https://roxy-wi.org/tools/{{service.0.split('-')[0]}}" title="{{lang.words.install|title()}} {{services_name[service.0]['name']}}" target="_blank">{{lang.words.install|title()}}</a>
|
||||
{% else %}
|
||||
<a class="ui-button ui-widget ui-corner-all" onclick="updateService('{{service.0}}', 'install')" title="{{lang.words.install|title()}} {{service_name}}">{{lang.words.install|title()}}</a>
|
||||
|
|
|
@ -145,46 +145,12 @@
|
|||
</h4>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if g.user_params['role']|int() == 1 %}
|
||||
<table id="grafana-table">
|
||||
<caption><i class="fas fa-chart-bar caption-icon2"></i><h3>Grafana {{lang.words.and}} Prometheus {{lang.words.servers}}</h3></caption>
|
||||
<tr class="overviewHead">
|
||||
<td class="padding10 first-collumn">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 40%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.note|title()}}</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td id="cur_grafana_ver" class="padding10 first-collumn">
|
||||
{% if grafana == "active" %}
|
||||
Grafana {{lang.words.and}} Prometheus {{lang.admin_page.desc.been_installed}}
|
||||
{% else %}
|
||||
{{lang.admin_page.desc.there_are_no}}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="padding10 first-collumn" style="width: 20%;">
|
||||
{{lang.admin_page.desc.latest_repo}} Grafana {{lang.words.and}} Prometheus
|
||||
</td>
|
||||
<td class="padding10 first-collumn">
|
||||
{{lang.admin_page.desc.before_install}} Grafana {{lang.words.and}} Prometheus {{lang.words.servers}}
|
||||
</td>
|
||||
<td></td>
|
||||
<td>
|
||||
{% if grafana != "active" %}
|
||||
<span class="ui-button ui-widget ui-corner-all" id="grafana_install" title="{{lang.words.install|title()}} Grafana {{lang.words.and}} Prometheus {{lang.words.servers}}">{{lang.words.install|title()}}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endif %}
|
||||
<table id="haproxy-table">
|
||||
<caption><i class="fas fa-network-wired caption-icon2"></i><h3>HAProxy Exporter</h3></caption>
|
||||
<tr class="overviewHead">
|
||||
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
|
||||
<td class="help_cursor" style="width: 20%;" data-intro="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
@ -203,7 +169,6 @@
|
|||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td style="padding-left: 50px;">{{ checkbox('haproxy_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
|
||||
<td>
|
||||
<span class="ui-button ui-widget ui-corner-all" id="haproxy_exp_install" title="{{lang.words.install|title()}} HAProxy Exporter">{{lang.words.install|title()}}</span>
|
||||
</td>
|
||||
|
@ -215,7 +180,6 @@
|
|||
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
|
||||
<td class="help_cursor" style="width: 20%;" data-help="lang.admin_page.desc.ext_prom">{{lang.words.external|title()}} Prometheus</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
@ -234,7 +198,6 @@
|
|||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td style="padding-left: 50px;">{{ checkbox('nginx_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
|
||||
<td>
|
||||
<span class="ui-button ui-widget ui-corner-all" id="nginx_exp_install" title="{{lang.words.install|title()}} NGINX Exporter">{{lang.words.install|title()}}</span>
|
||||
</td>
|
||||
|
@ -246,7 +209,6 @@
|
|||
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
|
||||
<td class="help_cursor" style="width: 20%;" data-help="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
@ -265,7 +227,6 @@
|
|||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td style="padding-left: 50px;">{{ checkbox('apache_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
|
||||
<td>
|
||||
<span class="ui-button ui-widget ui-corner-all" id="apache_exp_install" title="{{lang.words.install|title()}} Apache Exporter">{{lang.words.install|title()}}</span>
|
||||
</td>
|
||||
|
@ -277,7 +238,6 @@
|
|||
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
|
||||
<td class="help_cursor" style="width: 20%;" title="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
@ -296,7 +256,6 @@
|
|||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td style="padding-left: 50px;">{{ checkbox('keepalived_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
|
||||
<td>
|
||||
<span class="ui-button ui-widget ui-corner-all" id="keepalived_exp_install" title="{{lang.words.install|title()}} Keepalived Exporter">{{lang.words.install|title()}}</span>
|
||||
</td>
|
||||
|
@ -308,7 +267,6 @@
|
|||
<td class="padding10 first-collumn" style="width: 20%;">{{lang.words.current2|title()}} {{lang.words.installation}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.available|title()}} {{lang.words.versions}}</td>
|
||||
<td class="padding10 first-collumn" style="width: 30%;">{{lang.words.server|title()}}</td>
|
||||
<td class="help_cursor" style="width: 20%;" title="{{lang.admin_page.desc.ext_prom}}">{{lang.words.external|title()}} Prometheus</td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
|
@ -327,7 +285,6 @@
|
|||
{% endfor %}
|
||||
</select>
|
||||
</td>
|
||||
<td style="padding-left: 50px;">{{ checkbox('node_ext_prom', title=lang.admin_page.desc.ext_prom) }}</td>
|
||||
<td>
|
||||
<span class="ui-button ui-widget ui-corner-all" id="node_exp_install" title="{{lang.words.install|title()}} Node Exporter">{{lang.words.install|title()}}</span>
|
||||
</td>
|
||||
|
|
|
@ -430,7 +430,6 @@
|
|||
"desc": {
|
||||
"latest_repo": "Roxy-WI will try to install the latest version of the service from the official repository",
|
||||
"install_as_docker": "Install service as a Docker container",
|
||||
"ext_prom": "This exporter will be used by an external Prometheus. Also use this checkbox if you update the Exporter.",
|
||||
"no_ansible": "You have not installed",
|
||||
"before_install": "Before installing any exporters, first install",
|
||||
"been_installed": "servers have been installed",
|
||||
|
|
|
@ -430,7 +430,6 @@
|
|||
"desc": {
|
||||
"latest_repo": "Roxy-WI va essayer d\'installer la dernière version du service à partir du dépôt officiel.",
|
||||
"install_as_docker": "Installer le service comme un conteneur Docker",
|
||||
"ext_prom": "Cet Exporter sera utilisé par un Prometheus externe. Utilisez également cette case à cocher si vous mettez à jour l\'Exporter",
|
||||
"no_ansible": "Vous ne l\'avez pas installé",
|
||||
"before_install": "Avant d\'installer l\'Exporter, installez le d\'abord",
|
||||
"been_installed": "les serveurs ont été installés",
|
||||
|
|
|
@ -430,7 +430,6 @@
|
|||
"desc": {
|
||||
"latest_repo": "O Roxy-WI tentará instalar a versão mais recente do serviço do repositório oficial",
|
||||
"install_as_docker": "Instalar serviço como um container do Docker",
|
||||
"ext_prom": "Este exportador será usado para um Prometheus externo. Usa este checkbox para atualizar o Exporter.",
|
||||
"no_ansible": "Você não instalou",
|
||||
"before_install": "Antes de instalar exportadores, primeiro instale",
|
||||
"been_installed": "servidores instalados",
|
||||
|
|
|
@ -430,7 +430,6 @@
|
|||
"desc": {
|
||||
"latest_repo": "Roxy-WI попытается установить последнюю версию сервиса из официального репозитория",
|
||||
"install_as_docker": "Установить сервис как контейнер Docker",
|
||||
"ext_prom": "Этот экспортер будет использоваться внешним Prometheus. Также используйте этот флажок, если вы обновляете экспортер.",
|
||||
"no_ansible": "You have not installed",
|
||||
"before_install": "Прежде чем устанавливать какие-либо экспортеры, сначала установите",
|
||||
"been_installed": "сервера были установлены",
|
||||
|
|
Loading…
Reference in New Issue