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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÔËά×Ô¶¯»¯ºÃ°ïÊÖ£ºansibleÈí¼þÈëÃÅÆª
  2524  次浏览      27
   2018-6-15
 
±à¼­ÍƼö:
±¾ÎÄÀ´Ô´51cto£¬±¾ÎÄÖ÷Òª½éÉÜ×Ô¶¯»¯¹¤¾ßAnsible,ÒÔ¼°¶ÔAnsibleµÄÏê½â£¬Ï£Íû¶ÔÄúµÄѧϰÓаïÖú¡£

Ò»£º¹ØÓÚ×Ô¶¯»¯ÎÒÃÇÒªÖªµÀµÄ

1¡¢×Ô¶¯»¯ÊÇʲô£¿

ITÔËά×Ô¶¯»¯ÊÇÒ»×齫¾²Ì¬µÄÉ豸½á¹¹×ª»¯Îª¸ù¾ÝIT·þÎñÐèÇó¶¯Ì¬µ¯ÐÔÏìÓ¦µÄ²ßÂÔ£¬Ä¿µÄ¾ÍÊÇʵÏÖITÔËάµÄÖÊÁ¿£¬½µµÍ³É±¾¡£¿ÉÒÔ˵×Ô¶¯»¯ÔËάһ¶¨ÊÇITÔËά¸ß²ãÃæµÄÖØÒªÊôÐÔÖ®Ò»¡£

2¡¢ÎªÊ²Ã´ÒªÊ¹ÓÃ×Ô¶¯»¯¼¼Êõ£¿

µ±¹«Ë¾¹æÄ£À©´ó£¬´Ó³õÆÚµÄ¼¸Ì¨·þÎñÆ÷·¢Õ¹µ½ÅÓ´óµÄÊý¾ÝÖÐÐÄʱ£¬×ÔÈ»¶øÈ»µÄµ¥¿¿È˹¤¾ÍÎÞ·¨Âú×ãÔÚ¼¼Êõ¡¢ÒµÎñ¡¢¹ÜÀíµÈ·½ÃæµÄÒªÇó£¬ÄÇô±ê×¼»¯¡¢×Ô¶¯»¯¡¢¼Ü¹¹ÓÅ»¯¡¢¹ý³ÌÓÅ»¯µÈ½µµÍIT·þÎñ³É±¾µÄÒòËØÔ½À´Ô½±»ÈËÃÇËùÖØÊÓ¡£

3¡¢×Ô¶¯»¯µÄÄ¿µÄÊÇʲô£¿

×Ô¶¯»¯×÷ΪÆäÖØÒªÊôÐÔÖ®Ò»ÒѾ­²»½ö½öÖ»ÊÇ´úÌæÈ˹¤²Ù×÷£¬¸üÖØÒªµÄÊÇÉî²ã֪̽ºÍÈ«¾Ö·ÖÎö£¬¹Ø×¢µÄÊÇÔÚµ±Ç°Ìõ¼þÏÂÈçºÎʵÏÖÐÔÄÜÓë·þÎñ×îÓÅ»¯£¬Í¬Ê±±£ÕÏͶ×ÊÊÕÒæ×î´ó»¯¡£

¶þ£º×Ô¶¯»¯¹¤¾ß¡ª¡ªAnsibleÈí¼þÏê½â

1¡¢ÊÇʲô

»ùÓÚpython¿ª·¢µÄ£¬¼¯ºÏÁËÖÚ¶àÔËά¹¤¾ß£¨puppet¡¢chef¡¢func¡¢fabric£©µÄÓŵ㣬ʵÏÖÁËÅúÁ¿ÏµÍ³ÅäÖá¢ÅúÁ¿³ÌÐò²¿Êð¡¢ÅúÁ¿ÔËÐÐÃüÁîµÈ¹¦ÄÜ¡£

2¡¢AnsibleÈí¼þÌØµã

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

¢ÚĬÈÏʹÓÃSSHЭÒé¶ÔÉ豸½øÐйÜÀí£»

¢ÛÓдóÁ¿³£¹æÔËά²Ù×÷Ä£¿é£¬¿ÉʵÏÖÈÕ³£¾ø´ó²¿·Ö²Ù×÷¡£

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

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

¢Þͨ¹ýPlaybooksÀ´¶¨ÖÆÇ¿´óµÄÅäÖá¢×´Ì¬¹ÜÀí£»

¢ßÇáÁ¿¼¶£¬ÎÞÐèÔÚ¿Í»§¶Ë°²×°agent£¬¸üÐÂʱ£¬Ö»ÐèÔÚ²Ù×÷»úÉÏ ½øÐÐÒ»´Î¸üм´¿É£»

¢àÌṩһ¸ö¹¦ÄÜÇ¿´ó¡¢²Ù×÷ÐÔÇ¿µÄWeb¹ÜÀí½çÃæºÍREST API½Ó¿Ú ¡ª¡ªAWXƽ̨¡£

3¡¢Ansible»ù±¾¼Ü¹¹Í¼ && ºËÐÄ×é¼þ˵Ã÷

1.Ansible£ºAnsibleºËÐijÌÐò¡£

2.HostInventory£º¼Ç¼ÓÉAnsible¹ÜÀíµÄÖ÷»úÐÅÏ¢£¬°üÀ¨¶Ë¿Ú¡¢ÃÜÂë ¡¢ipµÈ¡£

3.Playbooks£º¡°¾ç±¾¡±YAML¸ñʽÎļþ£¬¶à¸öÈÎÎñ¶¨ÒåÔÚÒ»¸öÎļþ ÖУ¬¶¨ÒåÖ÷»úÐèÒªµ÷ÓÃÄÄЩģ¿éÀ´Íê³ÉµÄ¹¦ÄÜ¡£

4.CoreModules£ººËÐÄÄ£¿é£¬Ö÷Òª²Ù×÷ÊÇͨ¹ýµ÷ÓúËÐÄÄ£¿éÀ´Íê³É¹Ü ÀíÈÎÎñ¡£

5.CustomModules£º×Ô¶¨ÒåÄ£¿é£¬Íê³ÉºËÐÄÄ£¿éÎÞ·¨Íê³ÉµÄ¹¦ÄÜ£¬ Ö§³Ö¶àÖÖÓïÑÔ¡£

6.ConnectionPlugins£ºÁ¬½Ó²å¼þ£¬AnsibleºÍHostͨÐÅʹÓÃ

4¡¢ansibleÈÎÎñÖ´ÐÐģʽ£ºµ¥¸öÃüÁî¡¢ÅúÁ¿ÃüÁî

¢Ùad-hocģʽ£ºÊ¹Óõ¥¸öÄ£¿é£¬Ö§³ÖÅúÁ¿Ö´Ðе¥ÌõÃüÁî¡£ ad-hoc ÃüÁîÊÇÒ»ÖÖ¿ÉÒÔ¿ìËÙÊäÈëµÄÃüÁ¶øÇÒ²»ÐèÒª±£´æÆðÀ´µÄÃüÁî¡£¾ÍÏ൱ÓÚbashÖеÄÒ»¾ä»°shell¡£

¢Úplaybookģʽ£ºÊÇAnsibleÖ÷Òª¹ÜÀí·½Ê½£¬Ò²ÊÇAnsible¹¦ÄÜÇ¿´óµÄ¹Ø ¼üËùÔÚ¡£playbookͨ¹ý¶à¸ötask¼¯ºÏÍê³ÉÒ»À๦ÄÜ£¬ÈçWeb·þÎñµÄ°²×°²¿Êð¡¢Êý¾Ý¿â·þÎñÆ÷µÄÅúÁ¿±¸·ÝµÈ¡£¿ÉÒÔ¼òµ¥µØ°ÑplaybookÀí½âΪͨ¹ý×éºÏ¶àÌõad-hoc½øÐвÙ×÷µÄÅäÖÃÎļþ¡£

5¡¢ansibleÖ´ÐÐÁ÷³Ì && Á÷³ÌÃèÊö

1¡¢¼ÓÔØ×Ô¼ºµÄÅäÖÃÎļþ ĬÈÏ/etc/ansible/ansible.cfg

2¡¢²éÕÒ¶ÔÓ¦µÄÖ÷»úÅäÖÃÎļþ£¬ÕÒµ½ÒªÖ´ÐеÄÖ÷»ú»òÕß×é

3¡¢¼ÓÔØ×Ô¼º¶ÔÓ¦µÄÄ£¿éÎļþ£¬Èçcommand

4¡¢Í¨¹ýansible½«Ä£¿é»òÃüÁîÉú³É¶ÔÓ¦µÄÁÙʱpyÎļþ£¬²¢½«¸ÃÎļþ´« ÊäÖÁÔ¶³Ì·þÎñÆ÷µÄ

5¡¢¶ÔÓ¦Ö´ÐÐÓû§µÄ¼ÒĿ¼µÄ.ansible/tmp/XXX/XXX.PYÎļþ

6¡¢¸øÎļþ+xÖ´ÐÐ

7¡¢Ö´Ðв¢·µ»Ø½á¹û

8¡¢É¾³ýÁÙʱpyÎļþ£¬sleep 0Í˳ö

Èý£ºAnsible³£ÓÃÃüÁî¼°Ó÷¨

³£ÓÃÃüÁî

1./usr/bin/ansible # Ansibe AD-Hoc ÁÙʱÃüÁîÖ´Ðй¤¾ß£¬³£ÓÃÓÚÁÙʱÃü ÁîµÄÖ´ÐÐ

2./usr/bin/ansible-doc # Ansible Ä£¿é¹¦Äܲ鿴¹¤¾ß

3./usr/bin/ansible-galaxy # ÏÂÔØ/ÉÏ´«ÓÅÐã´úÂë»òRolesÄ£¿é µÄ¹ÙÍøÆ½Ì¨ £¬»ùÓÚÍøÂçµÄ

4./usr/bin/ansible-playbook # Ansible ¶¨ÖÆ×Ô¶¯»¯µÄÈÎÎñ¼¯±àÅŹ¤¾ß

5./usr/bin/ansible-pull # AnsibleÔ¶³ÌÖ´ÐÐÃüÁîµÄ¹¤¾ß£¬À­È¡ÅäÖöø·ÇÍÆ ËÍÅäÖã¨Ê¹ÓýÏÉÙ£¬º£Á¿»úʱʹÓ㬶ÔÔËάµÄ¼Ü¹¹ÄÜÁ¦ÒªÇó½Ï¸ß£©

6./usr/bin/ansible-vault # Ansible Îļþ¼ÓÃܹ¤¾ß

7./usr/bin/ansible-console # Ansible»ùÓÚLinux Consoble½çÃæ¿ÉÓëÓû§½»»¥µÄÃüÁîÖ´Ðй¤¾ß

ÃüÁîÏê½â

1¡¢ansible-doc

£¨1£©ÃüÁî¸ñʽ

ansible-doc [options] [module...]

£¨2£©options

-h£º--help ÏÔʾÃüÁî²Î¿¼APIÎĵµ

-l£º--list Áгö¿ÉÓÃÄ£¿é

-M module_path£º--module-path=module_path Ö¸¶¨Ä£¿é·¾¶

-s mode_name£º--snippet »ñȡָ¶¨Ä£¿éµÄʹÓðïÖú

--version£ºÏÔʾ°æ±¾ÐÅÏ¢

2¡¢ansible

£¨1£©ÃüÁî¸ñʽ

¢Ùansible [-f forks] [-m module_name] [-a args]

¢Úansible <host-pattern> [options] Options

£¨2£©options

¡¤ -a MODULE_ARGS, --args=MODULE_ARGS £ºÄ£¿éµÄ²ÎÊý,Èç¹ûÖ´ÐÐĬÈÏCOMMANDµÄÄ£¿é£¬¼´ÊÇÃüÁî²ÎÊý ,È磺¡°date¡±,¡°pwd¡±µÈµÈ module arguments Ä£¿é

²ÎÊý

¡¤ -m MODULE_NAME, --module-name=MODULE_NAME£ºÖ´ÐÐÄ£¿éµÄÃû×Ö£¬Ä¬ÈÏʹÓÃ"command" Ä£¿é£¬ËùÒÔÈç¹ûÊÇÖ»Ö´Ðе¥Ò»ÃüÁî¿ÉÒÔ²»ÓÃ

¡¤ -M MODULE_PATH, --module-path=MODULE_PATH£ºÒªÖ´ÐеÄÄ£¿éµÄ·¾¶£¨default£º/usr/share/ansible£©

¡¤ -f FORKS, --forks=FORKS£º ²¢ÐÐÈÎÎñÊý£¨default£º5£©

¡¤ -C, --check£º²âÊÔģʽ¡£²âÊÔһϻá¸Ä±äʲôÄÚÈÝ£¬²»»áÕæÕýÈ¥Ö´ÐÐ;Ïà·´,ÊÔͼԤ²âһЩ¿ÉÄÜ·¢ÉúµÄ±ä»¯

¡¤ -c connection£¬--connection=CONNECTION£ºÁ¬½ÓÀàÐÍʹÓã¨default£ºsmart£©

¡¤ -v, --verbose£¨-vvv£¬-vvvv£©£ºÏÔʾÃüÁîÖ´ÐеÄÏêϸÐÅÏ¢/³¬ÏêϸÐÅÏ¢ £¨³£ºÍ-CÅäºÏʹÓã¬ÓÃÓÚÔËÐÐǰ²âÊÔ»·½Ú£©

¡¤ -i INVENTORY, --inventory-file=INVENTORY£ºÖ¸¶¨Ö÷»úÇåµ¥´æ·Å·¾¶,ĬÈÏΪ/etc/ansible/hosts

¡¤ -S, --su £ºÊ¹Óà su ÃüÁî

¡¤ -R SU_USER, --su-user=SU_USER Ö¸¶¨SUµÄÓû§£¨default£ºroot£©

¡¤ -s, --sudo£ºÒÔsudo·½Ê½ÔËÐУ¨²»ÐèÒªÃÜÂ룩

¡¤ -U SUDO_USER, --sudo-user=SUDO_USER £ºsudoµ½ÄĸöÓû§£¨default£ºroot£©

¡¤ -T TIMEOUT, --timeout=TIMEOUT£ºÖ¸¶¨SSHĬÈϳ¬Ê±Ê±¼ä£¨default£º10s£©

¡¤ -u REMOTE_USER, --user=REMOTE_USER£ºÄ¬ÈÏÁ¬½Óµ½Ô¶³ÌÖ÷»úÄĸöÓû§£¨default£ºroot£©

¡¤ -k, --ask-pass£ºµÇ½ÃÜÂ룬ÌáʾÊäÈësshÃÜÂë¶ø²»ÊǼÙÉè»ùÓÚÃÜÔ¿µÄÑéÖ¤

¡¤ -K, --ask-sudo-pass£ºÌáʾÃÜÂëʹÓÃsudo,sudo±íʾÌáȨ²Ù×÷

¡¤ -B SECONDS, --background=SECONDS£ººǫ́ÔËÐг¬Ê±Ê±¼ä

¡¤ -h£¬--help£º²é¿´°ïÖú

¡¤ -o, --one-line£ºÑ¹ËõÊä³ö£¬ÕªÒªÊä³ö£¬³¢ÊÔ½«ËùÓÐÄÚÈݶ¼ÔÚÒ»ÐÐÉÏÊä³ö¡£

¡¤ -private-key=PRIVATE_KEY_FILE£ºË½Ô¿Â·¾¶£¬Ê¹ÓÃÕâ¸öÎļþÀ´ÑéÖ¤Á¬½Ó

£¨3£©³£ÓÃÄ£¿é

¢Ùping ²âÊÔÖ÷»úÍøÂçÁ¬Í¨ÐÔ

[root@server ~]# ansible all -m ping

172.17.214.75 | SUCCESS => {

"changed": false,

"ping": "pong"

}

172.17.214.74 | SUCCESS => {

"changed": false,

"ping": "pong"

}

¢ÚcommandÖ´ÐÐÃüÁî

[root@server ~]# ansible webserver -m command -a 'ifconfig' ÔÚwebserverÖ÷»ú×éÉÏÖ´ÐÐÃüÁîifconfig

×¢Ò⣺ÃüÁîģʽÏ£¬'' µÄÓ÷¨ :'ÃüÁîÃû³Æ+Óÿոñ·Ö¸ôµÄÁбí²ÎÊý', ¸ø¶¨µÄÃüÁÔÚËùÓÐÖ¸¶¨½ÚµãÉÏÖ´ÐУ¬µ«²»Ö§³ÖshellÃüÁîģʽ£¬ÈçÏÂÁм¸ÖÖ£º

$arg¡¢"<"¡¢">"¡¢"|"¡¢";"¡¢"&"µÈshellÃüÁÓÐÆäÌØ¶¨µÄÃüÁ

1. chdir=dir_name£ºÇл»Ä¿Â¼

2.executable£ºÇл»shellÀ´Ö´ÐÐÃüÁעÒ⣺ÃüÁîҪʹÓþø¶Ô·¾¶±íʾ£©

3. free_form£ºÒªÖ´ÐеÄlinuxÃüÁһ°ãÓÃ-aÑ¡Ïî´úÌæ

4.creates=file_name£ºÎļþ´æÔÚ£¬ÔòÃüÁî²»Ö´ÐУ¬Ö»¿ÉÓÃÀ´×öÅжÏ

5.removes=file_name£ºÎļþ´æÔÚ£¬ÔòÃüÁîÖ´ÐУ¬Ò²ÓÃÀ´×öÅжÏ

ʹÓÃʾÀýÈçÏ£º

¢Ù[root@server ~]# ansible all -m command -a 'creates=/app/hehe.w ls'

172.17.214.74 | SUCCESS | rc=0 >>

skipped, since /app/hehe.w exists

172.17.214.75 | SUCCESS | rc=0 >>

skipped, since /app/hehe.w exists

ÒòΪÁ½Ö÷»ú¶¼´æÔÚ´ËÎļþ£¬ËùÒÔlsÃüÁî²»Ö´ÐÐ

¢Ú[root@server ~]# ansible all -m command -a 'removes=/app/hehe.w ls'

172.17.214.74 | SUCCESS | rc=0 >>

172.17.214.75 | SUCCESS | rc=0 >>

Á½Ö÷»úÎļþ´æÔÚ£¬ÔòÖ´ÐдËlsÃüÁî

3.shell Ô¶³ÌÖ÷»úÖ´ÐÐshellÃüÁ֧³Ö¹ÜµÀ¡¢Öض¨ÏòµÈÌØÊâ·ûºÅ£©

[root@server ~]# ansible all -m shell -a 'cat /etc/passwd | grep "root"'

172.17.214.74 | SUCCESS | rc=0 >>

root:x:0:0:root:/root:/bin/bash

172.17.214.75 | SUCCESS | rc=0 >>

root:x:0:0:root:/root:/bin/bash

4.copy ¸´ÖÆÎļþµ½Ô¶³ÌÖ÷»ú

copyÄ£¿é³£¼ûÓ÷¨£º

1¡¢¸´ÖÆÎļþ

-a "src= dest= "

2¡¢Éú³ÉÖ¸¶¨ÄÚÈݵÄÎļþ

-a "content= dest= "

copyÄ£¿é³£ÓÃÑ¡Ï

¢Ùbackup=<yes|no> £º¸²¸ÇÎļþ֮ǰ£¬±¸·ÝÔ­Îļþ

¢Úcontent£º¹¦ÄÜÓëÖØ¶¨Ïò">"Ïàͬ£¬Îļþ´æÔÚÔò¸²¸ÇÎļþÄÚÈÝ£¨default£©£¬²»ÄÜ´æÔÚÔò´´½¨Ö¸¶¨ÄÚÈÝÎļþ

¢Ûdest£ºÎļþ»òĿ¼£¬±ØÐëΪ¾ø¶Ô·¾¶

¢Üsrc£ºÎļþ»òĿ¼£¬Ïà¶Ô·¾¶|¾ø¶Ô·¾¶¡£

¢Ýdirectory_mode£ºµÝ¹éÉèÖÃĿ¼ȨÏÞ£¬Ä¬ÈÏΪϵͳĬÈÏȨÏÞ

¢Þforce yes|no £ºÉèΪyesʱ£¬ÈôÄ¿±êÖ÷»ú°üº¬¸ÃÎļþ£¬ÔòÇ¿ÖÆ¸²¸Ç£»ÈôΪno£¬ÔòÖ»ÓÐÄ¿±êÖ÷»ú²»´æÔÚ¸ÃÎļþʱ²Å¸´ÖÆ¡££¨default£ºyes£©

¢ßothers£ºËùÓÐfileÄ£¿éÀïµÄÑ¡Ïî¶¼¿ÉÒÔÔÚÕâÀïÃæÊ¹Óá£

5.file ÉèÖÃÎļþÊôÐÔ

³£¼ûÓ÷¨£º

1¡¢´´½¨Ä¿Â¼

-a 'path= state=directory'

2¡¢´´½¨Á´½ÓÎļþ

-a 'path= src= state=link'

3¡¢É¾³ýÎļþ

-a 'path= state=absent'

4¡¢³£¼ûÑ¡Ï

¢Ùforce yes|no£ºÇ¿ÖÆ´´½¨ÈíÁ´½Ó¡£µÚÒ»£¬Ô´Îļþ²»´æÔÚ£¬µ«ÉÔºó»á´´½¨£»µÚ¶þ£¬Ä¿±êÈíÁ´½ÓÒÑ´æÔÚ£¬ÐèÒªÏÈÈ¡Ïû֮ǰµÄÁ´½Ó¹ØÏµ£¬´´½¨ÐµÄÈíÁ´½Ó¡£

¢Úgroup£º¶¨ÒåÎļþ/Ŀ¼µÄÊô×é mode£º¶¨ÒåÎļþ/Ŀ¼ȨÏÞ

¢Ûowner£º¶¨ÒåÎļþ/Ŀ¼µÄÊôÖ÷ path£º¶¨ÒåÎļþ/Ŀ¼·¾¶£¨±ØÑ¡Ï

¢Ürecurse£ºµÝ¹éÉèÖÃÎļþÊôÐÔ

¢Ýsrc£º±»Á´½ÓµÄÔ´Îļþ·¾¶£¬Ö»Ó¦ÓÃÓÚstate=link

¢Þdest£º±»Á´½ÓµÄÎļþ·¾¶£¬Ö»Ó¦ÓÃÓÚstate=link

¢ßstate£º

directory£ºÈôĿ¼²»´æÔÚ£¬Ôò´´½¨Ä¿Â¼

file£ºÎļþ²»´æÔÚÒ²²»´´½¨

link£º´´½¨ÈíÁ¬½Ó

hard£º´´½¨Ó²Á´½Ó

touch£ºÈôÎļþ²»´æÔÚ£¬Ôò»á´´½¨Ò»¸öÐÂÎļþ£¬ Èô´æÔÚ£¬Ôò¸üÐÂʱ¼ä´Á

absent£ºÉ¾³ýÎļþ¡¢Ä¿Â¼¡¢Á´½ÓÎļþ

6.fetch ´ÓÔ¶³ÌijÖ÷»ú»ñÈ¡Îļþµ½±¾µØ

dest£º±¾»úÓÃÀ´´æ·ÅÀ­¹ýÀ´µÄÎļþ»òĿ¼µÄĿ¼

src£ºÔ¶³ÌÎļþ¡££¨Ö»ÄÜΪÎļþ£©

7.cron ¹ÜÀí¼Æ»®ÈÎÎñ

³£¼ûaction£º

cron backup=<yes|no>£º´´½¨Ò»¸öcrontab±¸·Ý

cron_file=file_name£ºÈç¹ûʹÓã¬Ê¹ÓÃÕâ¸öcron.d£¬¶ø²»Êǵ¥¸öÓû§

³£¼ûʱ¼äÑ¡Ï

day= #ÈÕÓ¦¸ÃÔËÐеŤ×÷( 1-31, *, */2, )

hour= # Сʱ ( 0-23, *, */2, )

minute= #·ÖÖÓ( 0-59, *, */2, )

month= # ÔÂ( 1-12, *, /2, )

weekday # ÖÜ ( 0-6 for Sunday-Saturday)

³£ÓÃÑ¡Ï

jod="" £ºÖ¸Ã÷Ö´ÐеÄÃüÁî

name=""£ºÈÎÎñÃèÊö

reboot ÈÎÎñÔÚÖØÆôʱÔËÐС££¨²»½¨ÒéʹÓ㬽¨ÒéʹÓÃspecial_time£©

special_time=""£ºÌØÊâµÄʱ¼ä·¶Î§£¬²ÎÊýÓУºreboot£¨ÖØÆôʱ£©,annually£¨Ã¿Ä꣩,monthly£¨Ã¿Ô£©,weekly £¨Ã¿ÖÜ£©,daily£¨Ã¿Ì죩,hourly£¨Ã¿Ð¡Ê±£©

state=""£ºÖ¸¶¨×´Ì¬£¬³£¼û״̬ÓÐpresent£¨Ìí¼Ó¶¨Ê±ÈÎÎñ£©¡¢absent£¨É¾³ý¶¨Ê±ÈÎÎñ£©

user=""£ºÒÔÄĸöÓû§Éí·ÝÈ¥ÔËÐÐ

eg£ºÃ¿Îå·ÖÖÓͬ²½¸÷Ö÷»úʱ¼ä

[root@server ~]# ansible all -m cron -a 'name="sync date per second 5 min" minute="*/5" job="/usr/sbin/ntpdate 172.17.0.1 &> /dev/null"'

[root@server ~]# ansible all -m shell -a 'crontab -l' #²é¿´¼Æ»®ÈÎÎñÌí¼ÓÇé¿ö

8.yum °²×°Èí¼þ

name= #Ëù°²×°µÄ°üµÄÃû³Æ

state= #present£¨°²×°£©£¬ latest£¨°²×°×îеģ©, absent£¨Ð¶ÔØÈí¼þ£©¡£

update_cache #Ç¿ÖÆ¸üÐÂyumµÄ»º´æ¡£

conf_file #É趨Զ³Ìyum°²×°Ê±ËùÒÀÀµµÄÅäÖÃÎļþ¡£ÈçÅäÖÃÎļþûÓÐÔÚĬÈϵÄλÖá£

disable_gpg_check #ÊÇ·ñ½ûÖ¹GPG checking£¬Ö»ÓÃÓÚ`present¡® or `latest¡¯¡£

disablerepo #ÁÙʱ½ûֹʹÓÃyum¿â¡£ Ö»ÓÃÓÚ°²×°»ò¸üÐÂʱ

enablerepo #ÁÙʱʹÓõÄyum¿â¡£Ö»ÓÃÓÚ°²×°»ò¸üÐÂʱ¡£

9.service ·þÎñ¹ÜÀí

arguments #ÃüÁîÐÐÌṩ¶îÍâµÄ²ÎÊý

enabled=<true|false> #ÉèÖÿª»úÆô¶¯¡£

name= #·þÎñÃû³Æ

runlevel #¿ª»úÆô¶¯µÄ¼¶±ð£¬Ò»°ã²»ÓÃÖ¸¶¨¡£

sleep #ÔÚÖØÆô·þÎñµÄ¹ý³ÌÖУ¬ÊÇ·ñµÈ´ý¡£ÈçÔÚ·þÎñ¹Ø±ÕÒÔºóµÈ´ý2ÃëÔÙÆô¶¯¡£

state #startedÆô¶¯·þÎñ£¬ stoppedÍ£Ö¹·þÎñ£¬ restartedÖØÆô·þÎñ£¬ reloadedÖØÔØÅäÖÃ

10.user Óû§ºÍÕ˺ŹÜÀí

comment # Óû§µÄÃèÊöÐÅÏ¢

createhome # ÊÇ·ñ´´½¨¼ÒĿ¼

force # ÔÚʹÓÃstate=absentʱ, ÐÐΪÓëuserdel ¨CforceÒ»ÖÂ.

group # Ö¸¶¨»ù±¾×é groups # Ö¸¶¨¸½¼Ó×飬Èç¹ûÖ¸¶¨Îª(groups=)±íʾɾ³ýËùÓÐ×é

home # Ö¸¶¨Óû§¼ÒĿ¼ move_home # Èç¹ûÉèÖÃΪhome=ʱ, ÊÔͼ½«Óû§Ö÷Ä¿Â¼ÒÆ¶¯µ½Ö¸¶¨µÄĿ¼

name # Ö¸¶¨Óû§Ãû

non_unique # ¸ÃÑ¡ÏîÔÊÐí¸Ä±ä·ÇΨһµÄÓû§IDÖµ

password # Ö¸¶¨Óû§ÃÜÂë

remove # ÔÚʹÓÃstate=absentʱ, ÐÐΪÊÇÓëuserdel ¨CremoveÒ»ÖÂ

shell # Ö¸¶¨Ä¬ÈÏshell

state # ÉèÖÃÕʺÅ״̬£¬²»Ö¸¶¨Îª´´½¨£¬Ö¸¶¨ÖµÎªabsent±íʾɾ³ý

system # µ±´´½¨Ò»¸öÓû§£¬ÉèÖÃÕâ¸öÓû§ÊÇϵͳÓû§¡£Õâ¸öÉèÖò»Äܸü¸ÄÏÖÓÐÓû§

uid # Ö¸¶¨Óû§µÄuid

update_password # ¸üÐÂÓû§ÃÜÂë

11.group ×é¹ÜÀí£¬Ìí¼Ó»òɾ³ý×é

gid #ÉèÖÃ×éµÄGIDºÅ

name= #×éÃû

state #Ö¸¶¨×é״̬£¬Ä¬ÈÏΪ´´½¨£¨present£©£¬ÉèÖÃֵΪabsentΪɾ³ý

system #ÉèÖÃֵΪyes£¬±íʾΪ´´½¨ÏµÍ³×é

12.script ÔËÐзþÎñÆ÷¶Ë½Å±¾

ansible all -m script -a '/root/test.sh'

13.setup ²é¿´»úÆ÷ËùÓÐfactsÐÅÏ¢

factsÊÇʲô£¿

factsÊÇÒ»¸öÄÚ½¨±äÁ¿¡£Ã¿¸öÖ÷»úµÄ¸÷ÖÖÐÅÏ¢£¬cpu¿ÅÊý¡¢ÄÚ´æ´óСµÈ¡£»á´æÔÚfactsÖеÄij¸ö±äÁ¿ÖС£µ÷Óú󷵻غܶà¶ÔÓ¦Ö÷»úµÄÐÅÏ¢£¬ÔÚºóÃæµÄ²Ù×÷ÖпÉÒÔ¸ù¾Ý²»Í¬µÄÐÅÏ¢À´×ö²»Í¬µÄ²Ù×÷¡£ÈçredhatϵÁÐÓÃyum°²×°£¬¶ødebianϵÁÐÓÃaptÀ´°²×°Èí¼þ¡£

¡ùsetupÄ£¿éÖ÷Òª¹¦ÄÜ

setupÄ£¿é£¬Ö÷ÒªÓÃÓÚ»ñÈ¡Ö÷»úÐÅÏ¢£¬ÔÚplaybooksÀï¾­³£»áÓõ½µÄÒ»¸ö²ÎÊýgather_facts¾ÍÓë¸ÃÄ£¿éÏà¹Ø¡£ setupÄ£¿éϾ­³£Ê¹ÓõÄÒ»¸ö²ÎÊýÊÇfilter²ÎÊý£¬¾ßÌåʹÓÃʾÀýÈçÏ£¨ÓÉÓÚÊä³ö½á¹û½Ï¶à£¬ÕâÀïÖ»ÁÐÃüÁд½á¹û£©£º

setup³£ÓÃÃüÁî¸ñʽ£º

#ansible web -m setup //²é¿´Ö÷»úËùÓбäÁ¿

#ansible 10.212.52.252 -m setup -a 'filter=ansible_*_mb' //²é¿´Ö÷»úÄÚ´æÐÅÏ¢

#ansible 10.212.52.252 -m setup -a 'filter=ansible_eth[0-2]' //²é¿´µØ½Ó¿ÚΪeth0-2µÄÍø¿¨ÐÅÏ¢

#ansible all -m setup --tree /tmp/facts //½«ËùÓÐÖ÷»úµÄÐÅÏ¢ÊäÈëµ½/tmp/factsĿ¼Ï£¬Ã¿Ì¨Ö÷»úµÄÐÅÏ¢ÊäÈëµ½Ö÷»úÃûÎļþÖУ¬ÈçÏÂΪÃüÁîÖ´

Ðнá¹û£º

[root@server ~]# ls /tmp/facts/

172.17.214.74 172.17.214.75

ËÄ£ºAnsible playbook

1¡¢playbook¼ò½é

£¨1£©playbookÊÇansibleÓÃÓÚÅäÖ㬲¿Ê𣬺͹ÜÀí±»¿Ø½ÚµãµÄ¾ç±¾

£¨2£©Í¨¹ýplaybookµÄÏêϸÃèÊö£¬Ö´ÐÐÆäÖÐһϵÁÐtasksÀ´²Ù¿Ø½Úµã

£¨3£©ÑÝÔ±£º¼ÆËã»ú

¾ç±¾£ºplaybook

2¡¢playbookʹÓó¡¾°

£¨1£©ad-docÊʺÏÖ´Ðе¥ÌõÃüÁµ±ÃüÁî½Ï¶àʱ£¬ÐèÒªplaybook

£¨2£©playbookÓÐ×Ô¼ºµÄÓï·¨¸ñʽ

£¨3£©¿ÉÒÔ½«³£ÓõÄÃüÁºÏ±àдΪplaybook

3¡¢playbook±àдÏê½â

£¨1£©Óï·¨¸ñʽ

¢Ù¿ªÍ·£ºÎļþµÄµÚÒ»ÐÐÓ¦¸ÃÒÔ ¡±¡ª¡± (Èý¸öÁ¬×Ö·û)¿ªÊ¼£¬±íÃ÷YMALÎļþµÄ¿ªÊ¼¡£
¢Ú×¢ÊÍ£ºÔÚͬһÐÐÖУ¬#Ö®ºóµÄÄÚÈݱíʾעÊÍ£¬ÀàËÆÓÚshell£¬pythonºÍruby¡£
¢ÛÁбíÔªËØ£ºYMALÖеÄÁбíÔªËØÒÔ¡±-¡±¿ªÍ·È»ºó½ô¸ú×ÅÒ»¸ö¿Õ¸ñ£¬ºóÃæÎªÔªËØÄÚÈÝ¡£
eg£º- apple - banana - orange µÈ¼ÛÓÚpythonÁбí ["apple","banana","orange"]
¢Ü³£ÓöÔÏóÖ¸¶¨£ºplayÖÐhosts£¬variables£¬roles£¬tasksµÈ¶ÔÏóµÄ±íʾ·½·¨¶¼ÊǼüÖµÖмäÒÔ":"·Ö¸ô±íʾ,"

£¨2£©playbook×é¼þÏê½â

¢ÙHosts£ºÔËÐÐÖ¸¶¨ÈÎÎñµÄÄ¿±êÖ÷»ú
£¨a£©Ö÷»úÇ嵥ĬÈÏΪ/etc/ansible/hosts,Ò²¿É×Ô¼ºÖ¸¶¨Îļþ£¬Í¨¹ý-i file_nameÖ¸¶¨
£¨b£© ansible --list-hosts ÏÔʾÄÄЩÖ÷»ú²ÎÓëµ½taskµÄÖ´ÐÐÖÐ
¢Úremote_user£ºÔ¶³ÌÖ÷»úÉÏÖ´ÐÐÈÎÎñµÄÓû§
¢Ûsudo_user£ºÇл»Ô¶³ÌÖ÷»úÉÏÖ´ÐÐÈÎÎñµÄÓû§
¢Ütasks£º ÈÎÎñÁÐ±í£¬ÅäºÏ¸÷Ä£¿éʹÓòÅÓй¦ÄÜ¡£
module_name: modile arguments
×¢Òâ:shellºÍcommandÄ£¿éºó¿ÉÖ±½Ó¸úÃüÁ¶ø·Çkey=value²ÎÊýÁбí
¢Ýhandlers ÈÎÎñ£¬ÔÚÌØ¶¨Ìõ¼þϱ»´¥·¢£¬½ÓÊÕµ½ÆäËûÈÎÎñµÄ֪ͨʱ±»´¥·¢
¸ñʽ£º
tasks£º
- name£º restart httpd service
service: name=httpd states=stopped
notify: httpd_manager
handlers:
- name: httpd_manager
service: name=httpd states=started

¢Þ±äÁ¿ Variables
·½·¨1£©facts£º¿ÉÖ±½Óµ÷ÓÃ
×¢Ò⣺¿ÉʹÓÃsetupÄ£¿éÖ±½Ó»ñȡĿ±êÖ÷»úµÄfacters£»
·½·¨2£©Óû§×Ô¶¨Òå±äÁ¿
£¨a£©ÃüÁîÐж¨Ò壺ansible-playbook *.yml -e var1=value1
eg£º¢Ù¶¨Òå±äÁ¿Ãû
tasks£º
- name£º stop httpd service
service: name={{ service_name }} states=stopped ##¶¨Òå±äÁ¿service_name
¢ÚÃüÁîÐÐÒýÓñäÁ¿
ansible-playbook web.yml -e service_name=httpd ##¹Ø±Õhttpd·þÎñ
£¨b£©.ymlÎļþÖж¨Ò壺
vars£º
- var1: value1
- var2: value2
×¢Ò⣺varsλÖÃΪhosts֮ϣ¬tasksÖ®Í⣬ÓëtasksµÈ¼¶Ïàͬ
·½·¨3£©Í¨¹ýroles´«µÝ±äÁ¿
·½·¨4£©Host Inventory Ö÷»úÇåµ¥Îļþ×ÔÖж¨Òå
£¨a£© Ïò²»Í¬Ö÷»ú´«µÝ²»Í¬µÄ±äÁ¿£º
ip/hostname var1=value1 var2=value2
£¨b£©Ïò×éÖеÄÖ÷»ú´«µÝÏàͬ±äÁ¿
[group_name:vars] //Ô­ÑùÊäÈë¼´¿É
var1=value1 //Ö¸¶¨±äÁ¿¼°±äÁ¿Öµ

¢ßtags£ºÎªµ¥¸öÖ´ÐÐÃüÁî´ò±êÇ©
1£©ÐÞ¸ÄymlÎļþ
tasks£º
- name£º restart httpd service
service: name=httpd states=stopped
tags: restart-httpd
2£©ÃüÁîÐÐÒýÓÃtags£¬ÔËÐе¥¶Àtask
absible-playbook web.yml -t restart-httpd ¡±-t¡° ÒýÓÃtag£¬ÔËÐÐÖ¸¶¨ÃüÁî

 

4¡¢playbookÔËÐз½·¨

£¨1£©ÊÔÔËÐÐ
ansible-playbook --check/-C #²âÊÔÔËÐÐymlÎļþ£¬²»Ö´ÐÐÕæÕý²Ù×÷£¬ÓÃÀ´²é¿´ÊÇ·ñÓдíÎó
ansible-playbook --list-hosts #ÁгöÖ´ÐÐtaskËùÓÃÖ÷»ú
ansible-playbook
£¨2£©Ö±½ÓÔËÐÐ
ansible-playbook *.yml

5¡¢playbook×Öµä

Ó﷨ʾÀý£º
- name: add some users
user: name={{ item.name }} group={{ item.group }} state=present
with_items:
- { name:'user11',group:'group11' }
- { name:'user22',group:'group22' }

6¡¢playbookÌõ¼þ²âÊÔ

£¨1£©Ìõ¼þ²âÊÔ£ºwhen
Ó÷¨£ºÔÚtaskÖÐʹÓã¬jinja2µÄÓï·¨¸ñʽ
eg£º
tasks:
- name: install conf file to centos7
template: src=files/nginx.conf.c7.j2
when: ansible_distribution_major_version == "7"
- name: install conf file to centos6
template: src=files/nginx.conf.c6.j2
when: ansible_distribution_major_version == "6"
£¨2£©Ñ­»·£ºµü´ú£¬ÐèÒªÖØ¸´Ö´ÐеÄÈÎÎñ
Ó÷¨£º¢Ù¶Ôµü´úÏîµÄÒýÓ㬹̶¨±äÁ¿ÃûΪ "item"
¢Ú¶øºó£¬ÒªÔÚtaskÖÐʹÓÃwith_items¸ø¶¨Òªµü´úµÄÔªËØÁбí
eg£º
- hosts: web
remote_user: root
tasks:
- name: uninstall web packages
yum: name={{ item }} state=absent
with_item:
- httpd
- php
- php-mysql
- php-fpm

7¡¢roles ½ÇÉ«¶¨ÖÆ

£¨1£©¹¦ÄÜ
roles ÓÃÓÚ²ã´ÎÐÔ¡¢½á¹¹»¯µØ×éÖ¯playbook¡£roles Äܹ»¸ù¾Ý²ã´ÎÐͽṹ×Ô¶¯×°ÔرäÁ¿Îļþ¡¢tasksÒÔ¼°handlersµÈ¡£roles¾ÍÊÇͨ¹ý·Ö±ð½«±äÁ¿(vars)¡¢ÎÄ
¼þ(file)¡¢ÈÎÎñ(tasks)¡¢Ä£¿é (modules)¼°´¦ÀíÆ÷(handlers)·ÅÖÃÓÚµ¥¶ÀµÄĿ¼ÖУ¬²¢¿ÉÒÔ±ã½Ý µØincludeËüÃǵÄÒ»ÖÖ»úÖÆ¡£½Çɫһ°ãÓÃÓÚ»ùÓÚÖ÷»ú¹¹½¨
·þÎñµÄ³¡ ¾°ÖУ¬µ«Ò²¿ÉÒÔÊÇÓÃÓÚ¹¹½¨ÊØ»¤½ø³ÌµÈ³¡¾°ÖС£ÒªÊ¹Óà rolesÖ»ÐèÒªÔÚplaybookÖÐʹÓÃincludeÖ¸Áî¼´¿É¡£

£¨2£©½ÇÉ«¼¯ºÏ
¢Ùmysql/
¢Úhttpd/
¢Ûnginx/
¢Üfiles/£º ´æ´¢ÓÉcopy»òscriptµÈÄ£¿éµ÷ÓõÄÎļþ£»
¢Ýtasks/£º´ËĿ¼ÖÐÖÁÉÙÓ¦¸ÃÓÐÒ»¸öÃûΪmain.ymlµÄÎļþ£¬ÓÃÓÚ¶¨Òå¸÷task£»ÆäËüµÄÎļþÐèÒªÓÉmain.yml ½øÐС°°üº¬¡±µ÷Óã»
¢Þhandlers/£º´ËĿ¼ÖÐÖÁÉÙÓ¦¸ÃÓÐÒ»¸öÃûΪmain.ymlµÄÎļþ£¬ÓÃÓÚ¶¨Òå¸÷handler£»ÆäËüµÄÎļþÐèÒªÓÉ main.yml½øÐС°°üº¬¡±µ÷Óã»
¢ßvars/£º´ËĿ¼ÖÐÖÁÉÙÓ¦¸ÃÓÐÒ»¸öÃûΪmain.ymlµÄÎļþ£¬ÓÃÓÚ¶¨Òå¸÷variable£»ÆäËüµÄÎļþÐèÒªÓÉ main.yml½øÐС°°üº¬¡±µ÷Óã»
¢àtemplates/£º´æ´¢ÓÉtemplateÄ£¿éµ÷ÓõÄÄ£°åÎı¾£»
¢ámeta/£º´ËĿ¼ÖÐÖÁÉÙÓ¦¸ÃÓÐÒ»¸öÃûΪmain.ymlµÄÎļþ£¬¶¨Ò嵱ǰ½ÇÉ«µÄÌØÊâÉ趨¼°ÆäÒÀÀµ¹ØÏµ£»ÆäËüµÄ ÎļþÐèÒªÓÉmain.yml½øÐС°°üº¬¡±µ÷Óã»
¢âdefault/£º´ËĿ¼ÖÐÖÁÉÙÓ¦¸ÃÓÐÒ»¸öÃûΪmain.ymlµÄÎļþ£¬ÓÃÓÚÉ趨ĬÈϱäÁ¿£»

£¨3£©½ÇÉ«¶¨ÖƲÙ×÷²½Öè
¢ÙÔÚroleĿ¼ÏÂÉú³É¶ÔÓ¦µÄĿ¼½á¹¹
mkdir -pv ./{nginx,mysql,httpd}/{files,templates,

vars,tasks,handlers,meta,default}
¢Ú¶¨Òå/tasks/main.ymlµÄÅäÖÃÎļþ
- name: cp
copy: src=nginx-1.10.2-1.el7.ngx.x86_64.

rpm dest=/tmp/nginx-1.10.2- 1.el7.ngx.x86_64.rpm
- name: install
yum: name=/tmp/nginx-1.10.2-1.el7.ngx.x86_64.rpm

state=latest
- name: conf template: src=nginx.conf.j2

dest=/etc/nginx/nginx.conf
tags: nginxconf
notify: new conf to reload
name: start service
service: name=nginx state=started enabled=true
¢ÛÐ޸ıäÁ¿Îļþ
vars/main.yml Ìí¼Ó±äÁ¿nginx_port: ¡°8888¡±
¢Ü¶¨ÒåhandlersÎļþ
handlers/main.yml
- name: new conf to reload
service: name=nginx state=restarted
¢Ý¶¨Òå/etc/ansible/nginx.ymlµÄplaybookÎļþ
- hosts: nginx
remote_user: root
roles:
- nginx
¢Þ¿ÉÒÔͨ¹ýroles´«µÝ±äÁ¿
- hosts: nginx
remote_user: root
roles:
- { role: nginx, nginxport: 12345 }
¢ßÒ²¿ÉÒÔÅäÖöà¸ö½ÇÉ«
roles:
# - { role: nginx, nginxport: 12345 }
- { role: memcached

 

   
2524 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

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