±à¼ÍƼö: |
±¾ÎÄÖ÷Òª°üº¬AnsibleÌØµã,AnsibleÔÀí½éÉÜ,AnsibleʹÓÃÖеIJ»Í¬½ÇÉ«,ʵÑé»·¾³,Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼¡¢ÍƼö¡£ |
|
AnsibleÌØµã£º
»ùÓÚPython¿ª·¢£¬·Ç³£ÈÝÒ×½øÐжþ´Î¿ª·¢¡£
Ansible·á¸»µÄÄÚÖÃÄ£¿é£¬»ù±¾¿ÉÒÔÂú×ãÒ»ÇÐÐèÇó
¹ÜÀíģʽ·Ç³£¼òµ¥£¬Ò»ÌõÃüÁî¿ÉÒÔÓ°ÏìÉÏǧ̨»úÆ÷¡£
ÎÞ¿Í»§¶Ëģʽ£¬µ×²ãͨ¹ýSSHͨÐÅ
AnsibleÔÀí½éÉÜ£º
AnsibleûÓпͻ§¶Ë£¬Ò²²»ÐèÒªÔÚ±»¹ÜÀíÖ÷»úÌí¼Ó´úÀí³ÌÐò£¬Í¨¹ýSSHÍê³Éµ×²ãͨÐÅ£¬¶øSSHÔÚLinuxÖÐĬÈÏÒѾ´æÔÚ£¬ÔÚWindowsÖÐÐèÒªpowershell£¬ansibleÒªÇó¹ÜÀí¶Ë±ØÐëÊÇLinux²Ù×÷ϵͳ£¬ÔÚ¹ÜÀí½Úµãͨ¹ýÓ¦ÓÃÄ£¿é½«Ö¸Áî·¢Ë͵½±»¹ÜÀíÖ÷»úÉÏ£¬²¢ÔÚÖ´ÐÐÍê±Ïºó×Ô¶¯É¾³ýÁÙʱÎļþ¡£
AnsibleʹÓÃÖеIJ»Í¬½ÇÉ«£¬¿ÉÒÔ·ÖΪÒÔÏÂÈý´ó²¿·Ö£º
ʹÓÃÕߣºÊ¹ÓÃAnsibleʵÏÖ×Ô¶¯»¯ÔËά¿ØÖƶˣ»
Ansible¹¤¾ß¼¯£ºansible¿ÉÒÔʵÏֵŦÄÜ£»
×÷ÓöÔÏó£ºAnsible¿ÉÒÔÓ°ÏìµÄÖ÷»ú¡£
ʵÑé»·¾³£º
һ̨Ansible£º192.168.3.1
±»¿Ø¶Ëhost1£º192.168.3.2
±»¿Ø¶Ëhost2£º192.168.3.3
Ò».×¼±¸¹¤×÷£º
[root@localhost
~]# cat <<END>> /etc/hosts
192.168.10.20 ansible
192.168.10.30 host1
192.168.10.40 host2
END
[root@localhost ~]# vim /etc/hostname
ansible
:wq
[root@localhost ~]# reboot |
¶þ.°²×°Ansible£º
ÐèÒª×Ô¼ºÅäÖÃyumÔ´
AnsibleµÄyum°²×°°ü£¬½«Æä½âѹµ½"/yum"Ŀ¼ÏÂ
[root@ansible
~]# mkdir /yum/
[root@ansible ~]# cd /yum
[root@ansible yum]# ls
ansible-2.3.1.0-1.el7.noarch.rpm
ansible-2.3.1.0-3.el7.noarch.rpm
apr-1.4.8-3.el7.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm
...Ê¡ÂÔÆäÓಿ·Ö
[root@ansible yum]# rm -rf /etc /yum.repos.d/*
[root@ansible yum]# vim /etc/yum. repos.d/centos.repo
#ÅäÖÃyumÔ´
[local]
name=local
baseurl=file:///yum/
enabled=1
gpgcheck=0
£ºwq
[root@ansible yum]# createrepo /yum / #Éú³ÉrepodateÎļþ
[root@ansible yum]# yum -y install ansible |
ÑéÖ¤°²×°½á¹û£º
[root@ansible
yum]# ansible --version
ansible 2.3.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] |
Èý.´´½¨SSH½»»¥ÃâÃܵǼ£º
Ansibleͨ¹ýssh¶ÔÉ豸½øÐйÜÀí£¬¶øssh°üº¬Á½ÖÖÈÏÖ¤·½Ê½£ºÒ»ÊÇͨ¹ýÃÜÂëÈÏÖ¤£¬¶þÊÇͨ¹ýÃÜÔ¿¶ÔÈÏÖ¤£¬Ç°ÕßÊDZØÐëºÍϵͳ½»»¥£¬¶øºóÕßÊÇÃâ½»»¥µÇ½¡£ÈçÏ£Íûͨ¹ýansible×Ô¶¯¹ÜÀíÉ豸£¬Ó¦¸ÃÅäÖÃΪÃâ½»»¥Ê½µÇ¼±»¹ÜÀíÉ豸¡£
[root@ansible
~]# ssh-keygen
-t rsa #Éú³ÉÃÜÔ¿
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:IXw+ZtlGQWZ805oSWy9WHhi DYHHquOYOs7OG6D61X2I
root@ansible
The key's randomart image is:
+---[RSA 2048]----+
| +=*.o+ |
| . . =+.=.+ |
| o + .= B . |
| * =o = o |
| . S oo . |
| . + o |
| ...+Eo. |
|....+*o |
|oo..+=o |
+----[SHA256]-----+
[root@ansible ~]# ssh-copy-id root @192.168.3.2
#½«×Ô¼ºµÄÃÜÔ¿ÉÏ´«µ½±»Ô¶³Ì½Úµã·þÎñÆ÷
[root@ansible ~]# ssh 192.168.3.2
[root@host1 ~]# exit
[root@ansible ~]# ssh-copy-id root@192.168.3.3
[root@ansible ~]# ssh 192.168.3.3
[root@host2 ~]# exit |
ËÄ.ÅäÖÃAnsible£º
Ansibleͨ¹ý½«É豸ÁбíÒÔ·Ö×éµÄ·½Ê½Ìí¼Óµ½/etc/ansible/hostsÎļþÀ´ÊµÏÖ¶ÔÉ豸½øÐйÜÀí£¬ËùÒÔÔÚÕýʽ¹ÜÀí֮ǰ£¬Ê×ÏÈÒª±àдhostsÎļþ£¬hostsÎļþÖУ¬ÒÔ[ ]°üº¬µÄ²¿·Ö´ú±í×éÃû£¬ÁбíÖ§³ÖÖ÷»úÃûºÍIPµØÖ·£¬Ä¬ÈÏÇé¿öÏ£¬Í¨¹ý·ÃÎÊ22ºÅ¶Ë¿ÚÀ´¹ÜÀíÉ豸£¬ÈôÄ¿±êÖ÷»úÉÏʹÓÃÁË·ÇĬÈϵÄssh¶Ë¿Ú£¬»¹¿ÉÒÔÔÚÖ÷»úÃû³ÆÖ®ºóʹÓÃðºÅ¼Ó¶Ë¿ÚºÅ±íÃ÷£¬ÒÔÐÐΪµ¥Î»·Ö¸îÅäÖá£ÁíÍ⣬hostsÎļþ»¹Ö§³ÖͨÅä·û¡£
[root@ansible
~]# vim /etc/ansible/hosts
[web]
192.168.3.2
192.168.3.3
[ftp]
ftp.benet.com:222 ##ͨ¹ý222¶Ë¿Ú½øÐйÜÀí
[mail]
zs1.accp.com
zs[2:5].accp.com ##[2:5] ±íʾ2~5Ö®¼äµÄËùÓÐÊý×Ö£¬ ¼´±íʾzs2.accp.com£¬zs3.accp.com... |
¿ÉÒÔ½«Í¬Ò»¸öÖ÷»úͬʱ¹éÊô²»Í¬µÄ×éÖÐ
ÅäÖÃÍê³Éºó¿ÉÒÔÕæ¶àhosts¶¨ÒåµÄ×é½øÐÐÔ¶³Ì²Ù×÷£¬Ò²¿ÉÒÔÕë¶Ô×éÖеÄijһ¸ö»ò¶à¸öÖ÷»ú½øÐвÙ×÷¡£
Îå.½øÐÐÖ¸¶¨»¯ÅúÁ¿²Ù¿Ø£º
Ansible ·µ»ØµÄÖµ·Ç³£ÓѺã¬Ò»°ã»áÓÃÈýÖÖÑÕÉ«À´±íʾִÐнá¹û£º
*ÂÌÉ«£º±íʾִÐгɹ¦²¢ÇÒûÓжÔÄ¿±ê»úÆ÷×öÐÞ¸Ä
*ºìÉ«£º±íʾִÐйý³ÌÓÐÒì³£
*»ÆÉ«£º±íʾÃüÁîÖ´ÐкóÓÐ״̬±ä»¯
1¡¢¶Ôweb×éÖеÄ192.168.3.2Ö÷»ú²Ù×÷£¬Í¨¹ý-limit²ÎÊýÏÞ¶¨Ö÷»úµÄ±ä¸ü¡£
[root@ansible ~]# ansible web -m command -a ¡°systemctl status httpd¡± --limit ¡°192.168.3.2¡±

´Ë´¦Ã»ÓпªÆôhttpd·þÎñ£¬ËùÓлá±êºì±¨´í£¬Èç¹û³öÏÈÕâ¸ö˵Ã÷ÒѾ¿ÉÒÔ½øÐÐÔ¶³ÌÅúÁ¿²Ù¿Ø
2¡¢Ö»¶Ô192.168.3.2Ö÷»ú²Ù×÷£¬Í¨¹ýIPÏÞ¶¨Ö÷»úµÄ±ä¸ü¡£
[root@ansible ~]# ansible 192.168.3.2 -m command -a ¡°systemctl status httpd¡±

´Ë´¦ÎªÂÌ£¬Ôò±íʾ¸ÃÖØÆôhttp·þÎñ²Ù×÷Ö´Ðгɹ¦
3¡¢Ö»¶Ô192.168.3.0Íø¶ÎµÄÖ÷»ú²Ù×÷£¬Í¨¹ýͨÅä·ûÏÞ¶¨Ö÷»úµÄ±ä¸ü¡£
[root@ansible ~]# ansible 192.168.3.* -m command -a ¡°systemctl status httpd¡±

´Ë´¦±êÃ÷¶ÔÁ½Ì¨3Íø¶ÎµÄ·þÎñÆ÷³É¹¦½øÐÐÁËÖØÆô²Ù×÷
4¡¢¸ù¾Ý×飬ÅúÁ¿»¯½øÐбä¸ü¡£
[root@ansible ~]# ansible web -m command -a ¡°systemctl status httpd¡±

´Ë´¦ÒàΪ²Ù×÷³É¹¦½øÐÐ
Áù.AnsibleµÄÃüÁ
1.ansible
AnsibleÊÇÉú²ú»·¾³ÖÐʹÓ÷dz£Æµ·±µÄÃüÁîÖ®Ò»£¬Ö÷ÒªÔÚÒÔϳ¡¾°Ê¹Óãº
·Ç¹Ì»¯ÐèÇ󣺷ǹ̶¨²Ù×÷
ÁÙʱһ´ÎÐÔ²Ù×÷
¶þ´Î¿ª·¢½Ó¿Úµ÷ÓÃ
ansibleÃüÁîÏê½â£ºansible [options]
-v ##´òÓ¡ÏêϸÐÅÏ¢
-i ÎļþλÖà ##Ö¸¶¨hostsÎļþµÄ´æ·ÅλÖÃ
-f ½ø³ÌÊýÁ¿ ##Ö¸¶¨fork³öµÄ½ø³ÌÊýÁ¿Öµ
-m Ä£¿éÃû³Æ ##Ö¸¶¨Ä£¿éÃû³Æ£¬Ä¬ÈÏÄ£¿éÃû³ÆÎªcommand
-a Ä£¿éµÄ²ÎÊý»òÃüÁî ##Ö¸¶¨moduleÄ£¿éµÄ²ÎÊý»òÕßÃüÁî
-k ÃÜÂë ##ÊÖ¶¯Ö¸¶¨SSHµÄÃÜÂë
-sudo »ùÓÚsudoÓû§Ö¸¶¨
-u Óû§Ãû ##Ö¸¶¨Ö´ÐÐÓû§
-C ²âÊÔÖ¸¶¨¹ý³Ì ##²âÊÔ£¬²»¸Ä±äÕæÊµÄÚÈÝ£¬Ï൱ÓÚÔ¤ÑÝ
-T Ö¸¶¨ÃüÁʱʱ¼äµ¥Î»ÎªÃë ##³¬Ê±Ê±¼ä£¬Ä¬ÈÏÊÇ10s
¨Cversion ##²é¿´ansibleµÄ°æ±¾ÐÅÏ¢
eg:
a:¼ì²éËùÓÐÖ÷»úÊÇ·ñ´æ»î£º
[root@ansible ~]# ansible all -f 5 -m ping

b:Áгöweb×éÖÐËùÓеÄÁÐ±í£º
[root@ansible ~]# ansible web --list

c:ÅúÁ¿ÏÔʾweb×éÖдÅÅ̵Ŀռ䣺
[root@ansible ~]# ansible web -m command -a ¡°df -hT¡±

d.²é¿´Ó²¼þÐÅÏ¢
[root@ansible ~]# ansible 192.168.3.2 -m setup [root@ansible ~]#
ansible 192.168.3.2 -m setup -a ¡°filter=ansible_ens34¡±

2.ansible-doc
ansible-docÓÃÀ´²éѯansibleÄ£¿éÎĵµµÄ˵Ã÷£¬ÀàËÆÓÚmanÃüÁÕë¶Ô±³¸öÄ£¿é¶¼ÓÐÏêϸµÄÓ÷¨ËµÃ÷¼°Ó¦Óð¸Àý½éÉÜ
[root@ansible ~]# ansible-doc ping

3.ansible-playbook
ansible-playbookÊÇÈÕ³£Ó¦ÓÃÖÐʹÓÃÆµÂÊ×î¸ßµÄÃüÁÀàËÆÓÚLinuxÖеÄsh»òsource£¬ÓÃÀ´Ö´ÐÐϵÁÐÈÎÎñ£¬Æä¹¤×÷»úÖÆÊÇ£ºÍ¨¹ý¶ÁȡԤÏȱàдºÃµÄplaybookÎļþʵÏÖ¼¯Öд¦ÀíÈÎÎñ£¬ansible-playbookÃüÁîºó¸úymlºÏÊʵÄplaybookÎļþ£¬playbookÎļþ´æ·ÅÁËÒªÖ´ÐеÄÈÎÎñ´úÂ룬ÃüÁîʹÓ÷½Ê½ÈçÏ£º
[root@ansible ~]# ansible-playbook playbook.yml
#playbook.ymlÎļþÐèҪʵÏÖдºÃ£¬½¨ÒéÖ´ÐÐʱʹÓþø¶Ô·¾¶£¬
#ºóÃæ½«»áÓõ½
4.ansible-console
ansible-consoleÊÇansibleΪÓû§ÌṩµÄÒ»Ì×½»»¥Ê½¹¤¾ß£¬ÀàËÆÓÚWindowsÖеÄcmdÒÔ¼°LinuxÖеÄshell¡£Óû§¿ÉÒÔÔÙansible-consoleÐéÄâ³öÀ´µÄÖÕ¶ËÉÌÏñshellÒ»ÑùʹÓÃansibleÄÚÖõĸ÷ÖÖÃüÁÕâΪϰ¹ßÓÚʹÓÃshell½»»¥·½Ê½µÄÓû§ÌṩÁËÁ¼ºÃµÄʹÓÃÌåÑ飬ÔÚÖÕ¶ËÊäÈëansible-consoleÃüÁîºó£¬ÏÔʾÈçÏ£º
[root@localhost ~]# ansible-console

#²Ù×÷ÓëshellÀàËÆ£¬Ö§³Ötab¼ü£¬¿ì½Ý¼üCtrl+CÍ˳öÐéÄâÖÕ¶Ë
Æß.AnsibleÄ£¿é£º
1.commandÄ£¿é:
CommandÄ£¿éÔÚÔ¶³ÌÖ÷»úÉÏÖ´ÐÐÃüÁ²»Ö§³Ö¹ÜµÀ£¬Öض¨ÏòµÈshellµÄÌØÐÔ£¬³£ÓõIJÎÊýÈçÏ¡£
chdir£ºÔÚÔ¶³ÌÖ÷»úÉÏÖ´ÐÐÃüÁîǰҪÌáǰ½øÈëĿ¼
creates£ºÔÚÃüÁîÔËÐÐʱ´´½¨Ò»¸öÎļþ£¬Èç¹ûÎļþÒÑ´æÔÚ£¬Ôò²»»áÖ´Ðд´½¨ÈÎÎñ¡£
removes£ºÔÚÃüÁîÔËÐÐʱÓï³öÒ»¸öÎļþ£¬Èç¹ûÎļþ²»´æÔÚ£¬Ôò²»»áÖ´ÐÐÒÆ³ýÈÎÎñ
executeble£ºÖ¸Ã÷ÔËÐÐÃüÁîµÄshell³ÌÐò
ÔÚËùÓÐÖ÷»úÉÏÖ´ÐС°ls ./¡±ÃüÁîʽ£¬ÔËÐÐǰÇл»µ½/homeĿ¼
[root@ansible ~]# ansible all -m command -a ¡°chdir=/home ls ./¡±

2.shellÄ£¿é:
ShellÄ£¿éÔÚÔ¶³ÌÖ÷»úÖ´ÐÐÃüÁÏ൱ÓÚµ÷ÓÃÔ¶³ÌÖ÷»úµÄshell½ø³Ì£¬È»ºóÔÚ¸ÃshellÏ´ò¿ªÒ»¸ö×ÓshellÔËÐÐÃüÁî¡£ºÍcommandÄ£¿éµÄÇø±ð¾ÍÊÇËüÖ§³ÖshellÌØÐÔ£¬È磺¹ÜµÀ¡¢Öض¨ÏòµÈ¡£
[root@ansible ~]# ansible web -m shell -a ¡°echo ¡°hello¡± >> /tmp/hello.txt¡±
[root@ansible ~]# ansible web -m shell -a ¡°cat /tmp/hello.txt¡±


3.copyÄ£¿é£º
copyÄ£¿éÓÃÓÚ¸´ÖÆÖ¸¶¨Ö÷»úÎļþµ½Ô¶³ÌÖ÷»úÖ¸¶¨Î»Ö㬳£¼û²ÎÊýÈçÏ¡£
src ##Ô´ÎļþλÖÃ
content ##ÊÖ¶¯±àдԴÎļþÄÚÈÝ
dest ##Ä¿±êÖ÷»úÉϵÄÄ¿±êÎļþλÖÃ
mode ##ÉèÖÃÎļþȨÏÞ
owner ##ÉèÖÃÎļþÊôÖ÷
group ##ÉèÖÃÎļþÊô×é
force ##Ç¿ÖÆ¸²¸ÇÎļþ
[root@ansible ~]# cat << END >>/root/ansible.txt
> I am ansible
> END
[root@ansible ~]# ansible web -m copy -a ¡°src=/root/ansible.txt dest=/tmp/ mode=777 owner=nobody group=root¡±
[root@ansible ~]# ansible web -m shell -a ¡°cat /tmp/ansible.txt¡±



4.hostnameÄ£¿é:
HostnameÄ£¿éÓÃÓÚ¹ÜÀíÔ¶³ÌÖ÷»úÉϵÄÖ÷»úÃû£¬³£ÓòÎÊýÈçÏ£º
#name£ºÖ¸Ã÷Ö÷»úÃû
[root@ansible ~]# ansible web -m hostname -a ¡°name=Apache¡±
[root@ansible ~]# ansible web -m shell -a ¡°cat /etc/hostname¡±


5.yumÄ£¿é
ÓÃÀ´Ö¸¶¨yum°²×°·þÎñ£¬³£¼û²ÎÊýÈçÏ£º
name ##Èí¼þ°üÃû³Æ
state=present|latest|absent ##Èí¼þ°ü״̬£¬present£º±íʾ°²×°³ÌÐò°ü£¬latest£º±íʾ°²×°×îа汾µÄ³ÌÐò°ü£¬absent£º±íÊ¾Ð¶ÔØ³ÌÐò°ü
update_cache ##°²×°Èí¼þ°üǰ¸üлº´æ
enablerepo ##Ö¸¶¨yumÔ´Ãû³Æ
conf_file ##Ö¸¶¨yum°²×°Ê±Ëù¼ÓÔØµÄyumÅäÖÃÎļþ

6.serviceÄ£¿é
ÓÃÀ´¹ÜÀíÔ¶³ÌÖ÷»úÉϵķþÎñµÄÄ£¿é£¬³£¼û²ÎÊýÈçÏÂ:
name: ##±»¹ÜÀíµÄ·þÎñÃû³Æ
state=started|stopped|restarted|reloaded: ##¶¯×÷£ºÆô¶¯£¬¹Ø±Õ£¬ÖØÆô£¬ÖØÔØ
enabled=yes|no ##ÊÇ·ñÉèÖÿª»úÆô¶¯
runlevel: ##Èç¹ûÉ趨ÁËenabled¿ª»úÆô¶¯£¬ÔòÒª¶¨ÒåÔÚÄÄЩÔËÐÐÄ¿±êÏÂ×Ô¶¯ÔËÐÐ
[root@ansible ~]# ansible web -m service -a ¡°name=httpd state=started enabled=yes¡±
»ò
[root@ansible ~]# ansible web -m shell -a ¡°systemctl start httpd¡±

Êý¾ÝÁ¿Ì«¶à£¬¾Íչʾµ½Õâ¶ù

7.userÄ£¿é
ÒÔÏÂÊÇuserÄ£¿é²ÎÊý£º
name ##Óû§Ãû
home ##¼ÒĿ¼λÖÃ
shell ##Ö¸¶¨µÇ½shell
uid ##Ö¸¶¨Óû§uid
state ##״̬£¬presentΪн¨¡¢absentΪɾ³ý
force ##Ç¿ÖÆÉ¾³ý
[root@ansible ~]# ansible web -m user -a ¡°name=user1 system=yes uid=501 group=root groups=sshd shell=/sbin/nologin home=/home/user1 password=user1 comment=¡°testuser¡±¡±
#´ËΪ´´½¨Ò»¸öuser1µÄÓû§£¬uidΪ501£¬Êô×éΪroot¡

[root@ansible ~]# ansible web -m shell -a ¡°tail -1 /etc/passwd¡±
#²é¿´/etc/passwdÈ·ÈϸÃÓû§ÊÇ·ñ´´½¨

[root@ansible ~]# ansible web -m user -a ¡°name=user1 remove=yes state=absent¡±
#ɾ³ýÓû§¼°¼ÒĿ¼

[root@ansible ~]# ansible web -m shell -a ¡°tail -1 /etc/passwd¡±
#²é¿´ÊÇ·ñɾ³ýÓû§user1

°Ë.playbookÅäÖÃÎļþ£º
PlaybookÅäÖÃÎļþʹÓÃyamlÓï·¨£¬¾ßÓмò½àÃ÷ÁË¡¢½á¹¹ÇåÎúµÈÌØµã¡£PlaybookÅäÖÃÎļþÀàËÆÓÚshell½Å±¾£¬ÊÇÒ»¸öYAML¸ñʽµÄÎļþ£¬ÓÃÓÚ±£´æÕë¶ÔÌØ¶¨ÐèÇóµÄÈÎÎñÁÐ±í£»
YAMLÓï·¨ºÍÆäËû¸ß¼¶ÓïÑÔÀàËÆ£¬Æä½á¹¹Í¨¹ýËõ½øÀ´Õ¹Ê¾£¬Í¨¹ý¡°-¡±À´´ú±íÏͨ¹ý¡°:¡±À´·Ö¸î¼üºÍÖµ£¬Õû¸öδ¼ûÒÔ¡°¡ª¡±¿ªÊ¼£¬ÒÔ¡°¡¡±½áÊø¡£

ËùÓеġ°-ºá¸Ü¡±ºÍ¡°£ºÃ°ºÅ¡±ºóÃæ¶¼Óпոñ£¬¶øÇÒҪעÒâËõ½øºÍ¶ÔÆë¡£
PlaybookµÄºËÐÄÔªËØ:
hosts:ÈÎÎñµÄÄ¿±êÖ÷»ú£¬¶à¸öÖ÷»úÓÃðºÅ·Ö¸î£¬Ò»°ã»áµ÷ÓÃ/etc/ansible/hostsÖеķÖ×éÐÅÏ¢
remote_user:Ô¶³ÌÖ÷»úÉÏ£¬ÔËÐдËÈÎÎñµÄÉí·ÝĬÈÏΪroot
tasks:ÈÎÎñ£¬¶¨ÒåµÄ¾ßÌåÈÎÎñ£¬ÓÉÄ£¿é¶¨ÒåµÄ²Ù×÷ÁÐ±í¡£
handlers:´¥·¢Æ÷£¬ÀàËÆtasks£¬Ö»ÊÇÔÚÌØ¶¨Ìõ¼þϲŻᴥ·¢µÄÈÎÎñ¡£
roles:½ÇÉ«£¬½«hosts°þÀë³öÈ¥£¬ÓÉtasks¡¢handlersµÈËù×é³ÉµÄÒ»ÖÖÌØ¶¨µÄ½á¹¹¼¯ºÏ

PlaybookÎļþ¶¨ÒåµÄÈÎÎñÐèÒªÌý¹ýansible-plyabookÃüÁî½øÐе÷ÓÃÖ´ÐУ¬
ÃüÁîÓï·¨£º
[root@localhost ~]# ansible-playbook [option] /PATH/TO/PLAYBOOK.yaml
[option]²¿·Ö¹¦ÄܽâÎö
¨Csyntax-check:¼ì²âymlÎļþµÄÓï·¨
-C£ºÔ¤²âÊÔ£¬²»»á¸Ä±äÄ¿±êÖ÷»úÈκÎÉèÖÃ
¨Clist-hosts£ºÁгöymlÎļþÓ°ÏìµÄÖ÷»úÁбí
¨Clist-tasks£ºÁгöymlÎļþµÄÈÎÎñÁбí
-t TAGS£º±íʾִֻÐÐÖ¸¶¨±êÇ©µÄÈÎÎñ
¨Cskip-tags=SKIP_ATGS£º±íÊ¾ÒÆ³ýÁËÖ¸¶¨±êÇ©µÄÈÎÎñ£¬Ö´ÐÐÆäËûÈÎÎñ¡£
¨Cstart-at-tasks=START-AT£º´ÓÖ¸¶¨µÄÈÎÎñ¿ªÊ¼ÍùÏÂÖ¸¶¨¡£
eg:
[root@ansible
~]# ansible-playbook --syntax /etc/ansible/a.yml
##ymlÎļþÓï·¨¼ì²é
playbook: /etc/ansible/a.yml |

[root@ansible
~]# ansible-playbook -C /etc/ansible/a.yml ##Ô¤²âÊÔ |

[root@ansible
~]# ansible-playbook --list-hosts /etc/ansible/a.yml
##ÁгöÓ°ÏìÁËÄÇЩÖ÷»ú |

[root@ansible
~]# ansible-playbook --list-tasks /etc/ansible/a.yml
##ÏÔʾÈÎÎñÁбí |

[root@ansible
~]# ansible-playbook --list-tags/etc/ansible/a.yml
##ÏÔʾÈÎÎñ±êÇ© |

[root@ansible
~]# ansible-playbook /etc/ansible/a.yml ##Ö´ÐÐÈÎÎñ |

[root@ansible
~]# ansible web1 -m shell -a "tail -1 /etc/passwd"
[root@ansible ~]# ansible web2 -m shell -a "ls
-l /home/passwd" |

2.´¥·¢Æ÷
ÐèÒª³ö·¢²ÅÄÜÖ´ÐеÄÈÎÎñ£¬µ±Ö®Ç°¶¨ÒåÔÚtasksÖеÄÈÎÎñÖ´ÐÐÍê³Éºó£¬ÈôÏ£ÍûÔÚ´Ë»ù´¡Éϳö·¢ÆäËûµÄÈÎÎñ£¬ÕâÊÇÐèÒª¶¨Òåhandlers¡£
HandlersÊÇansibleÌṩµÄÌõ¼þ»úÖÆÖ®Ò»£¬handlersºÍtaskÏàËÆ£¬£¬µ«ÊÇËüÖ»ÔÚ±»task֪ͨµÄʱºò²Å»á´¥·¢Ö´ÐС£
HandlersÖ»»áÔÚËùÓÐÈÎÎñÖ´ÐÐÍêºóÖ´ÐУ¬¶øÇÒ¼´Ê¹±»Í¨ÖªÁ˶à´Î£¬ËüÒ²Ö»»áÖ´ÐÐÒ»´Î£¬handlers°´ÕÕ¶¨ÒåµÄ˳ÐòÒÀ´ÎÖ´ÐÐ
eg£º
[root@ansible
~]# ansible web1 -m shell -a "netstat -anpt
| grep httpd" ##httpdÕýÔÚ¼àÌý80¶Ë¿Ú |

[root@ansible
~]# vim /etc/ansible /httpd.yml ##´´½¨httpd.ymlÎļþ
--- ##½Å±¾¿ªÊ¼
- hosts: web1 ##
remote_user: root ##
tasks: ##
- name: change port ##
command: sed -i 's/Listen\ 80/Listen\ 8080/g'
/etc/httpd/conf/httpd.conf ##Ð޸Ķ˿Ú
notify: ##ÅäÖô¥·¢Ìõ¼þ
- restart httpd server ##Íê³ÉÈÎÎñºóµ÷ÓøÄÃû×ֵĴ¥·¢Æ÷
handlers: ##
- name: restart httpd server ##Ö¸¶¨´¥·¢Æ÷µÄÃû×Ö
service: name=httpd state=restarted ##´¥·¢ÈÎÎñÎªÖØÆôhttpd·þÎñ
... ##½áÊø |

[root@ansible
~]# ansible-playbook --syntax-check /etc/ansible/httpd.yml
##¼ì²é½Å±¾ |

[root@ansible
~]# ansible-playbook /etc/ansible/httpd.yml ##Ö´Ðнű¾ |

[root@ansible
~]# ansible web1 -m shell -a "netstat -anpt
| grep httpd" ##²é¿´´¥·¢Æ÷Ö´Ðнá¹û |

|