2016-01-31 15:19:29 +01:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2016-01-31 15:44:13 +01:00
< title > Debian updates with Ansible< / title >
2016-01-31 15:19:29 +01:00
2016-01-31 16:10:48 +01:00
< link href = "https://captainark.net/rss.xml" type = "application/atom+xml" rel = "alternate" title = "Sysadmining. All day. Every day. Full Atom Feed" / >
2016-01-31 15:19:29 +01:00
<!-- Bootstrap Core CSS -->
< link href = "https://captainark.net/theme/css/bootstrap.min.css" rel = "stylesheet" >
<!-- Custom CSS -->
< link href = "https://captainark.net/theme/css/clean-blog.min.css" rel = "stylesheet" >
<!-- Code highlight color scheme -->
< link href = "https://captainark.net/theme/css/code_blocks/github.css" rel = "stylesheet" >
<!-- Custom Fonts -->
2017-11-11 12:36:45 +01:00
< link href = "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel = "stylesheet" type = "text/css" >
2016-01-31 15:19:29 +01:00
< link href = 'https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic' rel = 'stylesheet' type = 'text/css' >
< link href = 'https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel = 'stylesheet' type = 'text/css' >
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!-- [if lt IE 9]>
< script src = "https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js" > < / script >
< script src = "https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js" > < / script >
<![endif]-->
2017-11-11 12:36:45 +01:00
< meta name = "description" content = "I've recently bought a HP Proliant Microserver Gen8 to play around with LXC and try new stuff. From the 4 Debian machines I had to keep..." >
2016-01-31 15:19:29 +01:00
2016-03-06 15:05:28 +01:00
< meta name = "author" content = "Antoine Joubert" >
2016-01-31 15:19:29 +01:00
< meta property = "og:locale" content = "" >
< meta property = "og:site_name" content = "Sysadmining. All day. Every day." >
< meta property = "og:type" content = "article" >
2016-05-22 15:22:00 +02:00
< meta property = "article:author" content = "https://captainark.net/author/antoine-joubert.html" >
2016-01-31 15:44:13 +01:00
< meta property = "og:url" content = "https://captainark.net/debian-updates-with-ansible.html" >
< meta property = "og:title" content = "Debian updates with Ansible" >
2016-01-31 15:19:29 +01:00
< meta property = "article:published_time" content = "2016-01-31 00:00:00+01:00" >
2017-11-11 12:36:45 +01:00
< meta property = "og:description" content = "I've recently bought a HP Proliant Microserver Gen8 to play around with LXC and try new stuff. From the 4 Debian machines I had to keep..." >
2016-03-06 15:05:28 +01:00
< meta property = "og:image" content = "https://captainark.net//bg.png" >
2016-05-22 15:22:00 +02:00
< meta name = "twitter:card" content = "summary_large_image" >
< meta name = "twitter:site" content = "@captainark" >
< meta name = "twitter:title" content = "Debian updates with Ansible" >
< meta name = "twitter:image" content = "https://captainark.net//bg.png" >
2017-11-11 12:36:45 +01:00
< meta name = "twitter:description" content = "I've recently bought a HP Proliant Microserver Gen8 to play around with LXC and try new stuff. From the 4 Debian machines I had to keep..." >
2016-01-31 15:19:29 +01:00
< / head >
< body >
<!-- Navigation -->
< nav class = "navbar navbar-default navbar-custom navbar-fixed-top" >
< div class = "container-fluid" >
<!-- Brand and toggle get grouped for better mobile display -->
< div class = "navbar-header page-scroll" >
< button type = "button" class = "navbar-toggle" data-toggle = "collapse" data-target = "#bs-example-navbar-collapse-1" >
< span class = "sr-only" > Toggle navigation< / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< / button >
< a class = "navbar-brand" href = "https://captainark.net/" > Sysadmining. All day. Every day.< / a >
< / div >
<!-- Collect the nav links, forms, and other content for toggling -->
< div class = "collapse navbar-collapse" id = "bs-example-navbar-collapse-1" >
< ul class = "nav navbar-nav navbar-right" >
< li > < a href = "/" > Homepage< / a > < / li >
2016-01-31 16:10:48 +01:00
< li > < a href = "/rss.xml" > RSS< / a > < / li >
2016-01-31 15:19:29 +01:00
< li > < a href = "/categories.html" > Categories< / a > < / li >
< li > < a href = "https://captainark.net/pages/about.html" > About< / a > < / li >
< li > < a href = "https://captainark.net/pages/resume.html" > Resume< / a > < / li >
< / ul >
< / div >
<!-- /.navbar - collapse -->
< / div >
<!-- /.container -->
< / nav >
<!-- Page Header -->
< header class = "intro-header" style = "background-image: url('/bg.png')" >
< div class = "container" >
< div class = "row" >
< div class = "col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1" >
< div class = "post-heading" >
2016-01-31 15:44:13 +01:00
< h1 > Debian updates with Ansible< / h1 >
2016-01-31 15:19:29 +01:00
< span class = "meta" > Posted by
< a href = "https://captainark.net/author/antoine-joubert.html" > Antoine Joubert< / a >
on Sun 31 January 2016
< / span >
< / div >
< / div >
< / div >
< / div >
< / header >
<!-- Main Content -->
< div class = "container" >
< div class = "row" >
< div class = "col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1" >
<!-- Post Content -->
< article >
2016-01-31 16:01:02 +01:00
< p > I've recently bought a < a href = "http://www8.hp.com/us/en/products/proliant-servers/product-detail.html?oid=5379860" > HP Proliant Microserver Gen8< / a > to play around with LXC and try new stuff.< / p >
2016-01-31 15:19:29 +01:00
< p > From the 4 Debian machines I had to keep up-to-date, I now have 7, so it became quite time-consumming to manually SSH to each of them whenever an update became available.< / p >
2016-01-31 15:44:13 +01:00
< p > I ended up looking at < a href = "http://www.ansible.com/" > Ansible< / a > to speed up the process and, within an hour, I had a working playbook that updates the debian packages, pip packages and git repos installed on all of my servers with a single command.< / p >
2016-01-31 15:19:29 +01:00
< p > I figured I'd share the playbook I use to update the Debian packages !< / p >
< h2 > The playbook< / h2 >
< p > I modified < a href = "https://gist.github.com/maethor/380676f6b1cec8cc7439" > this gist< / a > to only use apt-get instead of both apt-get and aptitude.< / p >
2016-06-01 22:59:17 +02:00
< div class = "highlight" > < pre > < span > < / span > < span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > hosts< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > all< / span >
2016-01-31 15:19:29 +01:00
< span class = "l l-Scalar l-Scalar-Plain" > tasks< / span > < span class = "p p-Indicator" > :< / span >
2016-06-01 22:59:17 +02:00
2016-01-31 15:19:29 +01:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > update cache< / span >
< span class = "l l-Scalar l-Scalar-Plain" > apt< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > update_cache=yes< / span >
2016-06-01 22:59:17 +02:00
2016-01-31 15:19:29 +01:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > list packages to upgrade (1/2)< / span >
2016-06-02 19:45:14 +02:00
< span class = "l l-Scalar l-Scalar-Plain" > shell< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > apt-get upgrade -s -V | awk ' /=> /{print $1}' < / span >
2016-01-31 15:19:29 +01:00
< span class = "l l-Scalar l-Scalar-Plain" > register< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > updates< / span >
< span class = "l l-Scalar l-Scalar-Plain" > changed_when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > False< / span >
2016-06-01 22:59:17 +02:00
2016-01-31 15:19:29 +01:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > list packages to upgrade (2/2)< / span >
< span class = "l l-Scalar l-Scalar-Plain" > debug< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > msg=" {{ updates.stdout_lines | count }} packages to upgrade ({{ updates.stdout_lines | join(' , ' ) }})" < / span >
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > (updates.stdout_lines)< / span >
2016-06-01 22:59:17 +02:00
2016-01-31 15:19:29 +01:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > upgrade packages< / span >
< span class = "l l-Scalar l-Scalar-Plain" > apt< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > upgrade=dist< / span >
2016-01-31 15:44:13 +01:00
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > (updates.stdout_lines)< / span >
2016-06-01 22:59:17 +02:00
2016-01-31 15:19:29 +01:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > check what the new version is< / span >
< span class = "l l-Scalar l-Scalar-Plain" > shell< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > lsb_release -r | awk ' {print $2}' < / span >
< span class = "l l-Scalar l-Scalar-Plain" > changed_when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > False< / span >
< span class = "l l-Scalar l-Scalar-Plain" > register< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > new_release< / span >
2016-06-01 22:59:17 +02:00
2016-01-31 15:19:29 +01:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > notify distribution version upgrade< / span >
< span class = "l l-Scalar l-Scalar-Plain" > debug< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > msg=" Debian has been upgraded from {{ ansible_lsb.release }} to {{ new_release.stdout }}" < / span >
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > ansible_lsb.release != new_release.stdout< / span >
2016-06-01 22:59:17 +02:00
2016-05-31 20:45:06 +02:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > /wheezy/ install the debian-goodies package if it is missing< / span >
2016-01-31 15:19:29 +01:00
< span class = "l l-Scalar l-Scalar-Plain" > apt< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > name=debian-goodies state=present< / span >
2016-05-31 20:45:06 +02:00
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > ansible_distribution_release == ' wheezy' < / span >
2016-06-01 22:59:17 +02:00
2016-05-31 20:45:06 +02:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > /jessie/ install the needrestart package if it is missing< / span >
< span class = "l l-Scalar l-Scalar-Plain" > apt< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > name=needrestart state=present default_release=jessie-backports< / span >
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > ansible_distribution_release == ' jessie' < / span >
2016-06-01 22:59:17 +02:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > /wheezy/ list services to restart (1/3)< / span >
< span class = "l l-Scalar l-Scalar-Plain" > shell< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > checkrestart | awk ' /^service/{print $2}' < / span >
< span class = "l l-Scalar l-Scalar-Plain" > register< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > wheezy_services< / span >
2016-01-31 15:19:29 +01:00
< span class = "l l-Scalar l-Scalar-Plain" > changed_when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > False< / span >
2016-05-31 20:45:06 +02:00
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > ansible_distribution_release == ' wheezy' < / span >
2016-06-01 22:59:17 +02:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > /jessie/ list services to restart (1/3)< / span >
2016-06-04 00:37:01 +02:00
< span class = "l l-Scalar l-Scalar-Plain" > shell< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > needrestart -blrl | awk ' /^NEEDRESTART-SVC/{print $2}' < / span >
2016-06-01 22:59:17 +02:00
< span class = "l l-Scalar l-Scalar-Plain" > register< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > jessie_services< / span >
2016-05-31 20:45:06 +02:00
< span class = "l l-Scalar l-Scalar-Plain" > changed_when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > False< / span >
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > ansible_distribution_release != ' wheezy' < / span >
2016-06-01 22:59:17 +02:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > merge services list (2/3)< / span >
< span class = "l l-Scalar l-Scalar-Plain" > set_fact< / span > < span class = "p p-Indicator" > :< / span >
< span class = "l l-Scalar l-Scalar-Plain" > services< / span > < span class = "p p-Indicator" > :< / span > < span class = "s" > " {{< / span > < span class = "nv" > < / span > < span class = "s" > wheezy_services< / span > < span class = "nv" > < / span > < span class = "s" > if< / span > < span class = "nv" > < / span > < span class = "s" > ansible_distribution_release< / span > < span class = "nv" > < / span > < span class = "s" > ==< / span > < span class = "nv" > < / span > < span class = "s" > ' wheezy' < / span > < span class = "nv" > < / span > < span class = "s" > else< / span > < span class = "nv" > < / span > < span class = "s" > jessie_services< / span > < span class = "nv" > < / span > < span class = "s" > }}" < / span >
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > list services to restart (3/3)< / span >
2016-01-31 15:19:29 +01:00
< span class = "l l-Scalar l-Scalar-Plain" > debug< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > msg=" {{ services.stdout_lines | count }} services to restart ({{ services.stdout_lines | join (' , ' ) }})" < / span >
< span class = "l l-Scalar l-Scalar-Plain" > when< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > (services.stdout_lines)< / span >
2016-06-01 22:59:17 +02:00
2016-01-31 15:19:29 +01:00
< span class = "p p-Indicator" > -< / span > < span class = "l l-Scalar l-Scalar-Plain" > name< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > cache cleanup< / span >
< span class = "l l-Scalar l-Scalar-Plain" > shell< / span > < span class = "p p-Indicator" > :< / span > < span class = "l l-Scalar l-Scalar-Plain" > apt-get autoclean< / span >
< / pre > < / div >
< h2 > Conclusion< / h2 >
< p > That's all ! Please leave a comment if you've found this playbook helpful !< / p >
< / article >
< hr >
< div class = "comments" >
< h2 > Comments !< / h2 >
< div id = "disqus_thread" > < / div >
< script type = "text/javascript" >
var disqus_shortname = 'captainark';
2016-01-31 15:44:13 +01:00
var disqus_identifier = 'debian-updates-with-ansible.html';
var disqus_url = 'https://captainark.net/debian-updates-with-ansible.html';
2016-01-31 15:19:29 +01:00
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//captainark.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
< / script >
< noscript > Please enable JavaScript to view the comments.< / noscript >
< / div >
< / div >
< / div >
< / div >
< hr >
<!-- Footer -->
< footer >
< div class = "container" >
< div class = "row" >
< div class = "col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1" >
< ul class = "list-inline text-center" >
< li >
< a href = "mailto:contact@captainark.net" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-envelope fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< / li >
< li >
< a href = "https://twitter.com/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-twitter fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< / li >
< li >
< a href = "https://github.com/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-github fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< / li >
< li >
< a href = "http://www.last.fm/user/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-lastfm fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< / li >
< li >
< a href = "https://steamcommunity.com/id/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-steam fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< / li >
< li >
< a href = "http://www.twitch.tv/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-twitch fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< / li >
< / ul >
< p class = "copyright text-muted" >
Blog powered by < a href = "http://getpelican.com" > Pelican< / a > ,
2017-11-11 12:36:45 +01:00
which takes great advantage of < a href = "http://python.org" > Python< / a > . < br / > © Antoine Joubert
2016-01-31 15:19:29 +01:00
< / p > < / div >
< / div >
< / div >
< / footer >
<!-- jQuery -->
2017-11-11 12:36:45 +01:00
< script src = "https://captainark.net/theme/js/jquery.min.js" > < / script >
2016-01-31 15:19:29 +01:00
<!-- Bootstrap Core JavaScript -->
< script src = "https://captainark.net/theme/js/bootstrap.min.js" > < / script >
<!-- Custom Theme JavaScript -->
< script src = "https://captainark.net/theme/js/clean-blog.min.js" > < / script >
2016-01-31 16:10:48 +01:00
< script type = "text/javascript" >
2017-11-11 12:36:45 +01:00
var pkBaseURL = "https://nibelungvalesti.net/stats";
var _paq = _paq || [];
_paq.push(["trackPageView"]);
_paq.push(["enableLinkTracking"]);
2016-01-31 16:10:48 +01:00
(function() {
2017-11-11 12:36:45 +01:00
var u=(("https:" == document.location.protocol) ? "https" : "http")+"://"+pkBaseURL+"/";
_paq.push(["setTrackerUrl", u+"piwik.php"]);
_paq.push(["setSiteId", "1"]);
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
2016-01-31 16:10:48 +01:00
})();
< / script >
2016-01-31 15:19:29 +01:00
< script type = "text/javascript" >
var disqus_shortname = 'captainark';
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = '//' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
< / script >
< / body >
< / html >