±à¼ÍƼö: |
±¾ÎÄÀ´Ô´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 |
|