Ansible

来源:互联网 发布:超声波洗菜机 知乎 编辑:程序博客网 时间:2024/05/16 09:10
1、建立互信


生产密钥对:ssh-keygen -t rsa -P ''  // 存放在~/.ssh/,-t 加密类型,-P私钥密码
发送公钥:ssh-copy-id -i ~/.ssh/id_rsa.pub nobody@xx.xx.xx.xx //追加到远程主机的 ~/.ssh/authorized_key上


2、playbook目录机构


playbook/
├── group_vars/
├── log/
├── roles/
├── hosts


3、主机清单:Inventory
默认的清单文件为:/etc/ansible/hosts,也可以用 -i 另行指定到 playbook/hosts


清单文件格式:


[tomcat]
tomcat1 local_ip={{tomcat.ips[0]}} ansible_ssh_user={{ssh_user}} ansible_ssh_host={{tomcat.ips[0]}}
tomcat2 local_ip={{tomcat.ips[1]}} ansible_ssh_user={{ssh_user}} ansible_ssh_host={{tomcat.ips[1]}}  //这里的local_ip可以在任务和模板中被使用
 
[组]
条目名 连接参数


4、全局变量文件:group_vars,格式为yaml
默认在/etc/ansible/group_vars下,会被 playbook/group_vars 覆盖


用于所有组:playbook/group_vars/all
用于Inventory里的tomcat组:playbook/group_vars/tomcat


group_vars/all 格式:


source_storage: /someDir
user_name: nobody
group_name: nobody
tomcat:
 - 127.0.0.0

 - 127.0.0.1


5、脚本:playbook,格式为yaml
ansible-playbook install.yml -i hosts -t tomcat-install // 执行脚本,指定 inventory,指定 tag
ansible-playbook install.yml -k -K //没有互信,要-k输入密码。没有sudo NOPASSWD,要-K 输入 root密码


playbook格式,相同层次的多个“-”组成数组:


---


- name: Deploy tomcat 
hosts: tomcat //指定主机组
user: nobody //指定执行命令的用户
tasks: //每个task都可以打tags,只当tags匹配 ansible-playbook 的 -t 才会被执行
- name: copy some file
copy: src=some.txt dest={{someDir}}/some.txt owner={{user_name}} group={{group_name}}
tags:
- tomcat-install
- full-install
roles: //指定角色,相当去引入 playbook/roles/tomcat/tasks/main.yml,把里面的数组添加入tasks
- tomcat


- name:其他任务


6、角色:roles
目录结构
playbook/roles/
├── tomcat
│ ├── tasks
│ │ └──install.yml
│ │ └──uninstall.yml
│ │ └── main.yml //角色的主任务
│ ├── files
│ │ └── some.txt //copy模块用到
│ ├── templates
│ │ └── some.conf //template模块用到
│ └── vars
│ └── main.yml //角色的局部变量


tasks/main.yml 格式


---
- name: install tomcat
tags:
- full-install
- tomcat-install
include: install.yml //引入install.yml,把里面的数组元素添加到当前数组,同名参数覆盖


7、ansible.cfg
默认是/etc/ansible/ansible.cfg,会被playbook/ansible.cfg覆盖




[defaults]
log_path=log/ansible.log //配置日志目录


8、模块:http://docs.ansible.com/ansible/list_of_all_modules.html
常用模块:shell、file、copy、template
- name: shell
shell: "mv {{someFile}} {{someDir}}"


- name: copy
copy: src=someFile dest={{someDir}}/someFile owner={{user_name}} group={{group_name}} //从 files 目录里面拷贝
sudo: yes //是否用sudo执行
ignore_errors: true //是否可以跳过错误
args: //设置模块支持的参数
chdir: '{{someDir}}'


- name: template
template: src=someFile dest={{someDir}}/someFile owner={{user_name}} group={{group_name}} //从 templates 目录里面拷贝,模板里面可以引用变量



0 0