ansible小结

managed node配置

安装openssh-server,用ps -elf | grep sshd查看,如未启动,使用
sudo service ssh restart

sudo /etc/init.d/ssh restart

配置ansible

编辑/etc/ansible/hosts

[ubuntu14]
192.168.199.179 ansible_sudo_pass=’XXXX’

[ubuntu18]
192.168.199.151 ansible_sudo_pass=’XXXX’

拷贝公钥

在control machine上生成公私钥对:
ssh-keygen

拷贝公钥到远端机器,运行过程中会要求输入远端机器的密码(默认使用跟control machine相同的用户名):
ssh-copy-id -i ~/.ssh/id_rsa.pub

adhoc命令

adhoc就是单条命令模式。
ansible有许多模块,默认是 ‘command’,也就是命令模块,我们可以通过 -m 选项来指定不同的模块.

ping测试

测试managed node是否ssh可达:
ansible all -m ping

如成功,返回:
192.168.199.179 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}

拷贝文件到managed node

ansible all -m copy -a “src=/home/uniquelip/1.txt dest=/tmp/1.txt”
底层使用的是scp命令。

验证一下是否拷贝成功:
ansible all -m shell -a “cat /tmp/1.txt”

结果是:
192.168.199.179 | SUCCESS | rc=0 >>
hello,world

注意:~目录,在sudo的情况下代表的是/root!

查看managed node系统信息

ansible all -m setup

确认软件是否安装

ansible all -m apt -a “name=python state=present”
python是装了的,因此返回:
192.168.199.179 | SUCCESS => {
“cache_update_time”: 1414588478,
“cache_updated”: false,
“changed”: false
}

ansible all -m apt -a “name=ruby state=present”
ruby没装,也未使用sudo,因此返回安装失败:
192.168.199.179 | FAILED! => {
“cache_update_time”: 1414588478,
“cache_updated”: false,
“changed”: false,
“msg”: “’/usr/bin/apt-get -y -o \”Dpkg::Options::=–force-confdef\” -o \”Dpkg::Options::=–force-confold\” install ‘ruby” failed: E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)\nE: Unable to lock the administration directory (/var/lib/dpkg/), are you root?\n”,
“rc”: 100,
“stderr”: “E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)\nE: Unable to lock the administration directory (/var/lib/dpkg/), are you root?\n”,
“stderr_lines”: [
“E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)”,
“E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?”
],
“stdout”: “”,
“stdout_lines”: []
}

要安装最新的ruby可使用–sudo选项:
ansible all -m apt -a “name=ruby state=latest” -u USER –sudo –ask-sudo-pass
–ask-sudo-pass选项会在运行中要求你输入USER的密码。

【注意】
在有些比较罕见的情况下,一些用户会受到安全规则的限制,使用 sudo 切换时只能运行指定的命令.这与 ansible的 no-bootstrapping 思想相悖,而且 ansible 有几百个模块,在这种限制下无法进行正常的工作. 所以执行 ansible 命令时,应使用一个没有受到这种限制的账号来执行

确认ftpd服务是否启动

ansible all -m service -a “name=pure-ftpd state=started”
若启动,返回:
192.168.199.179 | SUCCESS => {
“changed”: false,
“name”: “pure-ftpd”,
“state”: “started”
}

否则,返回:
192.168.199.179 | FAILED! => {
“changed”: false,
“msg”: “Could not find the requested service pure-ftpd: host”
}

playbook

playbook就是批量命令模式。

安装python ply包

---
- hosts: all
  vars:
    pypkg: ply
  remote_user: uniquelip
  sudo: yes
  tasks:
  - name: mkdir
    file: dest=~/.pip state=directory
  - name: copy pip ini
    copy: src=~/.pip/pip.conf dest=~/.pip/pip.conf
  - name: install {{pypkg}}
    command: pip install {{pypkg}}
  - name: ensure {{pypkg}} is installed
    shell: pip list | grep {{pypkg}}

执行一个playbook:
ansible-playbook test.yml

调试

使用debug模块,类似python里的print,定位问题时非常有效:
- name: mkdir software
file: dest=~/software state=directory
register: result
- name: print vars
debug: var=result

忽略错误的命令

通常情况下, 当出现失败时 Ansible 会停止在宿主机上执行.有时候,你会想要继续执行下去.为此 你需要像这样编写任务:

- name: check whether ansible is installed
  shell: pip list | grep ansible  
  register: ansible_installed  #record the command result
  # if ansible NOT installed, task will fail, so we need ignore
  ignore_errors: yes  
# - name: print vars
#   debug: var=ansible_installed    
- name: install ansible
  command: pip install ansible
  when: ansible_installed.stdout == ''

如果一个python模块未安装,pip list | grep ansible会失败,导致ansible停止执行,这不符合我们的要求,所以用ignore_errors让ansible继续执行,并将是否安装的结果记录到ansible_installed变量里。随后的步骤会使用when来判断这个变量是否满足条件(ansible未安装),只有满足条件,才会真正安装ansible。

ansible模块

可通过ansible-doc -s 模块名
查看模块信息。

### 自动化运维实训总结与实践经验分享 自动化运维实训是一个全面了解和实践自动化运维工具及其应用的绝佳机会。通过使用如 Ansible 这样的工具,可以深刻体会到其在提高运维效率、降低成本方面的价值[^1]。Ansible 的无代理架构使其能够轻松管理大量服务器和网络设备,同时其基于 YAML 的 playbook 语法简单易懂,便于编写和维护。 #### 实训中的关键技能与工具 在自动化运维实训中,参与者通常会接触到多种工具和技术,包括但不限于以下内容: 1. **Ansible 的核心功能** Ansible 是一种强大的配置管理和自动化工具,支持通过 playbook 定义任务序列,并将这些任务应用于目标主机。它无需安装客户端软件,仅依赖 SSH 协议即可实现远程操作,这大大简化了部署流程[^1]。 2. **Python 在自动化运维中的作用** Python 是许多自动化运维工具的基础语言之一,例如 Ansible 的模块开发即依赖于 Python。学习 Python 可以帮助用户更深入地理解这些工具的工作原理,并根据实际需求进行二次开发或扩展[^3]。 3. **网络安全意识培训** 自动化运维不仅涉及技术层面的操作,还要求运维人员具备一定的网络安全意识。常见的培训内容包括定期密码修改、邮件附件安全处理、避免点击可疑链接等,这些都是确保企业网安全的重要措施[^4]。 #### 实践经验分享 - **任务自动化的重要性** 自动化运维的核心在于减少重复性劳动,提升工作效率。例如,通过编写 Ansible playbook,可以一次性完成多台服务器的配置更新,而无需手动登录每台设备进行操作[^1]。 - **版本控制与协作** 在团队环境中,使用 Git 等版本控制系统来管理 playbook 和其他脚本文件是非常必要的。这不仅可以跟踪变更历史,还能促进团队成员之间的协作。 - **错误处理与日志记录** 在实际操作过程中,难免会遇到各种问题。因此,在设计自动化任务时,应充分考虑错误处理机制,并确保所有操作都有详细的日志记录,以便后续排查问题[^1]。 #### 案例分析 假设某公司需要为其数据中心内的上百台服务器部署新的软件包。如果采用传统的人工方式,可能需要几天甚至更长时间才能完成这项工作。然而,借助 Ansible,可以通过编写一个简单的 playbook 来实现这一目标: ```yaml --- - name: Deploy new software package hosts: all become: yes tasks: - name: Install the software package apt: name: my-software-package state: present ``` 上述代码片段展示了如何利用 Ansible 的 `apt` 模块在基于 Debian 的系统上安装指定软件包。只需运行此 playbook,即可快速完成整个数据中心的软件部署[^1]。 ### 结论 自动化运维实训为参与者提供了一个深入了解现代 IT 运维理念和技术的机会。通过掌握 Ansible 等工具的使用方法,以及结合 Python 编程能力,可以显著提高个人及团队的运维水平。此外,加强网络安全意识也是保障企业信息系统稳定运行的关键因素之一[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值