How do I deploy Linodes using Ansible?

Is it possible to deploy Linode Instances with Ansible in addition to managing the configuration and software in the OS of those instances?

1 Reply

Linode support has been in Ansible for a few years. The linode module offers many of the Instance management features of the Legacy Linode API (v3).

In the most recent release of Ansible 2.8, Linode support has been updated for use with the latest Linode API (v4). Most of this work was contributed by by Luke Murphy who started the process and saw it through to the Ansible release. He's also continuing this "Linode all the things" effort on the Molecule project.

To contribute more to this project, join the Ansible Linode Working Group.

See the docs for the Linode Inventory and linode_v4 module:


Here's an example yaml file and the instructions to execute it. This example will create a Linode Nanode and will install Minecraft server on it:

  1. Create a mc.yml file using the snippet below
  2. pip install --upgrade ansible
  3. Get a Linode Personal Access Token with permission to read and write Linodes.
  4. export LINODE_TOKEN=... # Replace ... with the token
  5. ansible-playbook mc.yml -e linode_token=$LINODE_TOKEN -e type=g6-nanode-1 -e region=us-east -e image=linode/debian9 -e ssh_key=~/.ssh/id_rsa.pub
---
- name: launch Linode instance
  hosts: localhost
  gather_facts: False
  tasks:
    - name: pwd
      local_action: command pwd
    - name: spin up Linode instance
      local_action:
        module: linode_v4
          state=present
          label=minecraft1
          access_token={{linode_token}}
          authorized_keys={{ssh_key}}
          type={{type}}
          region={{region}}
          image={{image}}
      register: my_linode
    - name: print info about my_linode
      local_action:
        module: debug
          msg="ID is {{ my_linode.instance.id }} IP is {{ my_linode.instance.ipv4 }}"
    - name: Add new linode to host group
      local_action:
        module: add_host
          hostname={{ my_linode.instance.ipv4[0] }}
          group=launched
          ansible_user=root
    - name: Wait for SSH to come up
      local_action:
        module: wait_for
          host={{ my_linode.instance.ipv4[0] }}
          port=22
          search_regex=OpenSSH
          timeout=320
- name: Configure linode for minecraft
  hosts: launched
  gather_facts: True
  tasks:
    - name: apply apt-get update --fix-missing
      apt:
        update_cache: yes
        autoclean: yes
        autoremove: yes
        upgrade: dist
    - name: install Java and Screen
      apt:
        update_cache: yes
        autoclean: yes
        autoremove: yes
        name: "{{ packages }}"
      vars:
        packages:
        - default-jdk
        - screen
    - name: make the minecraft directory
      file: state=directory path=/root/minecraft
    - name: download minecraft (1.6.4)
      command: wget https://s3.amazonaws.com/Minecraft.Download/versions/1.6.4/minecraft_server.1.6.4.jar chdir=/root/minecraft creates=/root/minecraft/minecraft_server.1.6.4.jar
      become_user: root
      become_method: sudo
    - name: run minecraft
      command: screen -S minecraft -d -m java -Xmx512M -Xms512M -jar /root/minecraft/minecraft_server.1.6.4.jar
      become_user: root
      become_method: sudo

Reply

Please enter an answer
Tips:

You can mention users to notify them: @username

You can use Markdown to format your question. For more examples see the Markdown Cheatsheet.

> I’m a blockquote.

I’m a blockquote.

[I'm a link] (https://www.google.com)

I'm a link

**I am bold** I am bold

*I am italicized* I am italicized

Community Code of Conduct