当前位置:首页 > 行业动态 > 正文

怎么使用Ansible安装软件

Ansible简介

Ansible是一个自动化运维工具,可以帮助我们完成配置管理、应用部署、任务执行等一系列运维工作,Ansible使用SSH协议进行远程连接,通过在目标主机上预先配置好一套完整的playbook(即预设的任务列表),可以实现对目标主机的批量操作,Ansible支持多种操作系统,如Linux、Windows、Mac OS等,广泛应用于企业级运维场景。

安装Ansible

1、安装Python

Ansible是基于Python开发的,所以首先需要在目标主机上安装Python,以Ubuntu为例,可以使用以下命令安装Python:

sudo apt-get update
sudo apt-get install python3

2、安装pip

pip是Python的包管理工具,用于安装和管理Python软件包,在安装了Python之后,我们需要安装pip,以Ubuntu为例,可以使用以下命令安装pip:

sudo apt-get install python3-pip

3、安装Ansible

使用pip安装Ansible非常简单,只需运行以下命令:

pip3 install ansible

4、验证安装

安装完成后,可以通过运行以下命令来验证Ansible是否安装成功:

ansible --version

如果能看到Ansible的版本信息,说明安装成功。

使用Ansible安装软件

Ansible的主要功能之一就是帮助我们完成软件的安装,下面将以在Ubuntu系统上安装一个名为“example”的软件包为例,介绍如何使用Ansible进行软件安装。

1、准备playbook文件

我们需要编写一个名为“install_example.yml”的playbook文件,用于描述我们的安装任务,在这个文件中,我们需要指定目标主机、任务列表以及任务执行的方式等信息,以下是一个简单的示例:


name: Install example package on Ubuntu hosts
  hosts: all
  tasks:
    name: Update APT package manager repositories
      apt: update_cache=yes
    name: Install example package
      apt: name=example state=present ensure=yes force=yes

这个playbook包含两个任务:第一个任务是更新APT软件包管理器的仓库;第二个任务是安装名为“example”的软件包,注意,我们在第二个任务中使用了“state=present”和“ensure=yes”参数,这是为了确保软件包被正确地安装,我们还设置了“force=yes”参数,以便在软件包已经存在的情况下强制重新安装。

2、创建inventory文件

在使用Ansible进行远程操作之前,我们需要为每个目标主机创建一个inventory文件,用于描述主机的基本信息,我们可以创建一个名为“hosts”的文件,内容如下:

[ubuntu]
192、168.1.100 ansible_user=root ansible_ssh_pass=your_password example_user=example example_group=example sudo=yes state=present fqdn=example.com domain=example.com serialno=1234567890 productid=1234567890 model=ExampleModel version=1.0.0 release=1.0.0 codename=ExampleCodename locale=en_US timezone=UTC supported_products=ExampleProducts supported_versions=ExampleVersions systemd_unit=example.service systemd_template=/etc/systemd/system/example.service systemd_networkd_unit=example.networkd service_type=simple network_interfaces={{ item }} enabled='true' comment='{{ item }}' aliases='{{ item }}' addresses='{{ item }}' gateways='{{ item }}' netmasks='{{ item }}' routes='{{ item }}' vlan_id='{{ item }}' vlan_names='{{ item }}' bond_mode='{{ item }}' bond_miimon='{{ item }}' bond_slaves='{{ item }}' bond_opts='{{ item }}' icmp_pingable='{{ item }}' sources='{{ item }}' sources_exclude='{{ item }}' forwarders='{{ item }}' proxyarp='{{ item }}' proxydns='{{ item }}' skip_if_unavailable='false' commit_interval='30 seconds' restart_retries='5' restart_limit='3' restart_condition='not_active' wait_before_restart='5 seconds' wait_after_restart='5 seconds' enable_service='true' disable_service='false' enabled='true' start_on_boot='true' checksum='sha256:<hash>' postconfig='/usr/local/bin/postconfig --system-install --prefix={{ item }} {{ item | regex_replace('^(/usr|/etc)/(?!systemd).*$')|regex_replace('(?<!\w)(?<![a-z])[[:alpha:]]*(?<!\w)(?<![a-z])[[:alpha:]]*(?<!w)(?<![a-z])[[:alpha:]]*(?<!\w)(?<![a-z])[[:alpha:]]*$')|regex_replace('^(/usr|/etc)/(?!systemd).*$')|regex_replace('^(/usr|/etc)/(?!systemd).*$','')}|regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_replace('^(/usr|/etc)/(?!systemd).*$','')||regex_{item}|regex_{item}" validate="{{( 'all': 'valid' if item in inventory['ubuntu']['vars'].keys() else 'invalid' )}}" notify="Restart System" when="{{( 'any': 'changed' if changed else 'unchanged') and ( not hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] in ['yes','no'] or hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] == 'mixed') and ( not hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] in ['yes','no'] or hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] == 'mixed') and ( not hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] in ['yes','no'] or hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] == 'mixed') and ( not hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] in ['yes','no'] or hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] == 'mixed') and ( not hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] in ['yes','no'] or hostvars[inventory['ubuntu']['vars'][item]]['ansible_managed'] ==
0