雲平台工具容器升級小記 - gcloud 412.0 / AWS Cli 2.9.12 / ansible 2.11.12
OS: container with openSUSE Leap 15.4
上次升級是 2022/10 , 這次會來升級的原因是
- 因應 GKE, 安裝 gke-gcloud-auth-plugin 與 kubectl 
- Azure 再官方文件上面宣告 2.39.0 之後就不支援 openSUSE / SUSE, 請使用者用其他的 OS 版本 - 故移除 azure cli 與 azure ansible module 
- 更新 gcloud 以及 AWS Cli 版本 
同步紀錄一下目前 Azure CloudShell 上面的 Ansible 資訊
- Ansible: 2.13.3 / python 3.9.14 
先整理結果
升級前
OS: openSUSE Leap 15.4
awscli: aws-cli/2.8.5 Python/3.9.11
gcloud: Google Cloud SDK 406.0.0
azure-cli: 2.35.0 (目前有 bug)
ansible: 2.11.12
升級後
OS: openSUSE Leap 15.4
awscli: aws-cli/2.9.12 Python/3.9.11
gcloud: Google Cloud SDK 412.0.0
ansible: 2.11.12
GCP Cloud SDK 版本
AWS CLI v2 安裝文件
另外執行 ansible --version 也會收到之後 ansible 需要 python 3.8 以上的告警, 訊息如下
[DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. Current version: 3.6.15 (default, Sep 23
2021, 15:41:43) [GCC]. This feature will be removed from ansible-core in
version 2.12. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
- 這個部份應該是因為 openSUSE Leap 15.x 還是基於 SLES 15, 所以 python 的策略是還在 3.6, 只能先這樣 
這次的做法還是會透過 docker build 指令來進行
- 我有比較過 docker build 以及使用現有的 docker image 修改後再使用 docker commit 建立的 image 大小還是很有差異的 
Dockerfile 的部分我是拿之前的 Dockerfile 來修改目前是 openSUSE Leap 15.4
修改細節
- Update time 
- 移除 Azure CLI 安裝以及 Ansible Azure module 
- Google SDK 版本還有下載的檔案路徑以及檔案名稱 
- 安裝 kubectl 以及需要的 components 
列出 diff 的結果給大家參考
> diff opensuseLeap153_ansible_20221022_Dockerfile opensuseLeap154_ansible_20230102_Dockerfile
< # update time: 20221022
---
> # update time: 20230102
45,48c45,50
< RUN zypper install -y curl && \
< rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
< zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
< zypper install --from azure-cli -y azure-cli
---
> # 2023/1/2 Azure 宣告不支援openSUSE/SUSE, 所以不進行安裝 - https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=zypper
> #
> #RUN zypper install -y curl && \
> # rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
> # zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
> # zypper install --from azure-cli -y azure-cli
52,56c54,58
< RUN zypper install -y curl && \
< curl -O https://raw.githubusercontent.com/ansible-collections/azure/dev/requirements-azure.txt && \
< pip3 install -r requirements-azure.txt && \
< rm -f requirements-azure.txt && \
< ansible-galaxy collection install azure.azcollection
---
> #RUN zypper install -y curl && \
> # curl -O https://raw.githubusercontent.com/ansible-collections/azure/dev/requirements-azure.txt && \
> # pip3 install -r requirements-azure.txt && \
> # rm -f requirements-azure.txt && \
> # ansible-galaxy collection install azure.azcollection
76c78
< # Install google cloud SDK 381.0.0
---
> # Install google cloud SDK 412.0.0
78,79c80,81
< RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-406.0.0-linux-x86_64.tar.gz && \
< tar zxvf google-cloud-sdk-406.0.0-linux-x86_64.tar.gz && \
---
> RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-412.0.0-linux-x86_64.tar.gz && \
> tar zxvf google-cloud-sdk-412.0.0-linux-x86_64.tar.gz && \
82a85,89
>
> # Install kubect and gke-gcloud-auth-plugin
> # https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl
> RUN /google-cloud-sdk/bin/gcloud components install gke-gcloud-auth-plugin
> RUN /google-cloud-sdk/bin/gcloud components install kubectl
Dockerfile 內容如下
- 我檔案的名稱取名爲 opensuseLeap154_ansible_20230102_Dockerfile 
# openSUSE Leap 15.4 with ansible, azure-cli, aws cli, gcloud
FROM opensuse/leap:15.4
# Author
# MAINTAINER 已經棄用, 之後要使用 LABEL 方式
# update time: 20230102
LABEL maintainer="sakana@cycu.org.tw"
# Set LANG for UTF-8 - for Chinese
ENV LANG C.UTF-8
# Install python3-pip, upgrade pip, ansible, boto, boto3
RUN zypper refresh && \
zypper install -y python3-pip && \
pip3 install --upgrade pip && \
pip3 install ansible && \
pip3 install boto boto3
# Install openssh, set ls alias
RUN zypper install -y openssh
RUN echo "alias ls='ls --color=tty'" >> /root/.bashrc
# Install wget, download azure_rm.py, set permission
RUN zypper install -y wget
# azure_rm.py no need to download
# Starting with Ansible 2.8, Ansible provides an Azure dynamic-inventory plug-in
# https://docs.ansible.com/ansible/latest/plugins/inventory/azure_rm.html
# old azure_rm.py URL https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py
#
# Create working directory in /root
RUN mkdir /root/.azure && \
mkdir /root/.aws && \
mkdir /root/playbook && \
mkdir -p /root/.config/gcloud && \
wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/ansible.cfg && \
mv /ansible.cfg /root && \
wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/hosts && \
mv /hosts /root
#### Azure ####
# Install azure-cli
# 2020/11/29 Still have az login issue in Github https://github.com/Azure/azure-cli/issues/13209
# 2023/1/2 Azure 宣告不支援openSUSE/SUSE, 所以不進行安裝 - https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=zypper
#
#RUN zypper install -y curl && \
# rpm --import https://packages.microsoft.com/keys/microsoft.asc && \
# zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \
# zypper install --from azure-cli -y azure-cli
# Install Ansible azure module
# After ansible 2.10, some module move to ansible collect, change install method
#RUN zypper install -y curl && \
# curl -O https://raw.githubusercontent.com/ansible-collections/azure/dev/requirements-azure.txt && \
# pip3 install -r requirements-azure.txt && \
# rm -f requirements-azure.txt && \
# ansible-galaxy collection install azure.azcollection
#install vim tar gzip jq unzip less bind-utils iputils groff
RUN zypper install -y vim tar gzip jq unzip less bind-utils iputils groff
RUN echo "set encoding=utf8" > /root/.vimrc
#### AWS ####
# Install awscli v1
#RUN pip3 install awscli
#RUN echo "source /usr/bin/aws_bash_completer" >> /root/.bashrc
# Install awscli v2
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
/aws/install
RUN echo "complete -C '/usr/local/bin/aws_completer' aws" >> /root/.bashrc
#### GCP ####
# Install google cloud SDK 412.0.0
ENV CLOUDSDK_CORE_DISABLE_PROMPTS 1
RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-412.0.0-linux-x86_64.tar.gz && \
tar zxvf google-cloud-sdk-412.0.0-linux-x86_64.tar.gz && \
/google-cloud-sdk/install.sh && \
echo "if [ -f '/google-cloud-sdk/path.bash.inc' ]; then . '/google-cloud-sdk/path.bash.inc'; fi" >> /root/.bashrc && \
echo "if [ -f '/google-cloud-sdk/completion.bash.inc' ]; then . '/google-cloud-sdk/completion.bash.inc'; fi" >> /root/.bashrc
# Install kubect and gke-gcloud-auth-plugin
# https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl
RUN /google-cloud-sdk/bin/gcloud components install gke-gcloud-auth-plugin
RUN /google-cloud-sdk/bin/gcloud components install kubectl
使用 docker build 指令建立 image
> docker build -t sakana/ansible_opensuse154:20230102 -f ./opensuseLeap154_ansible_20230102_Dockerfile .
- 使用 -f 指定 Dockerfile 名稱 
- 最後是 ” . “ 目前的目錄 
- 這邊有個網路問題自己小記一下, 不知為何, 在執行 docker build 之前要先 ping 一下外部網路 IP 或是 FQDN, 再進行 docker build 就沒有相關問題, 日後再研究 
測試 container image
> docker run -v ~/.aws:/root/.aws -v ~/.azure:/root/.azure -v ~/.config/gcloud:/root/.config/gcloud -it sakana/ansible_opensuse154:20230102 /bin/bash
測試結果 OK, 建立 tag
觀察資訊
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sakana/ansible_opensuse154 20230102 1d643691def7 14 minutes ago 3.73GB
opensuse/leap 15.4 d6a4298be45c 2 weeks ago 113MB
建立 tag
> docker tag 1d643691def7 sakana/ansible_opensuse154:latest
登入 docker
> docker login
上傳 image
> docker push sakana/ansible_opensuse154:20230102
> docker push sakana/ansible_opensuse154:latest
完工, 以後使用就用
> docker run -v ~/.aws:/root/.aws -v ~/.azure:/root/.azure -v ~/.config/gcloud:/root/.config/gcloud -it sakana/ansible_opensuse154 /bin/bash
額外小記: 更新 blog 就會順道檢查 Azure 的認證資訊有沒有超過一年, 參考之前自己的筆記
- http://sakananote2.blogspot.com/2020/05/azure-dynamic-inventory-with-ansible.html 
- 在 Azure Cloud Shell 使用 az ad sp list --all --output table | grep azure-cli 找出舊的認證, 
- 刪除他 ex: # az ad sp delete --id d06f8905-ad21-425b-9da5-3e0bcf22a853 
- 然後建立新的認證 ex: # az ad sp create-for-rbac --query '{"client_id": appId, "secret": password, "tenant": tenant}' 
- 查詢 subscription_id, ex: # az account show --query "{ subscription_id: id }" 
- 更新 ~/.azure/credentials 內的 client_id 以及 secret 
~ enjoy it
Reference:
- https://sakananote2.blogspot.com/2022/10/gcloud-4060-aws-cli-285-ansible-21112.html 
- https://sakananote2.blogspot.com/2022/04/ansible-21110-aws-cli-256-gcloud-3810.html 
- https://sakananote2.blogspot.com/2021/12/ansible-2116-aws-cli-245-gcloud-3650.html 
- http://sakananote2.blogspot.com/2021/05/ansible-2109-aws-cli-224-gcloud-3400.html 
- http://sakananote2.blogspot.com/2020/11/ansible-2103-azure-module.html 
- https://sakananote2.blogspot.com/2020/11/opensuse-leap-152-container.html 
- https://stackoverflow.com/questions/64921336/warning-ansible-2-10-3-does-not-provide-the-extra-azure 
- http://sakananote2.blogspot.com/2020/08/opensuse-leap-152-container.html 
- https://sakananote2.blogspot.com/2020/05/aws-cli-v2-with-opensuse-leap-151.html 
- http://sakananote2.blogspot.com/2020/01/python-3-with-opensuse-leap-151.html 
- http://sakananote2.blogspot.com/2019/07/with-opensuse-leap-15-container.html 
- http://sakananote2.blogspot.com/2019/05/ansible-azure-cli-awscli-gcloud-with.html 
- http://sakananote2.blogspot.com/2019/11/with-opensuse-leap-151-container.html 
 
 
沒有留言:
張貼留言