てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] Ansible 3 以降のモジュール一覧のページ

はじめに

Ansible のモジュールの一覧を確認したいときは、よく公式ドキュメントを参照します。Ansible 2.9 までは、Module Indexというページがあり、さらにカテゴリごとのページに飛べます。また、All modules というページでは全モジュールの一覧が表示されます。

Ansible-base 2.10 / Ansible 3 からは、本体と一緒に管理されていたモジュールの多くがコレクションに移行した関係で、ドキュメントの構造も変わりました。

「前にあった All modules みたいにモジュール一覧のページどっかないのかな」と思ってたら、ちゃんとあることに最近気が付きました。

モジュール一覧のページ

f:id:akira6592:20220407204101p:plain:w200
Indexes of all modules and plugins > Index of all Modules
こちらです。

左メニューの [Indexes of all modules and plugins] 内の [Index of all Modules] です。 

docs.ansible.com

ここに、ansible.builtin コレクション内のモジュールの他、Ansible Community Package に同梱される様々なコレクションのモジュールがリストになっています。

2.9 までにあったカテゴリごとではなく、コレクションごとに並んでいます。

なお、ansible-core 側のドキュメントの同じページには、ansible.builtin コレクションのみ掲載されています。

docs.ansible.com

(参考) コレクションのリスト

先程はコレクション串刺しのモジュールのリストでしたが、コレクションのリストは以下のページです。この切り口のリストは 2.9 は無かったものです。

docs.ansible.com

[Ansible] スキップされたタスクの結果は is skipped でもあり is succeeded でもある

はじめに

Ansible では、タスクの実行結果を変数に保存し、その結果を後続のタスクで確認する機能があります。

docs.ansible.com

そういえばどうなんだろうシリーズといいますか、「スキップされたタスクって succeeded 扱いだっけ?」と思ったことがありました。

結果としては、is skipped でもあり is succeeded でもありました。

試した結果をまとめます。

  • 検証環境
    • ansible 5.4.0
    • ansible-core 2.12.3

Playbook

こんな Playbook で試します。

---
- hosts: localhost
  gather_facts: false

  tasks:
    # (1) 必ずスキップされるタスク
    - name: skipped task
      ansible.builtin.debug:
        msg: this task is skipped
      register: resister_skipped
      when:
        - false

    # (2) 1が skipped 扱いの場合に実行されるタスク
    - name: debug result skipped
      ansible.builtin.debug:
        msg: resister_skipped is skipped
      when:
        - resister_skipped is skipped

    # (3) 1が succeeded 扱いの場合に実行されるタスク
    - name: debug result succeeded
      ansible.builtin.debug:
        msg: resister_skipped is succeeded
      when:
        - resister_skipped is succeeded

一番確かめたいたいのは (3) のタスクです。

結果

実行結果は以下のとおりです。 is succeeded を条件にしたタスク3も実行されました。

$ ansible-playbook -i localhost, success.yml     

PLAY [localhost] ***************************************************************************************

TASK [skipped task] ************************************************************************************
skipping: [localhost]

TASK [debug result skipped] ****************************************************************************
ok: [localhost] => {
    "msg": "resister_skipped is skipped"
}

TASK [debug result succeeded] **************************************************************************
ok: [localhost] => {
    "msg": "resister_skipped is succeeded"
}

PLAY RECAP *********************************************************************************************
localhost      : ok=2    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0  

なお resister_skipped 変数をデバッグ表示すると以下のとおりです。

    "resister_skipped": {
        "changed": false,
        "failed": false,
        "msg": "this task is skipped"
    }

私の解釈

コードでいうとこのあたりでしょうか。

github.com

failed でない場合は succeededまたは successsuccessful )のようです。

今回の場合は「正常に判断処理がされた結果、スキップできた」ことをもって succeeded なのかなと捉えています。

一方たとえば、(1) のタスクで、when に未定義の変数をした場合(確認のためにignore_errors: true も併用)はさすがに succeeded にはなりませんでした。

---
- hosts: localhost
  gather_facts: false

  tasks:
    # (1) when が異常
    - name: skipped task
      ansible.builtin.debug:
        msg: this task is skipped
      register: resister_skipped
      when:
        - hogehoge_undefined_variable
      ignore_errors: true
        
    # (2) 1が skipped 扱いの場合に実行されるタスク
    - name: debug result skipped
      ansible.builtin.debug:
        msg: resister_skipped is skipped
      when:
        - resister_skipped is skipped

    #  (3) 1がsucceeded 扱いの場合に実行されるタスク
    - name: debug result succeeded
      ansible.builtin.debug:
        msg: resister_skipped is succeeded
      when:
        - resister_skipped is succeeded

実行結果

PLAY [localhost] ***************************************************************************************************

TASK [skipped task] ************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The conditional check 'hogehoge_undefined_variable' failed. The error was: error while evaluating conditional (hogehoge_undefined_variable): 'hogehoge_undefined_variable' is undefined\n\nThe error appears to be in '/Users/akira/Documents/git/general/vagrant/nwlab/qa/success.yml': line 7, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n    # (1) when が異常\n    - name: skipped task\n      ^ here\n"}
...ignoring

TASK [debug result skipped] ****************************************************************************************
skipping: [localhost]

TASK [debug result succeeded] **************************************************************************************
skipping: [localhost]

PLAY RECAP *********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=1  

[Ansible] もくもく会コンテンツのリポジトリにある資料「Ansible Best Practices」

Ansible ユーザー会では定期的にもくもく会というハンズオンイベントを開催しています。

次回は 2022/04/21 です

コンテンツは以下のリポジトリにあります。

github.com

先日見つけたのですが、Ansible Best Practicesという資料がありました。

こうかいても動くけど、こう書いたほうがいい、というようなことや、テクニックが書かれています。

良い資料だなと思ったのでリンクを共有します。

github.com

ディレクトリは以下。

github.com

[Ansible] Automation Controller 上で実行環境コンテナ内のコレクション一覧を確認する(やや力技)

はじめに

AAP 2.x になってから、Ansible の実行環境が Python の venv から、コンテナに変わりました。

コンテナの中に、利用するコレクションを仕込んでおくわけですが、Automation Controller を触ってるときに、コンテナ内のコレクション一覧を確認したいときがあります。 ターミナルの戻らずに。横着かもなんですが・・。

そんなときの力技です。

アドホック実行を利用

Automation Controller にも、CLI 同様にアドホック実行機能があります。これを応用して localhost を対象として、確認したい実行環境を選んで ansible-galaxy colleciton list を実行すればコレクションの一覧を表示できます。

まず localhost があるインベントリで localhost を選択し、コマンドの実行をクリックします。デフォルトでは、Demo Inventory の中にあります。

localhost でコマンド実行

ここからアドホック実行のウィザード画面になります。

モジュールに command、引数に ansible-galaxy colleciton list を指定します。

利用モジュールと引数を指定

アドホック実行だと何故か認証情報の指定が必須(ジョブテンプレートでは任意)なので、ダミー的に Demo Credential を選択します。

認証情報の指定

確認画面になるので起動ボタンをクリックします。

確認画面

実行結果として、コレクション一覧が表示されます。

コレクション一覧の表示

Automation Controller 4.1.0 の Default execution environment (registry.redhat.io/ansible-automation-platform-21/ee-supported-rhel8:latest ) では以下の表示になりました。

# /usr/share/ansible/collections/ansible_collections
Collection              Version
----------------------- -------
amazon.aws              2.0.0  
ansible.controller      4.1.0  
ansible.netcommon       2.4.0  
ansible.network         1.2.0  
ansible.posix           1.2.0  
ansible.security        1.0.0  
ansible.utils           2.4.2  
ansible.windows         1.7.3  
arista.eos              3.1.0  
cisco.asa               2.1.0  
cisco.ios               2.5.0  
cisco.iosxr             2.5.0  
cisco.nxos              2.7.1  
cloud.common            2.0.3  
frr.frr                 1.0.3  
ibm.qradar              1.0.3  
junipernetworks.junos   2.6.0  
kubernetes.core         2.1.1  
openvswitch.openvswitch 2.0.2  
redhat.insights         1.0.5  
redhat.openshift        2.0.1  
redhat.rhv              1.4.4  
redhat.satellite        2.2.0  
servicenow.itsm         1.2.0  
splunk.es               1.0.2  
trendmicro.deepsec      1.1.0  
vmware.vmware_rest      2.1.0  
vyos.vyos               2.6.0  

もちろん、途中で選択する実行環境によって、内容が変わります。

別の実行環境の場合

おまけ(ansible-navigator の場合)

ansible-navigator collectionsだとこんな表示ができます。ターミナルに戻ってこれをやるのが正攻法かなと思います。

ansible-navigator によるコレクション一覧

コレクションを指定すると、所属するモジュール類が表示されます。さらに進んでいくとドキュメントに相当する情報も見れます。

モジュール類の一覧

Backlog の Git 機能の課題とプルリクエスト連携機能をためした

はじめに

タスク管理ツール(SaaS)である Backlog にはGit ホスティング機能があります。

https://support-ja.backlog.com/hc/ja/categories/360002262194-Git-Subversion

プルリクエスト機能もあるため、課題と関連付けできると経緯をトレースできていいなと思いました。

プルリクエスト画面側で関連課題を手動で選択もできますが、自動で関連付ける方法がいくつかあるようでした。

試したことを簡単にまとめます。

コミットメッセージと課題の連携

コミットメッセージに課題キーを含めると、課題のコメントにコミットメッセージが書き込まれます。

公式サイトから

「コミットと課題を連携する」にチェックを入れると、コミットメッセージに課題キーを含めてコミットすることで、その課題に自動的にコメントを登録できます。

この機能はデフォルトで有効になってました。

なお、課題キーとは課題の識別子で、プロジェクトキー-連番 という形式です。例えば TE-129 というものです。URLの課題の件名の左にも表示されます。コピペにはこのボタンが便利です。

課題キーのコピペ

それでは試してみます。

現状 TE-129 という課題があるものとします。

TE-129 add sakana というメッセージでコミットします。その後 git push します。

無事に、課題 TE-129 のコメントに、コミットメッセージが書き込まれました。

コメントにコミットメッセージが書き込まれた

コミットハッシュをクリックすると差分が表示されて便利です。

差分表示

プルリクエストの件名と関連課題の連携

今度はプルリクエスト時の連携です。

実は先程、ブランチ名に課題キーを含めるという一工夫をしました(add-sakana/TE-129)。「件名」「関連課題」の連携を確かめるためです。

公式サイトから

プルリクエストブランチの名前に、Backlogの課題キーを含めておくと、その課題の件名が「件名」に表示されます

「関連課題」にその課題キーが自動で設定されます。これらの値は変更することもできます

今回は add-sakana/TE-129 のように /課題キー というブランチ名にしましたが、スラッシュには意味はありません。「課題キーを含めておくと」ということなので、他の区切り文字や、課題キーのみのブランチ名でも大丈夫だと思います。

ということで、プルリクエストを出します。

以下のように、自動で件名や関連課題が入りました。この2箇所はブランチ名に課題キーを含めたことによる動作です。

件名と関連課題の自動入力

件名がしっくり来なかったら手動で修正してしまえば良いと思います。

また、プルリクエストに関連課題を設定することで、課題側のプルリクエストが表示され、コメントとしても書き込まれます。

課題側の関連プルリクエス

プルリクエストが作成されたことのコメント

おわりに

修正の経緯を追えるようにしておけるのは、何かと便利ですね。

firewalld の Intra Zone Forwarding の機能有無やデフォルト値

はじめに

firewalld の firewall-cmd --list-all の結果で、forward という項目がある環境とない環境があることに気が付きました。forward-ports とはまた別物です。

0.9.0で導入された、Intra Zone Forwarding という機能のものによるようです。

気になったので、いくつか別途用意して表示のされ方などを確認しました。

まとめ

先にまとめです。

RHEL firewalld バージョン Intra Zone Forwarding 機能有無 Intra Zone Forwarding デフォルト設定
8.4 0.8.2 なし -
8.4 0.9.3 あり 無効
9.0 Beta 1.0.0 あり 有効

firewalld 0.8.2 on RHEL 8.4

Red Hat Enterprise Linux 8.4 を、GUIがないサーバーとしてインストールした環境です。

[admin@localhost ~]$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.4 (Ootpa)

バージョン確認

firewalld 0.8.2 がインストールされています。

[admin@localhost ~]$ sudo dnf list --installed | grep -i firewalld
firewalld.noarch                              0.8.2-6.el8                                 @anaconda 
firewalld-filesystem.noarch                   0.8.2-6.el8                                 @anaconda 

firewall-cmd --list-all

firewall-cmd --list-all コマンドの結果は以下のとおりです。forward という項目はありません、

[admin@localhost ~]$ sudo firewall-cmd --list-all 
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

firewalld 0.9.3 on RHEL 8.4

続いて、firewalld アップグレードした環境で試します。

firewalld のアップグレード

[admin@localhost ~]$ sudo dnf upgrade firewalld
Updating Subscription Management repositories.
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)                       33 MB/s |  39 MB     00:01    
Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)                          35 MB/s |  45 MB     00:01    
Dependencies resolved.
==============================================================================================================
 Package                     Architecture  Version                 Repository                            Size
==============================================================================================================
Upgrading:
 firewalld                   noarch        0.9.3-7.el8_5.1         rhel-8-for-x86_64-baseos-rpms        502 k
 firewalld-filesystem        noarch        0.9.3-7.el8_5.1         rhel-8-for-x86_64-baseos-rpms         77 k
 python3-firewall            noarch        0.9.3-7.el8_5.1         rhel-8-for-x86_64-baseos-rpms        433 k

Transaction Summary
==============================================================================================================
Upgrade  3 Packages

Total download size: 1.0 M
Is this ok [y/N]: y
...()...

バージョン確認

0.9.3 になりました。

[admin@localhost ~]$ sudo dnf list --installed | grep -i firewalld
firewalld.noarch                              0.9.3-7.el8_5.1                             @rhel-8-for-x86_64-baseos-rpms
firewalld-filesystem.noarch                   0.9.3-7.el8_5.1                             @rhel-8-for-x86_64-baseos-rpms

firewall-cmd --list-all

firewall-cmd --list-all コマンドの結果を見ると foward: no という項目が追加されました。

[admin@localhost ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

これが firewalld 0.9.0で導入された、Intra Zone Forwarding という機能のものによるようです。

この時点では、デフォルトでオフです。(Intra Zone Forwarding 説明ページから)

By default, all currently shipped zone definitions and user created zones have forward disabled.

設定を変更してみる (有効化)

firewall-cmd コマンドのヘルプを見ると、以下オプションが増えていました。

...(略)...
  --add-forward        Enable forwarding of packets between interfaces and
                       sources in a zone [P] [Z] [T]
  --remove-forward     Disable forwarding of packets between interfaces and
                       sources in a zone [P] [Z]
  --query-forward      Return whether forwarding of packets between interfaces
                       and sources has been enabled for a zone [P] [Z]
...(略)...

軽く試します。

[admin@localhost ~]$ sudo firewall-cmd --add-forward --permanent
success
[admin@localhost ~]$ sudo firewall-cmd --reload
success

変更後、firewall-cmd --list-all を見ると forward: yes になりました。

[admin@localhost ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

一応、/etc/firewalld/zones/public.xml ファイルを見ます。<forward/> がついてました。

[admin@localhost ~]$ sudo cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
  <forward/>
</zone>

設定を変更してみる (無効化)

--remove-forward で元に戻します。

[admin@localhost ~]$ sudo firewall-cmd --remove-forward --permanent
success
[admin@localhost ~]$ sudo firewall-cmd --reload
success

forward: no に戻りました。

[admin@localhost ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

/etc/firewalld/zones/public.xml からは <forward/> が消えました。

[admin@localhost ~]$ sudo cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <service name="cockpit"/>
</zone>

1.0.0 on RHEL 9.0 Beta

今度は別に構築した、Red Hat Enterprise Linux 9.0 Beta の環境で試します。

[admin@localhost ~]$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 9.0 Beta (Plow)

バージョン確認

firewalld 1.0.0 がインストールされています。

[admin@localhost ~]$ sudo dnf list --installed | grep -i firewalld
firewalld.noarch                              1.0.0-3.el9_b                             @anaconda 
firewalld-filesystem.noarch                   1.0.0-3.el9_b                             @anaconda 

firewall-cmd --list-all

firewall-cmd --list-all コマンドの結果を確認します。

[admin@localhost ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

おっと、デフォルトで forward: yes でした。

firewalld のリリースノートとたどってみると、ちょうど 1.0.0 で Intra Zone Forwarding がデフォルトで有効になったようです。

Intra-zone forwarding by default

github.com

firewalld.org

なお、微妙に別件のようですが、Red Hat Enterprise Linux 9.0 Beta のリリースノートの Networking には

Changed behavior in firewalld when transmitting packets between zones

という記載がありました。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9-beta/html/9.0_release_notes/new-features#enhancement_networking

Red Hat Enterprise Linux 9.0 の Python 環境を少し探ってみた

はじめに

Red Hat Enterprise Linux 9.0 を、GUIでない方のサーバーとしてインストールしました。

[2022/05/19追記] Red Hat Enterprise Linux 9.0 正式版がリリースされたため、ベータだった箇所を正式版で確認した内容に更新しました。

Python 周りがどうのようになっているのか、試しながら調べてみました。あくまで私の環境で調べたという状態なので、お手元と異なるかもしれません。

python コマンドが使える

RHEL 8 系では、デフォルトで python コマンドが使えませんでしたが、使えました。

[admin@rhel90test ~]$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 9.0 (Plow)
[admin@rhel90test ~]$ 
[admin@rhel90test ~]$ python --version
Python 3.9.10
[admin@rhel90test ~]$ 
[admin@rhel90test ~]$ which python
/usr/bin/python

/usr/bin/python3.9 へのシンボリックリンク

python* 系コマンドの関係は以下の通り

[admin@rhel90test ~]$ ls -al /usr/bin/python*
lrwxrwxrwx. 1 root root     9  211 22:59 /usr/bin/python -> ./python3
lrwxrwxrwx. 1 root root     9  211 22:51 /usr/bin/python3 -> python3.9
-rwxr-xr-x. 1 root root 16040  211 22:51 /usr/bin/python3.9

ドキュメントには

実稼働環境では、python3 または python3.9 を明示的に使用することが推奨されます。

とあります。

pip コマンドは利用不可

[admin@rhel90test ~]$ which pip
/usr/bin/which: no pip in (/home/admin/.local/bin:/home/admin/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
[admin@rhel90test ~]$ 
[admin@rhel90test ~]$ 
[admin@rhel90test ~]$ pip
-bash: pip: コマンドが見つかりません
[admin@rhel90test ~]$ 
[admin@rhel90test ~]$ 
[admin@rhel90test ~]$ 
[admin@rhel90test ~]$ pip3
-bash: pip3: コマンドが見つかりません

ドキュメントには、

バージョンを指定しないコマンド (python3-pip パッケージの /usr/bin/pip など) がいくつか利用できます。

とあります。

venv 内では利用可能でした。

[admin@rhel90test ~]$ python -m venv .venv
[admin@rhel90test ~]$ source .venv/bin/activate
(.venv) [admin@rhel90test ~]$ pi
pic         pidwait     pigz        ping        pinky       pip3        pivot_root  
pidof       pifconfig   pinfo       ping6       pip         pip3.9      
(.venv) [admin@rhel90test ~]$ pip    # tab
pip     pip3    pip3.9  
(.venv) [admin@rhel90test ~]$ python    # tab
python     python3    python3.9  

/usr/libexec/platform-python は健在

RHEL 8 からあった、/usr/libexec/platform-python はありました。/usr/bin/python3.9 へのシンボリックリンクです。

(.venv) [admin@rhel90test ~]$ ls -al /usr/libexec/platform-python
lrwxrwxrwx. 1 root root 18  211 22:51 /usr/libexec/platform-python -> /usr/bin/python3.9

dnf list --installed の結果

dnf list --installedgrep -i python した結果は以下のとおりです。前述の通りGUIでない方のサーバーとしてインストールした環境です。

libcap-ng-python3.x86_64                      0.8.2-7.el9                    @AppStream
policycoreutils-python-utils.noarch           3.3-6.el9_0                    @AppStream
python-unversioned-command.noarch             3.9.10-2.el9                   @AppStream
python3.x86_64                                3.9.10-2.el9                   @anaconda 
python3-audit.x86_64                          3.0.7-101.el9_0.2              @AppStream
python3-chardet.noarch                        4.0.0-5.el9                    @anaconda 
python3-cloud-what.x86_64                     1.29.26-3.el9_0                @anaconda 
python3-dasbus.noarch                         1.4-5.el9                      @AppStream
python3-dateutil.noarch                       1:2.8.1-6.el9                  @anaconda 
python3-dbus.x86_64                           1.2.18-2.el9                   @anaconda 
python3-decorator.noarch                      4.4.2-6.el9                    @anaconda 
python3-dmidecode.x86_64                      3.12.2-27.el9                  @anaconda 
python3-dnf.noarch                            4.10.0-5.el9_0                 @anaconda 
python3-dnf-plugins-core.noarch               4.0.24-4.el9_0                 @anaconda 
python3-ethtool.x86_64                        0.15-2.el9                     @anaconda 
python3-file-magic.noarch                     5.39-8.el9                     @AppStream
python3-firewall.noarch                       1.0.0-4.el9                    @anaconda 
python3-gobject-base.x86_64                   3.40.1-5.el9                   @anaconda 
python3-gpg.x86_64                            1.15.1-6.el9                   @anaconda 
python3-hawkey.x86_64                         0.65.0-5.el9_0                 @anaconda 
python3-idna.noarch                           2.10-7.el9                     @anaconda 
python3-iniparse.noarch                       0.4-45.el9                     @anaconda 
python3-inotify.noarch                        0.9.6-25.el9                   @anaconda 
python3-libcomps.x86_64                       0.1.18-1.el9                   @anaconda 
python3-libdnf.x86_64                         0.65.0-5.el9_0                 @anaconda 
python3-librepo.x86_64                        1.14.2-1.el9                   @anaconda 
python3-libs.x86_64                           3.9.10-2.el9                   @anaconda 
python3-libselinux.x86_64                     3.3-2.el9                      @AppStream
python3-libsemanage.x86_64                    3.3-2.el9                      @AppStream
python3-libstoragemgmt.x86_64                 1.9.3-1.el9                    @AppStream
python3-libxml2.x86_64                        2.9.13-1.el9                   @anaconda 
python3-lxml.x86_64                           4.6.5-2.el9                    @AppStream
python3-nftables.x86_64                       1:0.9.8-12.el9                 @anaconda 
python3-pexpect.noarch                        4.8.0-7.el9                    @anaconda 
python3-pip-wheel.noarch                      21.2.3-6.el9                   @anaconda 
python3-policycoreutils.noarch                3.3-6.el9_0                    @AppStream
python3-psutil.x86_64                         5.8.0-12.el9                   @AppStream
python3-ptyprocess.noarch                     0.6.0-12.el9                   @anaconda 
python3-pysocks.noarch                        1.7.1-12.el9                   @anaconda 
python3-pyyaml.x86_64                         5.4.1-6.el9                    @anaconda 
python3-requests.noarch                       2.25.1-6.el9                   @anaconda 
python3-rpm.x86_64                            4.16.1.3-12.el9_0              @anaconda 
python3-setools.x86_64                        4.4.0-4.el9                    @anaconda 
python3-setuptools.noarch                     53.0.0-10.el9                  @anaconda 
python3-setuptools-wheel.noarch               53.0.0-10.el9                  @anaconda 
python3-six.noarch                            1.15.0-9.el9                   @anaconda 
python3-subscription-manager-rhsm.x86_64      1.29.26-3.el9_0                @anaconda 
python3-systemd.x86_64                        234-18.el9                     @anaconda 
python3-tracer.noarch                         0.7.5-4.el9                    @AppStream
python3-urllib3.noarch                        1.26.5-3.el9                   @anaconda 
(.venv) [admin@rhel90test ~]$ 

参考

RHEL 9.0 日本語版ドキュメント

access.redhat.com

ベータ時代

rheb.hatenablog.com

www.redhat.com

access.redhat.com

access.redhat.com

Python in RHEL 9

access.redhat.com