ansible 学习基础
ansible 基础
ansible, ansible-doc, ansible-galaxy, ansible-lint, ansible-playbook, ansible-pull, ansible-vault
管理节点
ssh映射: 10.44.111.115:179
安装常用工具
sudo yum install -y vim wget lrzsz screen
username root/develop
password 2019@eagle/develop
- ip: 172.17.163.179
- netmask 255.255.255.240
- gateway
- route 172.17.163.177
- DNS 172.17.163.177
控制管理节点安装 ansible
sudo yum install ansible -y
使用 ssh-keygen
生成 ssh key
并使用 ssh-copy-id
分发到 server
节点
[develop@localhost ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/develop/.ssh/id_rsa):
Created directory '/home/develop/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/develop/.ssh/id_rsa.
Your public key has been saved in /home/develop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:i8laZFq8RAnOUEBdWLIy8LpDbZUiri9MbFmh+RKnUz4 develop@localhost.locald
The key's randomart image is:
+---[RSA 2048]----+
|..++++o |
| o =o+.. |
| .*.=oo |
|.=o*oo |
|ooXo * S |
|oX.E B + . |
|B o o * . |
|.+ o |
| .. . |
+----[SHA256]-----+
[develop@localhost ~]$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFCAJp1+ER36dn1HN92/e2VbFAex1bLvaKEqXyG07l7NmQ0hXsfLHHMFkaHgRiVKdRccNe1gFOvRmmApxTocm+6X/S+e6SRQUjTlnVlOLWpKG42MqaEnmfNYb10uWrRKboBVUpt4xCIvd41TDAyqSQq5lPPPFPkc5J7vs9DIc1C5Seuzl2epMRhLQ195QPntxjLeD/Pgt+f7TCt8Q7PAkYWFwkIjcozUtFTS69CHobiMec5xPhpfWDUb7El8yC8KVR7hcFeDEG/gkqaU5Hzgow96T182jZG8ujOwVJ9dltpKuWvFnKxavZqVcooiCyi3jXjI2oaY8kdOKvvxJjWhwH develop@localhost.localdomain
[develop@localhost ~]$
[develop@localhost ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub 172.17.163.181
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/develop/.ssh/id_rsa.pub"
The authenticity of host '172.17.163.181 (172.17.163.181)' can't be established.
ECDSA key fingerprint is SHA256:iVZEKj9NsHP/zhwdfu/gZLfV51LIsidtEhp2HpNg9k0.
ECDSA key fingerprint is MD5:54:99:0d:aa:e8:c5:8a:5e:f2:e6:a6:e9:4c:d6:db:ac.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
develop@172.17.163.181's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '172.17.163.181'"
and check to make sure that only the key(s) you wanted were added.
[develop@localhost ~]$ ssh 172.17.163.181
Last login: Sat Nov 2 14:00:59 2019 from gateway
[develop@localhost ~]$ exit
登出
Connection to 172.17.163.181 closed.
[develop@localhost ~]$
配置 ansible
文件
sudo vim /etc/ansible/ansible.cfg
sudo vim /etc/ansible/hosts
配置 host
sudo vim /etc/ansible/hosts
追加参数:
server-spring-cloud ansible_ssh_host=10.44.111.231 ansible_ssh_port=22 ansible_ssh_user=spring-cloud ansible_ssh_pass=spring-cloud
server-test-vars ansible_ssh_host=10.44.111.127 ansible_ssh_port=2222 ansible_ssh_user=develop ansible_ssh_pass=develop
[test]
172.17.163.179
172.17.163.181
172.17.163.186
172.17.163.184
[test:vars] # 属性
ansible_ssh_port=22
ansible_ssh_user=develop
ansible_ssh_pass=develop
[test:children] # 继承
10.44.111.127
server-centos-01 ansible_ssh_host=10.44.111.115 ansible_ssh_port=179 ansible_ssh_pass=develop
server-centos-02 ansible_ssh_host=10.44.111.115 ansible_ssh_port=181 ansible_ssh_pass=develop
server-ubuntu-01 ansible_ssh_host=10.44.111.115 ansible_ssh_port=190 ansible_ssh_pass=develop
server-ubuntu-02 ansible_ssh_host=10.44.111.115 ansible_ssh_port=189 ansible_ssh_pass=develop
inventory 内置参数
ansible_ssh_host # 要连接的主机名
ansible_ssh_port # 端口号默认是22
ansible_ssh_user # ssh连接时默认使用的用户名
ansible_ssh_pass # ssh连接时的密码
ansible_sudo_pass # 使用sudo连接用户是的密码
ansible_ssh_private_key_file # 秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type # shell的类型默认sh
ansible_connection # SSH 连接的类型: local , ssh , paramiko在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提)
ansible_python _ interpreter #用来指定 python 解释器的路径,同样可以指定ruby 、perl 的路径
测试
ansible test -m shell -a 'echo "Hello Ansible.." && date'
172.17.163.186 | SUCCESS | rc=0 >>
Hello Ansible..
2019年 11月 02日 星期六 14:47:00 CST
172.17.163.184 | SUCCESS | rc=0 >>
Hello Ansible..
2019年 11月 02日 星期六 14:47:00 CST
172.17.163.181 | SUCCESS | rc=0 >>
Hello Ansible..
2019年 11月 02日 星期六 14:47:00 CST
172.17.163.179 | SUCCESS | rc=0 >>
Hello Ansible..
2019年 11月 02日 星期六 14:47:00 CST
[develop@localhost ~]$
动态 inventory
动态inventory的意思是所有的变量可以从外部获取,也就是说我们可以从CMDB以及zabbix系统拉取所有的主机信息然后使用ansible进行管理。引用inventory只需要把ansible.cfg文件中的inventory定义值改成一个执行脚本即可
#!/usr/bin/env python
# coding=utf-8
import json
masterIp = ['172.17.163.179']
slaveIp = ['172.17.163.181','172.17.163.186','172.17.163.184']
masterGroup = 'master'
slaveGroup = 'slave'
hostdata = {masterGroup:{"hosts":masterIp},slaveGroup:{"hosts":slaveIp}}
print json.dumps(hostdata,indent=4)
[develop@localhost ~]$ python inverti.py
{
"slave": {
"hosts": [
"172.17.163.181",
"172.17.163.186",
"172.17.163.184"
]
},
"master": {
"hosts": [
"172.17.163.179"
]
}
}
[root@vagrant-centos65 opt]# ansible -i inverti.py all -a 'date'
SSH password:
192.168.1.15 | SUCCESS | rc=0 >>
07:25:27 up 3:56, 3 users, load average: 0.00, 0.00, 0.00
192.168.1.110 | SUCCESS | rc=0 >>
07:25:27 up 7 min, 3 users, load average: 0.00, 0.02, 0.00
ping 模块
ansible test -m ping
setup模块
获取主机信息
ansible test -m setup
过滤
ansible test -m setup -a 'filter=ansible_default_ipv4'
ansible test -m setup -a 'filter=ansible_memory_mb'
ansible test -m setup -a 'filter=*mb'
参数
ansible_all_ipv4_addresses: 仅显示ipv4的信息。
ansible_devices: 仅显示磁盘设备信息。
ansible_distribution: 显示是什么系统,例: centos,suse等。
ansible_distribution_major_version: 显示是系统主版本。
ansible_distribution_version: 仅显示系统版本。
ansible_machine: 显示系统类型,例: 32位,还是64位。
ansible_eth0: 仅显示eth0的信息。
ansible_hostname: 仅显示主机名。
ansible_kernel: 仅显示内核版本。
ansible_lvm: 显示lvm相关信息。
ansible_memtotal_mb: 显示系统总内存。
ansible_memfree_mb: 显示可用系统内存。
ansible_memory_mb: 详细显示内存情况。
ansible_swaptotal_mb: 显示总的swap内存。
ansible_swapfree_mb: 显示swap内存的可用内存。
ansible_mounts: 显示系统磁盘挂载情况。
ansible_processor: 显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus: 显示cpu个数(只显示总的个数)。
ansible_python_version: 显示python版本。
file 模块
https://docs.ansible.com/ansible/latest/cli/ansible.html
file模块可以帮助我们完成一些对文件的基本操作,比如,创建文件或目录、删除文件或目录、修改文件权限等
[develop@localhost ~]$ ansible test -m file -a 'src=/etc/fstab dest=/home/develop/fstab state=link'
172.17.163.186 | SUCCESS => {
"changed": true,
"dest": "/home/develop/fstab",
"gid": 1000,
"group": "develop",
"mode": "0777",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 10,
"src": "/etc/fstab",
"state": "link",
"uid": 1000
}
172.17.163.184 | SUCCESS => {
"changed": true,
"dest": "/home/develop/fstab",
"gid": 1000,
"group": "develop",
"mode": "0777",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 10,
"src": "/etc/fstab",
"state": "link",
"uid": 1000
}
172.17.163.181 | SUCCESS => {
"changed": true,
"dest": "/home/develop/fstab",
"gid": 1000,
"group": "develop",
"mode": "0777",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 10,
"src": "/etc/fstab",
"state": "link",
"uid": 1000
}
172.17.163.179 | SUCCESS => {
"changed": true,
"dest": "/home/develop/fstab",
"gid": 1000,
"group": "develop",
"mode": "0777",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 10,
"src": "/etc/fstab",
"state": "link",
"uid": 1000
}
[develop@localhost ~]$ ansible test -a 'ls -l'
172.17.163.181 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
172.17.163.186 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
172.17.163.184 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
172.17.163.179 | SUCCESS | rc=0 >>
总用量 108
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rwxrwxr-x. 1 develop develop 295 11月 2 15:42 inverti.py
-rw-rw-r--. 1 develop develop 102710 11月 2 16:26 sysinfo
[develop@localhost ~]$
[develop@localhost ~]$ ansible test -m file -a 'path=/home/develop/touch.txt state=touch'
172.17.163.186 | SUCCESS => {
"changed": true,
"dest": "/home/develop/touch.txt",
"gid": 1000,
"group": "develop",
"mode": "0664",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
172.17.163.181 | SUCCESS => {
"changed": true,
"dest": "/home/develop/touch.txt",
"gid": 1000,
"group": "develop",
"mode": "0664",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
172.17.163.184 | SUCCESS => {
"changed": true,
"dest": "/home/develop/touch.txt",
"gid": 1000,
"group": "develop",
"mode": "0664",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
172.17.163.179 | SUCCESS => {
"changed": true,
"dest": "/home/develop/touch.txt",
"gid": 1000,
"group": "develop",
"mode": "0664",
"owner": "develop",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
[develop@localhost ~]$ ansible test -a 'ls -l'
172.17.163.184 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
172.17.163.186 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
172.17.163.181 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
172.17.163.179 | SUCCESS | rc=0 >>
总用量 108
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rwxrwxr-x. 1 develop develop 295 11月 2 15:42 inverti.py
-rw-rw-r--. 1 develop develop 102710 11月 2 16:26 sysinfo
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
[develop@localhost ~]$
参数
- force: 需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项: yes|no
- group: 定义文件/目录的属组
- mode: 定义文件/目录的权限
- owner: 定义文件/目录的属主
- path: 必选项,定义文件/目录的路径
- recurse: 递归的设置文件的属性,只对目录有效
- src: 要被链接的源文件的路径,只应用于state=link的情况
- dest: 被链接到的路径,只应用于state=link的情况
- state:
- directory: 如果目录不存在,创建目录
- file: 即使文件不存在,也不会被创建
- link: 创建软链接
- hard: 创建硬链接
- touch: 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
- absent: 删除目录、文件或者取消链接文件
copy模块
[develop@localhost ~]$ ansible test -m copy -a 'src=/home/develop/xxx dest=/home/develop/xxx owner=develop mode=0700'
172.17.163.184 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"gid": 1000,
"group": "develop",
"mode": "0700",
"owner": "develop",
"path": "/home/develop/xxx",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
172.17.163.181 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"gid": 1000,
"group": "develop",
"mode": "0700",
"owner": "develop",
"path": "/home/develop/xxx",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
172.17.163.186 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"gid": 1000,
"group": "develop",
"mode": "0700",
"owner": "develop",
"path": "/home/develop/xxx",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
172.17.163.179 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"gid": 1000,
"group": "develop",
"mode": "0700",
"owner": "develop",
"path": "/home/develop/xxx",
"secontext": "unconfined_u:object_r:user_home_t:s0",
"size": 0,
"state": "file",
"uid": 1000
}
[develop@localhost ~]$ ansible test -a 'ls -l'
172.17.163.181 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
-rwx------. 1 develop develop 0 11月 2 17:41 xxx
172.17.163.186 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
-rwx------. 1 develop develop 0 11月 2 17:41 xxx
172.17.163.184 | SUCCESS | rc=0 >>
总用量 0
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
-rwx------. 1 develop develop 0 11月 2 17:41 xxx
172.17.163.179 | SUCCESS | rc=0 >>
总用量 108
lrwxrwxrwx. 1 develop develop 10 11月 2 16:42 fstab -> /etc/fstab
-rwxrwxr-x. 1 develop develop 295 11月 2 15:42 inverti.py
-rw-rw-r--. 1 develop develop 102710 11月 2 16:26 sysinfo
-rw-rw-r--. 1 develop develop 0 11月 2 16:45 touch.txt
-rwx------. 1 develop develop 0 11月 2 17:34 xxx
[develop@localhost ~]$
名称 | 必选 | 默认值 | 可选值 | 备注 |
---|---|---|---|---|
backup | no | no | yes/no |
在覆盖之前将原文件备份,备份文件包含时间信息 |
content | no | 当用content 代替src 参数的时候,可以把文档的内容设置到特定的值 |
||
dest | yes | 目标绝对路径。如果src 是一个目录,dest 也必须是一个目录。如果dest是不存在的路径,并且如果dest 以/结尾或者src 是目录,则dest 被创建。如果src 和dest 是文件,如果dest 的父目录不存在,任务将失败 |
||
follow | no | no | yes/no |
是否遵循目的机器中的文件系统链接 |
force | no | yes | yes/no |
当内容不同于源时,将替换远程文件。设置为no ,则只有在目标不存在的情况下才会传输文件 |
group | no | 设置文件/目录的所属组,将被馈送到chown |
||
local_follow | no | yes | yes/no |
是否遵循本地机器中的文件系统链接 |
mode | no | 设置文件权限,模式实际上是八进制数字(如0644),少了前面的零可能会有意想不到的结果。从版本1.8开始,可以将模式指定为符号模式(例如u+rwx或u=rw,g=r,o=r) | ||
owner | no | 设置文件/目录的所属用户,将被馈送到chown | ||
remote_src(2.0+) | no | no | yes/no |
如果yes它会从目标机上搜索src文件 |
src | no | 将本地路径复制到远程服务器; 可以是绝对路径或相对的。如果是一个目录,它将被递归地复制。如果路径以/结尾,则只有该目录下内容被复制到目的地,如果没有使用/来结尾,则包含目录在内的整个内容全部复制 | ||
unsafe_writes | no | yes/no |
是否以不安全的方式进行,可能导致数据损坏 | |
validate | no | None | 复制前是否检验需要复制目的地的路径 |
service 模块
1、启动服务:
ansible test -m service -a "name=nginx state=started"
2、停止服务:
ansible test -m service -a "name=nginx state=stopped"
3、重启服务:
ansible test -m service -a "name=nginx state=restarted"
4、开机启动:
ansible test -m service -a "name=nginx enable=yes"
5、停止开机启动:
ansible test -m service -a "name=nginx enable=no"
6、带参数启动:
ansible test -m service -a "name=network state=restarted args=eth0"
name
参数:此参数用于指定需要操作的服务名称,比如nginx
。state
参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将state
的值设置为started
;如果想要停止远程主机中的服务,则可以将state
的值设置为stopped
。此参数的可用值有started
、stopped
、restarted
、reloaded
。enabled
参数:此参数用于指定是否将服务设置为开机 启动项,设置为yes
表示将对应服务设置为开机启动,设置为no
表示不会开机启动。
. . . . . . . .
playbook
首先简单说明一下 playbook
, playbook
是什么呢?根本上说 playbook
和 shell
脚本没有任何的区别, playbook
就像 shell
一样,也是把一堆的命令组合起来,然后加入对应条件判断等等,在shell脚本中是一条一条的命令,而在 playbook
中是一个一个的 task
任务构成,每个 task
任务可以看做 shell
中的一条命令;shell脚本一般只是在当前服务器上执行,而 playbook
则是在不止一个服务器上执行,因此 playbook
需要在其中指定运行该 playbook
的服务器名。
playbook的语法结构
playbook
使用 yml
标记语言,这是一种标记语言,这种标记语言在文件的最开始需要使用三个“-
”来说明文件开始,然后使用缩进来说明代码块的范围。下面通过一个简易的实例,来说明playbook的语法。【实例来自官方文档】
--- #标记文件的开始
- hosts: webservers #指定该playbook在哪个服务器上执行
vars: #表示下面是定义的变量,
http_port: 80 #变量的形式,key: value,这里http_port是变量名,80是值
max_clients: 200
remote_user: root #指定远程的用户名,这里缩进和vars保持了一致,说明变量的代码块已经结束。
tasks: #下面构成playbook的tasks,每个task都有 - name: 开始,name指定该任务的名称。
- name: ensure apache is at the latest version #指定该任务的名称。
yum: pkg=httpd state=latest #yum说明要是用的模板名称,后面指定对应的参数,这两行结合起来就相当于一个shell命令。
- name: write the apache config file #每个task之间可以使用空行来做区分。
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
#需要说明的是缩进的意义和python中缩进的意义是一样,是来区分代码块的。
- 核心元素
Tasks:任务,由模板定义的操作列表 Variables:变量 Templates:模板,即使用模板语法的文件 Handlers:处理器 ,当某条件满足时,触发执行的操作 Roles:角色
- hosts和users介绍
在playbook中的每一个play都可以选择在哪些服务器和以什么用户完成,hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。
---
- hosts: test #指定主机组,可以是一个或多个组。
remote_user: root #指定远程主机执行的用户名
指定远程主机sudo切换用
# vim ping.yml
---
- hosts: test
remote_user: root
become: yes #2.6版本以后的参数,之前是sudo,意思为切换用户运行
become_user: mysql #指定sudo用户为mysql
执行playbook
# ansible-playbook ping.yml -K
- Tasks list 和
action
介绍
1:Play的主体部分是task列表, task 列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。 在运行playbook时(从上到下执行),如果一个host执行task失败,整个tasks都会回滚,请修正playbook 中的错误,然后重新执行即可。 Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时幂等的,这意味着多次执行是安全的,因为其结果一致。 2:每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。如果没有定义name,‘action’的值将会用作输出信息中标记特定的task。 3:定义一个task,常见的格式:”module: options” 例如:yum: name=httpd 4:ansible的自带模块中,command模块和shell模块无需使用key=value格式
playbook基础使用
ansible-playbook playbook.yml [options]
-u REMOTE_USER, --user=REMOTE_USER
# ssh 连接的用户名
-k, --ask-pass
#ssh登录认证密码
-s, --sudo
#sudo 到root用户,相当于Linux系统下的sudo命令
-U SUDO_USER, --sudo-user=SUDO_USER
#sudo 到对应的用户
-K, --ask-sudo-pass #用户的密码(—sudo时使用)
-T TIMEOUT, --timeout=TIMEOUT
# ssh 连接超时,默认 10 秒
-C, --check # 指定该参数后,执行 playbook 文件不会真正去执行,而是模拟执行一遍,然后输出本次执行会对远程主机造成的修改
-e EXTRA_VARS, --extra-vars=EXTRA_VARS
# 设置额外的变量如:key=value 形式 或者 YAML or JSON,以空格分隔变量,或用多个-e
-f FORKS, --forks=FORKS # 进程并发处理,默认 5
-i INVENTORY, --inventory-file=INVENTORY
# 指定 hosts 文件路径,默认 default=/etc/ansible/hosts
-l SUBSET, --limit=SUBSET
# 指定一个 pattern,对- hosts:匹配到的主机再过滤一次
--list-hosts # 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook
--list-tasks # 列出该 playbook 中会被执行的 task
--private-key=PRIVATE_KEY_FILE # 私钥路径
--step # 同一时间只执行一个 task,每个 task 执行前都会提示确认一遍
--syntax-check # 只检测 playbook 文件语法是否有问题,不会执行该 playbook
-t TAGS, --tags=TAGS #当 play 和 task 的 tag 为该参数指定的值时才执行,多个 tag 以逗号分隔
--skip-tags=SKIP_TAGS # 当 play 和 task 的 tag 不匹配该参数指定的值时,才执行
-v, --verbose #输出更详细的执行过程信息,-vvv可得到所有执行过程信息。
原文链接:https://www.imooc.com/article/22729
- 常用命令
- ansible-playbook [yaml文件名、也可以yml结尾]
- 例如:ansible-playbook a.yml
- 参数:
-k(–ask-pass) 用来交互输入ssh密码 -K(-ask-become-pass) 用来交互输入sudo密码 -u 指定用户
ansible-playbook a.yml --syntax-check #检查yaml文件的语法是否正确
ansible-playbook a.yml --list-task #检查tasks任务
ansible-playbook a.yml --list-hosts #检查生效的主机
ansible-playbook a.yml --start-at-task='Copy Nginx.conf' #指定从某个task开始运行
- 示例
# vim a.yml
---
- hosts: 192.168.200.129 //指定主机
remote_user: root //指定在被管理的主机上执行任务的用户
tasks: //任务列表↓
- name: disable selinux //任务名关闭防火墙
command: '/sbin/setenforce 0' //调用command模块 执行关闭防火墙命令
- name: start httpd //任务名 开启httpd
service: name=httpd state=started //调用service模块 开启httpd 服务
# ansible-playbook a.yml --syntax-check #检查yaml文件的语法是否正确
# ansible-playbook a.yml
- 综合练习
mkdir -p ansible-playbook/roles/nginx/tasks
cd ansible-playbook
touch site.yml
touch roles/nginx/tasks/main.yml
site.yml
---
- hosts: dev1
gather_facts: no
remote_user: develop
roles:
- nginx
roles/nginx/tasks/main.yml
---
- name: install nginx
yum: name=nginx state=present
- name: start service nginx
service: name=nginx state=restated
ansible-playbook site.yml --syntax-check
ansible-playbook roles/nginx/tasks/main.yml --syntax-check
ansible centos -m user -a 'name=gdtcs'
vim chgpwd.yml
---
- hosts: centos
gather_facts: false
remote_user: root
tasks:
- name: Change password
user: name={{ username }} password={{ passwd | password_hash('sha512') }} update_password=always
ansible-playbook chgpwd.yml -e "username=root passwd=root"
ansible centos -a 'yum install -y /root/docker/docker-ce-19.03.3-3.el7.x86_64.rpm'
No Comments