Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
×Ô¶¯»¯ÔËά֮playbook
 
×÷Õߣº AlicFeng
  2065  次浏览      29
 2019-11-19
 
±à¼­ÍƼö:
±¾ÎIJûÊöÁËplaybookµÄ½éÉÜ¡¢playbook»ù´¡Óï·¨¡¢playbookÄ£¿é»¯task£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚÌÚÑ¶ÔÆ£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼­¡¢ÍƼö¡£

ǰÑÔ

ǰ¶Îʱ¼ä×ܽáÁËansibleµÄ»ù±¾ÅäÖÃÓëʹÓã¬ÄÇô˵µ½ÁËansibleµÄ»°ÄØ£¬playbookÊDZز»¿ÉÉÙµÄ

playbookµÄ½éÉÜ

Playbooks are a completely different way to use ansible than in adhoc task execution mode, and are particularly powerful.

¹ËÃû˼Ò壬playbooksÊÇÒ»¸ö"¾ç±¾",²»Í¬ÓÚansibleµÄʹÓ÷½Ê½£¬ËüÊǰ´ÕÕ±àÅŵÄÈÎÎñÖÇÄܵØÖ´ÐУ¬²¢Çҷdz£Ç¿´ó£¡

Simply put, playbooks are the basis for a really simple configuration management and multi-machine deployment system, unlike any that already exist, and one that is very well suited to deploying complex applications.

¼òµ¥µØÀ´ËµÄØ£¬playbooksÊʺϼòµ¥µÄÅäÖùÜÀíÒÔ¼°¶à·þÎñÆ÷»úÆ÷µÄ¹ÜÀí£¬Í¬Ê±»¹¿ÉÒÔ´¦Àí²¿Êð¸´ÔÓµÄÓ¦Óá£

ÒªÊÇ·þÎñÆ÷²»½ö½ö¸´ÔÓ£¬ÊýÁ¿ÉÏ»¹ÊdzÉǧÉÏÍòµÄÄØ£¬»¹ÊÇÍÆ¼öʹÓÃÖØÁ¿¼¶ÓÖ¹ÅÀÏÎÄÃ÷µÄsaltstack¡£

playbook»ù´¡Óï·¨

playbookʹÓÃÁËYAML¸ñʽµÄÓï·¨£¬¸ÃÓï·¨»¹ÊÇÏ൱¼òµ¥µÄ£¬¿ÉÒÔÌåÑé³ö³ÌÐò¹¹Ôì»òÖ´ÐеĹý³Ì¡£ÄÇô»¹ÊǾßÌå²é¿´¼òµ¥µÄÒ»¸öʵÀý£¡

ÔÚdocker·þÎñÆ÷×éʹÓÃrootÓû§Ö´ÐиüÐÂÔ´ÃüÁÈçÏ£º

- hosts: docker
remote_user: root
gather_facts: True
tasks:
- name: "³õʼ»¯¸üÐÂÔ´Áбí"
command: apt-get update

Ó﷨עÒ⣺"-"ÒÔ¼°":"ºóÃæ¶¼ÐèÒªÒ»¸ö¿Õ¸ñ¡£ Óï·¨ÒѾ­Ö÷ÒâÁ˰ɡ«¡«¡«¸Ã×¢Òâ¸Ã×¢ÒâµÄÄÚÈÝÁË£¬´ÓÉÏÃæµÄʵÀý¶î¿ÉÒÔ¿´³öÓÐÁ½¸ö±ØÐëµÄÊôÐÔ£¬ÄǾÍÊÇ·þÎñÆ÷Ö÷»úhostsÒÔ¼°Ô¶³ÌÓû§remote_user£¬ÓÐÁËËüÃǾͿÉÒԸɵãÆäËüÊÂÁËtasks£¬×ÔÈ»¶øÈ»ÔÚplaybookÖ´ÐÐÈÎÎñÊÇÐèҪͨ¹ýÄ£¿éµÄÀ´²Ù¿ØµÄ¡£ ʹÓÃÃüÁî¼ì²éyamlµÄÓï·¨

ansible-playbook main.yml
--syntax-check

Alic_yml_check

playbookÄ£¿é»¯task

Ä£¿é»¯µÄÀíÂ۾Ͳ»Ò»Ò»ËµÃ÷ÁË£¬Êµ¼ùͨ¹ýʱ¼äÀ´ÁìÎòÀíÂÛ¾«»ª¡£¸ÃÊǶ¯ÊÖµÄʱºòÁË£¡

command

# ÔÚdocker·þÎñÆ÷×éÖ´ÐÐÒ»ÌõÃüÁî
- hosts: docker
remote_user: root
gather_facts: True
tasks:
- name: "³õʼ»¯¸üÐÂÔ´Áбí"
command: apt-get update

˵Ã÷£ºnameµÄÊôÐÔ¾ÍÊÇÒ»¸öÈÎÎñµÄêdzƣ¬×Ô¶¨Òå¡£

shell

# ÔÚdocker·þÎñÆ÷×éÖ´ÐÐshellÃüÁî
- hosts: docker
remote_user: root
gather_facts: True
tasks:
- name: "ɾ³ý/home/alic/demo.sh"
shell: rm -f /home/alic/demo.sh

script

# ÔÚdocker·þÎñÆ÷×éÖ´ÐÐ
¿ØÖƽڵ㱾µØµÄshell½Å±¾
- hosts: docker
remote_user: root
gather_facts: True
tasks:
- name: "±»¿Ø½ÚµãÖ´ÐÐ
¿ØÖƽڵãµÄshell½Å±¾"
script: ../scripts/alic.sh

Alic_demo_dir_tree

copy

# ½«¿ØÖƽڵãµÄÎļþÉÏ´«µ½
docker·þÎñÆ÷¡¾±»¿Ø½Úµã¡¿ÉÏ
- hosts: docker
remote_user: root
gather_facts: True
tasks:
- name: "¿Ø½ÚµãÎļþcpµ½
±»¿ØÖƽڵã·þÎñÆ÷"
copy:
src=/etc/ansible/hosts
dest=/etc/ansible/hosts
owner=root
group=root
mode=0644

×¢Ò⣺src´ú±í¿ØÖƽڵã·¾¶£¬dest´ú±í±»¿Ø½Úµã·¾¶£¬ÆäËüµÄΪ¿ÉÑ¡ÏîÄ¿£¬¹ËÃû˼Òå¡£

yum

# ÔÚdockerÓû§×éÒÔ
rootÓû§°²×°vim±à¼­Æ÷
- hosts: docker
remote_user: root
gather_facts: True
tasks:
- name: "ÎÒÕýÔÚÔÚcentOS°²×°vimÄØ~~~"
yum: name=vim state=latest

˵Ã÷£ºnameΪ°²×°Ä³Ä³µÄÃû³Æ£¬stateÔòΪ°²×°µÄ°æ±¾£¬yum¸ÃÄ£¿é½ö½öÊʺÏcontOSÏàËÆµÄ·¢Ðа棬¶ÔÓÚubuntuÄØ£¬»¹ÊÇÍÆ¼öʹÓÃÔ­ÉúµÄbash¿©

service

# ÔÚdockerÓû§×éÒÔrootÓû§ÖØÆôapache2
- hosts: docker
remote_user: root
gather_facts: True
tasks:
- name: "ÎÒÕýÔÚÆô¶¯apache2·þÎñÆ÷~~~"
service: name=apache2 state=restarted

˵Ã÷£ºserviceµÄ״̬ÓëÎÒÃÇÆ½³£Ê¹ÓõĶàÁË-ed stsrted stoped restarted

notify Óë handlers

ʹÓÃÒ»¾äÓ¢ÎĸüºÃµØ²ûÊöÁ½ÕߵĹØÏµ

The things listed in the notify

section of a task are called handlers.

»¹ÊÇ˵һÏÂÖÐÎİÉ

notifyÊÇÒ»¸ö֪ͨ£¬ÊµÖÊÉÏÒ²ÊÇÒ»¸öÈÎÎñ£¬²»Í¬µÄÊÇʹÓÃhandlers¶¨ÒåµÄÈÎÎñ£¬handlersÀïÃæ¶¨ÒåµÄÈÎÎñÏ൱ÓÚ¶¨Òå·½·¨£¬Ìá¸ß¸´ÓÃÐÔ£¡

- hosts: docker
remote_user: root
tasks:
- name: "test notify"
shell: ls
notify:
- restart apache2
handlers:
- name: restart apache2
service: name=apache2
state=restarted

vars

ÏÈ˵Ã÷һϣ¬ºÜÃ÷ÏÔvarsÄ£¿éÓû§ÉùÃ÷±äÁ¿

# vars ±äÁ¿µÄ¶¨ÒåÓëʹÓÃ
- hosts: docker
remote_user: root
vars:
config_path: "/root/
application/sise.conf"
tasks:
- name: "test notify"
command: touch {{config_path}}

È»¶øËµµ½±äÁ¿»¹¿ÉÒÔÕâÑùʹÓÃ:ÔÚymlʹÓñäÁ¿£¬ÔÚÖ´ÐÐplaybookÃüÁîÊǶîÍ⸳ֵ£¬×¢Òâ¼ÇµÃ¼ÓÉÏÒýºÅ "{{var}}" ansible-playbook main.yml --extra-vars hosts=docker

hosts: "{{hosts}}"
remote_user: root
vars:
- dir_name: "public"
tasks:
- name: create dir
shell: mkdir {{dir_name}}

Alic_--extra-vars

when

whenÔÚÔËάʱÊÇÒ»¸öÖØµã£¬²»Í¬LinuxµÄ·¢ÐаæÄØ£¬ÓÐЩÃüÁî¾Í²»Ò»Ñù£¬µ«¶¼ÊÇÁ˽⵽ÁËÌõ¼þ¼´¿ÉswitchµØ´¦Àí¡£ºÃ±ÈÈçyumÖ»ÓÐcentOS£¬RedHatµÈ·¢Ðаæ²Å¾ßÓеİü¹ÜÀíÃüÁ¾ß

ÖØµã£ºwhenÖ÷ÒªÓÃÓÚ´¦Àí²»Í¬µÄ²Ù×÷ϵͳÓë´¦ÀíÂß¼­ÉÏ¡£

- hosts: docker
remote_user: root
tasks:
- name: "ÎÒÕýÔÚºìñ×Ó°²×°vimÄØ~~~"
yum: name=vim state=latest
when: ansible_os_family == "RedHat"

with_items

# ±ãÀûµü´ú + when
- hosts: docker
remote_user: root
tasks:
- command: echo {{ item }}
with_items: [ 0, 2, 4, 6, 8, 10 ]
when: item > 5

±ãÀûµü´ú + when

Tips and Tricks For Ansible-book Command

²é¿´ÈÎÎñËùÖ¸¶¨µÄhostÁбí

$ ansible-playbook main.yml
--list-hosts

Alic-²é¿´ÈÎÎñËùÖ¸¶¨µÄhostÁбí

If you need to specify a password to sudo, run ansible-playbook with --ask-pass

or when using the old sudo syntax --ask-sudo-pass

¼´µ±ÄãʹÓÃÆÕͨÓû§Ö´ÐÐÃüÁîÐèÒªÊäÈëÃÜÂëʱ¿ÉʹÓÃ

$ ansible-playbook main.ym
--ask-sudo-pass --ask-pass

Alic_ÃÜÂë½»»¥

»ñÈ¡docker server-groupÖ÷»úµÄËùÓлù±¾ÐÅÏ¢ ¼ÈÈ»¿ÉÒÔ»ñÈ¡Ö÷»úÐÅÏ¢ µ±Ê±ÓÃwhenµÄʱºò£¬¸ÃÃüÁî¾ÍÆäºÜ´ó×÷ÓÃÁË£¡

$ ansible docker -m setup

Alic_»¹ÓкܶàmessageûÓнØÈ¡

Ö±½Óͨ¹ýansible-playbookÃüÁîÀ´Ö¸¶¨Ö÷»ú

$ ansible-playbook playbook.yml
--limit docker

ij̨·þÎñÆ÷´î½¨nginxµÄ»°£¬taskֻдºÃÄ£°å£¬ÐèÒªµÄ·þÎñÆ÷¾ÍÔÚÖ´ÐÐÃüÁîÖ¸¶¨host»ò·þÎñÆ÷×é¼´¿É

Demoʵ¼ùĿ¼Ê÷

 
   
2065 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

DevOpsתÐÍÈÚÈëµ½ÆóÒµÎÄ»¯
DevOps ÄÜÁ¦Ä£ÐÍ¡¢Ñݽø¼°°¸ÀýÆÊÎö
»ùÓÚ DevOps ÀíÄîµÄ˽ÓÐ PaaS ƽ̨ʵ¼ù
΢Èí¿ª·¢ÍŶӵÄDevOpsʵ¼ùÆôʾ
Ïà¹ØÎĵµ

DevOpsÇý¶¯Ó¦ÓÃÔËά±ä¸ïÓë´´ÐÂ
ÔËά¹ÜÀí¹æ»®
ÈçºÎʵÏÖÆóÒµÓ¦Óò¿Êð×Ô¶¯»¯
ÔËά×Ô¶¯»¯Êµ¼ù֮·
Ïà¹Ø¿Î³Ì

×Ô¶¯»¯ÔËά¹¤¾ß£¨»ùÓÚDevOps£©
»¥ÁªÍøÔËάÓëDevOps
MySQLÐÔÄÜÓÅ»¯¼°ÔËάÅàѵ
ITϵͳÔËά¹ÜÀí