Ansible Tryout

本文介绍如何使用Ansible进行自动化部署,包括下载镜像、容器运行、安装sshpass、定义inventory文件、运行ad-hoc命令及Playbook等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载镜像,容器运行

docker pull ansible/centos7-ansible
docker run -it --rm ansible/centos7-ansible -e ANSIBLE_HOST_KEY_CHECKING=false /bin/bash

由于要用到ssh密码登录,需要install sshpasss

yum -y install sshpass.x86_64

编辑/etc/ansible/hosts,定义机器inventory

[mygroup]
machine1 ansible_ssh_host=10.196.128.11 ansible_ssh_port=36000 ansible_ssh_user=user
machine2 ansible_ssh_host=10.196.128.12 ansible_ssh_port=36000 ansible_ssh_user=user

通过ansible运行ad-hoc command

ANSIBLE_HOST_KEY_CHECKING=false ansible gate -m 'ping' --ask-pass 
SSH password: 
    gate1 | success >> {
        "changed": false, 
        "ping": "pong"
    }

    gate2 | success >> {
        "changed": false, 
        "ping": "pong"
    }

通过ansible运行ad-hoc command

ANSIBLE_HOST_KEY_CHECKING=false ansible gate -a 'date' --ask-pass     
    SSH password: 
    gate1 | success | rc=0 >>
    Tue Mar 10 16:31:38 CST 2015

    gate2 | success | rc=0 >>
    Tue Mar 10 16:31:38 CST 2015

编辑一个Playbook,执行docker container

---

- hosts: gate
  remote_user: gaia
  vars:
    image_name: docker.oa.com:8080/gaia/gate:v0.8-hub
    container_name: portalGate
    gate_home: ~/gaia_portal/portal_gate-1.0
  tasks:
  - name: pull gate image
    command: docker pull {{ image_name }}
  - name: remove old container
    command: docker rm -f {{ container_name }}
    ignore_errors: True
  - name: start new container
    command: docker run --name {{ container_name }} -d -p 8085:8080 
             -v {{ gate_home }}/docker-log:/app/log 
             {{ image_name }}

编辑一个Playbook,执行long-running process

---

- hosts: test
  remote_user: gaia
  vars:
    apiserver_home: ~/gaia_portal/portal_api_server-1.0
  tasks:
  - name: start new process
    command: chdir="{{ apiserver_home }}" "{{ apiserver_home }}/bin/run.sh"
    async: 31536000
    poll: 0

运行Playbook, parallelism=2

ANSIBLE_HOST_KEY_CHECKING=false ansible-playbook gate-start.yaml -f 2 --ask-pass
在Java中调用Ansible自动化工具通常涉及通过执行系统命令来运行Ansible Playbook,并捕获其输出结果。由于Ansible本身是基于Python开发的,且没有提供官方的Java API,因此需要借助Java的`ProcessBuilder`或`Runtime.getRuntime().exec()`方法来执行Ansible命令。 以下是一个使用Java调用Ansible Playbook的示例代码: ### 示例代码 ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class AnsibleInvoker { public static void main(String[] args) { // Ansible Playbook 文件路径 String playbookPath = "path/to/your/playbook.yml"; // 可选:指定inventory文件路径 String inventoryPath = "path/to/your/inventory.ini"; // 构建Ansible命令 ProcessBuilder processBuilder = new ProcessBuilder("ansible-playbook", "-i", inventoryPath, playbookPath); // 将错误流合并到标准输出流中 processBuilder.redirectErrorStream(true); try { // 启动进程 Process process = processBuilder.start(); // 读取输出 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 等待进程结束 int exitCode = process.waitFor(); System.out.println("Ansible Playbook 执行结束,退出码: " + exitCode); } catch (IOException | InterruptedException e) { e.printStackTrace(); } } } ``` ### 代码说明 - **ProcessBuilder**:用于构建和启动外部进程。这里通过它来执行 `ansible-playbook` 命令。 - **playbookPath**:指定要执行的Playbook文件路径。 - **inventoryPath**:可选参数,用于指定主机清单文件路径。 - **redirectErrorStream**:将标准错误流合并到标准输出流中,便于统一处理日志输出。 - **process.waitFor()**:等待Ansible Playbook执行完成,并获取退出码以判断执行是否成功。 ### 注意事项 - 确保目标环境中已安装Ansible,并且Java程序有权限执行`ansible-playbook`命令。 - 如果Playbook需要额外参数(如`--extra-vars`),可以在命令中添加。 - 对于复杂的交互场景,可以考虑使用Python脚本封装Ansible功能,再通过Java调用该脚本[^3]。 ### 示例输出 当执行上述代码时,控制台将输出Ansible Playbook的执行日志,例如任务执行状态、结果以及最终的退出码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值