2019-01-06 16:34:39 +01:00
<!DOCTYPE html>
< html lang = "en-us" >
< head >
< meta charset = "utf-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" / >
< meta name = "twitter:card" content = "summary" / >
< meta name = "twitter:title" content = "Debian updates with Ansible" / >
< meta name = "twitter:description" content = "" / >
< meta name = "twitter:site" content = "@" / >
< meta property = "og:title" content = "Debian updates with Ansible · Sysadmining. All day. Every day." / >
< meta property = "og:site_name" content = "Sysadmining. All day. Every day." / >
< meta property = "og:url" content = "https://www.captainark.net/2016/01/31/debian-updates-with-ansible/" / >
< meta property = "og:image" content = "/images/cover.jpg" / >
< meta property = "og:description" content = "" / >
< meta property = "og:type" content = "article" / >
< meta property = "article:published_time" content = "2016-01-31T01:00:00+01:00" / >
< title > Debian updates with Ansible · Sysadmining. All day. Every day.< / title >
< meta name = "description" content = "I&rsquo;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 up-to-date, I now " />
< meta name = "HandheldFriendly" content = "True" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< link rel = "shortcut icon" href = "/images/favicon.ico" >
< link rel = "apple-touch-icon" href = "/images/apple-touch-icon.png" / >
< link rel = "stylesheet" type = "text/css" href = "/css/screen.css" / >
< link rel = "stylesheet" type = "text/css" href = "/css/nav.css" / >
2019-01-06 18:41:13 +01:00
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/solarized-light.min.css" integrity = "sha384-bFKDPkG3geCujYJIbPornilfOgmYQoPS45Oh/8daqqo1SUwNY06OeHorpgnNvx82" crossorigin = "anonymous" >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js" integrity = "sha384-BlPof9RtjBqeJFskKv3sK3dh4Wk70iKlpIe92FeVN+6qxaGUOUu+mZNpALZ+K7ya" crossorigin = "anonymous" > < / script >
2019-01-06 16:34:39 +01:00
< script > hljs . initHighlightingOnLoad ( ) ; < / script >
< link href = "/index.xml" rel = "alternate" type = "application/rss+xml" title = "Sysadmining. All day. Every day." / >
< meta name = "generator" content = "Hugo 0.53" / >
< link rel = "canonical" href = "https://www.captainark.net/2016/01/31/debian-updates-with-ansible/" / >
< script type = "application/ld+json" >
{
"@context": "https://schema.org",
"@type": "Article",
"publisher": {
"@type": "Organization",
"name": ,
"logo": https://www.captainark.net/images/logo.png
},
"author": {
"@type": "Person",
"name": ,
"image": {
"@type": "ImageObject",
"url": https://www.captainark.net/images/author.jpg,
"width": 250,
"height": 250
},
"url": https://www.captainark.net,
"sameAs": [
],
"description": Geek | Gamer | TV Shows Aficionado
},
"headline": Debian updates with Ansible,
"name": Debian updates with Ansible,
"wordCount": 368,
"timeRequired": "PT2M",
"inLanguage": {
"@type": "Language",
"alternateName": en
},
"url": https://www.captainark.net/2016/01/31/debian-updates-with-ansible/,
"datePublished": 2016-01-31T01:00Z,
"dateModified": 2016-01-31T01:00Z,
"description": ,
"mainEntityOfPage": {
"@type": "WebPage",
"@id": https://www.captainark.net/2016/01/31/debian-updates-with-ansible/
}
}
< / script >
2019-01-06 17:58:41 +01:00
2019-01-06 16:34:39 +01:00
< script >
(function(f, a, t, h, o, m){
a[h]=a[h]||function(){
(a[h].q=a[h].q||[]).push(arguments)
};
o=f.createElement('script'),
m=f.getElementsByTagName('script')[0];
o.async=1; o.src=t; o.id='fathom-script';
m.parentNode.insertBefore(o,m)
})(document, window, '//stats.captainark.net/tracker.js', 'fathom');
2019-01-06 18:02:13 +01:00
fathom('set', 'siteId', 'UAIPU');
2019-01-06 16:34:39 +01:00
fathom('trackPageview');
< / script >
2019-01-06 17:58:41 +01:00
2019-01-06 16:34:39 +01:00
< link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/fork-awesome@1.1.5/css/fork-awesome.min.css" integrity = "sha256-P64qV9gULPHiZTdrS1nM59toStkgjM0dsf5mK/UwBV4=" crossorigin = "anonymous" >
< / head >
< body class = "nav-closed" >
< div class = "nav" >
< h3 class = "nav-title" > Menu< / h3 >
< a href = "#" class = "nav-close" >
< span class = "hidden" > Close< / span >
< / a >
< ul >
< h3 > This site< / h3 >
< li class = "nav-opened" role = "presentation" >
< a href = "/" > Home< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "/about" > About< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "/resume" > Resume< / a >
< / li >
< h3 > Other services< / h3 >
< li class = "nav-opened" role = "presentation" >
< a href = "https://git.captainark.net" > Gitea< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "https://pics.captainark.net" > Chevereto< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "https://paste.captainark.net" > Privatebin< / a >
< / li >
< li class = "nav-opened" role = "presentation" >
< a href = "https://chat.captainark.net" > Rocket.Chat< / a >
< / li >
< / ul >
< a class = "subscribe-button icon-feed" href = "/index.xml" > Subscribe< / a >
< / div >
< span class = "nav-cover" > < / span >
< div class = "site-wrapper" >
< header class = "main-header post-head no-cover" >
< nav class = "main-nav clearfix" >
< a class = "blog-logo" href = "https://www.captainark.net/" > < img src = "/images/logo.png" alt = "Home" / > < / a >
< a class = "menu-button" href = "#" > < span class = "burger" > ☰ < / span > < span class = "word" > Menu< / span > < / a >
< / nav >
< / header >
< main class = "content" role = "main" >
< article class = "post post" >
< header class = "post-header" >
< h1 class = "post-title" > Debian updates with Ansible< / h1 >
< small > < / small >
< section class = "post-meta" >
< time class = "post-date" datetime = "2016-01-31T01:00:00+01:00" >
31 January 2016
< / time >
< / section >
< / header >
< section class = "post-content" >
< 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 >
< 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 >
< 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 >
< p > I figured I’ d share the playbook I use to update the Debian packages !< / p >
< h2 id = "the-playbook" > 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 >
< pre > < code class = "language-yaml" > - hosts: all
tasks:
- name: update cache
apt: update_cache=yes
- name: list packages to upgrade (1/2)
shell: apt-get upgrade -s -V | awk '/=> /{print $1}'
register: updates
changed_when: False
- name: list packages to upgrade (2/2)
debug: msg=" {{ updates.stdout_lines | count }} packages to upgrade ({{ updates.stdout_lines | join(', ') }})"
when: (updates.stdout_lines)
- name: upgrade packages
apt: upgrade=dist
when: (updates.stdout_lines)
- name: check what the new version is
shell: lsb_release -r | awk '{print $2}'
changed_when: False
register: new_release
- name: notify distribution version upgrade
debug: msg=" Debian has been upgraded from {{ ansible_lsb.release }} to {{ new_release.stdout }}"
when: ansible_lsb.release != new_release.stdout
- name: /wheezy/ install the debian-goodies package if it is missing
apt: name=debian-goodies state=present
when: ansible_distribution_release == 'wheezy'
- name: /jessie/ install the needrestart package if it is missing
apt: name=needrestart state=present default_release=jessie-backports
when: ansible_distribution_release == 'jessie'
- name: /wheezy/ list services to restart (1/3)
shell: checkrestart | awk '/^service/{print $2}'
register: wheezy_services
changed_when: False
when: ansible_distribution_release == 'wheezy'
- name: /jessie/ list services to restart (1/3)
shell: needrestart -blrl | awk '/^NEEDRESTART-SVC/{print $2}'
register: jessie_services
changed_when: False
when: ansible_distribution_release != 'wheezy'
- name: merge services list (2/3)
set_fact:
services: " {{ wheezy_services if ansible_distribution_release == 'wheezy' else jessie_services }}"
- name: list services to restart (3/3)
debug: msg=" {{ services.stdout_lines | count }} services to restart ({{ services.stdout_lines | join (', ') }})"
when: (services.stdout_lines)
- name: cache cleanup
shell: apt-get autoclean
< / code > < / pre >
< h2 id = "conclusion" > Conclusion< / h2 >
< p > That’ s all ! Please leave a comment if you’ ve found this playbook helpful !< / p >
< / section >
< footer class = "post-footer" >
< figure class = "author-image" >
< a class = "img" href = "https://www.captainark.net/" style = "background-image: url(/images/author.jpg)" > < span class = "hidden" > Antoine Joubert's Picture< / span > < / a >
< / figure >
< section class = "author" >
< h4 > < a href = "https://www.captainark.net/" > Antoine Joubert< / a > < / h4 >
< p > Geek | Gamer | TV Shows Aficionado< / p >
< div class = "author-meta" >
< span class = "author-location icon-location" > Angers, France< / span >
< span class = "author-link icon-link" > < a href = "https://www.captainark.net" > https://www.captainark.net< / a > < / span >
< / div >
< / section >
2019-01-06 17:14:04 +01:00
<!-- isso -->
< script data-isso = "https://www.captainark.net/comments/" src = "https://www.captainark.net/comments/js/embed.min.js" > < / script >
< noscript > Please enable JavaScript to view comments< / noscript >
< section id = "isso-thread" > < / section >
<!-- end isso -->
2019-01-06 16:34:39 +01:00
< / footer >
< / article >
< / main >
< aside class = "read-next" >
< a class = "read-next-story" style = "no-cover" href = "/2016/02/02/my-tmux-configuration/" >
< section class = "post" >
< h2 > My tmux configuration< / h2 >
< / section >
< / a >
< a class = "read-next-story prev" style = "no-cover" href = "/2016/01/31/private-git-repo/" >
< section class = "post" >
< h2 > Private Git repo< / h2 >
< / section >
< / a >
< / aside >
< center >
< a class = "fa-icons" 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 >
< a class = "fa-icons" 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 >
< a class = "fa-icons" href = "https://social.captainark.net/users/captainark" >
< span class = "fa-stack fa-lg" >
< i class = "fa fa-circle fa-stack-2x" > < / i >
< i class = "fa fa-mastodon-alt fa-stack-1x fa-inverse" > < / i >
< / span >
< / a >
< a class = "fa-icons" 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 >
< a class = "fa-icons" href = "https://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 >
< a class = "fa-icons" 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 >
< a class = "fa-icons" href = "https://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 >
< / center >
< footer class = "site-footer clearfix" >
< section class = "copyright" > < a href = "" > Sysadmining. All day. Every day.< / a > © 2015 - 2019< / section >
< section class = "poweredby" > Proudly generated by < a class = "icon-hugo" href = "http://gohugo.io" > HUGO< / a > , with < a class = "icon-theme" href = "https://github.com/vjeantet/hugo-theme-casper" > Casper< / a > theme< / section >
< / footer >
< / div >
< script type = "text/javascript" src = "/js/jquery.js" > < / script >
< script type = "text/javascript" src = "/js/jquery.fitvids.js" > < / script >
< script type = "text/javascript" src = "/js/index.js" > < / script >
< / body >
< / html >