ansible: vorlage nur kopieren, wenn die zieldatei nicht vorhanden ist
<p>ich verwende <code>ansible 1.6.6</code>, um meinen computer bereitzustellen.</p><p>in meinem playbook befindet sich eine <a href="http://docs.ansible.com/template\_module.html">vorlagenaufgabe</a> , die eine zieldatei aus der jinja2-vorlage erstellt:</p><pre class="lang-yaml prettyprint-override"><code>tasks: - template: src=somefile.j2 dest=/etc/somefile.conf </code></pre><p>ich möchte <code>somefile.conf</code> nicht ersetzen, wenn es bereits existiert. ist das mit ansible möglich? wenn das so ist, wie?</p>
<p>sie können die existenz von dateien mit stat überprüfen und dann die vorlage nur verwenden, wenn keine datei vorhanden ist.</p><pre><code>tasks: - stat: path=/etc/somefile.conf register: st - template: src=somefile.j2 dest=/etc/somefile.conf when: not st.stat.exists </code></pre>
<p>sie müssen die lizenz unter keinen umständen in der gui anzeigen.</p><p>für software, die unter der apache license version 2.0 (aplv2) lizenziert ist, ist es völlig in ordnung, die software auf die von ihnen vorgeschlagene weise zu ändern. diese lizenz fördert änderungen. die lizenz garantiert ihnen die freiheit, "powered by svg edit" in ihrer geänderten version zu entfernen.</p><p>informationen zu ihren verpflichtungen in bezug auf die mit der aplv2-software gelieferte notices-datei finden sie in aplv2 (abschnitt 4(b))). sie müssen den inhalt in einer weise anzeigen, die der software. (wohlgemerkt, svg edit erledigt dies wahrscheinlich bereits.) sie können das "powered by svg edit" möglicherweise nicht entfernen, wenn dies aus der notices-datei stammt. wenn sie jedoch die notices-datei und den quellcode verteilen, dann sind sie davon ausgenommen. weitere informationen zu ihren optionen finden sie in abschnitt 4(b) der aplv2).</p><p>in jedem fall ist das, was sie tun möchten, nicht unhöflich, insbesondere wenn dadurch ihre abgeleitete arbeit besser wird.</p> <p>versuche etwas wie</p><pre><code>&lt;ifmodule mod\_expires.c&gt; expiresactive on expiresdefault "access plus 1 seconds" expiresbytype text/html "access plus 1 seconds" expiresbytype image/x-icon "access plus 2592000 seconds" expiresbytype image/gif "access plus 2592000 seconds" expiresbytype image/jpeg "access plus 2592000 seconds" expiresbytype image/png "access plus 2592000 seconds" expiresbytype text/css "access plus 604800 seconds" expiresbytype text/javascript "access plus 86400 seconds" expiresbytype application/x-javascript "access plus 86400 seconds" &lt;/ifmodule&gt; </code></pre><p>oder </p><pre><code>&lt;filesmatch "\.(?i:gif|jpe?g|png|ico|css|js|swf)$"&gt; &lt;ifmodule mod\_headers.c&gt; header set cache-control "max-age=172800, public, must-revalidate" &lt;/ifmodule&gt; &lt;/filesmatch&gt; </code></pre> <blockquote> <p>kann ich yum benutzen?</p> </blockquote><p>ich würde es nicht empfehlen. sie könnten es wahrscheinlich kompilieren, hätten aber keine ubuntu-kompatiblen paket-repositorys, die es handhaben könnten.</p><p>sie können <em> einzelne rpm-dateien mit alien in debs konvertieren </em>:</p><pre><code>sudo apt-get install alien sudo alien my\_package.rpm sudo dpkg -i my\_package.deb </code></pre><p><strong>hinweis:</strong> es kann sein, dass sich der dateiname etwas mehr ändert als nur die erweiterung.</p><p>dies funktioniert nicht bei allen paketen, da pakete mit anderen paketen verknüpft werden, um abhängigkeiten zu erfüllen. offensichtlich verwenden red hat/fedora/centos andere paketnamen als ubuntu, sodass sie wahrscheinlich auf eine ganze menge schmerzen stoßen werden.</p><p>wenn es keine deb gibt, ist es wahrscheinlich besser, nur den quellcode zu beschaffen und zu kompilieren.</p> Naja, der Quelltext von frei lizenzierter Software wird üblicherweise in einem Online-Quellcodeverwaltungssystem organisiert. Diese Verwaltungssysteme müssen von irgendjemandem gehostet werden, es gibt aber auch kostenlose Angebote wie SourceForge (Subversion) oder GitHub (git). Und von der dort eingesetzten Software hängt es dann auch mehr oder weniger ab, wie man idealerweise zwecks Beteiligung vorgeht. Bei SourceForge muss der Projekt-Administrator dem SourceForge-Account des Entwicklers Schreibberechtigung einrichten, damit letzterer, nachdem er mittels Subversion die aktuelle Fassung des Codes heruntergeladen und seine Änderungen vorgenommen hat, diese auch wieder ins Online-Repository hochladen kann. Bei GitHub klont man sich gleich den ganzen Code auf den eigenen GitHub-Account ("Fork" genannt), lädt sich mittels git die eigene Online-Kopie lokal herunter, ändert diese, lädt in den eigenen Fork hoch und hinterlegt dem Projekt-Administrator des Originals eine Benachrichtigung, dass dieser doch die Änderungen des Forks in die offizielle Version übernehmen soll. Es empfiehlt sich generell, über die Ticket-Systeme der Projekte die Arbeit an offenen Aufgaben abzusprechen oder für das eigene Anliegen ein neues Ticket zu öffnen, was vor allem bei SourceForge auch darum wichtig ist, um konfligierende Änderungen und das dadurch notwendige Merging möglichst zu vermeiden, sodass die "Bewerbung" bei GitHub-Projekten allgemein einfacher ist, weil man da erstmal unabhängig arbeiten kann.


Bei mir sieht das dann so aus:


<https://github.com/skreutzer>


ist aber nicht gerade als repräsentativ zu betrachten. hi@striewi, hattest du denn schon die tipps von@josefinausprobiert? falls ja, findest du unter den tipps auch eine liste, welche infos wir zur weiteren prüfung deines anliegens benötigen.[...] <h2>moderne html5-techniken zum ändern von klassen</h2><p>moderne browser haben <a href="https://developer.mozilla.org/en-us/docs/dom/element.classlist"><strong>classlist</strong></a> hinzugefügt, das methoden zur verfügung stellt, mit denen klassen leichter ohne bibliotheken bearbeitet werden können:</p><pre><code>document.getelementbyid("myelement").classlist.add('myclass'); document.getelementbyid("myelement").classlist.remove('myclass'); if ( document.getelementbyid("myelement").classlist.contains('myclass') ) document.getelementbyid("myelement").classlist.toggle('myclass'); </code></pre><p>leider funktionieren diese in internet explorer vor version 10 nicht, obwohl es ein <a href="http://en.wikipedia.org/wiki/shim\_(computing)">shim</a> gibt, um die unterstützung für ie8 und ie9 hinzuzufügen, die unter <a href="https://developer.mozilla.org/en-us/docs/dom/element.classlist">diese seite</a> verfügbar ist. es wird jedoch immer mehr <a href="http://caniuse.com/#feat=classlist">unterstützt</a> .</p><h2>einfache browserübergreifende lösung</h2><p>die standard-javascript-methode zur auswahl eines elements ist <a href="https://developer.mozilla.org/en-us/docs/dom/document.getelementbyid"><code>document.getelementbyid("id")</code></a> . dies wird in den folgenden beispielen verwendet. sie können elemente natürlich auch auf andere weise erhalten. in der richtigen situation können sie stattdessen einfach <code>this</code> verwenden ins detail geht dies nicht in den rahmen der antwort.</p><h3>so ändern sie alle klassen für ein element:</h3><p>um alle vorhandenen klassen durch eine oder mehrere neue klassen zu ersetzen, legen sie das classname-attribut fest:</p><pre><code>document.getelementbyid("myelement").classname = "myclass"; </code></pre><p>(sie können eine durch leerzeichen getrennte liste verwenden, um mehrere klassen anzuwenden.)</p><h3>so fügen sie einem element eine zusätzliche klasse hinzu:</h3><p>um einem element eine klasse hinzuzufügen, ohne vorhandene werte zu entfernen/zu beeinflussen, fügen sie ein leerzeichen und den neuen klassennamen wie folgt hinzu:</p><pre><code>document.getelementbyid("myelement").classname += " myclass"; </code></pre><h3>so entfernen sie eine klasse aus einem element:</h3><p>um eine einzelne klasse zu einem element zu entfernen, ohne andere potenzielle klassen zu beeinflussen, ist ein einfacher regex-ersetzen erforderlich:</p><pre><code>document.getelementbyid("myelement").classname = document.getelementbyid("myelement").classname.replace ( /(?:^|\s)myclass(?!\s)/g , '' ) /* code wrapped for readability - above is all one statement */ </code></pre><p>eine erklärung dieser regex lautet wie folgt:</p><pre><code>(?:^|\s) # match the start of the string, or any single whitespace character myclass # the literal text for the classname to remove (?!\s) # negative lookahead to verify the above is the whole classname # ensures there is no non-space character following # (i.e. must be end of string or a space) </code></pre><p>das flag <code>g</code> weist das ersetzen an, nach bedarf zu wiederholen, falls der klassenname mehrmals hinzugefügt wurde.</p><h3>so prüfen sie, ob eine klasse bereits auf ein element angewendet wurde:</h3><p>der gleiche reguläre ausdruck, der oben zum entfernen einer klasse verwendet wurde, kann auch zur überprüfung verwendet werden, ob eine bestimmte klasse vorhanden ist:</p><pre><code>if ( document.getelementbyid("myelement").classname.match(/(?:^|\s)myclass(?!\s)/) ) </code></pre><p><br/></p><h3>zuweisen dieser aktionen zu onclick-ereignissen:</h3><p>es ist zwar möglich, javascript direkt in die html-ereignisattribute (z. b. <code>onclick="this.classname+=' myclass'"</code>) zu schreiben, dies wird jedoch nicht empfohlen. insbesondere bei größeren anwendungen wird durch die trennung von html-markup von javascript-interaktionslogik ein wartungsfähigerer code erzielt.</p><p>der erste schritt dazu ist das erstellen einer funktion und das aufrufen der funktion im onclick-attribut. beispiel:</p><pre><code>&lt;script type="text/javascript"&gt; function changeclass(){ // code examples from above } &lt;/script&gt; ... &lt;button onclick="changeclass()"&gt;my button&lt;/button&gt; </code></pre><p><sub><em>(es ist nicht erforderlich, dass dieser code in skript-tags enthalten ist. dies ist lediglich der kürze halber als beispiel gedacht. das einschließen von javascript in eine andere datei ist möglicherweise geeigneter.)</em></sub></p><p>der zweite schritt besteht darin, das onclick-ereignis aus dem html-code in javascript zu verschieben, beispielsweise mit <a href="https://developer.mozilla.org/en-us/docs/dom/element.addeventlistener">addeventlistener</a> </p><pre><code>&lt;script type="text/javascript"&gt; function changeclass(){ // code examples from above } window.onload = function(){ document.getelementbyid("myelement").addeventlistener( 'click', changeclass); } &lt;/script&gt; ... &lt;button id="myelement"&gt;my button&lt;/button&gt; </code></pre><p>(beachten sie, dass der window.onload-teil erforderlich ist, damit der inhalt dieser funktion <em>ausgeführt wird, nachdem der html-code</em> vollständig geladen wurde. andernfalls ist das myelement möglicherweise nicht vorhanden, wenn der javascript-code aufgerufen wird, sodass die zeile fehlschlägt .)</p><p><br/></p><h2>javascript frameworks und bibliotheken</h2><p>der obige code ist alles in standard-javascript enthalten. es ist jedoch üblich, entweder ein framework oder eine bibliothek zu verwenden, um allgemeine aufgaben zu vereinfachen und von behobenen fehlern und edge-fällen zu profitieren, an die sie beim schreiben des codes nicht denken.</p><p>während einige leute es für übertrieben halten, ein ~ 50 kb-framework für das einfache ändern einer klasse hinzuzufügen, ist die überlegung, wenn sie umfangreiche javascript-arbeiten ausführen oder etwas, das ungewöhnliches cross-browser-verhalten hat, eine überlegung wert.</p><p><em>(in groben zügen handelt es sich bei einer bibliothek um eine reihe von werkzeugen, die für eine bestimmte aufgabe entwickelt wurden, während ein framework im allgemeinen mehrere bibliotheken enthält und eine reihe von aufgaben ausführt.)</em></p><p>die obigen beispiele wurden im folgenden mit <a href="http://jquery.com">jquery</a> wiedergegeben, wahrscheinlich der am häufigsten verwendeten javascript-bibliothek (obwohl es auch andere gibt, die es zu untersuchen gilt).</p><p>(beachten sie, dass <code>$</code> hier das jquery-objekt ist.)</p><h3>klassen mit jquery ändern:</h3><pre><code>$('#myelement').addclass('myclass'); $('#myelement').removeclass('myclass'); if ( $('#myelement').hasclass('myclass') ) </code></pre><p>darüber hinaus bietet jquery eine verknüpfung zum hinzufügen einer klasse, wenn sie nicht angewendet wird, oder zum entfernen einer klasse, die folgendes ausführt:</p><pre><code>$('#myelement').toggleclass('myclass'); </code></pre><p><br/></p><h3>zuweisen einer funktion zu einem klickereignis mit jquery:</h3><pre><code>$('#myelement').click(changeclass); </code></pre><p>oder, ohne eine id zu benötigen:</p><pre><code>$(':button:contains(my button)').click(changeclass); </code></pre><p><br/></p> <p>der weg zu gehen ist das hochladen <strong>einmal für jede ubunt</strong> version.</p><p>launchpad erstellt keine pakete für ubuntu-versionen, die nicht mehr unterstützt werden, und erstellt nur ein paket für eine bestimmte ubuntu-version. die zielversion wird (wie sie bereits wissen) in der datei <code>changelog</code> durch den neuesten eintrag angegeben!</p><p>denken sie daran, dass die pakete, von denen ihr programm abhängt, möglicherweise nicht in allen ubuntu-versionen in derselben version verfügbar sind.</p><p>sie sprechen auch von "multi-architektur" (architektur = cup-typ, z. b. x86, lpia, amd64). dies macht keinen unterschied, da jedes hochgeladene paket für alle verfügbaren architekturen erstellt wird, solange sie <code>architecture: any</code> in der paketdefinition (<code>debian/control</code>) datei, dies ermöglicht ihnen auch, das paket von verschiedenen paketen für verschiedene architekturen abhängig zu machen (das paket muss mehrmals definiert werden)</p> nimmst du einen dateimanager? dann sollte löschen und anlegen möglich sein. in der galerie geht das nicht. hey @freyjali, schön, dass du dich in unserer o2 community meldest. bitte beachte, dass du dich hier in einem öffentlichen forum befindest. persönliche daten, die du hier postest, könnte jeder sehen. daher habe ich deinen eingangspost ein wenig editiert.  nun zu deinem anliegen: die lieferadresse lässt sich nachträglich leider nicht mehr anpassen. was du machen kannst ist, dass du die bestellung stornierst und dann noch einmal bestellst. dann aber an die richtige adresse. hast du noch weitere fragen an die community?viele grüße, tatjana Wieviel Speicherplatz hast Du denn auf C:? Nur durch Windows, Treiber und n paar Programme die Primärpartition voll zu bekommen passiert nicht sooo schnell. Bedenke auch beim Löschen bzw auf exteren kopieren, dass der Desktop und Ordner wie "Eigene Dateien" "Eigene Bilder" "Dokumente" etc auch auf C: liegen und der Speicher auch erst dann frei wird wenn Du die kopierten Daten auch aus dem Papierkorb gelöscht hast.