本节涵盖升级过程的每个组件:
注解
所有升级的系统版本不能比您当前要升级到的版本低两个主要版本。例如,要升级到 Ansible Tower 3.6.x,您必须首先是在使用版本 3.4.x,没有从版本 3.3.x 直接升级的路径。请参阅客户门户网站的 recommended upgrade path article。
为了在 RHEL 8 上运行 Ansible Tower 3.5,还必须安装 Ansible 2.8 或更高版本。
本节论述了当您试图升级 Ansible Tower 实例时您应注意的更改
如果需要升级 RHEL 和 Ansible Tower,则需要备份和恢复 Tower 数据。如需更多详情,请参阅 Ansible Tower Installation and Reference Guide 中的 Upgrading an Existing Tower Installation。
因为 Ansible Tower 从 3.5 开始使用 Python 3 运行,所以在升级到 Ansible Tower 3.5 之前,/etc/tower/conf.d
中的自定义设置文件必须是有效的 Python3。
任何添加到 /etc/tower/settings.py
中的自定义设置都必须在 Configure Tower 用户界面中设置,或者在升级到 Ansible Tower 3.5 前移到 /etc/tower/conf.d
中的文件中。
Ansible Tower 3.0 简化安装并删除了作为初始设置一部分运行 Ansible Tower 的需要。
不再使用文件 tower_setup_conf.yml
,您现在应该在 ``/ansible-tower-setup-<tower_version>/``目录中编辑 inventory 文件。
Tower 的早期版本在设置初始数据库时使用 MongoDB,请注意 Ansible Tower 3.0 已经用 PostgreSQL 替换了 MongoDB。
在开始升级前,集群升级需要特别注意实例和实例组。请参阅 设置清单(Inventory)文件 部分。
在 Ansible Tower 3.3 中进行了 API 身份验证更改,以适应其他 OAuth2 功能。如需更多信息,请参阅 Ansible Tower Administration Guide 中的 Token-Based Authentication。
您可以安装独立 Tower 或者使用捆绑的安装程序:
如果您在有互联网直接访问能力的环境中设置 Tower,您可以下载独立的 Tower 安装程序
如果您在一个没有直接访问在线软件仓库的环境中设置 Tower,或者您的环境需要使用代理,您必须使用捆绑的安装程序
下载并展开 Ansible Tower 安装/升级工具:http://releases.ansible.com/ansible-tower/setup/
root@localhost:~$ tar xvzf ansible-tower-setup-latest.tar.gz
root@localhost:~$ cd ansible-tower-setup-<tower_version>
要安装或升级,请首先编辑 ansible-tower-setup-<tower_version>
目录中的 inventory 文件,使用实际的版本目录(如 2.4.5
或 3.0.0
)替换 <tower_version>
。
在编辑清单(inventory)文件时,您必须记住以下几点:
清单文件的内容应该在 ./inventory
中定义,并由 ./setup.sh
安装程序 playbook 引用。
安装和升级:如果需要使用外部数据库,您必须确保清单文件中的数据库部分被正确设置。在运行设置脚本前,编辑此文件以添加外部数据库信息。
升级现有集群:当升级集群时,您可能需要重新配置集群以忽略现有的实例或实例组。从清单文件中删除这些实例或实例组不足以从集群中删除它们。除了在清单文件中删除它们以外,在开始升级前,请参阅 deprovision instances or instance groups 的内容进行需要的操作。否则,忽略的实例或实例组将继续与集群通信,这可能会导致 tower 服务在升级过程中出现问题。
集群安装:如果您要创建集群设置,则必须使用所有实例的主机名或 IP 地址替换 localhost
。所有节点/实例都必须能够使用这个主机名或 IP 地址访问其他节点。换句话说,您不能在其中一个节点上使用 localhost ansible_connection=local
*并且*所有节点都应该使用相同的主机名格式。
因此,这将*不能*工作:
[tower]
localhost ansible_connection=local
hostA
hostB.example.com
172.27.0.4
需要使用以下格式:
[tower]
hostA
hostB
hostC
或者
hostA.example.com
hostB.example.com
hostC.example.com
或者
[tower]
172.27.0.2
172.27.0.3
172.27.0.4
所有标准安装:当执行安装时,您必须在清单文件中提供所需的密码。
注解
对安装过程所做的更改现在需要填写清单文件中的所有密码字段。它们应该和以下类似:。它们应该和以下类似:
admin_password=''
<-- Tower 本地 admin 密码
pg_password=''
<---- 在 /etc/tower/conf.d/postgres.py 中
rabbitmq_password=''
<---- 在这里创建一个新密码(不包括特殊字符的字母数字组合)
清单文件示例
置备新节点:当置备新节点时,将节点添加到清单文件,确保所有密码都包含在清单文件中。
升级一个节点:当升级时,将清单文件与当前版本进行比较。推荐即使在升级时,也在清单文件中保存密码。
单节点清单文件示例
[tower]
localhost ansible_connection=local
[database]
[all:vars]
admin_password='password'
pg_host=''
pg_port=''
pg_database='awx'
pg_username='awx'
pg_password='password'
rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password='password'
rabbitmq_cookie=rabbitmqcookie
# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false
# Needs to remain false if you are using localhost
多节点集群清单文件示例
[tower]
clusternode1.example.com
clusternode2.example.com
clusternode3.example.com
[database]
dbnode.example.com
[all:vars]
ansible_become=true
admin_password='password'
pg_host='dbnode.example.com'
pg_port='5432'
pg_database='tower'
pg_username='tower'
pg_password='password'
rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password=tower
rabbitmq_cookie=rabbitmqcookie
# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=true
现有外部数据库清单文件外部
[tower]
node.example.com ansible_connection=local
[database]
[all:vars]
admin_password='password'
pg_password='password'
rabbitmq_password='password'
pg_host='database.example.com'
pg_port='5432'
pg_database='awx'
pg_username='awx'
需要安装外部数据库的清单文件示例
[tower]
node.example.com ansible_connection=local
[database]
database.example.com
[all:vars]
admin_password='password'
pg_password='password'
rabbitmq_password='password'
pg_host='database.example.com'
pg_port='5432'
pg_database='awx'
pg_username='awx'
一旦进行了必要的修改,就可以运行 ./setup.sh
。
注解
需要对远程机器的 root 访问权限。在 Ansible 中,可以通过以下不同方式实现:
ansible_user=root ansible_ssh_pass="your_password_here" inventory host or group variables
ansible_user=root ansible_ssh_private_key_file="path_to_your_keyfile.pem" inventory host or group variables
ANSIBLE_BECOME_METHOD='sudo' ANSIBLE_BECOME=True ./setup.sh
ANSIBLE_SUDO=True ./setup.sh(只适用于 Ansible 2.7)
DEFAULT_SUDO
Ansible 配置参数在 Ansible 2.8 中被删除,这会导致使用 ANSIBLE_SUDO=True ./setup.sh
进行权限升级的方法无法正常工作。如需了解关于 become
插件的更多信息,请参考 Understanding Privilege Escalation 和 list of become plugins。
注解
Ansible Tower 3.0 简化了安装过程,它不再需要运行 ./configure/
。使用老版本的用户需要根据 v.2.4.5 (或更老版本) 文档中的内容进行操作。Tower 文档可以通过 http://docs.ansible.com/ 获得。
Tower 的设置(setup)playbook 脚本使用 inventory
文件,它通过 Tower 安装程序 tarball 被解包到的目录中的 ./setup.sh
运行。
root@localhost:~$ ./setup.sh
设置脚本使用以下参数:
-h
-- 显示帮助信息并退出
-i INVENTORY_FILE
-- 到 Ansible 清单文件的路径(默认: inventory
)
-e EXTRA_VARS
-- 使用 key=value 或 YAML/JSON 设置额外的 Ansible 变量(例如, -e bundle_install=false
强制在线安装)
-b
-- 在安装时执行数据库备份
-r
-- 在安装时执行数据库恢复(除非通过 EXTRA_VARS 提供了一个非默认的路径,使用默认的恢复路径。如下所示)
./setup.sh -e 'restore_backup_file=/path/to/nondefault/location' -r
注解
请注意,在 Tower 3.0.0 和 3.0.1 中发现了一个会阻止正确系统备份和恢复的问题。
如果您需要备份或恢复 Tower v3.0.0 或 v3.0.1 安装,请使用 v3.0.2 安装程序进行。