1.安装 系统:CentOS release 6.5 (Final) yum install ansible 2.免密码登录 ssh-keygen cat id_rsa.pub >> authorized_keys 3.主机目录 vim /etc/ansible/hosts [eddy] eddy [targets] localhost ansible_connection=local other1.example.com ansible_connection=ssh ansible_ssh_user=mpdehaan other2.example.com ansible_connection=ssh ansible_ssh_user=mdehaan [atlanta] ost1 http_port=80 maxRequestsPerChild=808 ost2 http_port=303 maxRequestsPerChild=909 也可以为一个组指定变量,组内每个主机都可以使用该变量: [atlanta] ost1 ost2 [atlanta:vars] tp_server=ntp.atlanta.example.com roxy=proxy.atlanta.example.com 组可以包含其他组: [atlanta] ost1 ost2 [raleigh] ost2 ost3 [southeast:children] tlanta aleigh [southeast:vars] ome_server=foo.southeast.example.com alon_system_timeout=30 elf_destruct_countdown=60 scape_pods=2 [usa:children] outheast ortheast outhwest orthwest 可以为每个主机单独指定一些变量,这些变量随后可以在playbooks 中使用: 4.配置文件修改 vim /etc/ansible/ansible.cfg [defaults] inventory = /etc/ansible/hosts remote_tmp = $HOME/.ansible/tmp pattern = * forks = 5 poll_interval = 15 transport = smart remote_port = 6666 module_lang = C gathering = implicit #roles_path = /etc/ansible/roles host_key_checking = False sudo_exe = sudo timeout = 10 remote_user = root log_path = /var/log/ansible.log ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host} action_plugins = /usr/share/ansible_plugins/action_plugins callback_plugins = /usr/share/ansible_plugins/callback_plugins connection_plugins = /usr/share/ansible_plugins/connection_plugins lookup_plugins = /usr/share/ansible_plugins/lookup_plugins vars_plugins = /usr/share/ansible_plugins/vars_plugins filter_plugins = /usr/share/ansible_plugins/filter_plugins fact_caching = memory [privilege_escalation] [paramiko_connection] [ssh_connection] pipelining = on [accelerate] accelerate_port = 5099 accelerate_timeout = 30 accelerate_connect_timeout = 5.0 accelerate_daemon_timeout = 30 [selinux] 5.ansible指令参数 Usage: ansible <host-pattern> [options] Options: -m MODULE_NAME, --module-name=MODULE_NAME 要执行的模块,默认为comm and -a MODULE_ARGS, --args=MODULE_ARGS 模块的参数 -u REMOTE_USER, --user=REMOTE_USER ssh 连接的用户名,默认用roo t,ansible.cfg 中可以配置 -k, --ask-pass 提示输入ssh 登录密码,当使用密码验证登录的时候用 -s, --sudo sudo 运行 -U SUDO_USER, --sudo-user=SUDO_USER sudo 到哪个用户,默认为root -K, --ask-sudo-pass 提示输入sudo 密码,当不是NOPASSWD 模式时使用 -B SECONDS, --background=SECONDS run asynchronously, failing after X seconds(default=N/A) -P POLL_INTERVAL, --poll=POLL_INTERVAL set the poll interval if using -B (default=15) -C, --check 只是测试一下会改变什么内容,不会真正去执行 -c CONNECTION 连接类型(default=smart) -f FORKS, --forks=FORKS fork 多少个进程并发处理,默认5 -i INVENTORY, --inventory-file=INVENTORY 指定hosts 文件路径,默认default =/etc/ansible/hosts -l SUBSET, --limit=SUBSET 指定一个pattern,对<host_pattern>已经匹配的主机 中再过滤一次 --list-hosts 只打印有哪些主机会执行这个playbook 文件,不是实际执行该playboo -M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认 为/usr/share/ansible/ -o, --one-line 压缩输出,摘要输出 --private-key=PRIVATE_KEY_FILE 私钥路径 -T TIMEOUT, --timeout=TIMEOUT ssh 连接超时时间,默认10 秒 -t TREE, --tree=TREE 日志输出到该目录,日志文件名会以主机名命名 -v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debu gging) 6.ansible 目录结构 /etc/ansible/hosts 主机定义 /etc/ansible/host_vars/all #host_vars 目录用于存放host 变量,all 文件对所有主机有效 /etc/ansible/group_vars/all #group_vars 目录用于存放group 变量,all 文件对所有组有效 /etc/ansible/host_vars/foosball #文件foosball 要和hosts 里面定义的主机名一样,表示只对foosball 主机有效 /etc/ansible/group_vars/raleigh #文件raleigh 要和hosts 里面定义的组名一样,表示对raleigh 组下的所有主机有效 这里/etc/ansible/group_vars/raleigh 格式如下: --- #YAML 格式要求 ntp_server: acme.example.org #变量名:变量值 database_server: storage.example.org 注意:官方建议将/etc/ansible 目录使用git/svn 来进行版本控制便于跟踪和修改 hosts 文件支持一些特定指令,上面已经使用了其中几个,所有支持的指令如下: ansible_ssh_host:指定主机别名对应的真实IP,如:251 ansible_ssh_host=183.60.41.251,随后连接该主机无须指定完整IP,只需指定251 就行 ansible_ssh_port:指定连接到这个主机的ssh 端口,默认22 ansible_ssh_user:连接到该主机的ssh 用户 ansible_ssh_pass:连接到该主机的ssh 密码(连-k 选项都省了),安全考虑还是建议使用私钥或在命令行指定-k 选项输入 ansible_sudo_pass:sudo 密码 ansible_sudo_exe(v1.8+的新特性):sudo 命令路径 ansible_connection:连接类型,可以是local、ssh 或paramiko,ansible1.2 之前默认为paramiko ansible_ssh_private_key_file:私钥文件路径 ansible_shell_type:目标系统的shell 类型,默认为sh,如果设置csh/fish,那么命令需要遵循它们语法 ansible_python_interpreter:python 解释器路径,默认是/usr/bin/python,但是如要要连*BSD系统的话,就需要该指令修改python 路径
原文:http://my.oschina.net/eddylinux/blog/531629