ANSIBLE
Introduction à Ansible - Gestion F5
Michael Lessard
Architecte principal de solutions
[email protected]
michaellessard
AVERTISSEMENT
CECI EST UNE FORMATION D’INTRODUCTION
GRATUITE OFFERTE PAR RED HAT
ELLE N’A AUCUN LIEN AVEC NOTRE GROUPE
GLS
CET ATELIER A ÉTÉ ÉLABORÉ PAR QUELQUES
ENTHOUSIASTES ARCHITECTES DE SOLUTIONS
AU CANADA
ORDRE DU JOUR
Formation Ansible F5
1 Introduction à Ansible
4 Playbook Ansible avancé
2 Commande Ansible
+ LABO 5 Use cases F5 Ansible
+ LABO
3 Playbook Ansible
+ LABO 6 Ansible Tower
3 RHUG Ansible Workshop
INTRODUCTION À ANSIBLE
SIMPLE PUISSANT SANS AGENT
Automatisation facile Déploiement d’application Sans agent
Pas besoin d’être programmeur Gestion de configuration Utilise OpenSSH & WinRM
Les tâches sont exécuter en ordre Orchestration de workflow Pas d’agent à exploiter ou
Utilisable par tous Automatisation des réseaux maintenir
Devener productif rapidement Orchestrer le cycle de vie Démarrer immédiatement
complet Plus efficace, plus sécure
5
Introduction à Ansible
Michael DeHaan (créateur de Cobbler et de Func) « Ansible doit une grande
partie de ses origines au
https://www.ansible.com/blog/2013/12/08/the-origins-of-ansible
temps que j’ai passé au sein
du groupe des technologies
émergentes de Red Hat, qui
Simple était une unité de R D sous la
direction du CTO de Red Hat.
AUTOMATISE TOUT »
- Michael DeHaan
Peut gérer presque n’importe lequel *IX par le biais d’un
protocole SSH «...parce que Puppet était trop
déclaratif, vous ne pouviez
nécessite Python pas l’utiliser pour faire des
choses comme réinitialiser
Windows (PowerShell, module WinRM Python) des serveurs ou effectuer
toutes les tâches ad hoc qui
Composants de nuage, virtualisation, conteneur et réseau devaient être faites
entretemps…»
- Michael DeHaan
6 RHUG Ansible Workshop
Une ansible est un dispositif
théorique permettant de réaliser
des communications à une vitesse
supraluminique. Elle peut envoyer
et recevoir des messages en
provenance et en direction du
périphérique correspondant sur
n’importe quelle distance sans
aucun délai. Les ansibles sont
une composante emblématique de la
littérature de science-fiction.
-- Wikipédia
28,000+ 1450+ 500,000+
Stars on GitHub Ansible modules Downloads a month
8
STARS TECHNO CONTRIBUTEURS
29,014 Ansible 3328
16,357 Vagrant 814
11,421 Terraform 1195
8,680 Salt 2021
5,255 Chef 550
4,915 Puppet 491
EN 30 ANS, LA GESTION DES RÉSEAUX
N’A PAS CHANGÉE.
POURQUOI ANSIBLE + RÉSEAU?
« Lorsqu’on leur a demandé ce qui selon eux était le
composant le plus immature en gestion du nuage, 76 % ont
dit que c’était le réseau; 15 % ont mentionné le traitement
et 9 % le stockage. »
Rapport de gestion nuagique SDx 2015 : OpenStack and More sdxcentral.com
“A-ha” Moment
(Feb. 2, 2017)
AVANTAGES
Pourquoi Ansible est-il populaire?
➔ Efficace : sans agent, installation minimale, état désiré
(aucun changement non nécessaire), architecture basée sur
la technologie de diffusion personnalisée, ciblage facile basé
sur des faits
➔ Rapide : Facile à apprendre/à se rappeler, langage déclaratif
simple
➔ Évolutif : Peut gérer des milliers de noeuds, architecture
modulaire extensible
➔ Securitaire : Transport au travers SSH
➔ Vaste communauté : des milliers de rôles sur Ansible Galaxy
13 RHUG Ansible Workshop
ANSIBLE - LE LANGAGE DE DEVOPS
14 RHUG Ansible Workshop
DU RÉSEAU AU CODE – SONDAGE NETDEVOPS (NOV. 2016)
« Lesquels des outils suivants vous intéressent ou avez-vous déployés? »
PRET ?
16 RHUG Ansible Workshop
COMPOSANTS CLÉS
Comprendre les termes d’Ansible
★ Playbook (Plan)
★ Plays
★ Tasks
★ Modules (Tools)
★ Inventory
17 RHUG Ansible Workshop
INSTALLATION D’ANSIBLE
Mode d’emploi
https://access.redhat.com/articles/3174981
# CENTOS
# INSTALLER LE REPO EPEL
yum install epel-release
# RHEL
# ACTIVER LE REPOS ANSIBLE
subscription-manager repos --enable=rhel-7-server-ansible-VERSION-rpms
# INSTALLER ANSIBLE
yum install ansible
Est-ce que Red Hat offre du soutien pour les services de base d’Ansible?
https://access.redhat.com/articles/2271461
18 RHUG Ansible Workshop
MODULES
En quoi ça consiste?
Bouts de code copiés sur le système cible.
Exécutés pour satisfaire à la déclaration de
tâche.
Personnalisables.
Les modules qui expédient avec Ansible sont tous écrit en Python, mais
les modules peuvent être écrits en n’importe quel langage.
19 RHUG Ansible Workshop
Control Node
Managed Network Devices
Inventory
Cisco IOS
SSH
Playbook
Arista EOS
SSH, API
SSH
Modules F5 BIG-IP
Modules: Control Node: Managed Nodes (Inventory):
Handles execution of remote Any client system (server, laptop, A collection of endpoints being
system commands VM) running Linux or Mac OSX managed via SSH or API.
MODULES
Vaste choix / force secrète d’Ansible...
➔ Modules de nuage ➔ Modules de réseaux
➔ Modules de grappes ➔ Modules de notification
➔ Modules de commandements ➔ Modules de gestion à distance
➔ Modules Crypto
➔ Modules d’intégration
➔ Modules de bases de données
➔ Modules de contrôle à la source
➔ Modules de fichiers
➔ Modules de stockage
➔ Modules d’identités
➔ Modules de système
➔ Modules d’inventaire
➔ Modules de logiciels utilitaires
➔ Modules de messages
➔ Modules d’infrastructures Web
➔ Modules de surveillance
➔ Modules Windows
21 RHUG Ansible Workshop
F5 ANSIBLE MODULES
+ bigip_asm_policy - Manage BIG-IP ASM policies
bigip_command - Run arbitrary command on F5 devices
bigip_config - Manage BIG-IP configuration sections
bigip_configsync_action - Perform different actions related to config-sync
bigip_device_connectivity - Manages device IP configuration settings for HA on a BIG-IP
bigip_pool - Manages F5 BIG-IP LTM pools bigip_device_dns - Manage BIG-IP device DNS settings
bigip_pool_member - Manages F5 BIG-IP LTM pool members bigip_device_group - Manage device groups on a BIG-IP
bigip_profile_client_ssl - Manages client SSL profiles on a BIG-IP bigip_device_group_member - Manages members in a device group
bigip_provision - Manage BIG-IP module provisioning bigip_device_httpd - Manage HTTPD related settings on BIG-IP
bigip_qkview - Manage qkviews on the device bigip_device_ntp - Manage NTP servers on a BIG-IP
bigip_remote_syslog - Manipulate remote syslog settings on a BIG-IP bigip_device_sshd - Manage the SSHD settings of a BIG-IP
bigip_routedomain - Manage route domains on a BIG-IP bigip_device_trust - Manage the trust relationships between BIG-IPs
bigip_security_address_list - Manage address lists on BIG-IP AFM bigip_facts - Collect facts from F5 BIG-IP devices
bigip_security_port_list - Manage port lists on BIG-IP AFM bigip_gtm_datacenter - Manage Datacenter configuration in BIG-IP
bigip_selfip - Manage Self-IPs on a BIG-IP system bigip_gtm_facts - Collect facts from F5 BIG-IP GTM devices
bigip_snat_pool - Manage SNAT pools on a BIG-IP bigip_gtm_pool - Manages F5 BIG-IP GTM pools
bigip_snmp - Manipulate general SNMP settings on a BIG-IP bigip_gtm_server - Manages F5 BIG-IP GTM servers
bigip_snmp_trap - Manipulate SNMP trap information on a BIG-IP bigip_gtm_virtual_server - Manages F5 BIG-IP GTM virtual servers
bigip_software_update - Manage the software update settings of a BIG-IP bigip_gtm_wide_ip - Manages F5 BIG-IP GTM wide ip
bigip_ssl_certificate - Import/Delete certificates from BIG-IP bigip_hostname - Manage the hostname of a BIG-IP
bigip_ssl_key - Import/Delete SSL keys from BIG-IP bigip_iapp_service - Manages TCL iApp services on a BIG-IP
bigip_static_route - Manipulate static routes on a BIG-IP bigip_iapp_template - Manages TCL iApp templates on a BIG-IP
bigip_sys_db - Manage BIG-IP system database variables bigip_iapplx_package - Manages Javascript iApp packages on a BIG-IP
bigip_sys_global - Manage BIG-IP global settings bigip_irule - Manage iRules across different modules on a BIG-IP
bigip_traffic_group - Manages traffic groups on BIG-IP bigip_monitor_http - Manages F5 BIG-IP LTM http monitors
bigip_ucs - Manage upload, installation and removal of UCS files bigip_monitor_https - Manages F5 BIG-IP LTM https monitors
bigip_ucs_fetch - Fetches a UCS file from remote nodes bigip_monitor_snmp_dca - Manages BIG-IP SNMP data collecting agent (DCA) monitors
bigip_user - Manage user accounts and user attributes on a BIG-IP bigip_monitor_tcp - Manages F5 BIG-IP LTM tcp monitors
bigip_vcmp_guest - Manages vCMP guests on a BIG-IP bigip_monitor_tcp_echo - Manages F5 BIG-IP LTM tcp echo monitors
bigip_virtual_address - Manage LTM virtual addresses on a BIG-IP bigip_monitor_tcp_half_open - Manages F5 BIG-IP LTM tcp half-open monitors
bigip_virtual_server - Manage LTM virtual servers on a BIG-IP bigip_monitor_udp - Manages F5 BIG-IP LTM udp monitors
bigip_vlan - Manage VLANs on a BIG-IP system bigip_node - Manages F5 BIG-IP LTM nodes
bigip_wait - Wait for a BIG-IP condition before continuing bigip_partition - Manage BIG-IP partitions
bigiq_regkey_license - Manages licenses in a BIG-IQ registration key pool bigip_policy - Manage general policy configuration on a BIG-IP
bigiq_regkey_pool - Manages registration key pools on BIG-IQ bigip_policy_rule - Manage LTM policy rules on a BIG-IP
MODULES
Documentation
# AFFICHE TOUS LES MODULES
ansible-doc -l
# ACCÉDER À LA DOCUMENTATION D’UN MODULE
ansible-doc <module_name>
23 RHUG Ansible Workshop
IDEMPO-QUOI?
« En mathématiques et en informatique, le concept d’idempotence signifie
essentiellement qu'une opération a le même effet qu'on l'applique une ou
plusieurs fois, ou encore qu'en le réappliquant on ne modifiera pas le
résultat. »
« Lorsqu’il est soigneusement écrit, un scénario Ansible peut être
idempotent afin de prévenir les effets secondaires imprévus sur les
systèmes gérés. »
– Wikipédia
24 Ansible Workshop
LES COMMANDES ANSIBLE
INVENTAIRE
Pour utiliser l’inventaire par défaut (/etc/ansible/hosts) ou créer un fichier
inventaire
[centos@centos1 ~]$ mkdir ansible ; cd ansible
[centos@centos1 ~]$ vim inventory
[bigip]
192.168.124.11
26 RHUG Ansible Workshop
LAB # 1
Inventaire
Objectifs
Créer votre fichier inventaire
1. Validez l’accès à votre intance BIG-IP. Connectez vous via le web à
votre appliance. IP et credentials vous serons fournis par l’instructeur
2. # vim /etc/ansible/hosts
3. ajoutez ce-ci au fichier (prendre l’ip qui vous est assigné)
[bigip]
192.168.124.11
27 RHUG Ansible Workshop
PLAYBOOK ANSIBLE
YAML
1. Principalement conçu pour la représentation des structures de données
2. Facile à écrire, format pouvant être lu par les humains
3. Objectif de la conception : abandonner la syntaxe traditionnelle “cloisonée”
ÉVITEZ D’UTILISER LE COPIER-COLLER!!!
29 RHUG Ansible Workshop Programme de validation YAML : yamllint.com
EXEMPLE DE PLAYBOOK
---
- name: This is a Play
hosts: bigip
gather_facts: no
vars:
username: admin
password: 1qaz2wsX
tasks:
- name: Manage NTP setting on BIG-IP
bigip_device_ntp:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
ntp_servers: 0.centos.pool.ntp.org
validate_certs: False
delegate_to: localhost
30 RHUG Ansible Workshop
PLAYS
Nommage
- name: This is a Play
31 RHUG Ansible Workshop
PLAYS
Sélection des hôtes
- name: This is a Play
hosts: bigip
- name: this is a play 2
hosts: all
32 RHUG Ansible Workshop
PLAYS
Arguments
- name: This is a Play
hosts: bigip
gather_facts: no
33 RHUG Ansible Workshop
FAITS
Recueille les faits au sujet de l’hôte distant
➔ Ansible fournit automatiquement de nombreux faits au sujet des
systèmes contactés
➔ Fournit par le module setup
➔ Mettre gather_facts à no lorsqu’utilisé pour des composantes
réseautique.
➔ Les faits des composantes réseaux sont accessible via des
modules spécifiques
http://docs.ansible.com/ansible/setup_module.html
34 RHUG Ansible Workshop
PLAYS
Variables et tâches
---
- name: This is a Play
hosts: bigip
gather_facts: no
vars:
username: admin
password: 1qaz2wsX
tasks:
- name: Manage NTP setting on BIG-IP
bigip_device_ntp: // module appelé
server: "{{ inventory_hostname }}" // paramètres du module
user: "{{ username }}"
password: "{{ password }}"
ntp_servers: 0.centos.pool.ntp.org
validate_certs: False
delegate_to: localhost
**** Lorsqu’une variable est utilisée comme premier élément pour commencer une valeur,
les guillemets sont obligatoires.
35 RHUG Ansible Workshop
DÉLEGATION
---
- name: This is a Play
hosts: bigip
gather_facts: no
vars:
username: admin
password: 1qaz2wsX
tasks:
- name: Manage NTP setting on BIG-IP
bigip_device_ntp:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
ntp_servers: 0.centos.pool.ntp.org
validate_certs: False
delegate_to: localhost
36 RHUG Ansible Workshop
Délégation Control Node
Managed Network Devices
Inventory
Cisco IOS
SSH
Playbook
Arista EOS
SSH, API
SSH
Modules F5 BIG-IP
Modules: Control Node: Managed Nodes (Inventory):
Handles execution of remote Any client system (server, laptop, A collection of endpoints being
system commands VM) running Linux or Mac OSX managed via SSH or API.
EXÉCUTER UN PLAYBOOK ANSIBLE
[centos@centos7-1 ansible]$ ansible-playbook play.yml
38 RHUG Ansible Workshop
EXÉCUTER UN PLAYBOOK ANSIBLE
En mode vérification uniquement
[centos@centos7-1 ansible]$ ansible-playbook play.yml --check
39 RHUG Ansible Workshop
RESULT
Enregistre les résultats de la tâche pour le débogage ou d’autres fins
- shell: /usr/bin/uptime
register: result
- debug: var=result (module debug : va afficher le résultat)
40 RHUG Ansible Workshop
Exemple playbook
---
- name: This is a Play
hosts: bigip
gather_facts: no
vars:
username: admin
password: 1qaz2wsX
tasks:
- name: Manage NTP setting on BIG-IP
bigip_device_ntp:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
ntp_servers: 0.centos.pool.ntp.org
validate_certs: False
delegate_to: localhost
41 RHUG Ansible Workshop
LAB # 2
Premier playbook
Objectifs
Créer votre premier playbook
1. En utilisant la documentation ansible des modules bigip, et basé sur
l’information transmise, créer votre premier playbook qui appel le
module bigip_command et retourne la version du BIG IP
42 RHUG Ansible Workshop
LAB #2 - SOLUTION
---
- name: F5 Command
gather_facts: false
hosts: bigip
vars:
username: admin
password: admin
tasks:
- name: show sys version
bigip_command:
commands: show sys version
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
validate_certs: False
delegate_to: localhost
register: result
- debug:
var: result
[centos@centos1 ansible]$ ansible-playbook -i inventory lab2.yaml
43 RHUG Ansible Workshop
PLAYBOOK ANSIBLE -- AVANCÉ
PLAYS
Boucles ***
- name: F5 Initial setup
gather_facts: false
hosts: bigip
vars:
username: admin
password: admin
tasks:
- name: Add http node to web-pool
bigip_pool_member:
description: "HTTP Webserver-1"
host: "{{ item.host }}"
name: "{{ item.name }}"
user: "{{ username }}"
password: "{{ password }}"
pool: "web-pool"
port: "80"
server: "{{ inventory_hostname }}"
validate_certs: False
with_items:
- host: "192.168.168.140"
name: "web01.internal"
- host: "192.168.68.141"
name: "web02.internal"
delegate_to: localhost
45 RHUG Ansible Workshop
BOUCLES
Plusieurs types de boucles générales et à usage déterminé
➔ with_nested
➔ with_dict
➔ with_fileglob
➔ with_together
➔ with_sequence
➔ until
➔ with_random_choice
➔ with_first_found
➔ with_indexed_items
➔ with_lines
http://docs.ansible.com/ansible/playbooks_loops.html
46 RHUG Ansible Workshop
HANDLERS
Exécuter seulement si la tâche a un statut « modifié »
---
- name: This is a Play
hosts: web
tasks:
- yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
notify: Restart Apache
- template: src=templates/web.conf.j2
dest=/etc/httpd/conf.d/web.conf
notify: Restart Apache
handlers:
- name: Restart Apache
service: name=httpd state=restarted
47 RHUG Ansible Workshop
TAG
Exemple d’utilisation d’un tag
tasks:
- yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
tags:
- packages
- template: src=templates/src.j2 dest=/etc/foo.conf
tags:
- configuration
48 RHUG Ansible Workshop
TAGS
Exécuter avec des tags
ansible-playbook example.yml --tags “configuration”
ansible-playbook example.yml --skip-tags "notification"
49 RHUG Ansible Workshop
TÂCHES CONDITIONNELLES
Seulement exécuter sur la machine dont le système d’exploitation est
Red Hat
- name: This is a Play
hosts: web
remote_user: centos
become: sudo
tasks:
- name: install Apache
yum: name=httpd state=installed
when: ansible_os_family == "RedHat"
50 RHUG Ansible Workshop
BLOCS
Applique une condition à plusieurs tâches à la fois
tasks:
- block:
- yum: name={{ item }} state=installed
with_items:
- httpd
- memcached
- template: src=templates/web.conf.j2 dest=/etc/httpd/conf.d/web.conf
- service: name=bar state=started enabled=True
when: ansible_distribution == 'CentOS'
51 RHUG Ansible Workshop
ERREURS
Ignore les erreurs
Par défaut, Ansible s’arrête aux erreurs. Ajoutez le paramètre ignore_error pour sauter les
erreurs possibles.
- name: ping host
command: ping -c1 www.foobar.com
ignore_errors: yes
52 RHUG Ansible Workshop
ERREURS
Gérer les erreurs à l’aide des blocs
tasks:
- block:
- debug: msg='i execute normally'
- command: /bin/false
- debug: msg='i never execute, cause ERROR!'
rescue:
- debug: msg='I caught an error'
- command: /bin/false
- debug: msg='I also never execute :-('
always:
- debug: msg="this always executes"
53 RHUG Ansible Workshop
LINEINFILE
Pour ajouter, enlever ou mettre à jour une ligne en particulier
- lineinfile: dest=/etc/selinux/config regexp=^SELINUX=
line=SELINUX=enforcing
- lineinfile: dest=/etc/httpd/conf/httpd.conf regexp="^Listen "
insertafter="^#Listen " line="Listen 8080"
Vous trouverez ci-dessous un très bon exemple :
https://relativkreativ.at/articles/how-to-use-ansibles-lineinfile-mod
ule-in-a-bulletproof-way
Remarque : L’utilisation d’un template ou d’un module dédié est
plus efficace
54 RHUG Ansible Workshop
ANSIBLE CONFIG
Pour configurer ansible, le fichier par défaut est ansible.cfg
Par exemple, pour retirer les information de DEPRECATION WARNING
TASK [show sys version] ******************************************************************
[DEPRECATION WARNING]: Param 'server' is deprecated. See the module docs for more
information. This feature will be removed in version 2.9. Deprecation warnings can be
disabled by setting deprecation_warnings=False in ansible.cfg.
vim ansible.cfg
[defaults]
warnings = False
stdout_callback = debug
deprecation_warnings = False
55 RHUG Ansible Workshop
USE CASE #1 - Onboarding
Onboard the F5 BIG-IP with initial configurations for
application deployment using Ansible Playbooks
• Configure new infrastructure
without sysadmins needing to Public Cloud
scour documentation to Deployments
remember how to do it. x100 BIG-IP VE
• Bootstrap & provision large
BIG-IP infrastructures using Ansible
Ansible playbooks (write once,
run over and over)
Private Cloud
Deployments
x1000 BIG-IP
devices
© 2017 F5 Networks | CONFIDENTIAL 56
LAB #3
Configuration initiale de BIGIP
Objectifs
À l’aide d’un playbook Ansible :
1. Configurer les éléments suivant à l’aide d’un playbook ansible
a. Serveurs ntp (bigip_device_ntp):
i. 0.centos.pool.ntp.org
ii. 1.centos.pool.ntp.org
b. SSH (bigip_device_ssh)
i. Activer la bannière ssh
ii. Bannière : “---- Bienvenue sur BIGIP F5 Ansible workshop ---”
c. DNS (bigip??)
i. Activez la configuration DNS
ii. Indiquez comme serveur de nom : 8.8.8.8
57 RHUG Ansible Workshop
---
LAB #3 - SOLUTION
- name: F5 initial setup
gather_facts: false
hosts: bigip
vars:
username: admin
password: 1qaz2wsX
ntp_servers:
- '0.centos.pool.ntp.org'
- '1.centos.pool.ntp.org'
banner_text: "---- Bienvenue sur BIGIP F5 Ansible workshop ---"
tasks:
- name: Configure NTP server on BIG-IP
bigip_device_ntp:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
ntp_servers: "{{ ntp_servers }}"
validate_certs: False
delegate_to: localhost
- name: Manage SSHD setting on BIG-IP
bigip_device_sshd:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
banner: "enabled"
banner_text: " {{ banner_text }}"
validate_certs: False
delegate_to: localhost
- name: Set the DNS setting on the BIG-IP
bigip_device_dns:
name_servers:
- 8.8.8.8
search:
- localdomain
state: present
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
validate_certs: False
delegate_to: localhost
58 RHUG Ansible Workshop
USE CASE #2 SaaS & Multi-tenancy
Scale up or scale down BIG-IP objects based on your
tenants need or your consumer needs
• Add/Remove Applications on the
F5 BIG-IP automatically through With out Automation: days
iApps through a ticketing system + 2
• Add/remove new virtual servers & hours of manual tasks
pool members on the F5 BIG-IP With automation: 10 mins
• Deploy completely new VE’s and
configure application
Service Portal
Application Automation & Orchestration Faster delivery
(E.g. Jenkins,
Owner using Ansible
Service Now)
© 2017 F5 Networks | CONFIDENTIAL 59
LAB #4
Déploiement d’une application
Objectifs
1. Configurer les éléments suivant à l’aide d’un playbook ansible
a. Créer deux noeuds (ip : xx.xx.xx.xx et xx.xx.xx.xx)
b. Créer un webpool qui contient ces deux noeuds
c. Créer un serveur virtuel assigné à ce pool
60 RHUG Ansible Workshop
---
LAB #4 - SOLUTION 1
- name: F5 Initial setup
gather_facts: false
hosts: bigip
vars:
username: admin
password: admin
tasks:
- name: Create a web01.internal node //Creating Node1
bigip_node:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
host: "192.168.68.140"
name: "web01.internal"
validate_certs: False
delegate_to: localhost
- name: Create a web02.internal node //Creating Node2
bigip_node:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
host: "192.168.68.141"
name: "web02.internal"
validate_certs: False
delegate_to: localhost
- name: Create a web-pool //Creating a pool
bigip_pool:
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
lb_method: "ratio_member"
monitors:
- '/Common/gateway_icmp'
monitor_type: 'and_list'
name: "web-pool"
validate_certs: False
delegate_to: localhost
61 RHUG Ansible Workshop
LAB #4 - SOLUTION 2
- name: Add http node to web-pool //Assigning members to a pool
bigip_pool_member:
description: "HTTP Webserver-1"
host: "{{ item.host }}"
name: "{{ item.name }}"
user: "{{ username }}"
password: "{{ password }}"
pool: "web-pool"
port: "80"
server: "{{ inventory_hostname }}"
validate_certs: False
with_items:
- host: "192.168.168.140"
name: "web01.internal"
- host: "192.168.68.141"
name: "web02.internal"
delegate_to: localhost
- name: Create a virtual server //Create a HTTPS Virtual Server
bigip_virtual_server:
description: "Secure web application"
server: "{{ inventory_hostname }}"
user: "{{ username }}"
password: "{{ password }}"
name: "https_vs"
destination: "10.10.20.120"
port: 443
snat: "Automap"
all_profiles:
- http
- clientssl
pool: "web-pool"
validate_certs: False
delegate_to: localhost
62 RHUG Ansible Workshop
WHAT IS ANSIBLE TOWER?
Ansible tower is an enterprise
framework for controlling, securing
and managing your Ansible automation
– with a UI and restful API.
• Encrypted access management
centralized (ssh, password, api
access, etc ...)
• Role-based access control keeps
environments secure, and teams
efficient.
• All Ansible automations are
centrally logged, ensuring
complete auditability and
compliance.
• Non-privileged users can safely
deploy entire applications with
push-button deployment access.
• Integrates with the api, Callback
provisioning
63
• Schedule playbook execution
Configuration F5 credential Tower
Avec Tower, pour l’instant, il n’y a pas de type de credential pour F5, on doit en
créer un.
INPUT CONFIGURATION
fields:
- type: string
id: user
label: User
- secret: true
type: string
id: password
label: Password
required:
- user
- password
INJECTOR CONFIGURATION
extra_vars:
F5_PASSWORD: '{{password}}'
F5_USER: '{{user}}'
password: '{{password}}'
username: '{{user}}'
64 RHUG Ansible Workshop
LAB #5
Integration avec Tower
Lab guidée
65 RHUG Ansible Workshop
MERCI
plus.google.com/+RedHat facebook.com/redhatinc
linkedin.com/company/red-hat twitter.com/RedHatNews
youtube.com/user/RedHatVideos