ansible的基本使用

本文介绍了如何使用Ansible进行自动化运维,包括配置YUM仓库,刷新仓库,安装服务,管理服务状态,并展示了Ansible的常用模块如yum、service和copy的使用方法。通过示例演示了如何编写Ansible命令和剧本,以及如何使用模板替换文件内容。

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

和zabbix同理 在使用一个服务之前得保证我们的系统中有这个包 进行安装并启动服务

首先说一下是yum的三种形式

yum仓库:
本地的仓库:base_url = file:///media
本地网络仓库:base_url = http://10.15.200.8/c7
互联网的仓库base_url = http://mirrors.ailiyun.com/centos7/x64(这是阿里云的仓库,网络yum源)

这里我们配置好了仓库 刷新一下仓库 然后检查一下仓库

 yum clean all
yum repolist all(注:不刷新仓库,可能装包不成功)

在ansible中:

管理端contoller
被管理端 managed
ansible是基于tcp传输模式(可靠 安全)
ssh通信是基于tcp 加密系统自带 所以不需要安装客户端

首先先了解ansible 的语法
ansible 你要操作的主机 组名-m  模块的名字 -a 参数(注:shell模块加引号)
示例:ansible group1 -m ping                             对group1所有主机进行ping

-m shell 你要调用的模块 -a 你要执行的命令

shell支持管道 command不支持管道

每次的命令结果:

红色肯定是报错
紫色警告
绿色成功
浅黄色是第一次成功

如何查看帮助:ansible-doc -l  可以看到服务自带的模块有3387种

[root@ansible ~]# ansible-doc -l |wc -l
3387
3387模块的数量 如:ping yum service

content=你要写的内容 

安装包:
state:
name=php为例
present:如果没有安装,则进行安装;如果安装过,不会安装
absent:删除对应的包(离席)
latest:不论安没安装 都去仓库找最新的

service:服务 (类似systemctl)
state:
started:保证服务是开启的状态 (如是已经启动就不再启动)
restart:每次都要重启 服务
stopped:保证开机自启
restarted 重启服务

name=服务的名字 systemctl start 后面的名字
state=started保证状态为active enabled=yes
开机启动相当于sysyemctl enable 前面哪个 name=服务的名字

一般部署一个服务一般就是分为三步

1.安装包

2.修改配置文件

3.设置服务的启动开机自启

这里只会是在第二步的时候变量比较多 

ansible-inventory  --graph(图形化查看你的inventory内主机)
@all:  (所有主机等于/etc/ansible/inventory)
  |--@group1:
  |  |--10.15.200.102
  |  |--node01
  |  |--node03.example.cn
  |--@ungrouped:
这也是查询的一种方式:
ansible-inventory --list


如何查看帮助

这是查看yum的帮助
ansible-doc yum
vi这个文件 然后找EXAMPLES开头的
/usr/lib/python2.7/site-packages/ansible/modules/packaging/os/yum.py
ansible-doc yum |grep -A 100 EXAMPLES

简单的操作

ansible all -m copy -a 'content="自动化很简单" dest=/var/www/html/0516.html'
content=你要写的内容 dest=你要把东西放哪 写到哪个文件里
'content="自动化很简单" dest=/var/www/html/0516.html'
这外面是单引号 里面就是双引号 或者反向一样 外面双引号里面就单引号
dest 前面有空格

ansible all -m shell -a 'cat /var/www/html/0516.html'
node01 | CHANGED | rc=0 >>
自动化很简单
node03.example.cn | CHANGED | rc=0 >>
自动化很简单
10.15.200.102 | CHANGED | rc=0 >>
自动化很简单
ansible all -m shell -a 'curl http://127.0.0.1/0516.html'
这是用网页的方式去看
[WARNING]: Consider using the get_url or uri module rather than running 'curl'.
If you need to use command because get_url or uri is insufficient you can add
'warn: false' to this command task or set 'command_warnings=False' in
ansible.cfg to get rid of this message.
node03.example.cn | CHANGED | rc=0 >>
自动化很简单  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

command_warnings=False(上面这一长段里写了 意思不要你用shell 有更好的方式 如果不想看到这个提示 就ansible.cfg配置文件加这一行
 command_warnings=False   vi加这一行加了就没有提示了

curl http://10.15.200.101/0516.html
自动化很简单[root@ansible ~]# 

这个自动化很简单应该在下一行的 加个换行

这里重新执行一下这条命令
ansible all -m copy -a 'content="我要换行啦\n" dest=/var/www/html/0516.html'
curl http://10.15.200.101/0516.html
我要换行啦

copy:复制一个文件 
ansible group1 -m copy -a 'src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf'(这里是做了一个修改http端口的号的修改 改成0518了)
curl httpd://10.15.200.101:5018/0516.html
curl: (1) Protocol httpd not supported or disabled in libcurl
这样出错了 修改了配置文件要重启服务
调用service 重启所有节点的httpd服务
ansible all -m service -a 'name=httpd state=restarted'
netstat-tualnp

上面讲的是copy:直接生成内容 和本地文件复制到对端

copy 不可以复制或创建 没有文件或目录
要自己先创建好

file:
ansible all -m file -a 'path=/data/web/2020/0518 state=directory recurse=yes'
path=路径 state=directory 说明他是一个目录
recurse=yes递归创建 相当于mkdir -p

剧本:playbook

相同的功能 缩进必须要一致
比如- name: 安装httpd
冒号的后面必须有一个空格
空格与tab 不能混用

- name: 搭建wordpress的基础环境 包含httpd php mariadb
  hosts: group1
  tasks:
必须对齐 手动按两空格太费事
# 自动补全 将一个 tab 设置为 默认两个 空格
echo "autocmd FileType yaml setlocal ai ts=2 sw=2 et" > $HOME/.vimrc
 

模板 这是里系统的欢迎界面 /etc/motd
vim  motd.j2
Welcome to
        FQDN: {{ ansible_fqdn }}
        主机名是: {{ ansible_hostname }}
        IP地址是: {{ ansible_default_ipv4.address }}
        网卡的名字是: {{ ansible_default_ipv4.alias }}
~                                                                         先写好对应的变量

然后
vim sync_motd.yml
- name: sync motd
  hosts: group1
  tasks:
    - name: welcomte to motd
      template:
        src: motd.j2
        dest: /etc/motd

 模板 替换文件 内容                                                                                                                        - name: change port
      replace:
        path: /etc/httpd/conf/htppd.conf 
        regexp: "Listen 80"
        replace: "Listen 5020"
这是把 /etc/httpd/conf/htppd.conf 
文件中 查找Listen 80 换成 Listen 5020

                                
files:放copy模块需要的文件
templates:templates模板需要的东西
tasks/main.yml 这是程序的入口 (程序就是从这执行)
 



 

### Ansible 基本配置教程 #### 1. 安装与环境准备 Ansible 是一种基于 Python 的自动化工具,因此需要确保系统已安装 Python 和相关依赖。在大多数 Linux 发行版中,可以通过包管理器安装 Ansible。例如,在 CentOS使用以下命令安装: ```bash yum install epel-release -y yum install ansible -y ``` 对于 Ubuntu 系统,可以使用以下命令[^2]: ```bash apt-get update apt-get install software-properties-common apt-add-repository --yes --update ppa:ansible/ansible apt-get install ansible ``` #### 2. 配置 Inventory 文件 Ansible 使用 `inventory` 文件定义要管理的主机列表。默认情况下,该文件位于 `/etc/ansible/hosts`。可以通过编辑此文件来添加主机或主机组。例如: ```plaintext # 单个主机 192.168.100.59:22 # 主机带密码和端口 192.168.100.60 ansible_ssh_pass='123456' ansible_ssh_port=22 # 主机组 [nginx] 192.168.100.57 192.168.100.58 [nginx:vars] ansible_ssh_pass='123456' [webservers:children] nginx ``` 上述配置展示了如何定义单个主机、主机组以及子组,并为特定组设置变量[^3]。 #### 3. 测试连接 完成配置后,可以使用以下命令测试与目标主机的连接: ```bash ansible all -m ping ``` 如果所有主机都返回 `pong`,则表示连接成功。如果部分主机无法连接,请检查 SSH 密钥、密码或网络配置。 #### 4. 配置 Ansible 主配置文件 Ansible 的主配置文件通常位于 `/etc/ansible/ansible.cfg`。可以通过编辑此文件来自定义行为。以下是一个典型的配置示例: ```ini [defaults] inventory = /etc/ansible/hosts remote_user = devops ask_pass = True host_key_checking = False forks = 10 ``` - `inventory` 指定库存文件路径。 - `remote_user` 定义远程主机上的默认用户。 - `ask_pass` 控制是否提示输入 SSH 密码。 - `host_key_checking` 禁用 SSH 主机密钥检查。 - `forks` 定义并发执行的任务数[^5]。 #### 5. 执行 Ad-Hoc 命令 Ansible 提供了两种方式执行任务:Ad-Hoc 和 Playbook。Ad-Hoc 是一种简单的方式,适合快速执行一次性任务。例如,可以在所有主机上安装 `httpd`: ```bash ansible webservers -m yum -a 'name=httpd state=present' ``` 卸载软件时可以使用以下命令: ```bash ansible webservers -m yum -a 'name=httpd state=absent' ``` #### 6. 创建 Playbook Playbook 是一种更复杂的任务执行方式,适合复杂场景。以下是一个简单的 Playbook 示例,用于复制文件并设置权限: ```yaml --- - name: 配置 NTP 服务 hosts: all tasks: - name: 复制 NTP 配置文件 copy: src: /mine/ntp.conf dest: /etc/ntp.conf owner: root group: root mode: '0644' backup: yes ``` 将上述内容保存为 `ntp.yml` 并运行: ```bash ansible-playbook ntp.yml ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值