【linux】ansible操作笔记

前言

  • 圣松大佬牛b,分享的ansible文档,赶紧记录下。

基础命令

ping 机子

ansible all -m ping

查看模块

ansible-doc -l

查看模块帮助

ansible-doc -s fetch

module

copy 将 Ansible 主机下的目录拷贝到目标机器。例如将 Ansible 主机内的 /testdir/copytest 目录拷贝到目标机器 /opt 下。

ansible all -m copy -a "src=/testdir/copytest dest=/opt"

file 在目标机器下新建 /testdir/testfile 文件

ansible all -m file -a "path=/testdir/testfile state=touch"

在目标机器下删除 /testdir/testfile 文件

ansible all -m file -a "path=/testdir/testfile state=absent"

查找 例如查找 /testdir 文件夹下包含 abc 字符串的文件

ansible all -m find -a 'paths=/testdir contains=".*abc.*"'

替换 例如在 /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"

参考链接https://www.cnblogs.com/yanjieli/p/10969143.html

Inventory

主机清单是 Ansible 最基础的概念,它声明了 Ansible 到底在哪些机器上执行命令。主机清单默认是 /etc/ansible/hosts 文件。
主机清单语法花样也很多。不仅可以保存主机清单,还可以定义主机密码,授权方式等其他信息。
一般在 Ansible 内,都是以 组 为集合管理主机。被称为 主机组 ,一个主机组内有许多主机。
最简单的主机组声明:

[apache]
192.168.1.36
192.168.1.33

使用密码链接

# 方法一 主机+端口+密码
[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"

更多参考https://www.cnblogs.com/yanjieli/p/10969089.html#380920160

playbook

---
- 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}}'
      

hosts: 指定在哪个主机组执行该任务集合。 all 代表全部主机
remote_user: 使用哪个用户进行远程执行
vars: 定义变量的地方。在下方任务命令中可以使用 {{ varName }} 使用变量
tasks: 任务集合
shell: Ansible 的 shell 模块,上面有讲解模块的作用和类型。后面跟着模块的命令

更多资料https://www.cnblogs.com/yanjieli/p/10969299.html

执行 Playbook

执行

ansible-playbook test.yml

测试语法正确:

ansible-playbook --syntax-check test.yml

模拟执行:

ansible-playbook --check test.yml

替换playbook中默认的变量值,并执行playbook。在这种情况下,命令行传入参数 > 默认值:

ansible-playbook -e "timestamp=212123323" test.yml

你可能感兴趣的:(linux)