Inicio

pfSense: unlock SSH

After several tries without success to pfSense’s SSH server the port is blocked by a service called “sshlockout”. If you need to unblock the SSH service run the command from shell:

pfctl -t sshlockout -T flush

In the end that command only removes the rules in table “sshlockout” in firewall entries.

New Ansible Role uploaded to Ansible Galaxy

A long time ago I wrote an entry post about how to set up the SMTP in linux boxes using a relay system you can find the post here: Relay mail from your server without MTA. Remember that SSMTP is not a SMTP service for your system but it’s more than enough for all servers that don’t work as a mail servers. Historically Unix/Linux uses sendmail command to send system notifications but usually this mails are lost because system configurations are not completed. My advice in this sense is use SSMTP.

In the past I used to use SSMTP with a GMail account but security constraints in Google mail services make it difficult to configure today. The new alternative is set up a free Mandrill account as a relay host. Mandrill is a Mailchimp service that allows you to send a lot of emails without problems and there is a free account that allows to send up to 12.000 mails per month free, more than enough usually. If you don’t know how to set up a Mailchimp account the best option to learn how to do it is follow the support documentation it’s very good IMHO.

When you have a lot of linux machines to administer you need something fastly replicable. As you know use Ansible is a very good option. Then I developed a new Ansible role to set up Mandrill accounts to SSMTP services massively using Ansible.

The Ansible role has been uploaded here: ssmtp-mandrill and the source code of the roles is in my github. Remember to install the role in your Ansible is easy:

ansible-galaxy install oriol.rius.ssmtp-mandrill

Then you only need to create your own playbook using the role and don’t forget to setup the variables with the Mandrill account settings.

Ansible and Windows Playbooks

Firstly let me introduce a Windows service called: “Windows Remote Manager” or “WinRM”. This is the Windows feature that allows remote control of Windows machines and many other remote functionalities. In my case I have a Windows 7 laptop with SP1 and PowerShell v3 installed.

Secondly don’t forget that Ansible is developed using Python then a Python library have to manage the WinRM protocol. I’m talking about “pywinrm“. Using this library it’s easy to create simple scripts like that:

#!/usr/bin/env python

import winrm

s = winrm.Session('10.2.0.42', auth=('the_username', 'the_password'))
r = s.run_cmd('ipconfig', ['/all'])
print r.status_code
print r.std_out
print r.std_err

This is a remote call to the command “ipconfig /all” to see the Windows machine network configuration. The output is something like:

$ ./winrm_ipconfig.py 
0

Windows IP Configuration

   Host Name . . . . . . . . . . . . : mini7w
   Primary Dns Suffix  . . . . . . . : 
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
   WINS Proxy Enabled. . . . . . . . : No
   DNS Suffix Search List. . . . . . : ymbi.net

Ethernet adapter GigaBit + HUB USB:

   Connection-specific DNS Suffix  . : ymbi.net
   Description . . . . . . . . . . . : ASIX AX88179 USB 3.0 to Gigabit Ethernet Adapter
   Physical Address. . . . . . . . . : 00-23-56-1C-XX-XX
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
   Link-local IPv6 Address . . . . . : fe80::47e:c2c:8c25:xxxx%103(Preferred) 
   IPv4 Address. . . . . . . . . . . : 10.2.0.42(Preferred) 
   Subnet Mask . . . . . . . . . . . : 255.255.255.192
   Lease Obtained. . . . . . . . . . : mi�rcoles, 28 de enero de 2015 12:41:41
   Lease Expires . . . . . . . . . . : mi�rcoles, 28 de enero de 2015 19:17:56
   Default Gateway . . . . . . . . . : 10.2.0.1
   DHCP Server . . . . . . . . . . . : 10.2.0.1
   DHCPv6 IAID . . . . . . . . . . . : 2063606614
   DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-15-F7-BF-36-xx-C5-xx-03-xx-xx
   DNS Servers . . . . . . . . . . . : 10.2.0.27
                                       10.2.0.1
   NetBIOS over Tcpip. . . . . . . . : Enabled
...

Of course, it’s possible to run Powershell scripts like the next one which shows the system memory:

$strComputer = $Host
Clear
$RAM = WmiObject Win32_ComputerSystem
$MB = 1048576

"Installed Memory: " + [int]($RAM.TotalPhysicalMemory /$MB) + " MB"

The Python code to run that script is:

#!/usr/bin/env python

import winrm

ps_script = open('scripts/mem.ps1','r').read()
s = winrm.Session('10.2.0.42', auth=('the_username', 'the_password'))
r = s.run_ps(ps_script)
print r.status_code
print r.std_out
print r.std_err

and the output:

$ ./winrm_mem.py 
0
Installed Memory: 2217 MB

In the end it’s time to talk about how to create an Ansible Playbook to deploy anything in a Windows machine. As always the first thing that we need is a hosts file. In the next example there are several ansible variables needed to run Ansible Windows modules on WinRM, all of them are self-explanatory:

[all]
10.2.0.42

[all:vars]

ansible_ssh_user=the_username ansible_ssh_pass=the_password ansible_ssh_port=5985 #winrm (non-ssl) port ansible_connection=winrm

The first basic example could be a simple playbook that runs the ‘ipconfig’ command and registers the output in an Ansible variable to be showed later like a debug information:

- name: test raw module
  hosts: all
  tasks:
    - name: run ipconfig
      raw: ipconfig
      register: ipconfig
    - debug: var=ipconfig

The command and the output to run latest example:

$ ansible-playbook -i hosts ipconfig.yml 

PLAY [test raw module] ******************************************************** 

GATHERING FACTS *************************************************************** 
ok: [10.2.0.42]

TASK: [run ipconfig] ********************************************************** 
ok: [10.2.0.42]

TASK: [debug var=ipconfig] **************************************************** 
ok: [10.2.0.42] => {
    "ipconfig": {
        "invocation": {
            "module_args": "ipconfig", 
            "module_name": "raw"
        }, 
        "rc": 0, 
        "stderr": "", 
        "stdout": "\r\nWindows IP Configuration\r\n\r\n\r\nEthernet adapter GigaBit 
...
        ]
    }
}

PLAY RECAP ******************************************************************** 
10.2.0.42                  : ok=3    changed=0    unreachable=0    failed=0 

As always Ansible have several modules, not only the ‘raw’ module. I committed two examples in my Github account using a module to download URLs and another one that runs Powershell scripts.

My examples are done using Ansible 1.8.2 installed in a Fedora 20. But main problems I’ve found are configuring Windows 7 to accept WinRM connections. Next I attach some references that helped me a lot:

If you want to use my tests code you can connect to my Github: Basic Ansible playbooks for Windows.

Using Ansible like library programming in Python

Ansible is a very powerful tool. Using playbooks, something like a cookbook, is very easy to automate maintenance tasks of systems. I used Puppet and other tools like that but IMHO Ansible is the best one.

In some cases you need to manage dynamic systems and take into advantage of Ansible like a Python library is a very good complement for your scripts. This is my last requirement and because of that I decided to share some simple Python snippets that help you to understand how to use Ansible as a Python library.

Firstly an example about how to call an Ansible module with just one host in the inventory (test_modules.py):

#!/usr/bin/python 
import ansible.runner
import ansible.playbook
import ansible.inventory
from ansible import callbacks
from ansible import utils
import json

# the fastest way to set up the inventory

# hosts list
hosts = ["10.11.12.66"]
# set up the inventory, if no group is defined then 'all' group is used by default
example_inventory = ansible.inventory.Inventory(hosts)

pm = ansible.runner.Runner(
    module_name = 'command',
    module_args = 'uname -a',
    timeout = 5,
    inventory = example_inventory,
    subset = 'all' # name of the hosts group 
    )

out = pm.run()

print json.dumps(out, sort_keys=True, indent=4, separators=(',', ': '))

As a second example, we’re going to use a simple Ansible Playbook with that code (test.yml):

- hosts: sample_group_name
  tasks:
    - name: just an uname
      command: uname -a

The Python code which uses that playbook is (test_playbook.py):

#!/usr/bin/python 
import ansible.runner
import ansible.playbook
import ansible.inventory
from ansible import callbacks
from ansible import utils
import json

### setting up the inventory

## first of all, set up a host (or more)
example_host = ansible.inventory.host.Host(
    name = '10.11.12.66',
    port = 22
    )
# with its variables to modify the playbook
example_host.set_variable( 'var', 'foo')

## secondly set up the group where the host(s) has to be added
example_group = ansible.inventory.group.Group(
    name = 'sample_group_name'
    )
example_group.add_host(example_host)

## the last step is set up the invetory itself
example_inventory = ansible.inventory.Inventory()
example_inventory.add_group(example_group)
example_inventory.subset('sample_group_name')

# setting callbacks
stats = callbacks.AggregateStats()
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)

# creating the playbook instance to run, based on "test.yml" file
pb = ansible.playbook.PlayBook(
    playbook = "test.yml",
    stats = stats,
    callbacks = playbook_cb,
    runner_callbacks = runner_cb,
    inventory = example_inventory,
    check=True
    )

# running the playbook
pr = pb.run()  

# print the summary of results for each host
print json.dumps(pr, sort_keys=True, indent=4, separators=(',', ': '))

If you want to download example files you can go to my github account: github.com/oriolrius/programming-ansible-basics

I hope it was useful for you.

El meu 2014

Finalment s’acosta l’hora de tancar aquest 2014. Ha estat un any molt intens amb emocions de tots colors, un any amb grans oportunitats pel creixement com a persona. La vida m’ha posat grans obstacles i ara mateix estic content de poder dir que hem sento amb forces per seguir afrontant els reptes que hem depara el nou any que ja truca a la porta. Des de fa uns dies dedico totes les hores que esgarrapo als events familiars a rellegir totes les notes que he pres durant el dia a dia de l’any que deixem enrera.

Com molts ja sabeu tinc costum d’anotar cada matí després de la meditació quins són els objectius de creixement personal i professional que vull assolir i després a última hora del dia en faig un balanç. Aquesta practica ja fa una colla d’anys que la segueixo i poc a poc he anat refinant la metodologia per portar-la a terme, és a dir, que he anat seleccionant quines eren les preguntes i reflexions que més m’aportaven. No és objecte d’aquest article parlar d’això però si que després de rellegir-me tot el que he escrit durant aquest any volia compartir amb tots vosaltres el resum dels fets més importants que han esdeveningut aquest any. Sempre podria passar que hem deixés algún fet important però en tot cas aquest ha estat el meu 2014.

A principis d’any el Jaume, com a director general, i jo, com a director tècnic, varem començar oficialment l’aventura de posar en marxa M2M Cloud Factory després d’aconseguir una inversió força interessant. Així que a principis de Febrer ja teniem l’equip de programadors en marxa i desenvolupant MIIMETIQ, el primer producte de l’empresa en forma de “framework” per desenvolupar aplicacions per M2M i IoT de forma ràpida i àgil. No ens oblidem que el lideratge del Pau ha estat fonamental per aquest equip.

Al cap de poc l’Àlex em va convidar a participar a un dels events d’alumni de la FIB, on vaig portar a terme una conferència titulada: “Revolució dels mini-PCs: Raspberry PI, Arduin i més“. Gràcies a la conferència coneixo a molta gent nova i em va fer recordar el temps en que havia estat fent força conferències.

Mentre el meu cap començava a estar súper inmers en la creació de MIIMETIQ, un email de la gent de Google em va fer sentir reconeguda la meva carrera després de que m’oferessin feina com a TPM dels SRE i com a SE RSE. Finalment la cosa no va acabar de cuallar i l’event més important de l’any s’acostava.

Gran part de les decisions de l’any venien marcades perquè durant el maig l’Estefania i jo esperavem el nostre primer fill, el Pol. Li varem arreglar una de les habitacions de la casa i fins hi tot varem acondicionar tota la part exterior de la casa perquè quan arribés el Pol es trovés un jardí ben xulo i espaiós perquè hi pogués anar a jugar. Però abans d’acabar les obres el Pol va voler venir a aquest món, concretament el 26 d’Abril. Desgraciadament al cap de tres dies coincidint amb el segon aniversari de casament el Pol va decidir deixar-nos. Varen ser uns dies molt durs i dels que encara ara estem aprenent moltes coses, en el seu moment ho vaig intentar explicar a la història del Pol.

Són en aquests moments de la vida quan realment saps que ets realment afortunat de tenir a grans persones al teu voltant i pel que varem comprovar l’Estefania i jo en tenim de fantàstiques. Durant unes setmanes tot va ser realment confús però events tant calurosos i didactis com: poder assistir a l’event del Thich Nhat Hanh, recordar que fa 11 la vida hem va donar una segona oportunitat, la festa d’aniversari sorpresa que hem van preparar els mussols, fins hi tot l’escapada d’uns dies a l’Ametlla de Mar; tot això i molt més ens va ajudar a anar tornar a enganxar-nos a la vida poc a poc.

Al cap de poc temps i quasi sense pensar-ho en Dario, em va presentar l’Enric el qual després de 4 mesos de treball diari a casa va posar en marxa moltíssims automatistmes que tenia planejats instal·lar jo mateix. Així que com que les meves prioritats personals i professionals no hem deixaven atendre aquest projecte des de feia anys vaig decidir volcar el meu coneixement en aquest noi. Jo el vaig batejar com a projecte de “mentoring”. Així ell podia adquirir coneixements pràctics en la programació d’arduinos i similars i jo posava en marxa el projecte de domotitzar la casa. Obviament el Xavi va donar el suport clau per fer que tot plegat sigués una realitat.

En aquesta primera fase de domotització s’han automatitzat moltíssimes coses: s’ha integrat el sistema de calefacció que vaig montar l’any passat en l’aplicació mòbil de control de la casa, es poden controlar les persianes, el sistema de reg, la font del jardí, hi ha desplegada una xarxa de sensors de presència pel jardí per controlar quan entren gats al terreny i espantar-los activant els espersors, s’ha reinstal·lat el sistema de distribució de la TV per la casa, sistema de control d’obertures de portes del garatge i del jardí a través de comandaments a distància i de l’aplicació mòbil de control de la casa, porter automàtic ja esta apunt per ser integrat amb la resta de la casa, càmares de videovigilància i diria que ja no hem deixo res més. Això si, tot es pot controlar des del mòbil, la tablet o l’ordinador des de qualsevol lloc del món.

El dia 15 de Juliol, gràcies a l’esforç de tot l’equip de MIIMETIQ es va poder presentar la versió 1.0 del producte als inversos. 15 dies abans del previst i amb tot el que havia succeït. La presentació va ser un èxit i ben aviat ens varem posar a montar el primer pilot per Mediapro, de fet la primera setmana de setembre ja s’estava mostrant el primer pilot fet usant el nostre “framework” a dues fires d’Anglaterra.

Just abans de marxar de vacances hem va arribar un nou reconeixement, aquest cop en forma d’entrevista per un blog que es diu “Tu business Coach” on hem van fer una entrevista. Així que a mitjans d’agost l’Estefania i jo contra tot el que haviem planificat per aquest any varem agafar les maletes i ens en varem anar a visitar l’illa de Lanzarote a les Canaries.

A principis de setembre, com ja va passar l’any passat, vaig col·laborar amb Omitsis a posar en marxa el servidor web de la festa major de Barcelona, la Mercè. Cal dir que aquest any el repte va ser força senzill i va acabar sent un èxit com l’any passat. Això si, l’event del mes de setembre va ser el dia 11 amb la diada nacional de Catalunya. Participar en una manifestació d’uns 2 milions de persones posa la pell de gallina. Crec que poder compartir aquests moments de la història no té preu i tinc la sort d’haver-hi pogut participar diverses vegades.

Encara dins del mateix setembre vaig participar a la Python Meetup de Barcelona presentant el sistema de calefacció que tinc montat a casa. Aquesta conferència no hagués tingut res d’especial si no fos perquè ha estat la primera conferència que he fet en anglès. En la meva vida he fet forces reunions en anglès però mai havia tingut l’oporunitat de fer una conferència en anglès. Així que va tenir una motivació especial, algunes persones m’han dit que per ser la primera va estar molt bé i d’altres que perdo molt al no fer-ho amb una llengua que controli al 100%.

Durant els propers mesos encara vaig fer dues conferències més una anomenada: “IoT Low Cost” al Tecnocampus de Mataró; i l’altre una mini-presentació sobre “MIIMETIQ” a la PyConES de Saragossa. De fet, tornant de Saragossa vaig tenir temps d’arribar a la consulta popular sobre la independència de Catalunya el #9N, un altre fet històric pel que molts dels avant passats del meu país van morir. Un moment innoblidable.

A principis de desembre en nom d’M2M Cloud Factory vaig poder participar a una taula rodona dedicada a les plataformes d’IoT dins del marc del IoT forum 2014 organitzat pel BDigital. Gràcies a l’event he conegut persones realment interessants també. Tot i que no he d’oblidar que per divertit l’escapada que varem fer Sarai, Àlex, Estefania i jo a Madrid durant el pont de la puríssima. Una experiència que haurem de repetir. Mira que he anat cops a Madrid però pocs cops ho havia disfrutat tant.

Professionalment tampoc hem puc oblidar del projecte Empowering, el qual gràcies al Xavi i la resta de companys de CIMNE segueix en pas ferm aquest segon any. Aquest any la meva participació en el projecte ha estat més discreta perquè l’arquitectura ja estava molt definida i calia anar fent seguiment de la implantació i ajudant quan es podia. Si tecnològicament hagués de resaltar algunes tecnologies amb les que he treballat diria que ha estat l’any del: Raspberry PI, Arduino, AMQP (RabbitMQ), Docker, Ansible, Vagrant, VirtualBox, Celery, Kombu, Supervisor, Ambari, Hadoop, HBase, HIVE, etc.

A més degut a temes de feina també m’he mogut força: Cardiff (UK), Langen (DE), Saragossa, Sevilla i Madrid. Són alguns dels llocs més llunyans als que m’ha portat la feina aquest any. Però el capítol que realment posa la cirereta a tota la feina ha estat la notícia que varem rebre pocs dies abans de Nadal quan se’ns va comunicar des de la unió europea que hem guanyat l’Horizon 2020 al que ens hem presentat. És a dir, que tenim pressupost assegurat per seguir invertint els dos propers anys a MIIMETIQ.

Hem venen al cap d’altres temes més secundaris però fites igualment importants en l’ambit personal i professional. Com per exemple, que he aconseguit tenir dues sortides a internet més a part de l’ADSL a casa. Gràcies al Santi, al Jordi i al Joan. Entre totes dues rondem els quasi 20Mbps a part de l’ADSL cosa que m’assegura una bona qualitat de servei en un entorn hidílic per seguir treballant i creant.

Si tot va com tenim previst acomiadarem l’any des de Bernui un poblet del Pirineu català, molt aprop de Sort. On amb una companyia excel·lent direm adéu a aquest any que tantes emocions ens ha regalat un any al que li podriem trobar molts adjectius però que al final és un capítol més dins la vida. Un capítol que hem d’acceptar amb la millor cara possible en cada moment i per la que hem d’estar agraïts per tot allò que entenem com a bo i per tot el que ara ens sembla dolent però que amb la intel·ligència del temps segurament entendrem que també tenia el seu missatge constructiu.

Així que un any més acabo l’any tot dient: GRÀCIES!!!

Internet of Things Forum 2014 – Plataformas tras el ecosistema

El pasado 23 de Noviembre participé en una mesa redonda sobre plataformas del IoT en el marco del IoT forum 2014. Esta jornada esta organizada por BDigital y me dieron la oportunidad de expresar mi opinión en una mesa redonda titulada “Plataformas tras el ecosistema”.

A continuación adjunto el video de la charla:

Si quereis ver el resto de videos de las ponenecias los teneis aquí: Videos de las ponencias del IoT forum 2014.

Scroll to Top