We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
安装好 Ansible 后,使用 ansible 命令即可完成基础操作。例如以下命令可以测试你的所有主机的连通性:
Ansible
ansible
ansible all -m ping
-m 代表使用 ansible 某个模块,后紧跟模块名 all代表匹配所有主机组,这里也可以传入指定的主机组名称。
-m
如果想查看有哪些模块:
ansible-doc -l
想查看模块的具体帮助,比如fetch模块:
ansible-doc -s fetch
文件拷贝模块:将 Ansible 主机下的目录拷贝到目标机器。例如将 Ansible 主机内的 /testdir/copytest 目录拷贝到目标机器 /opt 下。
/testdir/copytest
/opt
ansible all -m copy "src=/testdir/copytest dest=/opt"
文件操作模块:可以对目标机器进行新建和删除文件。例如:
ansible all -m file -a "path=/testdir/testfile state=touch"
在目标机器下新建 /testdir/testfile 文件
ansible all -m file -a "path=/testdir/testfile state=absent"
在目标机器下删除 /testdir/testfile 文件
文件查找模块:可以查找目标机器内的文件。例如查找 /testdir 文件夹下包含 abc 字符串的文件:
/testdir
abc
ansible all -m find -a 'paths=/testdir contains=".*abc.*"'
文件内容替换模块:可以在指定文件中通过正则匹配指定内容进行替换。例如在 /testdir/test 文件夹内,查找符合正则 abc 的内容,替换为 buck
/testdir/test
buck
ansible all -m replace -a 'path=/testdir/test regexp="abc" replace=buck'
命令模块:可以在目标机器内执行命令。**和shell命令不同的是,shell中的 ****<** **, ****>** **, ****|** **, ****;** **, ****&** **, ****$** 等特殊字符不能在command模块中使用,如果需要使用,则用shell模块。例如:
**<**
**>**
**|**
**;**
**&**
**$**
ansible all -m command -a "chdir=/testdir ls"
在目标机器 /testdir 目录下执行 ls命令
更详细的介绍,可以参考:链接
主机清单是 Ansible 最基础的概念,它声明了 Ansible 到底在哪些机器上执行命令。主机清单默认是 /etc/ansible/hosts 文件。主机清单语法花样也很多。不仅可以保存主机清单,还可以定义主机密码,授权方式等其他信息。 一般在 Ansible 内,都是以 组 为集合管理主机。被称为 主机组 ,一个主机组内有许多主机。 最简单的主机组声明:
/etc/ansible/hosts
组
主机组
[apache] 192.168.1.36 192.168.1.33
其中, apache 是主机组名,下面是组内的主机IP。
apache
在主机组内,可以在清单内定义主机密码,端口等信息。
# 方法一 主机+端口+密码 [webserver] 192.168.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456" 192.168.1.32 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456" 192.168.1.33 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456" 192.168.1.36 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="123456" # 方法二 主机+端口+密码 [webserver] 192.168.1.3[1:3] ansible_ssh_user=root ansible_ssh_pass="123456" # 方法二 主机+端口+密码 [webserver] 192.168.1.3[1:3] [webserver:vars] ansible_ssh_pass="123456"
192.168.1.3[1:3]:代表 192.168.1.31 和 192.168.1.33
当然,最常用的就是密钥连接服务器。这种情况下,我们只需要定义最简单的主机组,将Ansible机器公钥在目标机器配置即可。 更多花样玩法 => https://www.cnblogs.com/yanjieli/p/10969089.html#380920160
**
任务剧本(任务集),yaml格式文件,定义 Ansible 任务的配置文件。作用有点像 Dockerfile 。是一组任务的集合声明文件示例如下:
Dockerfile
--- - hosts: all remote_user: root vars: timestamp: 20200625233149 tasks: - name: docker pull new images shell: 'chdir=~ docker pull 172.16.81.150:8082/fe/nginx-fe-{{timestamp}}' - name: docker rmf shell: 'chdir=~ docker ps | grep jenkins-test && docker rm -f jenkins-test' ignore_errors: true - name: docker run shell: 'chdir=~ docker run -p 80:80 -itd --name jenkins-test 172.16.81.150:8082/fe/nginx-fe-{{timestamp}}'
all
{{ varName }}
shell
更详细的语法:https://www.cnblogs.com/yanjieli/p/10969299.html
可以使用 ansible-playbook 命令执行 playbook :
ansible-playbook
playbook
ansible-playbook test.yml
使用 --syntax-check 命令测试 playbook 语法是否正确
--syntax-check
ansible-playbook --syntax-check test.yml
测试playbook执行(并不会真的在主机组上执行,只是模拟):
ansible-playbook --check test.yml
替换playbook中默认的变量值,并执行playbook。在这种情况下,命令行传入参数 > 默认值:
ansible-playbook -e "timestamp=212123323" test.yml
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Ansible 内的概念
基础命令
安装好
Ansible
后,使用ansible
命令即可完成基础操作。例如以下命令可以测试你的所有主机的连通性:如果想查看有哪些模块:
想查看模块的具体帮助,比如fetch模块:
Modules 模块
copy
文件拷贝模块:将
Ansible
主机下的目录拷贝到目标机器。例如将Ansible
主机内的/testdir/copytest
目录拷贝到目标机器/opt
下。ansible all -m copy "src=/testdir/copytest dest=/opt"
file
文件操作模块:可以对目标机器进行新建和删除文件。例如:
ansible all -m file -a "path=/testdir/testfile state=touch"
ansible all -m file -a "path=/testdir/testfile state=absent"
find
文件查找模块:可以查找目标机器内的文件。例如查找
/testdir
文件夹下包含abc
字符串的文件:ansible all -m find -a 'paths=/testdir contains=".*abc.*"'
replace
文件内容替换模块:可以在指定文件中通过正则匹配指定内容进行替换。例如在
/testdir/test
文件夹内,查找符合正则abc
的内容,替换为buck
ansible all -m replace -a 'path=/testdir/test regexp="abc" replace=buck'
command
命令模块:可以在目标机器内执行命令。
**和shell命令不同的是,shell中的 **
**<**
**, ****>**
**, ****|**
**, ****;**
**, ****&**
**, ****$**
等特殊字符不能在command模块中使用,如果需要使用,则用shell模块。例如:
ansible all -m command -a "chdir=/testdir ls"
更详细的介绍,可以参考:链接
Inventory 主机清单
主机清单是
Ansible
最基础的概念,它声明了Ansible
到底在哪些机器上执行命令。主机清单默认是/etc/ansible/hosts
文件。主机清单语法花样也很多。不仅可以保存主机清单,还可以定义主机密码,授权方式等其他信息。
一般在
Ansible
内,都是以组
为集合管理主机。被称为主机组
,一个主机组内有许多主机。最简单的主机组声明:
其中,
apache
是主机组名,下面是组内的主机IP。使用密码连接
在主机组内,可以在清单内定义主机密码,端口等信息。
使用密钥连接
当然,最常用的就是密钥连接服务器。这种情况下,我们只需要定义最简单的主机组,将Ansible机器公钥在目标机器配置即可。
更多花样玩法 => https://www.cnblogs.com/yanjieli/p/10969089.html#380920160
**
Playbook 任务剧本
任务剧本(任务集),yaml格式文件,定义 Ansible 任务的配置文件。作用有点像
Dockerfile
。是一组任务的集合声明文件示例如下:
all
代表全部主机{{ varName }}
使用变量Ansible
的shell
模块,上面有讲解模块的作用和类型。后面跟着模块的命令更详细的语法:https://www.cnblogs.com/yanjieli/p/10969299.html
执行 Playbook
可以使用
ansible-playbook
命令执行playbook
:使用
--syntax-check
命令测试 playbook 语法是否正确测试playbook执行(并不会真的在主机组上执行,只是模拟):
替换playbook中默认的变量值,并执行playbook。在这种情况下,命令行传入参数 > 默认值:
ansible-playbook -e "timestamp=212123323" test.yml
The text was updated successfully, but these errors were encountered: