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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃ×Ô¶¯»¯ÔËά¹¤¾ßAnsible¼¯Öл¯¹ÜÀí·þÎñÆ÷
 
  1870  次浏览      27
 2019-7-19 
 
±à¼­ÍƼö:
±¾ÎÄÀ´Ô´weixin£¬ÎÄÕÂÖ÷Òª½éÉÜÁËansible¸ÅÊöºÍÔËÐлúÖÆ£¬ansible³£¼ûÄ£¿é¸ß¼¶Ê¹Ó÷½·¨ÒÔ¼°°²×°²¢ÅäÖÃAnsible¹ÜÀíÁ½¸ö½ÚµãµÈ¡£

1ansible¸ÅÊöºÍÔËÐлúÖÆ

1.1 ansible¸ÅÊö

AnsibleÊÇÒ»¿îΪÀàUnixϵͳ¿ª·¢µÄ×ÔÓÉ¿ªÔ´µÄÅäÖúÍ×Ô¶¯»¯¹¤¾ß¡£ËüÓÃPythonд³É£¬ÀàËÆÓÚsaltstackºÍPuppet£¬µ«ÊÇÓÐÒ»¸ö²»Í¬ºÍÓŵãÊÇÎÒÃDz»ÐèÒªÔÚ½ÚµãÖа²×°Èκοͻ§¶Ë¡£ËüʹÓÃSSHÀ´ºÍ½Úµã½øÐÐͨÐÅ¡£Ansible»ùÓÚ Python paramiko ¿ª·¢£¬·Ö²¼Ê½£¬ÎÞÐè¿Í»§¶Ë£¬ÇáÁ¿¼¶£¬ÅäÖÃÓ﷨ʹÓà YMAL ¼° Jinja2Ä£°åÓïÑÔ£¬¸üÇ¿µÄÔ¶³ÌÃüÁîÖ´ÐвÙ×÷¡£

¹Ù·½ÍøÕ¾£ºhttps://www.ansible.com/

ITÒµ½çÀøÖ¾Ê¼þ£º

2015Äê10Ô£¬ºìñ£¨Red Hat£©Ðû²¼ÊÕ¹ºÈí¼þ¿ª·¢¹«Ë¾ Ansible£¬ÏûÏ¢³Æ´Ë´ÎÊÕ¹ººÄ×ÊÓâ 1ÒÚÃÀÔª£¬Ò²ÓÐÏûÏ¢³Æ½Ó½ü 1.5ÒÚÃÀÔª¡£

Ansible ³ÉÁ¢ÓÚ 2013Ä꣬×ܲ¿ÉèÔÚ±±¿¨ÂÞÀ´ÄÉÖÝ´ïÀÕÄ·£¬ÁªºÏ´´Ê¼ÈË a?d Ziouani ºÍ¸ß¼¶¸±×ܲà Todd Barr ¶¼ÊǺìñµÄÀÏÔ±¹¤¡£Ansible ÆìϵĿªÔ´Èí¼þ Ansible Ê®·ÖÁ÷ÐС£Õâ¼Ò¹«Ë¾»¹Ìṩ Tower Èí¼þºÍ×Éѯ·þÎñ£¬Õâ¿îÈí¼þÄÜʹ¿ª·¢ÕßÇáËɵؽ¨Á¢ºÍ¹ÜÀí¹æÄ£»¯Ó¦ÓóÌÐòµÄ IT »ù´¡¼Ü¹¹¡£

ËùÒÔ£¬Ï£Íû´ó¼Ò¿ÉÒÔ½øÒ»¸öºÃ¹«Ë¾£¬°Ñ¼¼ÊõÌáÉýºÃÁË,×öÒ»¸öºÃ²úÆ·¡£

ansiblle¾ßÓÐÈçÏÂÌØµã£º

1¡¢²¿Êð¼òµ¥£¬Ö»ÐèÔÚÖ÷¿Ø¶Ë²¿ÊðAnsible»·¾³£¬±»¿Ø¶ËÎÞÐè×öÈκβÙ×÷£»

2¡¢Ä¬ÈÏʹÓÃSSHЭÒé¶ÔÉ豸½øÐйÜÀí£»

3¡¢Ö÷´Ó¼¯Öл¯¹ÜÀí£»

4¡¢ÅäÖüòµ¥¡¢¹¦ÄÜÇ¿´ó¡¢À©Õ¹ÐÔÇ¿£»

5¡¢Ö§³ÖAPI¼°×Ô¶¨ÒåÄ£¿é£¬¿Éͨ¹ýPythonÇáËÉÀ©Õ¹£»

6¡¢Í¨¹ýPlaybooksÀ´¶¨ÖÆÇ¿´óµÄÅäÖá¢×´Ì¬¹ÜÀí

7¡¢¶ÔÔÆ¼ÆËãÆ½Ì¨¡¢´óÊý¾Ý¶¼ÓкܺõÄÖ§³Ö£»

1.2 Ansible ¹¤×÷»úÖÆ

Ansible ÔÚ¹ÜÀí½Úµã½« Ansible Ä£¿éͨ¹ý SSH ЭÒéÍÆË͵½±»¹ÜÀí¶ËÖ´ÐУ¬Ö´ÐÐÍêÖ®ºó×Ô¶¯É¾³ý£¬¿ÉÒÔʹÓà SVN µÈÀ´¹ÜÀí×Ô¶¨ÒåÄ£¿é¼°±àÅÅ¡£

ÓÉÉÏÃæµÄͼ¿ÉÒÔ¿´µ½ Ansible µÄ×é³ÉÓÉ 5 ¸ö²¿·Ö×é³É£º

Ansible £ºansibleºËÐÄ

Modules £º°üÀ¨Ansible×Ô´øµÄºËÐÄÄ£¿é¼°×Ô¶¨ÒåÄ£¿é

Plugins £ºÍê³ÉÄ£¿é¹¦ÄܵIJ¹³ä£¬°üÀ¨Á¬½Ó²å¼þ¡¢Óʼþ²å¼þµÈ

Playbooks £º¾ç±¾£»¶¨ÒåAnsible¶àÈÎÎñÅäÖÃÎļþ£¬ÓÉAnsible×Ô¶¯Ö´ÐÐ

Inventory £º¶¨ÒåAnsible¹ÜÀíÖ÷»úµÄÇåµ¥[??nv?ntri] Çåµ¥

2 ʵս-°²×°²¢ÅäÖÃAnsible¹ÜÀíÁ½¸ö½Úµã

2.1 °²×°ansible·þÎñ

ʵÑé»·¾³£º

ansible ·þÎñ¶Ë xuegod63 192.168.1.63

ansible½Úµã1:xuegod63 192.168.1.63

ansible½Úµã2:xuegod63 192.168.1.63

ÔÚxuegod63Éϰ²×°ansible

1¡¢ÉèÖÃEPEL²Ö¿â

Ansible²Ö¿âĬÈϲ»ÔÚyum²Ö¿âÖУ¬Òò´ËÎÒÃÇÐèҪʹÓÃÏÂÃæµÄÃüÁîÆôÓÃepel²Ö¿â¡£

[root@xuegod63 ~]#yum install epel-release -y

2¡¢Ê¹ÓÃyum°²×°Ansible

[root@xuegod63 ~]#yum installansible -y

°²×°Íê³Éºó£¬¼ì²éansible°æ±¾£º

[root@xuegod63 ~]#ansible --version

2.2 ansibleÃüÁî²ÎÊý

anisbleÃüÁîÓï·¨£ºansible [-i Ö÷»úÎļþ] [-f Åú´Î] [×éÃû] [-m Ä£¿éÃû³Æ] [-aÄ£¿é²ÎÊý]

ansibleÏêϸ²ÎÊý£º

-v,¨Cverbose # Ïêϸģʽ£¬Èç¹ûÃüÁîÖ´Ðгɹ¦£¬Êä³öÏêϸµÄ½á¹û (-vv ¨Cvvv -vvvv)

-i PATH, -inventory=PATH # Ö¸¶¨ host ÎļþµÄ·¾¶£¬Ä¬ÈÏÊÇÔÚ /etc/ansible/hosts

inventory [??nv?ntri] ¿â´æ

-f NUM,-forks=NUM # NUM ÊÇÖ¸¶¨Ò»¸öÕûÊý£¬Ä¬ÈÏÊÇ 5 £¬Ö¸¶¨ fork ¿ªÆôͬ²½½ø³ÌµÄ¸öÊý¡£

-m NAME,-module-name=NAME # Ö¸¶¨Ê¹ÓÃµÄ module Ãû³Æ£¬Ä¬ÈÏʹÓà commandÄ£¿é

-a,MODULE_ARGS #Ö¸¶¨ module Ä£¿éµÄ²ÎÊý

-k,-ask-pass #ÌáʾÊäÈë ssh µÄÃÜÂ룬¶ø²»ÊÇʹÓûùÓÚ ssh µÄÃÜÔ¿ÈÏÖ¤

-sudo # Ö¸¶¨Ê¹Óà sudo »ñµÃ root ȨÏÞ

-K,-ask-sudo-pass #ÌáʾÊäÈë sudo ÃÜÂ룬Óë -sudo Ò»ÆðʹÓÃ

-u USERNAME,-user=USERNAME # Ö¸¶¨Òƶ¯¶ËµÄÖ´ÐÐÓû§

-C,¨Ccheck #²âÊÔ´ËÃüÁîÖ´Ðлá¸Ä±äʲôÄÚÈÝ£¬²»»áÕæÕýµÄÈ¥Ö´ÐÐ

ansible-docÏêϸ²ÎÊý£º

ansible-doc -l #ÁгöËùÓеÄÄ£¿éÁбí

ansible-doc -s Ä£¿éÃû #²é¿´Ö¸¶¨Ä£¿éµÄ²ÎÊý -s, --snippet # [?sn?p?t] Ƭ¶Ï

Àý£º[root@xuegod63~]# ansible-doc -s service

2.3 ¶¨ÒåÖ÷»úÇåµ¥

1¡¢»ùÓڶ˿ڣ¬Óû§£¬ÃÜÂ붨ÒåÖ÷»úÇåµ¥

ansible»ùÓÚsshÁ¬½Ó-i £¨inventory£©²ÎÊýºóÖ¸¶¨µÄÔ¶³ÌÖ÷»úʱ£¬Ò²¿ÉÒÔд¶Ë¿Ú£¬Óû§£¬ÃÜÂë¡£

¸ñʽ£ºansible_ssh_port:Ö¸¶¨ssh¶Ë¿Ú ansible_ssh_user:Ö¸¶¨ ssh Óû§ ansible_ssh_pass:Ö¸¶¨ ssh Óû§µÇ¼ÊÇÈÏÖ¤ÃÜÂ루Ã÷ÎÄÃÜÂë²»°²È«£© ansible_sudo_pass:Ö¸Ã÷ sudo ʱºòµÄÃÜÂë

Àý£º[root@xuegod63~]# vim /etc/ansible/hosts #Îļþ /etc/ansible/hosts ά»¤×ÅAnsibleÖзþÎñÆ÷µÄÇåµ¥¡£ÔÚÎļþ×îºó×·¼ÓÒÔÏÂÄÚÈÝ

[web-servers] #Ö÷»ú×éÃû

192.168.1.64 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456

¼òµ¥²âÊÔÏÂÖ÷»úµÄÁ¬Í¨ÐÔ

[root@xuegod63~]# ansible -i /etc/ansible/hosts web-servers-m ping

-i # Ö¸¶¨ host ÎļþµÄ·¾¶£¬Ä¬ÈÏÊÇÔÚ /etc/ansible/hosts

-m # Ö¸¶¨Ê¹ÓõÄpingÄ£¿é

±¨´í£º

92.168.1.63 |FAILED! => {

"msg": "Using a SSH passwordinstead of a key is not possible because Host Key checking is enabled andsshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."

}

½â¾ö£º[root@xuegod63~]# ssh root@192.168.1.63 #ÊÖ¶¯Á¬½ÓÒ»ÏÂ/etc/ansible/hostsÖ÷»úÇåµ¥ÖеÄÖ÷»ú£¬ÕâÑù¾Í¿ÉÒÔÔÚansible·þÎñÆ÷Éϱ£´æÄ¿±êÖ÷»úµÄfingerprintÖ¸ÎÆ¡£ºóÆÚ¿ÉÒÔÕý³£Á¬½ÓÁË

[root@xuegod63 ~]#ansible -i hosts web-servers -m ping #²âÊԳɹ¦

192.168.1.64 | SUCCESS => { #±íʾ³É²âÊÔ¡£Í¨Ðųɹ¦¡£

"changed": false, #ÒòΪpingÃüÁî²»»á¸Ä±ä±»¹ÜÀíµÄ·þÎñÆ÷µÄ״̬¡£ËùÒÔÊÇfalseÕý³£

"ping": "pong"

}

2¡¢»ùÓÚsshÃÜÔ¿À´·ÃÎʶ¨ÒåÖ÷»úÇåµ¥

Ò»°ãÀ´Ëµ£¬Ê¹ÓÃÃ÷ÎÄÃÜÂë²»°²È«£¬ËùÒÔÔö¼ÓÖ÷»úÎÞÃÜÂë·ÃÎÊ¡£

ÔÚAnsible·þÎñ¶ËÉú³ÉÃÜÔ¿£¬²¢ÇÒ¸´Öƹ«Ô¿µ½½ÚµãÖС£

root@xuegod63 ~]#ssh-keygen #һ·»Ø³µ

ʹÓÃssh-copy-idÃüÁîÀ´¸´ÖÆAnsible¹«Ô¿µ½½Úµã£ºxuegod63ºÍxuegod63

[root@xuegod63 ~]#ssh-copy-id root@192.168.1.63
[root@xuegod63 ~]#ssh-copy-id root@192.168.1.64
[root@xuegod63 ~]#ssh 192.168.1.64
[root@xuegod64 ~]#exit

[root@xuegod63 ~]# vim /etc/ansible/hosts #ÔÚÎļþµÄ×îºóÌí¼ÓÒÔÏÂÄÚÈÝ

ɾ³ý֮ǰÔÚ×îºóÌí¼ÓµÄÁ½ÐÐÖ÷»úÇåµ¥£º

[web-servers]
192.168.1.64 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456

Ôö¼Ó£º

[web-servers]
192.168.1.63
192.168.1.64

2.3 ÔÚAnsible·þÎñ¶ËÔËÐÐÃüÁî

pingÄ£¿é¼ì²éÍøÂçÁ¬Í¨ÐÔ

commandÄ£¿éÖ´ÐÐshellÃüÁcommand:×÷ΪansibleµÄĬÈÏÄ£¿é£¬¿ÉÒÔÔËÐÐÔ¶³ÌȨÏÞ·¶Î§ÄÚµÄËùÓÐshellÃüÁî

Àý1£ºÊ¹ÓÃping¼ì²é¡®web-servers¡¯»òÕßansible½ÚµãµÄÁ¬Í¨ÐÔ¡£

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts 'web-servers' -m ping

»ò£º

[root@xuegod63 ~]#ansible 'web-servers' -m ping #²»Ö¸¶¨£¬Ä¬ÈÏʹÓÃ/etc/ansible/hostsÎļþ
192.168.1.63 |SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.64 |SUCCESS => {
"changed": false,
"ping": "pong"
}

Àý2£º¼ì²éAnsible½ÚµãµÄÔËÐÐʱ¼ä£¨uptime£©

[root@xuegod63 ~]#ansible -m command -a "uptime" 'web-servers' #Ò²¿ÉÒÔ°ÑÖ÷»úÇåµ¥×éÃûдµ½×îºó£¬ÕâÑù·½±ãÔĶÁÃüÁî
192.168.1.63 |SUCCESS | rc=0 >>
12:45:23 up 32min, 5 users, load average: 0.17, 0.11, 0.27
192.168.1.64 |SUCCESS | rc=0 >>
12:45:23 up 26 min, 2 users, load average: 0.03, 0.03, 0.10

Àý3£º¼ì²é½ÚµãµÄÄں˰汾

[root@xuegod63 ~]#ansible -m command -a "uname -r" 'web-servers'

Àý4£º¸ø½ÚµãÔö¼ÓÓû§

[root@xuegod63 ~]#ansible -m command -a "useradd mk123" 'web-servers'
192.168.1.64 |SUCCESS | rc=0 >>
192.168.1.63 |SUCCESS | rc=0 >>
[root@xuegod63 ~]#ansible -m command -a "grep mk123 /etc/passwd" 'web-servers'

Àý5£º½«dfÃüÁîÔÚËùÓнڵãÖ´Ðкó£¬Öض¨ÏòÊä³öµ½±¾»úµÄ/tmp/command-output.txtÎļþÖÐ

[root@xuegod63 ~]# ansible-m command -a "df -Th" 'web-servers' > /tmp/command-output.txt
[root@xuegod63 ~]#cat /tmp/command-output.txt

3 ansible³£¼ûÄ£¿é¸ß¼¶Ê¹Ó÷½·¨

3.1 ansible³£ÓÃÄ£¿é

1¡¢3¸öÔ¶³ÌÃüÁîÄ£¿éµÄÇø±ð

£¨1£©commandÄ£¿éΪansibleĬÈÏÄ£¿é£¬²»Ö¸¶¨-m²ÎÊýʱ£¬Ê¹ÓõľÍÊÇcommandÄ£¿é£»comandÄ£¿é±È½Ï¼òµ¥£¬³£¼ûµÄÃüÁî¶¼¿ÉÒÔʹÓ㬵«ÆäÃüÁîµÄÖ´Ðв»ÊÇͨ¹ýshellÖ´Ðеģ¬ËùÒÔ£¬ÏñÕâЩ "<", ">", "|", and"&"²Ù×÷¶¼²»¿ÉÒÔ£¬µ±È»£¬Ò²¾Í²»Ö§³Ö¹ÜµÀ£»È±µã£º²»Ö§³Ö¹ÜµÀ£¬Ã»·¨ÅúÁ¿Ö´ÐÐÃüÁ

£¨2£©shellÄ£¿é£ºÊ¹ÓÃshellÄ£¿é£¬ÔÚÔ¶³ÌÃüÁîͨ¹ý/bin/shÀ´Ö´ÐУ»ËùÒÔ£¬ÎÒÃÇÔÚÖÕ¶ËÊäÈëµÄ¸÷ÖÖÃüÁʽ£¬¶¼¿ÉÒÔʹÓá£

Àý1£ºÔËÐÐfree -m ÃüÁî

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m shell -a "free -m"

×¢£ºµ«ÊÇÎÒÃÇ×Ô¼º¶¨ÒåÔÚ~/.bashrc»ò~/.bash_profileÖеĻ·¾³±äÁ¿shellÄ£¿éÓÉÓÚûÓмÓÔØ£¬ËùÒÔÎÞ·¨Ê¶±ð£»Èç¹ûÐèҪʹÓÃ×Ô¶¨ÒåµÄ»·¾³±äÁ¿£¬¾ÍÐèÒªÔÚ×ʼ£¬Ö´ÐмÓÔØ×Ô¶¨Òå½Å±¾µÄÓï¾ä£»

¶ÔshellÄ£¿éµÄʹÓÿÉÒÔ·Ö³ÉÁ½¿é£º

1) Èç¹û´ýÖ´ÐеÄÓï¾äÉÙ£¬¿ÉÒÔÖ±½ÓдÔÚÒ»¾ä»°ÖУº

[root@xuegod63 ~]# ansible -i /etc/ansible/hosts web-servers -m shell -a "source ~/.bash_profile && df -h | grep sda3"

2) Èç¹ûÔÚÔ¶³Ì´ýÖ´ÐеÄÓï¾ä±È½Ï¶à£¬¿Éд³ÉÒ»¸ö½Å±¾£¬Í¨¹ýcopyÄ£¿é´«µ½Ô¶¶Ë£¬È»ºóÔÙÖ´ÐУ»µ«ÕâÑù¾ÍÓÖÉæ¼°µ½Á½´Îansibleµ÷Óã»¶ÔÓÚÕâÖÖÐèÇó£¬ansibleÒѾ­ÎªÎÒÃÇ¿¼Âǵ½ÁË£¬scriptÄ£¿é¾ÍÊǸÉÕâʵģ»

£¨3£©scriptsÄ£¿é

ʹÓÃscriptsÄ£¿é¿ÉÒÔÔÚ±¾µØÐ´Ò»¸ö½Å±¾£¬ÔÚÔ¶³Ì·þÎñÆ÷ÉÏÖ´ÐУº

[root@xuegod63 ~]# vim /etc/ansible/net.sh
#!/bin/bash
date
hostname
[root@xuegod63~]# ansible -i /etc/ansible/hosts web-servers -m script -a "/etc/ansible/net.sh"

2¡¢copyÄ£¿é:ʵÏÖÖ÷¿Ø¶ËÏòÄ¿±êÖ÷»ú¿½±´Îļþ£¬ÀàËÆscp¹¦ÄÜ

Àý1£º°ÑansibleÖ÷»úÉϵÄ/etc/hostsÎļþ¸´ÖƵ½Ö÷»ú×éÖлúÆ÷µÄ/tmpĿ¼ÏÂ

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/etc/hostsdest=/tmp/ owner=root group=root mode=0755"


ÔÚxuegod64Éϲ鿴

[root@xuegod64 ~]# ll/tmp/hosts
-rwxr-xr-x 1 rootroot 240 8ÔÂ 24 16:09 /tmp/hosts

3¡¢fileÄ£¿éÉèÖÃÎļþÊôÐÔ¡£

ÀýÈ磺

root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m file -a "path=/tmp/hostsmode=0777"

ÑéÖ¤:

[root@xuegod63 ~]# ll/tmp/hosts
-rwxrwxrwx 1 rootroot 112 Aug 31 04:38 /tmp/hosts

4¡¢statÄ£¿é»ñȡԶ³ÌÎļþÐÅÏ¢

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m stat -a"path=/tmp/hosts"

5¡¢get_urlÄ£¿éʵÏÖÔ¶³ÌÖ÷»úÏÂÔØÖ¸¶¨urlµ½±¾µØ£¬Ö§³Ösha256sumÎļþУÑé¡£

ÀýÈ磺ÏÂÔØepel-release-latest-7.noarch.rpmµ½Ö÷»úÇåµ¥ÖеÄ/tmp/Ŀ¼ÏÂ

[root@xuegod63 ~]# ansible -i /etc/ansible/hosts web-servers-m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp/ mode=0440 force=yes"

×¢£ºurl=https://xxx µÄµÈºÅ=ǰºó²»ÄÜÓпոñ

À©Õ¹:²é¿´force=yesµÄ×÷ÓÃ

[root@xuegod63 ~]#ansible-doc -s get_url #ÔÚµ¯³öµÄÐÅÏ¢ÖÐÕÒµ½force

Èç¹ûforce=yes£¬µ±ÏÂÔØÎļþʱ£¬Èç¹ûËùϵÄÄÚÈݺÍԭĿ¼ÏµÄÎļþÄÚÈݲ»Ò»Ñù£¬ÔòÌæ»»Ô­Îļþ£¬Èç¹ûÒ»Ñù£¬¾Í²»ÏÂÔØÁË¡£

Èç¹ûΪ¡°·ñ¡±£¬Ôò½öÔÚÄ¿±ê²»´æÔÚʱ²ÅÏÂÔØÎļþ¡£Ò»°ãÀ´Ëµ£¬Ö»ÓÐСÐͱ¾µØÎļþ²ÅÓ¦¸ÃΪ¡°ÊÇ¡±¡£ÔÚ0.6֮ǰ£¬¸ÃÄ£¿é±íÏÖΪĬÈÏΪ¡°ÊÇ¡±¡£

²é¿´ÏÂÔØµÄÎļþ£º

[root@xuegod63 ~]# ll/tmp/epel-release-latest-7.noarch.rpm
-r--r----- 1 rootroot 15080 8ÔÂ 24 16:20/tmp/epel-release-latest-7.noarch.rpm

 

²âÊÔ£ºÏÂÔØÎļþʱ£¬µ±Îļþ²»Ò»Ñùʱ£¬»áÌæ»»Ô­À´µÄÎļþ

[root@xuegod64 ~]# cp/etc/passwd /tmp/epel-release-latest-7.noarch.rpm
[root@xuegod63 ~]# ansible -i /etc/ansible/hosts web-servers -m get_url -a"url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm dest=/tmp/ mode=0440 force=yes"
192.168.1.63 |SUCCESS => {
"changed":false, #xuegod63ÉÏÔ­À´µÄÎļþºÍµ±Ç°µÄÎļþÒ»Ñù£¬¾ÍûÓиı䡣ִÐгɹ¦£¬µ«Ã»Óз¢Éú¸Ä±ä£¬ÄÇôÏÔʾÂÌÉ«
¡£¡£¡£
}
192.168.1.64 |SUCCESS => {
"changed": true, #xuegod64ÉϵÄÎļþÃû×ÖÒ»Ñù£¬µ«ÊÇÄÚÈݱ䣬¾Í»áÖØÐÂÏÂÔØ¡£Ö´Ðгɹ¦£¬ÇÒ·¢Éú¸Ä±ä£¬ÄÇôÏÔʾ»ÆÉ«

 

6¡¢yumÄ£¿élinuxƽ̨Èí¼þ°ü¹ÜÀí¡£

yumÄ£¿é¿ÉÒÔÌṩµÄstatus״̬£ºlatest £¬present£¬installed #Õâ3¸ö´ú±í°²×°£»removed, absent #ºóÃæ2¸öÊÇÐ¶ÔØ

Àý×Ó£º°²×°httpdÈí¼þ

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m yum -a "name=httpd state=latest"

7¡¢cronÄ£¿éÔ¶³ÌÖ÷»úcrontabÅäÖá£

ÀýÈ磺Ôö¼Óÿ30·ÖÖÓÖ´ÐÐls /tmp

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m cron -a "name='list dir'minute='*/30' job='ls /tmp'"

ÔÚxuegod63Éϲ鿴

[root@xuegod63 ~]#crontab -l
#Ansible: list dir
*/30 * * * * ls /tmp

8¡¢serviceÄ£¿éÔ¶³ÌÖ÷»úϵͳ·þÎñ¹ÜÀí¡£

serviceÄ£¿é³£ÓòÎÊý£º

£¨1£©name²ÎÊý£º´Ë²ÎÊýÓÃÓÚÖ¸¶¨ÐèÒª²Ù×÷µÄ·þÎñÃû³Æ£¬±ÈÈç nginx£¬httpd¡£

£¨2£©state²ÎÊý£º´Ë²ÎÊýÓÃÓÚÖ¸¶¨·þÎñµÄ״̬£¬±ÈÈ磬ÎÒÃÇÏëÒªÆô¶¯Ô¶³ÌÖ÷»úÖеÄhttpd£¬Ôò¿ÉÒÔ½« state µÄÖµÉèÖÃΪ started£»Èç¹ûÏëҪֹͣԶ³ÌÖ÷»úÖеķþÎñ£¬Ôò¿ÉÒÔ½« state µÄÖµÉèÖÃΪ stopped¡£´Ë²ÎÊýµÄ¿ÉÓÃÖµÓÐ started¡¢stopped¡¢restarted£¨ÖØÆô£©¡¢reloaded¡£

enabled²ÎÊý£º´Ë²ÎÊýÓÃÓÚÖ¸¶¨ÊÇ·ñ½«·þÎñÉèÖÃΪ¿ª»úÆô¶¯ÏÉèÖÃΪ yes ±íʾ½«¶ÔÓ¦·þÎñÉèÖÃΪ¿ª»úÆô¶¯£¬ÉèÖÃΪ no ±íʾ²»»á¿ª»úÆô¶¯¡£

×¢£ºÏëʹÓÃserviceÄ£¿éÆô¶¯·þÎñ£¬±»Æô¶¯µÄ·þÎñ£¬±ØÐë¿ÉÒÔʹÓÃservice ÃüÁîÆô¶¯»ò¹Ø±Õ

ÀýÈ磺Զ³ÌÆô¶¯apache·þÎñ

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpdstate=restarted"

 

9¡¢sysctlÄ£¿éÔ¶³ÌÖ÷»úsysctlÅäÖá£

Àý£º¿ªÆô·ÓÉת·¢¹¦ÄÜ

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m sysctl -a"name=net.ipv4.ip_forward value=1 reload=yes"

ÑéÖ¤£º

[root@xuegod63 ~]#cat /proc/sys/net/ipv4/ip_forward
1

10¡¢userÄ£¿éÔ¶³ÌÖ÷»úÓû§¹ÜÀí

ÀýÈ磺

[root@xuegod63 ~]#ansible -i /etc/ansible/hosts web-servers -m user -a "name=xuegod6state=present"
# present [?preznt] Ŀǰ

ÑéÖ¤£º

[root@xuegod63 ~]# idxuegod6
uid=1001(xuegod6)gid=1001(xuegod6) ×é=1001(xuegod6)

4 ʵս-ʹÓÃPlaybookÅúÁ¿²¿Êð¶ą̀LAMP»·¾³

4.1 PlaybookÊÇÒ»¸ö²»Í¬ÓÚʹÓÃansibleÃüÁîÐÐÖ´Ðз½Ê½µÄģʽ£¬¹¦ÄܸüÇ¿´ó¸üÁé»î¡£

playbooksʹÓò½Ö裺

1¡¢ÔÚplaybooks Öж¨ÒåÈÎÎñ£º

- name£ºtask description #ÈÎÎñÃèÊöÐÅÏ¢

module_name: module_args #ÐèҪʹÓõÄÄ£¿éÃû×Ö£ºÄ£¿é²ÎÊý

2¡¢ansible-playbook Ö´ÐÐ ÃüÁ

[root@xuegod63 ~]#ansible-playbook site.yml

playbookÊÇÓÉÒ»¸ö»ò¶à¸ö"play"×é³ÉµÄÁÐ±í¡£playµÄÖ÷Òª¹¦ÄÜÔÚÓÚ½«ÊÂÏȹéΪһ×éµÄÖ÷»ú×°°ç³ÉÊÂÏÈͨ¹ýansibleÖеÄtask¶¨ÒåºÃµÄ½ÇÉ«¡£

githubÉÏÌṩÁË´óÁ¿µÄʵÀý¹©´ó¼Ò²Î¿¼ https://github.com/ansible/ansible-examples

4.1 ʵս-ʹÓÃPlaybookÅúÁ¿²¿Êð¶ą̀LAMP»·¾³

Playbook³£ÓÃÎļþ¼Ð×÷Óãº

files£º´æ·ÅÐèҪͬ²½µ½ÒìµØ·þÎñÆ÷µÄÔ´ÂëÎļþ¼°ÅäÖÃÎļþ£»

handlers£ºµ±·þÎñµÄÅäÖÃÎļþ·¢Éú±ä»¯Ê±ÐèÒª½øÐеIJÙ×÷£¬±ÈÈç£ºÖØÆô·þÎñ£¬ÖØÐ¼ÓÔØÅäÖÃÎļþ£»['h?ndl?z] ´¦Àí³ÌÐò

meta£º½ÇÉ«¶¨Ò壬¿ÉÁô¿Õ£» ['met?] Ôª

tasks£ºÐèÒª½øÐеÄÖ´ÐеÄÈÎÎñ£»#ÈÎÎñ

templates£ºÓÃÓÚÖ´ÐÐlamp°²×°µÄÄ£°åÎļþ£¬Ò»°ãΪ½Å±¾£» ['templ?ts] Ä£°å

vars£º±¾´Î°²×°¶¨ÒåµÄ±äÁ¿

4.2 ʵս-ʹÓÃPlaybookÅúÁ¿²¿Êð¶ą̀LAMP»·¾³

Ê×ÏÈ£¬ÎÒÃÇ¿ÉÒÔÔÚansible·þÎñÆ÷Éϰ²×°LAMP»·¾³£¬È»ºó£¬ÔÙ½«ÅäÖÃÎļþͨ¹ýansible¿½±´µ½Ô¶³ÌÖ÷»úÉÏ

µÚÒ»²½£º°²×°httpdÈí¼þ

[root@xuegod63 ~]#yum install httpd -y

µÚ¶þ²¿£º°²×°MySQL

root@xuegod63 ~]# yuminstall mariadb-server mariadb -y
[root@xuegod63 ~]#mkdir -p /mydata/data #´´½¨Ä¿Â¼×÷ΪÊý¾Ý´æ·ÅµÄλÖÃ
[root@xuegod63 ~]#chown -R mysql:mysql /mydata/
[root@xuegod63 ~]#vim /etc/my.cnf #¸Ä±äÊý¾Ý´æ·ÅĿ¼
¸Ä£º2datadir=/var/lib/mysql
Ϊ£º2datadir=/mydata/data
[root@xuegod63 ~]#systemctl start mariadb

µÚÈý²½£º°²×°PHPºÍphp-mysqlÄ£¿é

[root@xuegod63 ~]#yum install php php-mysql -y

µÚËIJ½£ºÌṩphpµÄ²âÊÔÒ³

[root@xuegod63 ~]#vim /var/www/html/index.php
<?php
phpinfo();
?>

Æô¶¯httpd·þÎñ£¬ÔÚä¯ÀÀÆ÷ÖзÃÎÊ

[root@xuegod63 ~]#systemctl restart httpd
[root@xuegod63 ~]#iptables -F

²âÊÔ£ºhttp://192.168.1.63/index.php

È·±£ÒѾ­³öÏÖÉÏÃæµÄ²âÊÔÒ³£¬¶øÇÒ£¬Òª¿´µ½MySQLÒѾ­±»ÕûºÏ½øÀ´ÁË£¬²ÅÄܽøÐÐÏÂÒ»²½²Ù×÷

¶¨Òå×éÃû£º

[root@xuegod63 ~]#vim /etc/ansible/hosts #»¹Ê¹ÓÃ֮ǰ¶¨ÒåºÃµÄ£¬ÕâÀï²»ÓÃÐÞ¸Ä
[web-servers]
192.168.1.63
192.168.1.64

È»ºó£¬½«¹«Ô¿ÐÅÏ¢¸´ÖƵ½±»¿ØÖƽڵ㣬ansibleºÍÁ½¸ö½Úµã¼äͨ¹ýssh½øÐÐÁ¬½Ó¡£ÏÂÃæ3¸öÃüÁî֮ǰÒѾ­×ö¹ý£¬²»ÓÃÖ´ÐÐÁË¡£

[root@xuegod63 ~]#ssh-keygen
[root@xuegod63 ~]#ssh-copy-id root@192.168.1.63
[root@xuegod63 ~]#ssh-copy-id root@192.168.1.64

4.2 ʹÓÃplaybook´´½¨Ò»¸öLAMP¹¹½¨µÄÈÎÎñ

1¡¢´´½¨Ïà¹ØÎļþ

[root@xuegod63 ~]# mkdir -pv/etc/ansible/lamp/roles/ {prepare,httpd,mysql,php }/{tasks,files,templates,vars,meta,default,handlers} ÎÒÃǽ«ÉÏÃæ´î½¨³É¹¦µÄLAMP»·¾³µÄhttpdºÍMySQLµÄÅäÖÃÎļþ¿½±´µ½¶ÔӦĿ¼ÏÂ
[root@xuegod63 ~]# cd/etc/ansible/
[root@xuegod63 ~]# cp/etc/httpd/conf/httpd.conf lamp/roles/httpd/files/
[root@xuegod63 ~]# cp/etc/my.cnf lamp/roles/mysql/files/

дprepare£¨Ç°ÆÚ×¼±¸£©½ÇÉ«µÄplaybooks

[root@xuegod63ansible]# vim lamp/roles/prepare/tasks/main.yml #¸´ÖÆÒÔϺìÉ«ÄÚÈݵ½ÎļþÖУ¬ÅäÖúÃyumÔ´
- name: delete yumconfig
shell: rm -rf /etc/yum.repos.d/* #ɾ³ýÔ­ÓеÄyumÅäÖÃÎļþ
- name: provide yumrepofile
shell: wget -O /etc/yum.repos.d/CentOS-Base.repohttp://mirrors.aliyun.com/repo/Centos-7.repo #ÏÂÔØÐµÄyumÅäÖÃÎļþ
- name: clean the yumrepo
shell: yum cleanall #Çå³ýÔ­ÓеÄyum»º´æÐÅÏ¢
- name: clean theiptables
shell: iptables -F #Çå³ýÔ­ÓзÀ»ðǽ¹æÔò£¬²»È»ºó¿ÉÄÜÉϲ»ÁËÍø

2¡¢¹¹½¨httpdµÄÈÎÎñ

root@xuegod63roles]# cd /etc/ansible/lamp/roles
[root@xuegod63roles]# mv /var/www/html/index.php httpd/files/
[root@xuegod63roles]# vim httpd/tasks/main.yml #½«ÒÔÏÂÄÚÈݸ´ÖƵ½ÎļþÖÐ
- name: web serverinstall
yum:name=httpd state=present #°²×°httpd·þÎñ
- name: provide testpage
copy:src=index.php dest=/var/www/html #Ìṩ²âÊÔÒ³
- name: delete apacheconfig
shell: rm -rf /etc/httpd/conf/httpd.conf #ɾ³ýÔ­ÓеÄapacheÅäÖÃÎļþ£¬Èç¹û²»É¾³ý£¬ÏÂÃæµÄcopyÈÎÎñÊDz»»áÖ´Ðеģ¬ÒòΪµ±Ô´Îļþhttpd.confºÍÄ¿±êÎļþÒ»Ñùʱ£¬copyÃüÁîÊDz»Ö´Ðеġ£Èç¹ûcopyÃüÁî²»Ö´ÐУ¬ÄÇônotify½«²»µ÷ÓÃhandler¡£
- name: provideconfiguration file
copy: src=httpd.confdest=/etc/httpd/conf/httpd.conf #ÌṩhttpdµÄÅäÖÃÎļþ
notify: restart httpd #µ±Ç°ÃæµÄcopy¸´ÖƳɹ¦ºó£¬Í¨¹ýnotify֪ͨÃû×ÖΪrestart httpdµÄhandlersÔËÐС£

À©Õ¹£ºnotifyºÍhandlers notify ֪ͨ

notify£ºÕâ¸öaction¿ÉÓÃÓÚÔÚÿ¸öplayµÄ×îºó±»´¥·¢£¬ÕâÑù¿ÉÒÔ±ÜÃâ¶à´ÎÓиı䷢Éúʱ£¬Ã¿´Î¶¼Ö´ÐÐÖ¸¶¨µÄ²Ù×÷£¬È¡¶ø´úÖ®£¬½öÔÚËùÓеı仯·¢ÉúÍê³ÉºóÒ»´ÎÐÔµØÖ´ÐÐÖ¸¶¨²Ù×÷¡£

ÔÚnotifyÖÐÁгöµÄ²Ù×÷³ÆÎªhandler£¬Ò²¼´notifyÖе÷ÓÃhandlerÖж¨ÒåµÄ²Ù×÷¡£

---- name: test.ymljust for test
hosts: testserver
vars:
region: ap-southeast-1
tasks:
- name: template configuration
file template: src=template.j2dest=/etc/foo.conf
notify:
- restart memcached
- restart apache
handlers:
- name: restart memcached
service: name=memcachedstate=restarted
- name: restart apache
service: name=apachestate=restarted

handlers¸ÅÊö£º

Handlers Ò²ÊÇһЩ task µÄÁбí,ͨ¹ýÃû×ÖÀ´ÒýÓÃ,ËüÃǺÍÒ»°ãµÄ task ²¢Ã»ÓÐÊ²Ã´Çø±ð¡£

Handlers ÊÇÓÉ֪ͨÕß½øÐÐnotify, Èç¹ûûÓб» notify£¬handlers ²»»áÖ´ÐС£

²»¹ÜÓжàÉÙ¸ö֪ͨÕß½øÐÐÁËnotify£¬µÈµ½ play ÖеÄËùÓÐtask Ö´ÐÐÍê³ÉÖ®ºó,handlers Ò²Ö»»á±»Ö´ÐÐÒ»´Î¡£

Handlers ×î¼ÑµÄÓ¦Óó¡¾°ÊÇÓÃÀ´ÖØÆô·þÎñ,»òÕß´¥·¢ÏµÍ³ÖØÆô²Ù×÷.³ý´ËÒÔÍâºÜÉÙÓõ½ÁË¡£

3¡¢¹¹½¨httpdµÄhandlers

[root@xuegod63roles]# vim httpd/handlers/main.yml
- name: restart httpd
service:name=httpd enabled=yes state=restarted

4¡¢²¿ÊðÎÒÃǵÄmariadbÊý¾Ý¿â

´´½¨MySQL·þÎñµÄÈÎÎñ£¬ÐèÒª°²×°MySQL·þÎñ£¬¸Ä±äÊôÖ÷ÐÅÏ¢£¬Æô¶¯MySQL

[root@xuegod63roles]# cd /etc/ansible/lamp/roles
[root@xuegod63roles]# vim mysql/tasks/main.yml
- name: install themysql
yum: name=mariadb-server state=present #°²×°mysql·þÎñ
- name: mkdir date directory
shell: mkdir -p /mydata/data #´´½¨¹ÒÔØµãĿ¼
- name: provideconfigration file
copy: src=my.cnf dest=/etc/my.cnf #ÌṩmysqlµÄÅäÖÃÎļþ
- name: chage theowner
shell: chown -R mysql:mysql /mydata/* #¸ü¸ÄÊôÖ÷ºÍÊô×é
- name: start mariadb
service: name=mariadb enabled=yesstate=started #Æô¶¯mysql·þÎñ

5¡¢¹¹½¨PHPµÄÈÎÎñ

[root@xuegod63roles]# vim php/tasks/main.yml
- name: install php
yum: name=phpstate=present #°²×°php
- name: installphp-mysql
yum:name=php-mysql state=present #°²×°phpÓëmysql½»»¥µÄ²å¼þ

6¡¢¶¨ÒåÕû¸öµÄÈÎÎñ

[root@xuegod63roles]# cd /etc/ansible/lamp/roles
[root@xuegod63roles]# vim site.yml #дÈëÒÔÏÂÄÚÈÝ
- name: LAMP build
remote_user: root
hosts: web-servers
roles:
- prepare
- mysql
- php
- httpd

×¢£ºËùÓÐymlµÄÅäÖÃÎļþÖУ¬¿Õ¸ñ±ØÐëÑϸñ¶ÔÆë

¿ªÊ¼²¿Êð£º

[root@xuegod63roles]# ansible-playbook -i /etc/ansible/hosts /etc/ansible/lamp/roles/site.yml

È»ºó£¬ÔÚä¯ÀÀÆ÷ÖзÃÎÊÕâÁ½Ì¨½ÚµãÖ÷»ú£¬¿ÉÒÔÖ±½Ó·ÃÎʳɹ¦¡£

http://192.168.1.63/index.php

http://192.168.1.64/index.php

×¢:

1¡¢Ä¬ÈÏÇé¿öÏ£¬Ê״εǽһ̨·þÎñÆ÷£¬ÏµÍ³»áÌáʾÊÇ·ñÒª¼Çס¶Ô¶ËµÄÖ¸ÎÆ£¬ÓÃansibleÒ²»áÕâÑù£¬ÕâÑù»áµ¼ÖÂÐèÒªÊÖ¹¤ÊäÈëyes»òno£¬ansible ²Å¿ÉÒÔÍùÏÂÖ´ÐС£ÈçÐè±ÜÃâÕâÖÖÇé¿ö£¬ÐèÒªÔÚ /etc/ansible/ansible.cfg ÎļþÖÐÉèÖà host_key_checking= False

Àý1£º

[root@xuegod63roles]# rm -rf /root/.ssh/known_hosts
[root@xuegod63roles]# ansible-playbook -i /etc/ansible/hosts ./site.yml #·¢ÏÖÐèÒªÊäÈëyes£¬À´±£´æ¶Ô¶ËµÄÖ¸ÎÆ

½â¾ö£º

[root@xuegod63roles]# vim /etc/ansible/ansible.cfg
¸Ä£º62 #host_key_checking =False #¾ÍÊǰÑÇ°ÃæµÄ#ºÅÈ¥ÁË
Ϊ£ºhost_key_checking = False
[root@xuegod63roles]# rm -rf /root/.ssh/known_hosts
[root@xuegod63roles]# ansible-playbook -i /etc/ansible/hosts ./site.yml #·¢ÏÖ²»ÐèÒªÊäÈëyes£¬¿ÉÒÔ×Ô¶¯°²×°ÁË
 
   
1870 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

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