如何在Ubuntu Linux上安装和配置最新版本的Ansible
如何在Ubuntu Linux 16.04/18.04 LTS或17.10/18.10桌面控制计算机上安装Ansible?
说明:Ansible是一个简单易用的IT自动化工具。
可以使用Ansible部署应用程序和系统/VM /容器。
Ansible配置使用简单的英语编写,并且可以使用SSH在远程/本地服务器上工作。
远程服务器上不需要代理。
在此教程中,您将在Ubuntu Linux 16.04/18.04 LTS或19.04桌面系统上安装最新版本的Ansible,并了解如何将软件用于自动化目的的一些基础知识。
请注意,您可以使用官方Ubuntu仓库提供的sudo apt remove ansible命令删除旧版本。
如何在Ubuntu Linux上安装和配置最新版本的Ansible
您必须在系统上配置PPA才能安装最新版本的ansible。
要管理从各种PPA(个人软件包存档)安装软件的存储库。
它允许您上载由Launchpad构建和发布为apt存储库的Ubuntu源程序包。
执行以下apt-get命令或apt命令:
$ sudo apt update $ sudo apt upgrade $ sudo apt install software-properties-common
接下来将ppa:ansible/ansible添加到您的系统中软件来源:
$ sudo apt-add-repository ppa:ansible/ansible
更新您的存储库:
$ sudo apt update
要安装最新版本的ansible,请执行:
$ sudo apt install ansible
找出Ansible版本
执行以下命令:
$ ansible --version
输出示例:
ansible 2.8.3 config file = /etc/ansible/ansible.cfg configured module search path = [u'/home/Hyman/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/dist-packages/ansible executable location = /usr/bin/ansible python version = 2.7.15+ (default, Nov 27 2016, 23:36:35) [GCC 7.3.0]
创建您的主机文件
Ansible需要知道您的远程服务器名称或IP地址。
此信息存储在名为主机的文件中。
缺省值为/etc/ansible/hosts。
您可以编辑此文件或在$HOME目录中创建一个新文件:
$ sudo vi /etc/ansible/hosts
或者
$ vi $HOME/hosts
追加服务器的DNS或IP地址:
[webservers] server1.theitroad.local 104.20.187.5 104.20.186.5 [devservers] 10.98.222.4 10.98.222.7 10.98.222.8
我有两个小组。
第一个名为webserver,另一个称为devservers。
设置SSH密钥
您必须在~/hosts文件中指定的计算机和远程服务器之间配置ssh密钥:
$ ssh-keygen -t rsa -b 4096 -C "My ansisble key"
使用scp或ssh-copy-id命令将您的公钥文件(例如$HOME/.ssh/id_rsa.pub)复制到远程服务器/主机上的帐户中:
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected] $ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected] $ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected] $ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected] $ eval $(ssh-agent) $ ssh-add
现在,ansible可以使用ssh命令与所有远程服务器通信。
将ping请求发送到所有服务器
只需执行以下命令:
$ ansible -i ~/hosts -m ping all
输出示例:
10.98.222.4 | SUCCESS => { "changed": false, "failed": false, "ping": "pong" } 10.98.222.7 | SUCCESS => { "changed": false, "failed": false, "ping": "pong" } 10.98.222.8 | SUCCESS => { "changed": false, "failed": false, "ping": "pong" }
找出所有主机的正常运行时间
$ ansible -i hosts -m shell -a 'uptime' all
输出示例:
do-de.public | SUCCESS | rc=0 10:37:02 up 1 day, 8:39, 1 user, load average: 0.95, 0.27, 0.12 do-blr-vpn | SUCCESS | rc=0 16:07:11 up 1 day, 8:43, 1 user, load average: 0.01, 0.01, 0.00 ln.gfs01 | SUCCESS | rc=0 10:37:17 up 22 days, 5:30, 1 user, load average: 0.18, 0.12, 0.05
其中:
-i~/hosts
:指定库存主机路径。您可以设置shell变量并跳过-i选项。例如:export ANSIBLE_HOSTS =~/hosts
-m shell
:要执行的模块名称,例如shell,apt,yum等。-a'uptime'
:模块参数。例如,shell模块将接受Unix/Linux命令名称。 apt模块将接受使用apt-get/apt命令等更新远程设备的选项。all
:所有表示所有主机。您可以指定组名称,例如devservers(" ansible -i hosts -m shell -a'uptime" dbservers)或主机名。
使用apt模块更新所有Debian/Ubuntu服务器
运行以下命令:
$ ansible -i ~/hosts -m apt -a 'update_cache=yes upgrade=dist' dbservers
编写第一个playbook
您可以按照yml格式将所有模块组合到一个文本文件中,如下所示,即创建一个名为update.yml的文件:
-- - hosts: dbservers tasks: - name: Updating host using apt apt: update_cache: yes upgrade: dist
这是我的主机文件:
cat hosts
输出示例:
[all:vars] # Username for ssh connection ansible_user='Hyman' # Run commands as root user? ansible_become='yes' # How do I become root user? Use sudo. ansible_become_method='sudo' # Password for sudo ansible_become_pass='superSecretPassword' ################################################### # Password for sudo user i.e. ansible_user password # See https://www.theitroad.local/faq/how-to-set-and-use-sudo-password-for-ansible-vault/ # Read it from an encrypted file # ansible_become_pass='{{ my_sudo_password }}' ################################################### [dbservers] 10.98.222.4 10.98.222.7 10.98.222.8
现在,您可以按以下方式运行它:
$ ansible-playbook -i ~/hosts update.yml
您只需在Ubuntu Linux上安装和配置最新版本的Ansible,然后运行您的第一本剧本。
关于Python版本3的注释
Ansible需要在远程服务器上安装python。
您可以在hosts文件中使用以下语法指定python的远程版本:
ansible_python_interpreter='/usr/bin/env python3'
例如,这是我使用cat命令显示的示例主机文件:
cat hosts
[all:vars] ansible_user='{{ my_user }}' ansible_become=yes ansible_become_method=sudo ansible_become_pass='{{ my_user_pass }}' ansible_python_interpreter='/usr/bin/env python3' [bsdboxes] 192.168.1.30 192.168.1.31 192.168.1.32 192.168.1.33