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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ansible Ô­Àí¼°Ïê½â
 
À´Ô´£º51CTO ·¢²¼ÓÚ 2017-9-27
  4380  次浏览      27
 

¼ò½é

ansibleÊǸöʲô¶«Î÷ÄØ£¿¹Ù·½µÄtitleÊÇ¡°Ansible is Simple IT Automation¡±¡ª¡ª¼òµ¥µÄ×Ô¶¯»¯IT¹¤¾ß¡£Õâ¸ö¹¤¾ßµÄÄ¿±êÓÐÕâô¼¸Ï

  • ×Ô¶¯»¯²¿ÊðAPP£»
  • ×Ô¶¯»¯¹ÜÀíÅäÖÃÏ
  • ×Ô¶¯»¯µÄ³ÖÐø½»»¥£»
  • ×Ô¶¯»¯µÄ£¨AWS£©ÔÆ·þÎñ¹ÜÀí£»

ËùÓеÄÕ⼸¸öÄ¿±ê´Ó±¾ÖÊÉÏÀ´Ëµ¶¼ÊÇÔÚÒ»¸ǫ̈»òÕß¼¸Ì¨·þÎñÆ÷ÉÏ£¬Ö´ÐÐһϵÁеÄÃüÁî¶øÒÑ¡£Í¨Ë×µÄ˵¾ÍÊÇÅúÁ¿µÄÔÚÔ¶³Ì·þÎñÆ÷ÉÏÖ´ÐÐÃüÁî¡£µ±È»£¬×îÖ÷ÒªµÄÊÇËüÊÇ»ùÓÚ paramiko ¿ª·¢µÄ¡£Õâ¸öparamikoÊÇÊ²Ã´ÄØ£¿ËüÊÇÒ»¸ö´¿PythonʵÏÖµÄsshЭÒé¿â¡£Òò´ËfabricºÍansible»¹ÓÐÒ»¸ö¹²Í¬µã¾ÍÊDz»ÐèÒªÔÚÔ¶³ÌÖ÷»úÉϰ²×°client/agents£¬ÒòΪËüÃÇÊÇ»ùÓÚsshÀ´ºÍÔ¶³ÌÖ÷»úͨѶµÄ¡£¼òµ¥¹éÄÉһϣº

Ansible

¡ª»ùÓÚ Python paramiko ¿ª·¢£¬·Ö²¼Ê½£¬ÎÞÐè¿Í»§¶Ë£¬ÇáÁ¿¼¶£¬ÅäÖÃÓ﷨ʹÓà YMAL ¼° Jinja2Ä£°åÓïÑÔ£¬¸üÇ¿µÄÔ¶³ÌÃüÁîÖ´ÐвÙ×÷

ÀàËÆµÄ×Ô¶¯»¯ÔËά¹¤¾ßÓкܶೣÓõϹÓУº

Puppet

¡ª»ùÓÚ Ruby ¿ª·¢£¬²ÉÓà C/S ¼Ü¹¹£¬À©Õ¹ÐÔÇ¿£¬»ùÓÚ SSL£¬Ô¶³ÌÃüÁîÖ´ÐÐÏà¶Ô½ÏÈõ

SaltStack

¡ª»ùÓÚ Python ¿ª·¢£¬²ÉÓà C/S ¼Ü¹¹£¬Ïà¶Ô puppet ¸üÇáÁ¿¼¶£¬ÅäÖÃÓ﷨ʹÓà YMAL£¬Ê¹µÃÅäÖýű¾¸ü¼òµ¥

Ansible ¹¤×÷»úÖÆ

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

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

  • Ansible £º ºËÐÄ
  • Modules £º °üÀ¨ Ansible ×Ô´øµÄºËÐÄÄ£¿é¼°×Ô¶¨ÒåÄ£¿é
  • Plugins £º Íê³ÉÄ£¿é¹¦ÄܵIJ¹³ä£¬°üÀ¨Á¬½Ó²å¼þ¡¢Óʼþ²å¼þµÈ
  • Playbooks £º ¾ç±¾£»¶¨Òå Ansible ¶àÈÎÎñÅäÖÃÎļþ£¬ÓÉAnsible ×Ô¶¯Ö´ÐÐ
  • Inventory £º ¶¨Òå Ansible ¹ÜÀíÖ÷»úµÄÇåµ¥

ansible °²×°

£¨1£©±àÒë°²×°

½â¾öÒÀÀµ£º

#yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto

°²×°

#tar xf ansible-1.5.4.tar.gz
#cd ansible-1.5.4
#python setup.py build
#python setup.py install
#mkdir /etc/ansible
#cp -r examples/* /etc/ansible

£¨2£©YUM °²×°£¬ÒªÓÐepelÔ´

yum-y install ansible

ansibleÃüÁî²ÎÊý

Óï·¨: ansible<host-pattern> [-f forks] [-m module_name] [-a args] ¡£¡£¡£

  • -v,¨Cverbose

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

  • -i PATH,¨Cinventory=PATH

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

  • -f NUM,¨Cforks=NUM

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

  • -m NAME,¨Cmodule-name=NAME

Ö¸¶¨Ê¹ÓÃµÄ module Ãû³Æ£¬Ä¬ÈÏÊÇ command

  • -m DIRECTORY,¨Cmodule-path=DIRECTORY

Ö¸¶¨ module µÄĿ¼À´¼ÓÔØ module £¬Ä¬ÈÏÊÇ/usr/share/ansible,

  • -a,MODULE_ARGS

Ö¸¶¨ module Ä£¿éµÄ²ÎÊý

  • -k,¨Cask-pass

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

  • ¨Csudo

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

  • -K,¨Cask-sudo-pass

ÌáʾÊäÈë sudo ÃÜÂ룬Óë ¨Csudo Ò»ÆðʹÓÃ

  • -u USERNAME,¨Cuser=USERNAME

Ö¸¶¨Òƶ¯¶ËµÄÖ´ÐÐÓû§

  • -C,¨Ccheck

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

YAML»ù±¾Óï·¨

YAMLµÄÓï·¨ºÍÆäËû¸ß½×ÓïÑÔÀàËÆ£¬²¢ÇÒ¿ÉÒÔ¼òµ¥±í´ïÇåµ¥¡¢É¢ÁÐ±í¡¢±êÁ¿µÈÊý¾Ý½á¹¹¡£Æä½á¹¹£¨Structure£©Í¨¹ý¿Õ¸ñÀ´Õ¹Ê¾£¬ÐòÁУ¨Sequence£©ÀïµÄÏîÓÃ"-"À´´ú±í£¬MapÀïµÄ¼üÖµ¶ÔÓÃ":"·Ö¸ô¡£ÏÂÃæÊÇÒ»¸öʾÀý¡£

name: John Smith
age: 41
gender: Male
spouse:
-name: Jane Smith
age:37
gender: Female
children:
-name: Jimmy Smith
age: 17
gender: Male
-name: Jenny Smith
age 13
gender: Female

YAMLÎļþÀ©Õ¹Ãûͨ³£Îª.yaml£¬Èçexample.yaml¡£

×¢Ò⣬´úÂëµÄÅŰæÓÐÑϸñÒªÇó£¬Ëõ½øÎª2¸ö×Ö·û£¡ÐòÁÐÏîµÄ - ºó±ØÐë¸úÒ»¸ö¿Õ¸ñ£¡£ººóÒ²Òª¸úÒ»¸ö¿Õ¸ñ£¡

  • listÁбíµÄËùÓÐÔªËØ¾ùʹÓá°-¡±´òÍ·£¬ÀýÈ磺
#A list of tasty fruits
-Apple
-Orange
-Strawberry
-Mango
  • dictionary×Öµäͨ¹ýkeyÓëvaluef½øÐбêʶ£¬ÀýÈ磺
---
#An employee record
name:Example Developer
job:Developer
skill:Elite

Ò²¿ÉÒÔ½«key:value·ÅÖÃÓÚ{}ÖнøÐбíʾ£¬ÀýÈ磺

---
#An employee record
{name:Example Developer, job: Developer, skill: Elite}

Ansible»ù´¡ÔªËØ

£¨1£©±äÁ¿

±äÁ¿ÃüÃû

±äÁ¿Ãû½öÄÜÓÉ×Öĸ¡¢Êý×ÖºÍÏ»®Ïß×é³É£¬ÇÒÖ»ÄÜÒÔ×Öĸ¿ªÍ·¡£

£¨2£©facts

factsÊÇÓÉÕýÔÚͨÐŵÄÔ¶³ÌÄ¿±êÖ÷»ú·¢»ØµÄÐÅÏ¢£¬ÕâЩÐÅÏ¢±»±£´æÔÚansible±äÁ¿ÖС£Òª»ñȡָ¶¨µÄÔ¶³ÌÖ÷»úËùÖ§³ÖµÄËùÓÐfacts£¬
¿ÉʹÓÃÈçÏÂÃüÁî½øÐУº

# ansible hostname -m setup

»ò

ansible all -m setup ÏÔʾËùÓнڵãµÄÐÅÏ¢

£¨3£©register

°ÑÈÎÎñµÄÊä³ö¶¨ÒåΪ±äÁ¿£¬È»ºóÓÃÓÚÆäËûÈÎÎñ£¬Ê¾ÀýÈçÏÂ:

tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True

£¨4£©±äÁ¿´«µÝ

  • ͨ¹ýÃüÁîÐд«µÝ±äÁ¿

ÔÚÔËÐÐplaybookµÄʱºòÒ²¿ÉÒÔ´«µÝһЩ±äÁ¿¹©playbookʹÓã¬Ê¾ÀýÈçÏ£º

ansible-playbook test.yml --extra-vars "hosts=wwwuser=mageedu"
  • ͨ¹ýroles´«µÝ±äÁ¿

µ±¸øÒ»¸öÖ÷»úÓ¦ÓýÇÉ«µÄʱºò¿ÉÒÔ´«µÝ±äÁ¿£¬È»ºóÔÚ½ÇÉ«ÄÚʹÓÃÕâЩ±äÁ¿£¬Ê¾ÀýÈçÏ£º

-hosts: webservers
roles:
- common
- { role: foo_app_instance, dir:'/web/htdocs/a.com', port: 8080 }

£¨5£©Inventory

ansibleµÄÖ÷Òª¹¦ÓÃÔÚÓÚÅúÁ¿Ö÷»ú²Ù×÷£¬ÎªÁ˱ã½ÝµØÊ¹ÓÃÆäÖеIJ¿·ÖÖ÷»ú£¬¿ÉÒÔÔÚinventory fileÖн«Æä·Ö×éÃüÃû¡£Ä¬È쵀 inventoryfileΪ/etc/ansible/hosts£¬¿Éͨ¹ý/etc/ansible/ansible.cfg¶¨Òå¡£

inventory file¿ÉÒÔÓжà¸ö£¬ÇÒÒ²¿ÉÒÔͨ¹ýDynamic InventoryÀ´¶¯Ì¬Éú³É¡£

inventoryÎļþ¸ñʽ

inventoryÎļþ×ñÑ­INIÎļþ·ç¸ñ£¬ÖÐÀ¨ºÅÖеÄ×Ö·ûΪ×éÃû¡£¿ÉÒÔ½«Í¬Ò»¸öÖ÷»úͬʱ¹é²¢µ½¶à¸ö²»Í¬µÄ×éÖУ»´ËÍ⣬µ±ÈçÈôÄ¿±êÖ÷»úʹÓÃÁË·ÇĬÈϵÄSSH¶Ë¿Ú£¬»¹¿ÉÒÔÔÚÖ÷»úÃû³ÆÖ®ºóʹÓÃðºÅ¼Ó¶Ë¿ÚºÅÀ´±êÃ÷¡£

ntp.magedu.com
[webservers]
www1.magedu.com:2222
www2.magedu.com
[dbservers]
db1.magedu.com
db2.magedu.com
db3.magedu.com

Èç¹ûÖ÷»úÃû³Æ×ñÑ­ÏàËÆµÄÃüÃûģʽ£¬»¹¿ÉÒÔʹÓÃÁбíµÄ·½Ê½±êʶ¸÷Ö÷»ú£¬ÀýÈ磺

[webservers]
www[01:50].example.com
[databases]
db-[a:f].example.com

£¨6£©Ö÷»ú±äÁ¿

¿ÉÒÔÔÚinventoryÖж¨ÒåÖ÷»úʱΪÆäÌí¼ÓÖ÷»ú±äÁ¿ÒÔ±ãÓÚÔÚplaybookÖÐʹÓá£ÀýÈ磺

[webservers]
www1.magedu.com http_port=80maxRequestsPerChild=808
www2.magedu.com http_port=8080maxRequestsPerChild=909

£¨7£©×é±äÁ¿

×é±äÁ¿ÊÇÖ¸¸³Óè¸øÖ¸¶¨×éÄÚËùÓÐÖ÷»úÉϵÄÔÚplaybookÖпÉÓõıäÁ¿¡£ÀýÈ磺

[webservers]
www1.magedu.com
www2.magedu.com
[webservers:vars]
ntp_server=ntp.magedu.com
nfs_server=nfs.magedu.com

×¢Ò⣺ÉÏÃævarsΪ¹Ì¶¨µÄ¸ñʽ

£¨8£©×éǶÌ×

inventoryÖУ¬×黹¿ÉÒÔ°üº¬ÆäËüµÄ×飬²¢ÇÒÒ²¿ÉÒÔÏò×éÖеÄÖ÷»úÖ¸¶¨±äÁ¿¡£²»¹ý£¬ÕâЩ±äÁ¿Ö»ÄÜÔÚansible-playbookÖÐʹÓ㬶øansible²»Ö§³Ö¡£ÀýÈ磺

[apache]
httpd1.magedu.com
httpd2.magedu.com
[nginx]
ngx1.magedu.com
ngx2.magedu.com

[webservers:children] childrenÊǹ̶¨¸ñʽ£¬±ØÐëҪдÉϵÄ

apache
nginx
[webservers:vars]
ntp_server=ntp.magedu.com

£¨9£© inventory ²ÎÊý

ansible»ùÓÚsshÁ¬½ÓinventoryÖÐÖ¸¶¨µÄÔ¶³ÌÖ÷»úʱ£¬»¹¿ÉÒÔͨ¹ý²ÎÊýÖ¸¶¨Æä½»»¥·½Ê½£»ÕâЩ²ÎÊýÈçÏÂËùʾ£º

£¨¿ÉÒÔʵÏÖÔÚinventoryÖÐÖ¸¶¨Õ˺ÅÃÜÂëÓÃÓÚssh Á¬½Ó£©

ansible_ssh_host
Thename of the host to connect to, if different from the alias you wish to give toit.
ansible_ssh_port
Thessh port number, if not 22
ansible_ssh_user
Thedefault ssh user name to use.
ansible_ssh_pass
Thessh password to use (this is insecure, we strongly recommend using --ask-passor SSH keys)
ansible_sudo_pass
Thesudo password to use (this is insecure, we strongly recommend using--ask-sudo-pass)
ansible_connection
Connection type of the host. Candidates are local, ssh or paramiko. The default is paramiko before Ansible
1.2,and 'smart' afterwards which detects whether usage of 'ssh' would be feasiblebased on whether ControlPersist is supported.
ansible_ssh_private_key_file
Private key file used by ssh.Useful if using multiple keys and you don't want to use SSH agent.
ansible_shell_type
Theshell type of the target system. By default commands are formatted using'sh'-style syntax by default. Setting this to 'csh' or 'fish' will causecommands executed on target systems to follow those shell's syntax instead.
ansible_python_interpreter
Thetarget host python path. This is useful for systems with morethan one Python or not located at
"/usr/bin/python" such as\*BSD, or where /usr/bin/pythonis not a 2.X series Python. We do not use the
"/usr/bin/env" mechanism as that requires the remote user'spath to be set right and also assumes the "python"
executableis named python, where the executable mightbe named something like "python26".
ansible\_\*\_interpreter
Works for anything such as ruby or perl and works just like ansible_python_interpreter.
This replaces shebang of modules which will run on that host.

£¨10£©Ìõ¼þ²âÊÔ

Èç¹ûÐèÒª¸ù¾Ý±äÁ¿¡¢facts»ò´ËǰÈÎÎñµÄÖ´Ðнá¹ûÀ´×öΪijtaskÖ´ÐÐÓë·ñµÄǰÌáʱҪÓõ½Ìõ¼þ²âÊÔ¡£

whenÓï¾ä

ÔÚtaskºóÌí¼Ówhen×Ӿ伴¿ÉʹÓÃÌõ¼þ²âÊÔ£»whenÓï¾äÖ§³ÖJinja2±í´ïʽÓï·¨¡£ÀýÈ磺

tasks:
-name: "shutdown Debian flavored systems"
command: /sbin/shutdown -h now
when: ansible_os_family == "Debian"

whenÓï¾äÖл¹¿ÉÒÔʹÓÃJinja2µÄ´ó¶à¡°filter¡±£¬ÀýÈçÒªºöÂÔ´ËǰijÓï¾äµÄ´íÎó²¢»ùÓÚÆä½á¹û£¨failed»òÕßsucess£©ÔËÐкóÃæÖ¸¶¨µÄÓï¾ä£¬¿ÉʹÓÃÀàËÆÈçÏÂÐÎʽ£º

tasks:
-command: /bin/false
register: result
ignore_errors: True
-command: /bin/something
when: result|failed
-command: /bin/something_else
when: result|success
-command: /bin/still/something_else
when: result|skipped

´ËÍ⣬whenÓï¾äÖл¹¿ÉÒÔʹÓÃfacts»òplaybookÖж¨ÒåµÄ±äÁ¿¡£

£¨11£©µü´ú

µ±ÓÐÐèÒªÖØ¸´ÐÔÖ´ÐеÄÈÎÎñʱ£¬¿ÉÒÔʹÓõü´ú»úÖÆ¡£ÆäʹÓøñʽΪ½«ÐèÒªµü´úµÄÄÚÈݶ¨ÒåΪitem±äÁ¿ÒýÓ㬲¢Í¨¹ýwith_itemsÓï¾äÀ´Ö¸Ã÷µü´úµÄÔªËØÁÐ±í¼´¿É¡£ÀýÈ磺

- name: add several users

user: name={{ item }} state=present groups=wheel ÕâÐÐÖеÄitemÊǹ̶¨±äÁ¿Ãû£¬Ò»¶¨ÒªÕâÑùд£¬Ëü»áÑ­»·Ê¹

ÓÃwith_items¶¨ÒåµÄÁбí

with_items:
- testuser1
- testuser2

ÉÏÃæÓï¾äµÄ¹¦ÄܵÈͬÓÚÏÂÃæµÄÓï¾ä£º

- name: add user testuser1
user: name=testuser1 state=present groups=wheel
- name: add user testuser2
user: name=testuser2 state=present groups=wheel

ÊÂʵÉÏ£¬with_itemsÖпÉÒÔʹÓÃÔªËØ»¹¿ÉΪhashes£¨£©£¬ÀýÈ磺

- name: add several users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
-{ name: 'testuser1', groups: 'wheel' }
-{ name: 'testuser2', groups: 'root' }

ansibleµÄÑ­»·»úÖÆ»¹Óиü¶àµÄ¸ß¼¶¹¦ÄÜ£¬¾ßÌåÇë²Î¼û¹Ù·½Îĵµ£¨http://docs.ansible.com/playbooks_loops.html£©¡£

playbook µÄ×é³É½á¹¹

Inventory

Modules

AdHoc Commands

Playbooks

Tasks£ºÈÎÎñ£¬¼´µ÷ÓÃÄ£¿éÍê³ÉµÄij²Ù×÷

Variables£º±äÁ¿

Templates£ºÄ£°å

Handlers£º´¦ÀíÆ÷£¬ÓÉijʼþ´¥·¢Ö´ÐеIJÙ×÷

Roles£º½ÇÉ«

playbook »ù´¡×é¼þ¼ò½é

£¨1£©Hosts ºÍUsers

playbookÖеÄÿһ¸öplayµÄÄ¿µÄ¶¼ÊÇΪÁËÈÃij¸ö»òijЩÖ÷»úÒÔij¸öÖ¸¶¨µÄÓû§Éí·ÝÖ´ÐÐÈÎÎñ¡£hostsÓÃÓÚÖ¸¶¨ÒªÖ´ÐÐÖ¸¶¨ÈÎÎñµÄÖ÷»ú£¬Æä¿ÉÒÔÊÇÒ»¸ö»ò¶à¸öÓÉðºÅ·Ö¸ôÖ÷»ú×飻remote_userÔòÓÃÓÚÖ¸¶¨Ô¶³ÌÖ÷»úÉϵÄÖ´ÐÐÈÎÎñµÄÓû§¡£ÈçÉÏÃæÊ¾ÀýÖеÄ

-hosts:webnodes
remote_user: root

²»¹ý£¬remote_userÒ²¿ÉÓÃÓÚ¸÷taskÖС£Ò²¿ÉÒÔͨ¹ýÖ¸¶¨Æäͨ¹ýsudoµÄ·½Ê½ÔÚÔ¶³ÌÖ÷»úÉÏÖ´ÐÐÈÎÎñ£¬Æä¿ÉÓÃÓÚplayÈ«¾Ö»òijÈÎÎñ£»´ËÍ⣬ÉõÖÁ¿ÉÒÔÔÚsudoʱʹÓÃsudo_userÖ¸¶¨sudoʱÇл»µÄÓû§¡£

-hosts: webnodes
remote_user: mageedu
tasks:
- name: test connection
ping:
remote_user: mageedu
sudo: yes

£¨2£©ÈÎÎñÁбíºÍaction

playµÄÖ÷Ì岿·ÖÊÇtask list¡£task listÖеĸ÷ÈÎÎñ°´´ÎÐòÖð¸öÔÚhostsÖÐÖ¸¶¨µÄËùÓÐÖ÷»úÉÏÖ´ÐУ¬¼´ÔÚËùÓÐÖ÷»úÉÏÍê³ÉµÚÒ»¸öÈÎÎñºóÔÙ¿ªÊ¼µÚ¶þ¸ö¡£ÔÚÔËÐÐ×ÔÉ϶øÏÂijplaybookʱ£¬Èç¹ûÖÐ;·¢Éú´íÎó£¬ËùÓÐÒÑÖ´ÐÐÈÎÎñ¶¼¿ÉÄܻعö£¬Òò´Ë£¬ÔÚ¸üÕýplaybookºóÖØÐÂÖ´ÐÐÒ»´Î¼´¿É¡£

taskµÄÄ¿µÄÊÇʹÓÃÖ¸¶¨µÄ²ÎÊýÖ´ÐÐÄ£¿é£¬¶øÔÚÄ£¿é²ÎÊýÖпÉÒÔʹÓñäÁ¿¡£Ä£¿éÖ´ÐÐÊÇÃݵȵģ¬ÕâÒâζ×Ŷà´ÎÖ´ÐÐÊǰ²È«µÄ£¬ÒòΪÆä½á¹û¾ùÒ»Ö¡£

ÿ¸ötask¶¼Ó¦¸ÃÓÐÆäname£¬ÓÃÓÚplaybookµÄÖ´Ðнá¹ûÊä³ö£¬½¨ÒéÆäÄÚÈݾ¡¿ÉÄÜÇåÎúµØÃèÊöÈÎÎñÖ´Ðв½Öè¡£Èç¹ûδÌṩname£¬ÔòactionµÄ½á¹û½«ÓÃÓÚÊä³ö¡£

¶¨ÒåtaskµÄ¿ÉÒÔʹÓá°action: moduleoptions¡±»ò¡°module: options¡±µÄ¸ñʽ£¬ÍƼöʹÓúóÕßÒÔʵÏÖÏòºó¼æÈÝ¡£Èç¹ûactionÒ»ÐеÄÄÚÈݹý¶à£¬Ò²ÖÐʹÓÃÔÚÐÐÊ×ʹÓü¸¸ö¿Õ°××Ö·û½øÐл»ÐС£

tasks:
- name: make sure apache is running
service: name=httpd state=running

ÔÚÖÚ¶àÄ£¿éÖУ¬Ö»ÓÐcommandºÍshellÄ£¿é½öÐèÒª¸ø¶¨Ò»¸öÁÐ±í¶øÎÞÐèʹÓá°key=value¡±¸ñʽ£¬ÀýÈ磺

tasks:
- name: disable selinux
command: /sbin/setenforce 0

Èç¹ûÃüÁî»ò½Å±¾µÄÍ˳öÂ벻ΪÁ㣬¿ÉÒÔʹÓÃÈçÏ·½Ê½Ìæ´ú£º

tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand || /bin/true

»òÕßʹÓÃignore_errorsÀ´ºöÂÔ´íÎóÐÅÏ¢£º

tasks:
- name: run this command and ignore theresult
shell: /usr/bin/somecommand
ignore_errors: True

£¨3£© handlers

ÓÃÓÚµ±¹Ø×¢µÄ×ÊÔ´·¢Éú±ä»¯Ê±²Éȡһ¶¨µÄ²Ù×÷¡£

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

-name: template configuration file
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart memcached
- restart apache

handlerÊÇtaskÁÐ±í£¬ÕâЩtaskÓëǰÊöµÄtask²¢Ã»Óб¾ÖÊÉϵIJ»Í¬¡£

handlers:
- name: restart memcached
service:name=memcached state=restarted
- name: restart apache
service: name=apache state=restarted

Àý£º

heartbeat.yaml
-hosts: hbhosts
remote_user: root
tasks:
- name: ensure heartbeat latest version
yum: name=heartbeat state=present
- name: authkeys configure file
copy: src=/root/hb_conf/authkeysdest=/etc/ha.d/authkeys
- name: authkeys mode 600
file: path=/etc/ha.d/authkeys mode=600
notify:
- restart heartbeat
- name: ha.cf configure file
copy: src=/root/hb_conf/ha.cfdest=/etc/ha.d/ha.cf
notify:
-restart heartbeat
handlers:
- name:restart heartbeat
service: name=heartbeat state=restarted

£¨4£©roles

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

Ò»¸örolesµÄ°¸ÀýÈçÏÂËùʾ£º

site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
meta/

¶øÔÚplaybookÖУ¬¿ÉÒÔÕâÑùʹÓÃroles£¨µ÷ÓÃcommonºÍwebservers½ÇÉ«ÁË£©£º

---
-hosts: webservers
roles:
- common
- webservers

Ò²¿ÉÒÔÏòroles´«µÝ²ÎÊý£¬ÀýÈ磺

---
-hosts: webservers
roles:
- common
- { role: foo_app_instance, dir:'/opt/a', port: 5000 }
- { role: foo_app_instance, dir:'/opt/b', port: 5001 }

ÉõÖÁÒ²¿ÉÒÔÌõ¼þʽµØÊ¹ÓÃroles£¬ÀýÈ磺

---
-hosts: webservers
roles:
- { role: some_role, when:"ansible_os_family == 'RedHat'" }

a£©´´½¨roleµÄ²½Öè

(1)´´½¨ÒÔrolesÃüÃûµÄĿ¼£»

(2)ÔÚrolesĿ¼Öзֱ𴴽¨ÒÔ¸÷½ÇÉ«Ãû³ÆÃüÃûµÄĿ¼£¬ÈçwebserversµÈ£»

(3)ÔÚÿ¸ö½ÇÉ«ÃüÃûµÄĿ¼Öзֱ𴴽¨files¡¢handlers¡¢meta¡¢tasks¡¢templatesºÍvarsĿ¼£»Óò»µ½µÄĿ¼¿ÉÒÔ´´½¨Îª¿ÕĿ¼£¬Ò²¿ÉÒÔ²»´´½¨£»

(4)ÔÚplaybookÎļþÖУ¬µ÷Óø÷½ÇÉ«£»

b£© roleÄÚ¸÷Ŀ¼ÖпÉÓõÄÎļþ

  • tasksĿ¼£ºÖÁÉÙÓ¦¸Ã°üº¬Ò»¸öÃûΪmain.ymlµÄÎļþ£¬Æä¶¨ÒåÁ˴˽ÇÉ«µÄÈÎÎñÁÐ±í£»´ËÎļþ¿ÉÒÔʹÓÃinclude°üº¬ÆäËüµÄλÓÚ´ËĿ¼ÖеÄtaskÎļþ£»
  • filesĿ¼£º´æ·ÅÓÉcopy»òscriptµÈÄ£¿éµ÷ÓõÄÎļþ£»
  • templatesĿ¼£ºtemplateÄ£¿é»á×Ô¶¯ÔÚ´ËĿ¼ÖÐѰÕÒJinja2Ä£°åÎļþ£»
  • handlersĿ¼£º´ËĿ¼ÖÐÓ¦µ±°üº¬Ò»¸ömain.ymlÎļþ£¬ÓÃÓÚ¶¨Òå´Ë½ÇÉ«Óõ½µÄ¸÷handler£»ÔÚhandlerÖÐʹÓÃinclude°üº¬µÄÆäËüµÄhandlerÎļþÒ²Ó¦¸ÃλÓÚ´ËĿ¼ÖУ»
  • varsĿ¼£ºÓ¦µ±°üº¬Ò»¸ömain.ymlÎļþ£¬ÓÃÓÚ¶¨Òå´Ë½ÇÉ«Óõ½µÄ±äÁ¿£»
  • metaĿ¼£ºÓ¦µ±°üº¬Ò»¸ömain.ymlÎļþ£¬ÓÃÓÚ¶¨Òå´Ë½ÇÉ«µÄÌØÊâÉ趨¼°ÆäÒÀÀµ¹ØÏµ£»ansible 1.3¼°ÆäÒÔºóµÄ°æ±¾²ÅÖ§³Ö£»
  • defaultĿ¼£ºÎªµ±Ç°½ÇÉ«É趨ĬÈϱäÁ¿Ê±Ê¹ÓôËĿ¼£»Ó¦µ±°üº¬Ò»¸ömain.ymlÎļþ£»

c£© rolesʹÓð¸Àý

1.½¨Á¢ÏàӦĿ¼

ansible_playbooks/roles/ {websrvs,dbsrvs}/ {tasks,files,templates,meta, handlers,vars}

2.½â¾öµÚÒ»¸ö½ÇÉ«websrvs

ÏȰÑÒªÓõ½µÄÅäÖÃÎļþ¿½¹ýÀ´£¨´ý»áÒª¸´ÖƸø¸÷¸ö·þÎñÆ÷ʹÓõģ©

cp/etc/httpd/conf/httpd.conf /ansible_playbooks/roles/websrvs/files

3.¶¨ÒåÈÎÎñtasks vim/ansible_playbooks /roles/websrvs/tasks/main.yml

ÄÚÈÝ£º

-name: install httpd package
yum: name=httpd
-name:install configuration file
copy: src=httpd.conf dest= /etc/httpd/conf/httpd.conf ×¢Òâ·¾¶£¬¶¼¿ÉÒÔʹÓÃÏà¶Ô·¾¶Ö±½Óµ÷ÓÃ
tags:
- conf
notify:
- restart httpd
-name: start httpd
service: name=httpd state=started

4.ÓÉÓÚtasksÖÐʹÓÃÁËnotify,¼´ÐèÒªÁíÍⶨÒåhandler£¬ËùÒÔ±ØÐëÔÚ/ansible_playbooks /roles/websrvs/handlers±àд

Ìí¼Ómain.ymlÎļþ

vim/ansible_playbooks/roles/ websrvs/handlers/main.yml

ÄÚÈÝÈçÏ£º

-name: restart httpd
service: name=httpd state=restarted

5.Èç¹ûûÓÐÆäËûÄÚÈÝÁ˾ͿÉÒÔÁË£¬Óеϰ¼ÌÐøÔÚÏàÓ¦µÄĿ¼Ï½¨Á¢main.yml¶¨Òå

¼ÙÈçÓÖʹÓÃÁ˱äÁ¿£¬¾ÍÒªÔÚvars϶¨ÒåÒ»¸ömain.ymlÖ¸¶¨±äÁ¿

- httpd_port: 80
- maxClients: 180

6.´´½¨/ansible_playbooks/site.yml Ö¸¶¨´´½¨Á˵ĽÇÉ«

- hosts: websrvs
remote_user: root
roles:
- websrvs

ÖÁ´Ëroles´´½¨Íê³É£¬ÒªÏë°ÑÏàÓ¦µÄ½ÇÉ«ÓÃÔÚij¸öÖ÷»úÉϵϰ£¬Ö±½ÓÔÚsite.ymlÉÏ- hosts:websrvs Ö¸¶¨£¬rolesÏÂÉèÖÃ
¶ÔÓ¦½ÇÉ«¼´¿É¡£

ÕâÑù£º

-hosts: websrvs
remote_user: root
roles:
- websrvs
-hosts: websrvs2
remote_user: root
roles:
- websrvs2
- dbsrvs

×îºóÖ´ÐÐansible-playbooks site.yml

×¢Ò⣺¸´ÖƵ½ÏàӦĿ¼µÄÎļþ£¬¶¼¿ÉÒÔÖ±½ÓдÎļþÃûµ÷ÓÃ

d£©Tags

tagsÓÃÓÚÈÃÓû§Ñ¡ÔñÔËÐлòÂÔ¹ýplaybookÖеIJ¿·Ö´úÂë¡£ansible¾ßÓÐÃݵÈÐÔ£¬Òò´Ë»á×Ô¶¯Ìø¹ýûÓб仯µÄ²¿·Ö£¬¼´±ãÈç´Ë£¬ÓÐЩ
´úÂëΪ²âÊÔÆäȷʵûÓз¢Éú±ä»¯µÄʱ¼äÒÀÈ»»á·Ç³£µØ³¤¡£´Ëʱ£¬Èç¹ûÈ·ÐÅÆäûÓб仯£¬¾Í¿ÉÒÔͨ¹ýtagsÌø¹ý´ËЩ´úÂëÆ¬¶Ï¡£

apache.ymlÄÚÈÝ£º

- hosts: websrvs
remote_user: root
vars:
-package: httpd
-service: httpd
tasks:
-name: install httpd package
yum: name={{ package }} state=latest
-name: install configuration file for httpd
template: src= /root/templates/httpd.conf.j2dest =/etc/httpd/conf/httpd.conf
tags:
-conf
notify:
-restart httpd
-name: start httpd service
service: enabled=true name={{ service }} state=started
handlers:
-name:restart httpd
service: name=httpd state=restarted

µ÷Óãº

ansible-playbook apache.yml--tags="conf"£¬

ÕâÑùÖ»Ö´ÐÐÁË

-name: install configuration file for httpd
template: src= /root/templates/httpd.conf.j2dest =/etc/httpd/conf/httpd.conf
tags:
-conf

e£©Jinja2Ïà¹Ø

1.1 ×ÖÃæÁ¿

±í´ïʽ×î¼òµ¥µÄÐÎʽ¾ÍÊÇ×ÖÃæÁ¿¡£×ÖÃæÁ¿±íʾÖîÈç×Ö·û´®ºÍÊýÖµµÄ Python ¶ÔÏó¡£ÏÂÃæ µÄ×ÖÃæÁ¿ÊÇ¿ÉÓõÄ:

¡°HelloWorld¡±:

Ë«ÒýºÅ»òµ¥ÒýºÅÖмäµÄÒ»Çж¼ÊÇ×Ö·û´®¡£ÎÞÂÛºÎʱÄãÐèÒªÔÚÄ£°åÖÐʹÓÃÒ»¸ö×Ö·û´®£¨±ÈÈ纯Êýµ÷ÓᢹýÂËÆ÷»òÖ»Êǰüº¬»ò¼Ì³ÐÒ»¸öÄ£°åµÄ²ÎÊý£©£¬ËüÃǶ¼ÊÇ ÓÐÓõġ£

42/ 42.23:

Ö±½ÓдÏÂÊýÖµ¾Í¿ÉÒÔ´´½¨ÕûÊýºÍ¸¡µãÊý¡£Èç¹ûÓÐСÊýµã£¬ÔòΪ¸¡µãÊý£¬·ñÔòΪÕûÊý¡£¼ÇסÔÚ Python À 42 ºÍ 42.0 ÊDz»Ò»ÑùµÄ¡£

[¡®list¡¯,¡®of¡¯, ¡®objects¡¯]:

Ò»¶ÔÖÐÀ¨ºÅÀ¨ÆðÀ´µÄ¶«Î÷ÊÇÒ»¸öÁÐ±í¡£ÁбíÓÃÓÚ´æ´¢ºÍµü´úÐòÁл¯µÄÊý¾Ý¡£ÀýÈçÄã¿ÉÒÔÈÝÒ×µØÔÚ for Ñ­»·ÖÐÓÃÁбíºÍÔª×é´´½¨Ò»¸öÁ´½ÓµÄÁбí:

<ul>
{%for href, caption in [('index.html', 'Index'), ('about.html', 'About'),
('downloads.html','Downloads')] %}
<li><a href="{{ href}}">{{ caption }}</a></li>
{%endfor %}
</ul>
(¡®tuple¡¯,¡®of¡¯, ¡®values¡¯):

Ôª×éÓëÁбíÀàËÆ£¬Ö»ÊÇÄã²»ÄÜÐÞ¸ÄÔª×é¡£Èç¹ûÔª×éÖÐÖ»ÓÐÒ»¸öÏÄãÐèÒªÒÔ¶ººÅ½áβËü¡£Ôª×éͨ³£ÓÃÓÚ±íʾÁ½¸ö»ò¸ü¶àÔªËØµÄÏî¡£¸ü¶àϸ½Ú¼ûÉÏÃæµÄÀý×Ó¡£

{¡®dict¡¯:¡®of¡¯, ¡®key¡¯: ¡®and¡¯, ¡®value¡¯: ¡®pairs¡¯}:

PythonÖеÄ×ÖµäÊÇÒ»ÖÖ¹ØÁª¼üºÍÖµµÄ½á¹¹¡£¼ü±ØÐëÊÇΨһµÄ£¬²¢ÇÒ¼ü±ØÐëÖ»ÓÐÒ»¸ö Öµ¡£×ÖµäÔÚÄ£°åÖкÜÉÙʹÓ㬺±ÓÃÓÚÖîÈç xmlattr() ¹ýÂËÆ÷Ö®Àà¡£

true/ false:

trueÓÀÔ¶ÊÇ true £¬¶ø false ʼÖÕÊÇ false ¡£

2.2 ËãÊõÔËËã

Jinja ÔÊÐíÄãÓüÆËãÖµ¡£ÕâÔÚÄ£°åÖкÜÉÙÓõ½£¬µ«ÊÇΪÁËÍêÕûÐÔÔÊÐíÆä´æÔÚ¡£Ö§³ÖÏÂÃæµÄÔËËã·û:

+   °ÑÁ½¸ö¶ÔÏó¼Óµ½Ò»Æð¡£Í¨³£¶ÔÏóÊÇËØÖÊ£¬µ«ÊÇÈç¹ûÁ½ÕßÊÇ×Ö·û´®»òÁÐ±í£¬Äã¿ÉÒÔÓÃÕâÖÖ·½Ê½À´ÏνÓËüÃÇ¡£ÎÞÂÛÈçºÎÕâ²»ÊÇÊ×Ñ¡µÄÁ¬½Ó×Ö·û´®µÄ·½Ê½£¡Á¬½Ó×Ö·û´®¼û ~ ÔËËã·û¡£ {{ 1 + 1 }} µÈ ÓÚ 2 ¡£

-   ÓõÚÒ»¸öÊý¼õÈ¥µÚ¶þ¸öÊý¡£ {{ 3 - 2 }} µÈÓÚ 1 ¡£

/   ¶ÔÁ½¸öÊý×ö³ý·¨¡£·µ»ØÖµ»áÊÇÒ»¸ö¸¡µãÊý¡£ {{ 1 / 2 }} µÈÓÚ {{ 0.5 }} ¡£

//   ¶ÔÁ½¸öÊý×ö³ý·¨£¬·µ»ØÕûÊýÉÌ¡£ {{ 20 // 7 }} µÈÓÚ 2 ¡£

%   ¼ÆËãÕûÊý³ý·¨µÄÓàÊý¡£ {{ 11 % 7 }} µÈÓÚ 4 ¡£

*   ÓÃÓұߵÄÊý³Ë×ó±ßµÄ²Ù×÷Êý¡£ {{ 2 * 2 }} »á·µ»Ø 4 ¡£Ò²¿ÉÒÔÓÃÓÚÖØ¸´Ò»¸ö×Ö·û´®¶à´Î¡£ {{ ¡®=¡¯ * 80 }} »á´òÓ¡ 80 ¸öµÈºÅµÄºáÌõ¡£

**   È¡×ó²Ù×÷ÊýµÄÓÒ²Ù×÷Êý´ÎÃÝ¡£ {{ 2**3 }} »á·µ»Ø 8 ¡£

3.3 ±È½Ï²Ù×÷·û

==   ±È½ÏÁ½¸ö¶ÔÏóÊÇ·ñÏàµÈ¡£

!=   ±È½ÏÁ½¸ö¶ÔÏóÊÇ·ñ²»µÈ¡£

>    Èç¹û×ó±ß´óÓÚÓұߣ¬·µ»Ø true ¡£

>=   Èç¹û×ó±ß´óÓÚµÈÓÚÓұߣ¬·µ»Ø true ¡£

<    Èç¹û×ó±ßСÓÚÓұߣ¬·µ»Ø true ¡£

<=   Èç¹û×ó±ßСÓÚµÈÓÚÓұߣ¬·µ»Ø true ¡£

4.4 Âß¼­ÔËËã·û

¶ÔÓÚ if Óï¾ä£¬ÔÚ for ¹ýÂË»ò if ±í´ïʽÖУ¬Ëü¿ÉÒÔÓÃÓÚÁªºÏ¶à¸ö±í´ïʽ:

and   Èç¹û×ó²Ù×÷ÊýºÍÓÒ²Ù×÷ÊýÍ¬ÎªÕæ£¬·µ»Ø true ¡£

or    Èç¹û×ó²Ù×÷ÊýºÍÓÒ²Ù×÷ÊýÓÐÒ»¸öÎªÕæ£¬·µ»Ø true ¡£

not   ¶ÔÒ»¸ö±í´ïʽȡ·´£¨¼ûÏ£©¡£

(expr)

±í´ïʽ×é¡£

yaml ÎļþÖ´Ðз½·¨

ºÜ¼òµ¥£ºansible-play ÎļþÃû

ansible ³£ÓÃÄ£¿é¼°Ê¾Àý

Òª²é¿´ÏêϸÐÅÏ¢ ansible-doc -s Ä£¿éÃû³Æ

£¨1£©command: ÃüÁîÄ£¿é£¬Ä¬ÈÏÄ£¿é£¬ÓÃÓÚÔÚÔ¶³ÌÖ´ÐÐÃüÁ

Àý ansible all -a 'date' »ò ansible a2 -a 'date' ²é¿´a2Ö÷»úÉϵÄÈÕÆÚ

£¨2£©cron:¼Æ»®ÈÎÎñÄ£¿é

²ÎÊý

state:

present: °²×°

absent: ÒÆ³ý

Àý£º

ansible websrvs -m cron -a 'minute="*/10" job="/bin/echo hell" name="test cronjob"'

ansible a2 -m cron -a 'hour="*/10" job="/bin/echo 11" name="test"'

Ìí¼ÓÃ÷ΪtestµÄ¶¨Ê±ÈÎÎñ£¬Õâ¸önameÆäʵÊÇ×¢ÊÍ£¬¿´crontabÄÚÈݾÍÖªµÀ

ansible a2 -m corn -a 'state=absent name="test"'

ɾ³ýa2ÉÏÃûΪtestµÄ¶¨Ê±ÈÎÎñ

£¨3£©user£ºÓû§Ä£¿é

name=: Ö¸Ã÷´´½¨µÄÓû§µÄÃû×Ö£»

Àý£º

ansible websrvs -m user -a 'name=mysqluid=306 system=yes group=mysql'

ansible a2 -m user -a 'name=mytest password=123456 createhome=false shell=/bin/tcsh'

Ìí¼ÓÃÜÂëΪ123456µÄÓû§mytest£¬²»½¨¼ÒĿ¼£¬ÓÃtcsh shell

£¨4£©group: ×éÄ£¿é

Àý£º

ansible websrvs -m group -a 'name=mysql gid=306 system=yes'

£¨5£©copy£º¸´ÖÆÎļþ

src=:¶¨Òå±¾µØÔ´Îļþ·¾¶

dest=:¶¨ÒåÔ¶³ÌÄ¿±êÎļþ·¾¶

content=:È¡´úsrc=£¬±íʾֱ½ÓÓô˴¦Ö¸¶¨µÄÐÅÏ¢Éú³ÉΪĿ±êÎļþÄÚÈÝ£»

Àý£º

ansible all -m copy -a 'src=/etc/fstabdest= /tmp/fstab.ansbile owner=root mode=640'

ansible all -m copy -a 'content= "HelloAnsible\nHi MageEdu" dest=/tmp/test.ansible'

ansible a2 -m copy -a 'src=/root/a1-filedest =/root/file.ansible owner= mytest group=mytest mode=640'

£¨6£©file: É趨ÎļþÊôÐÔ

path=:Ö¸¶¨Îļþ·¾¶£¬¿ÉÒÔʹÓÃname»òdestÀ´Ìæ»»£»

´´½¨ÎļþµÄ·ûºÅÁ´½Ó£º

src=:Ö¸Ã÷Ô´Îļþ

path=:Ö¸Ã÷·ûºÅÁ´½ÓÎļþ·¾¶

Àý

ansible all -m file -a 'path =/tmp/fstab.link src =/tmp/fstab.ansbile state=link'

´´½¨·ûºÅÁ´½ÓÎļþfstab.link

£¨7£©ping£º²âÊÔÖ¸¶¨Ö÷»úÊÇ·ñÄÜÁ¬½Ó£»

Àý£º

ansible a2 -m ping

ansible all -m ping

£¨8£©service£ºÖ¸¶¨ÔËÐÐ״̬£»

enabled=:ÊÇ·ñ¿ª»ú×Ô¶¯Æô¶¯£¬È¡ÖµÎªtrue»òÕßfalse£»

name=:·þÎñÃû³Æ

state=:״̬£¬È¡ÖµÓÐstarted, stopped, restarted;

Àý£º

ansiblea2 -m service -a 'name=mysqld state=started'

ansiblea2 -m service -a 'name=mysqld enabled=true'

£¨9£©shell£ºÔÚÔ¶³ÌÖ÷»úÉÏÔËÐÐÃüÁî

ÓÈÆäÊÇÓõ½¹ÜµÀµÈ¹¦Äܵĸ´ÔÓÃüÁî¾ÍÒªÓÃshell¶ø²»ÄÜÓÃcommandÁË£»

Àý£º

ansibleall -m command -a 'echo 123456 | passwd --stin user1' ÕâÑùÖ´ÐÐÊÇʧ°ÜµÄ

ansibleall -m shell -a 'echo 123456 | passwd --stin user1'ÕâÑù²ÅÊÇÕýÈ·µÄ

£¨10£©script£º½«±¾µØ½Å±¾¸´ÖƵ½Ô¶³ÌÖ÷»ú²¢ÔËÐÐÖ®£»

×¢Ò⣺ҪʹÓÃÏà¶Ô·¾¶Ö¸¶¨½Å±¾

Àý£º

ansiblea2 -m script -a 'test.sh'

£¨11£©yum£º°²×°³ÌÐò°ü

name=:Ö¸Ã÷Òª°²×°µÄ³ÌÐò°ü£¬¿ÉÒÔ´øÉϰ汾ºÅ£»

state=:present£¨Ä¬ÈÏ£©, latest±íʾ°²×°£¬absent±íÊ¾Ð¶ÔØ£»

Àý£º

ansible a2 -m yum -a 'name=zsh'

£¨12£©setup: ÊÕ¼¯Ô¶³ÌÖ÷»úµÄfacts

ÿ¸ö±»¹ÜÀí½ÚµãÔÚ½ÓÊÕ²¢ÔËÐйÜÀíÃüÁî֮ǰ£¬»á½«×Ô¼ºÖ÷»úÏà¹ØÐÅÏ¢£¬Èç²Ù×÷ϵͳ°æ±¾¡¢IPµØÖ·µÈ±¨¸æ¸øÔ¶³ÌµÄansbile Ö÷»ú£»

Àý£º

ansible all -m setup ÏÔʾËùÓнڵãµÄÐÅÏ¢

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

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

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

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