first commit
This commit is contained in:
commit
ba848e218d
1001 changed files with 152333 additions and 0 deletions
54
Ansible/Ansible基础.md
Normal file
54
Ansible/Ansible基础.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
### 配置文件
|
||||
```
|
||||
/etc/ansible/ansible.cfg ## 主配置文件
|
||||
/etc/ansible/hosts ## 主机清单
|
||||
/etc/ansible/roles/ ## 角色目录
|
||||
```
|
||||
|
||||
### 列出ansible模块
|
||||
```
|
||||
ansible-doc -l
|
||||
```
|
||||
|
||||
#### 查看模块帮助文档
|
||||
```
|
||||
ansible-doc ping # 查看ping模块的帮助文档(详细)
|
||||
ansible-doc -s ping # 查看ping模块的帮助文档(简略)
|
||||
```
|
||||
|
||||
## 命令格式
|
||||
```
|
||||
ansible <host-pattern> [-m moudule_name] [-a args]
|
||||
```
|
||||
|
||||
#### 查看主机列表中的主机
|
||||
```
|
||||
ansible <host-pattern> --list-hosts
|
||||
```
|
||||
|
||||
#### 提示输入密码
|
||||
```
|
||||
-k或--key-pass
|
||||
```
|
||||
|
||||
#### 执行操作的用户
|
||||
```
|
||||
-u或--user=REMOTE-USER
|
||||
```
|
||||
|
||||
#### 逻辑与
|
||||
```
|
||||
ansible "webserver:&dbserver" -m ping ## 执行操作的主机在两个主机组中都存在
|
||||
```
|
||||
|
||||
#### 逻辑非
|
||||
```
|
||||
ansible 'webserver:!dbserver' -m ping ## 执行操作的主机在webserver组中,但不在dbserver中
|
||||
```
|
||||
|
||||
### ansible-vault
|
||||
```
|
||||
ansible-vault encrypt xxx.yaml ## 加密
|
||||
ansible-vault decrypt xxx.yaml ## 解密
|
||||
```
|
||||
|
66
Ansible/playbook基础.md
Normal file
66
Ansible/playbook基础.md
Normal file
|
@ -0,0 +1,66 @@
|
|||
```
|
||||
---
|
||||
- hosts: webservers
|
||||
vars:
|
||||
http_port: 80
|
||||
max_clients: 200
|
||||
remote_user: root
|
||||
tasks:
|
||||
- name: ensure apache is at the latest version
|
||||
yum: pkg=httpd state=latest
|
||||
- name: write the apache config file
|
||||
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
|
||||
notify:
|
||||
- restart apache
|
||||
- name: ensure apache is running
|
||||
service: name=httpd state=started
|
||||
handlers:
|
||||
- name: restart apache
|
||||
service: name=httpd state=restarted
|
||||
```
|
||||
#### 主机与用户
|
||||
你可以为 playbook 中的每一个 play,个别地选择操作的目标机器是哪些,以哪个用户身份去完成要执行的步骤(called tasks)
|
||||
hosts 行的内容是一个或多个组或主机的 patterns,以逗号为分隔符,remote_user 就是账户名
|
||||
```
|
||||
---
|
||||
- hosts: webservers
|
||||
remote_user: root
|
||||
```
|
||||
在每一个 task 中,可以定义自己的远程用户
|
||||
```
|
||||
---
|
||||
- hosts: webservers
|
||||
remote_user: root
|
||||
tasks:
|
||||
- name: test connection
|
||||
ping:
|
||||
remote_user: yourname
|
||||
```
|
||||
支持从 sudo 执行命令
|
||||
```
|
||||
---
|
||||
- hosts: webservers
|
||||
remote_user: yourname
|
||||
sudo: yes
|
||||
```
|
||||
可以仅在一个 task 中,使用 sudo 执行命令,而不是在整个 play 中使用 sudo
|
||||
```
|
||||
---
|
||||
- hosts: webservers
|
||||
remote_user: yourname
|
||||
tasks:
|
||||
- service: name=nginx state=started
|
||||
sudo: yes
|
||||
```
|
||||
可以登陆后,sudo 到不同的用户身份,而不是使用 root
|
||||
```
|
||||
---
|
||||
- hosts: webservers
|
||||
remote_user: yourname
|
||||
sudo: yes
|
||||
sudo_user: postgres
|
||||
```
|
||||
需要在使用 sudo 时指定密码,可在运行 ansible-playbook 命令时加上选项 --ask-sudo-pass (-K). 如果使用 sudo 时,playbook 疑似被挂起,可能是在 sudo prompt 处被卡住,这时可执行 Control-C 杀死卡住的任务,再重新运行一次
|
||||
|
||||
#### Tasks 列表
|
||||
|
52
Ansible/角色(Role).md
Normal file
52
Ansible/角色(Role).md
Normal file
|
@ -0,0 +1,52 @@
|
|||
角色(role)用于层次化,结构化组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
|
||||
目录结构如下:
|
||||
```
|
||||
site.yml
|
||||
webservers.yml
|
||||
fooservers.yml
|
||||
roles/
|
||||
common/
|
||||
files/
|
||||
templates/
|
||||
tasks/
|
||||
handlers/
|
||||
vars/
|
||||
defaults/
|
||||
meta/
|
||||
webservers/
|
||||
files/
|
||||
templates/
|
||||
tasks/
|
||||
handlers/
|
||||
vars/
|
||||
defaults/
|
||||
meta/
|
||||
```
|
||||
yml文件,用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中;
|
||||
files目录:存放由copy或script等模块调用的文件;
|
||||
templates目录:templates模块会自动在此目录中寻找Jinja2模板文件;
|
||||
tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其他的位于此目录中的task文件;
|
||||
handlers目录:此目录中应当包含一个main;
|
||||
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
|
||||
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3及其以后的版本才支持
|
||||
default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;
|
||||
|
||||
那么一个playbook就可以这样写
|
||||
```
|
||||
---
|
||||
- hosts: webservers
|
||||
roles:
|
||||
- common
|
||||
- webservers
|
||||
```
|
||||
|
||||
这个 playbook 为一个角色 ‘x’ 指定了如下的行为:
|
||||
|
||||
如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
|
||||
如果roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
|
||||
如果roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
|
||||
如果roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 andlater)
|
||||
所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
|
||||
所有 scripttasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
|
||||
所有 template tasks 可以引用roles/x/templates/ 中的文件,不需要指明文件的路径。
|
||||
所有 include tasks 可以引用roles/x/tasks/ 中的文件,不需要指明文件的路径。
|
Loading…
Add table
Add a link
Reference in a new issue