Archiv der Kategorie: ubuntuusers

[dashing] Willkommen Firma xyz über den gesamten Bildschirm

Das dashing.io Dashboard kann unter anderem in Empfangsbereichen von Firmen eingesetzt werden. Steht nun zum Beispiel ein Besuch eines Kunden an, so könnte man Ihn auf dem Dashboard willkommen heißen. Damit die Willkommensnachricht nicht nur unscheinbar in einer Kachel erscheint, habe ich dieses Widget erstellt. Die job Datei(rb) prüft ob es einen zeitlich passenden Eintrag in der csv Datei gibt und setzt das Widget per css auf Display Block. Das Widget legt sich über den gesamten Bildschirm, ist die Zeit des hinterlegten Kundenbesuchs abgelaufen so wird das Widget wieder ausgeblendet.

Folgende Dateien müssen in einem Verzeichnis Namens overlay abgelegt werden

overlay.coffee
class Dashing.Overlay extends Dashing.Widget
constructor: ->
super
onData: (data) ->
schalter = @schalter
node = $(@node)
if schalter == false then node.css(‚display‘,’none‘) else node.css(‚display‘,’block‘)
ready: ->
@onData(null)

overlay.html
<span data-bind=“titel“></span>
<div class=“bild“ ><img data-bind-src=“kunde“ ></div>
<div class=“text“ data-bind=“text | raw“></div>

overlay.scss
// —————————————————————————-
// Sass declarations
// —————————————————————————-
$background-color: #ec663c;
$title-color: rgba(255, 255, 255, 0.7);
$moreinfo-color:rgba(255, 255, 255, 0.7);
// —————————————————————————-
// Widget-text styles
// —————————————————————————-
.widget-overlay {
position: fixed;
bottom: 1px;
z-index:1000;
width:100%;
height:95%;
background-color: $background-color;
.title {
color: $title-color;
}
.more-info {
color: $moreinfo-color;
}
.updated-at {
color: rgba(255, 255, 255, 0.7);
}
.text{
color:#ffffff;
font-weight:bold;
margin-top:20%;
}
.bild{
height:100px;
width:95%;
text-align:right;
}
&.large h3 {
font-size: 65px;
}
}

Die rb Datei muss unter dem Verzeichnis jobs abgelegt werden, natürlich muss der Pfad zur CSV Datei angepasst werden.
overlay.rb
require ‚csv‘
require ‚json‘
require ‚date‘
require ‚time‘
ENV[‚TZ‘] = ‚Europe/Berlin‘
schalter = false
kunde = „x“
text = „x“
SCHEDULER.every ’30s‘ do
zeit = Time.now.to_i
schalter_zaehler = 0
ausgabe = {}
idx = 0
CSV.foreach(‚/home/dashing/sweet_dashboard_project/jobs/overlay.csv‘, col_sep: ‚;‘) do |row|
start = Time.parse(„#{row[0]} #{row[1]}:00 „).to_i
stop = Time.parse(„#{row[0]} #{row[2]}:00 „).to_i
if zeit.between?(start, stop)
schalter_zaehler += 1
kunde = row[3]
text = row[4]
ausgabe[0] = {:kunde => row[3],:text => row[4]}
end
end
if schalter_zaehler == 1
schalter = true
else
schalter = false
end
send_event(„overlay“,{ kunde: kunde , text: text, schalter: schalter })
#puts JSON.pretty_generate(ausgabe)
end

Aufbau der overlay.csv
2017-01-02;10:00;12:00;/assets/logo.png;Moin zusammen;
2017-05-08;20:00;21:51;/assets/logo.png;Willkommen Firma Kassupke<br/>bei der Tagung;

Die Logos der Firmen müssen unter dem Verzeichnis assets/images abgelegt werden.

Die Einbindung des Widgets erfolgt in der erb Datei in der letzten Zeile wie folgt:
<div data-id=“overlay“ data-view=“Overlay“ ></div>

Hier kann alles heruntergeladen werden.

[dashing] Icinga Widget ohne Soft-Zustände

In dem Artikel hatte ich ein Widget für dashing.io erstellt, welches die Icinga Alarme per json abholt und entsprechend ausgibt. In dem erstellten Job wurden jedoch auch die Soft-Zustände ausgegeben, was je nach System für Hektik sorgen kann.

Der Job wurde nun angepasst und mit Hilfe des Wertes service_attempt werden nun keine Soft-Zustände mehr ausgegeben.

attempt = werte[idx]["service_attempt"].split('/')
if attempt[0] == attempt[1]
if werte[idx]["service_state"].to_i == 0
dalert = "OK"
end
if werte[idx]["service_state"].to_i == 1
dalert = "WARNING"
z_warning += 1
end
if werte[idx]["service_state"].to_i == 2
dalert = "CRITICAL"
z_critical += 1
end
if werte[idx]["service_state"].to_i == 3
dalert = "UNKNOWN"
z_unknown += 1
end
laenge += 1
if laenge.to_i <= 20
review_content[laenge] = {:host => werte[idx][„host_name“],:what => werte[idx][„service_description“],:alert => dalert}
end
end

[puppet] installation Apache web Server

Möchte man eine Anwendung oder ein Programm wie zum Beispiel den Apache auf mehreren Server installieren, empfiehlt es sich hierfür ein Modul zu erstellen. In dem Modul können dann diverse Standardangaben hinterlegt werden.

Für Puppet gibt es bereits mehrere Module die installiert werden können.
Ein Modul für Apache kann über puppet module install puppetlabs-apache installiert werden.

Das Modul wird dann in der nodes Konfiguration hinterlegt
node 'pmagent2' {
include apache
}

Durch das Modul wurde der Apache installiert und ein default vhost angelegt.
Um zu erfahren was alles automatisiert erstellt wird muss man sich die entsprechenden Dateien unter dem Modulpfad /etc/puppetlabs/code/environments/production/modules/apache/ näher anschauen.

Anlegen eines neuen Vhosts
apache::vhost { 'sub1.itbasic.de':
port => '80',
docroot => '/var/www/vhost/sub1.itbasic.de',
docroot_owner => 'apache',
docroot_group => 'apache',
}

Über das Modul werden die Access und die Error Log Dateien des Apache unter /var/log/httpd/vhostname abgelegt.

[puppet] Test Datei erstellen

Um die Konfiguration zu testen, kann auf dem node puppet agent --test eingegeben werden. Wenn es hier keine Fehler gibt, kann auf dem puppetmaster eine Testdatei angelegt werden.

Die Datei mit dem Namen test.pp wurde in dem Verzeichniss /etc/puppetlabs/code/environments/production/manifests/ erstellt und hat folgenden Inhalt:
node 'pmagent2' {
file {'/tmp/testdatei':
ensure => present,
mode => '0644',
content => "testdatei erstellt durch puppetn",
}
}
node default {}

 

Nach dem auf dem node puppet –agent test ausgeführt wurde, wird auch die Datei angelegt.

Damit die Datei über Puppet wieder entfernt wird, muss ensure von present auf absent geändert werden.

Installation Puppetmaster unter Centos 7

Damit die spätere Kommunikation zwischen den Nodes und dem Master funktioniert, müssen alle Server die gleiche Uhrzeit haben und die korrekte Namensauflösung muss sichergestellt sein. Für die korrekte Zeit empfiehlt es sich den NTP zu verwenden. Da ich nur eine kleine Testumgebung nutze, habe ich für die Namensauflösung die Hostnamen und Ip Adressen auf den Testservern in der /etc/hosts hinterlegt.

Zunächst muss unter dem root Benutzer das Repository von Puppetlabs installiert werden.
rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Im Anschluss kann der Puppetmaster installiert werden yum -y install puppetserver.

Der Puppetserver wird über systemctl start puppetserver gestartet, mit der Zeile systemctl enable puppetserver wird der puppetserver bei jedem Start der VM gestartet.

Damit die Nodes mit dem Master kommunizieren können, muss der Port 8140 geöffnet werden.
firewall-cmd --zone=public --permanent --add-port=8140/tcp

Installation Agent

Auf dem Node muss ebenfalls das Repository hinzugefügt und dann der Agent installiert werden.

rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
yum -y install puppet-agent

Damit der Agent weiß welchen Master er ansprechen muss, wird dieser in der Datei /etc/puppetlabs/puppet/puppet.conf wie folgt hinterlegt:
server = FQDN.

Gestartet wird der Agent über /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true.

Kommunikation

Für die Kommunikation mit dem Master wird auf dem Node ein Zertifikat erstellt. Das Zertifikat wird dem Master vorgelegt und muss dort freigeschaltet werden.

Mit puppet cert list erhält man auf dem Master eine Übersicht der Node Zertifikate, welche noch nicht freigegeben wurden.
Ein einzelnes Zertifikat kann mit puppet cert sign hostname freigegeben werden, alle ausstehenden Zertifikate über puppet cert sign --all

Eine Liste aller freigeschalteten Zertifikate (Nodes) erhält man über puppet cert list --all.