±à¼ÍƼö: |
±¾Î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ʵ¼ùĿ¼Ê÷

|