Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Ansible

No description
by

Tóth Imre

on 9 June 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Ansible

Original meaning
Named after a science fictional device that allows faster-than-light communication across infinite distances.
Other solutions
Who uses Ansible
Ansible is a Top 10 Python project on GitHub
A bit more Background
Development started at 2012
Raises 6 Million Dollars at 2013 Aug
Written by Michael DeHaan, who is also author
of Cobbler and Funct worked for Redhat
And PuppetLabs.
Ansible is a complete It-infrastructure
orchestration tool with a small learning curve.
Requirements:
Control machine
Python 2.5+
Ansible installation
Infrastructure machines
Python 2.5+
SSH Server
Structure
In Presentation Examples
Host Inventory file content
[webservers]
foo.example.com
bar.example.com
www[01:50].example.com

[dbservers]
one.example.com
two.example.com
three.example.com
db-[a:f].example.com
No w.....$ support
A simple playbook
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
Terminology
Inventory:
list of hosts, groups and variables



accelerate - Enable accelerated mode on remote node
acl - Sets and retrieves file ACL information.
add_host - add a host (and alternatively a group) to the ansible-playbook in-memory inventory
airbrake_deployment - Notify airbrake about app deployments
apt - Manages apt-packages
apt_key - Add or remove an apt key
apt_repository - Add and remove APT repositores
arista_interface - Manage physical Ethernet interfaces
arista_l2interface - Manage layer 2 interfaces
arista_lag - Manage port channel (lag) interfaces
arista_vlan - Manage VLAN resources
assemble - Assembles a configuration file from fragments
assert - Fail with custom message
async_status - Obtain status of asynchronous task
at - Schedule the execution of a command or script file via the at command.
authorized_key - Adds or removes an SSH authorized key
bigip_monitor_http - Manages F5 BIG-IP LTM http monitors
bigip_monitor_tcp - Manages F5 BIG-IP LTM tcp monitors
bigip_node - Manages F5 BIG-IP LTM nodes
bigip_pool - Manages F5 BIG-IP LTM pools
bigip_pool_member - Manages F5 BIG-IP LTM pool members
boundary_meter - Manage boundary meters
bzr - Deploy software (or files) from bzr branches
campfire - Send a message to Campfire
cloudformation - create a AWS CloudFormation stack
command - Executes a command on a remote node
copy - Copies files to remote locations.
cpanm - Manages Perl library dependencies.
cron - Manage cron.d and crontab entries.
datadog_event - Posts events to DataDog service
debconf - Configure a .deb package
debug - Print statements during execution
digital_ocean - Create/delete a droplet/SSH_key in DigitalOcean
digital_ocean_domain - Create/delete a DNS record in DigitalOcean
digital_ocean_sshkey - Create/delete an SSH key in DigitalOcean
django_manage - Manages a Django application.
dnsmadeeasy - Interface with dnsmadeeasy.com (a DNS hosting service).
docker - manage docker containers
docker_image - manage docker images
easy_install - Installs Python libraries
ec2 - create, terminate, start or stop an instance in ec2, return instanceid
ec2_ami - create or destroy an image in ec2, return imageid
ec2_ami_search - Retrieve AWS AMI for a given operating system.
ec2_asg - Create or delete AWS Autoscaling Groups
ec2_eip - associate an EC2 elastic IP with an instance.
ec2_elb - De-registers or registers instances from EC2 ELBs
ec2_elb_lb - Creates or destroys Amazon ELB. - Returns information about the load balancer. - Will be marked changed when called only if state is changed.
ec2_facts - Gathers facts about remote hosts within ec2 (aws)
ec2_group - maintain an ec2 VPC security group.
ec2_key - maintain an ec2 key pair.
ec2_lc - Create or delete AWS Autoscaling Launch Configurations
ec2_snapshot - creates a snapshot from an existing volume
ec2_tag - create and remove tag(s) to ec2 resources.
ec2_vol - create and attach a volume, return volume id and device map
ec2_vpc - configure AWS virtual private clouds
ejabberd_user - Manages users for ejabberd servers
elasticache - Manage cache clusters in Amazon Elasticache.
facter - Runs the discovery program facter on the remote system
fail - Fail with custom message
fetch - Fetches a file from remote nodes
file - Sets attributes of files
filesystem - Makes file system on block device
fireball - Enable fireball mode on remote node
firewalld - Manage arbitrary ports/services with firewalld
flowdock - Send a message to a flowdock
gc_storage - This module manages objects/buckets in Google Cloud Storage.
gce - create or terminate GCE instances
gce_lb - create/destroy GCE load-balancer resources
gce_net - create/destroy GCE networks and firewall rules
gce_pd - utilize GCE persistent disk resources
gem - Manage Ruby gems
get_url - Downloads files from HTTP, HTTPS, or FTP to node
git - Deploy software (or files) from git checkouts
github_hooks - Manages github service hooks.
glance_image - Add/Delete images from glance
group - Add or remove groups
group_by - Create Ansible groups based on facts
grove - Sends a notification to a grove.io channel
hg - Manages Mercurial (hg) repositories.
hipchat - Send a message to hipchat
homebrew - Package manager for Homebrew
hostname - Manage hostname
htpasswd - manage user files for basic authentication
include_vars - Load variables from files, dynamically within a task.
ini_file - Tweak settings in INI files
irc - Send a message to an IRC channel
jabber - Send a message to jabber user or chat room
jboss - deploy applications to JBoss
kernel_blacklist - Blacklist kernel modules
keystone_user - Manage OpenStack Identity (keystone) users, tenants and roles
lineinfile - Ensure a particular line is in a file, or replace an existing line using a back-referenced regular expression.
linode - create / delete / stop / restart an instance in Linode Public Cloud
locale_gen - Creates of removes locales.
lvg - Configure LVM volume groups
lvol - Configure LVM logical volumes
macports - Package manager for MacPorts
mail - Send an email
modprobe - Add or remove kernel modules
mongodb_user - Adds or removes a user from a MongoDB database.
monit - Manage the state of a program monitored via Monit
mount - Control active and configured mount points
mqtt - Publish a message on an MQTT topic for the IoT
mysql_db - Add or remove MySQL databases from a remote host.
mysql_replication - Manage MySQL replication
mysql_user - Adds or removes a user from a MySQL database.
mysql_variables - Manage MySQL global variables
nagios - Perform common tasks in Nagios related to downtime and notifications.
netscaler - Manages Citrix NetScaler entities
newrelic_deployment - Notify newrelic about app deployments
nova_compute - Create/Delete VMs from OpenStack
nova_fip - Associate an OpenStack floating IP with a server.
nova_keypair - Add/Delete key pair from nova
npm - Manage node.js packages with npm
ohai - Returns inventory data from Ohai
open_iscsi - Manage iscsi targets with open-iscsi
openbsd_pkg - Manage packages on OpenBSD.
openvswitch_bridge - Manage Open vSwitch bridges
openvswitch_port - Manage Open vSwitch ports
opkg - Package manager for OpenWrt
osx_say - Makes an OSX computer to speak.
ovirt - oVirt/RHEV platform management
pacman - Package manager for Archlinux
pagerduty - Create PagerDuty maintenance windows
pause - Pause playbook execution
ping - Try to connect to host and return pong on success.
pingdom - Pause/unpause Pingdom alerts
pip - Manages Python library dependencies.
pkgin - Package manager for SmartOS
pkgng - Package manager for FreeBSD >= 9.0
pkgutil - Manage CSW-Packages on Solaris
portage - Package manager for Gentoo
portinstall - Installing packages from FreeBSD’s ports system
postgresql_db - Add or remove PostgreSQL databases from a remote host.
postgresql_privs - Grant or revoke privileges on PostgreSQL database objects.
postgresql_user - Adds or removes a users (roles) from a PostgreSQL database.
quantum_floating_ip - Add/Remove floating IP from an instance
quantum_floating_ip_associate - Associate or disassociate a particular floating IP with an instance
quantum_network - Creates/Removes networks from OpenStack
quantum_router - Create or Remove router from openstack
quantum_router_gateway - set/unset a gateway interface for the router with the specified external network
quantum_router_interface - Attach/Dettach a subnet’s interface to a router
quantum_subnet - Add/Remove floating IP from an instance
rabbitmq_parameter - Adds or removes parameters to RabbitMQ
rabbitmq_plugin - Adds or removes plugins to RabbitMQ
rabbitmq_policy - Manage the state of policies in RabbitMQ.
rabbitmq_user - Adds or removes users to RabbitMQ
rabbitmq_vhost - Manage the state of a virtual host in RabbitMQ
raw - Executes a low-down and dirty SSH command
rax - create / delete an instance in Rackspace Public Cloud
rax_clb - create / delete a load balancer in Rackspace Public Cloud
rax_clb_nodes - add, modify and remove nodes from a Rackspace Cloud Load Balancer
rax_dns - Manage domains on Rackspace Cloud DNS
rax_dns_record - Manage DNS records on Rackspace Cloud DNS
rax_facts - Gather facts for Rackspace Cloud Servers
rax_files - Manipulate Rackspace Cloud Files Containers
rax_files_objects - Upload, download, and delete objects in Rackspace Cloud Files
rax_identity - Load Rackspace Cloud Identity
rax_keypair - Create a keypair for use with Rackspace Cloud Servers
rax_network - create / delete an isolated network in Rackspace Public Cloud
rax_queue - create / delete a queue in Rackspace Public Cloud
rds - create, delete, or modify an Amazon rds instance
rds_param_group - manage RDS parameter groups
rds_subnet_group - manage RDS database subnet groups
redhat_subscription - Manage Red Hat Network registration and subscriptions using the subscription-manager command
redis - Various redis commands, slave and flush
rhn_channel - Adds or removes Red Hat software channels
rhn_register - Manage Red Hat Network registration using the rhnreg_ks command
riak - This module handles some common Riak operations
route53 - add or delete entries in Amazons Route53 DNS service
rpm_key - Adds or removes a gpg key from the rpm db
s3 - idempotent S3 module putting a file into S3.
script - Runs a local script on a remote node after transferring it
seboolean - Toggles SELinux booleans.
selinux - Change policy and state of SELinux
service - Manage services.
set_fact - Set host facts from a task
setup - Gathers facts about remote hosts
shell - Execute commands in nodes.
slurp - Slurps a file from remote nodes
stat - retrieve file or file system status
subversion - Deploys a subversion repository.
supervisorctl - Manage the state of a program or group of programs running via Supervisord
svr4pkg - Manage Solaris SVR4 packages
swdepot - Manage packages with swdepot package manager (HP-UX)
synchronize - Uses rsync to make synchronizing file paths in your playbooks quick and easy.
sysctl - Manage entries in sysctl.conf.
template - Templates a file out to a remote server.
ufw - Manage firewall with UFW
unarchive - Copies an archive to a remote location and unpack it
uri - Interacts with webservices
urpmi - Urpmi manager
user - Manage user accounts
virt - Manages virtual machines supported by libvirt
wait_for - Waits for a condition before continuing.
xattr - set/retrieve extended attributes
yum - Manages packages with the yum package manager
zfs - Manage zfs
zypper - Manage packages on SuSE and openSuSE
zypper_repository - Add and remove Zypper repositories


Core Modules
More Info and credits:

http://ansible.com
https://galaxy.ansible.com

Slides.Info I sto... er borrowed:
http://www.slideshare.net/bcoca/ansible-config-mgmt
http://www.slideshare.net/ShapeBlue/ansible-cseug-jan2014
http://www.slideshare.net/johnthethird/ansible-presentation-24942953
https://github.com/ansible/ansible-examples
http://terry.im/wiki/terry/Ansible.html
https://www.scriptrock.com/articles/ansible-vs-salt/
http://techcrunch.com/2013/08/12/ansibleworks-raises-6m-for-popular-open-source-and-easy-to-use-it-automation-framework/
https://servercheck.in/blog/using-ansible-galaxy
https://servercheck.in/blog/apache-virtualhosts-with-ansible-and-jinja2
http://michaeldehaan.net/post/32378722265/ansible-learns-to-fly-0mq-that-sets-up-itself
http://probably.co.uk/puppet-vs-chef-vs-ansible.html
http://www.scriptrock.com/articles/ansible-vs-salt/
http://probably.co.uk/puppet-vs-chef-vs-ansible.html
http://zeroturnaround.com/rebellabs/rebel-labs-release-it-ops-devops-productivity-report-2013/4/
+13-20 modules every two months,

In other words new stable release every 2 months!
List of core modules:
You can write modules in any language, the only constraint is that the
output must be JSON.
Of course these modules run on the client machines,
If your module runs in GO, than go must be installed on the managed node.
Ansible
If you want to know a lot more

Just go to:
https://github.com/ansible/ansible-examples
[other]
jumper ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50
What ansible can offer for big customers?
They provide support for ansible as low as 99$ per month

Ansible Tower - Nice gui and REST api for Ansible

Ansible Tower Enterprise - The same thing, with some extra support and cost ;)
Questions?
Modules:
Actually do the work, written in any language

Plugins:
callback, action and other hooks
Facts:
data gathered from target hosts
Playbook:
collections of plays
Play:
loops over a lost of tasks mapped to a lost of hosts

Task:
invokes a module to do the work
Handlers:
a type of task
Just some tweets
Wilfred Hughes @dontYetKnow

I'm impressed with Ansible. There are fewer concepts to learn to get up and running (compared with similar tools I've used)
Joeri Verdeyen @jverdeyen

wow, @ansible your simplicity has truly amazed me, compared to chef #deployment #ansible
Steve Pereira @SteveElsewhere

@ansible, you are my sunshine. One of my now three sunshines, but the brightest by far. #sorrypuppet #sorrychef
Matt Camilli @mlcamilli

so @ansible is just about the greatest thing ever
Franck Cuny @franckcuny

In the category of #DevOps orchestration engines, #Ansible has nearly universal acclaim within ThoughtWorks projects. http://t.co/ASz92DQJM4
Francis Tseng @frnsys

@ansible you have amazing documentation, some of the best I've come across :)
Franck Cuny @franckcuny

In the category of #DevOps orchestration engines, #Ansible has nearly universal acclaim within ThoughtWorks projects. http://t.co/ASz92DQJM4
How other solutions look like in practice?
A presentation by @imtoth
Full transcript