自動化された運用および保守ツール-可能な導入(3)

3.4管理変数と事実

プレイブックの作成を簡素化するために、変数の代わりにプレイブックでいくつかの変数を使用する

3.4.1管理変数

ansible変数の概要

変数には、
作成されるユーザー、
インストールされるソフトウェアパッケージ、
再起動されるサービス、
削除されるファイル
、インターネットから取得れるドキュメントが含まれます。

名前付き変数

変数名は文字で始める必要があり、文字、数字、アンダースコアのみを含めることができます。
不正な
Webサーバーweb_server
westos.file remote_file
1file file1

変数を定義する

3つのスコープレベル
グローバルスコープ:コマンドラインまたはansible構成から設定された変数
Playスコープ:Playおよび関連構造で設定された変数
ホストスコープ:インベントリ、ファクト、ホストグループおよび個々のホストで設定によって収集または登録されたタスク変数
'同じ名前の変数が複数のレベルで定義されている場合、最も高いレベルの変数が優先され、狭いスコープが広いスコープよりも優先されます'

3.4.2
プレイブックの変数プレイブックの変数を定義する
1.一般的な方法:プレイブックの先頭のvarsブロックで:
ここに画像の説明を挿入
2.外部ファイルにプレイブック変数を定義する

ここに画像の説明を挿入

cat user.yml

ここに画像の説明を挿入

3.4.2プレイブックでの変数の使用

変数名を中かっこで囲みます。
ここに画像の説明を挿入
'注:変数が値を開始する最初の要素として使用される場合は、引用符を使用する必要があります。'

3.4.3ホスト変数とグループ変数

2つのカテゴリにホスト変数リストに直接適用
1.ホスト変数:特定のホストに適用される
変数の2セット:のグループでホストグループまたはホストグループ内のすべてのホストに適用される
変数のセットよりも優先ホスト変数が、ハンドブックはで定義されている変数は、両方よりも高くなっています。

ホスト変数とグループ変数を定義します。

方法1(古い、非推奨):

server1.example.comシングルユーザーansible_userホスト変数を
ここに画像の説明を挿入
定義します:dbserversホストグループユーザーグループ変数を
ここに画像の説明を挿入
定義します:ネストされたグループユーザー変数を定義します:
ここに画像の説明を挿入
'このアプローチでは、マニフェストファイルの処理が難しくなり、同じファイル内でホストと変数が混在します情報、文法も時代遅れです '

方法2:ディレクトリを使用してホスト変数とグループ変数を設定する

ホストおよびホストグループ変数を定義するための推奨される方法は、マニフェストファイルまたはディレクトリと同じ作業ディレクトリgroup_vars
およびhost_varsという 2つのディレクトリを作成することです。これらの2つのディレクトリには、グループ変数とホスト変数を定義するためのファイルが含まれています。

group_vars / serversのYAMLファイルを作成し、変数に値を設定します。user
:学生
は、ホスト変数を格納するために、host_varsディレクトリ内のホストと一致する名前のファイルも作成する必要があります。
したがって、プロジェクトディレクトリには
、ansible.cfg、group_vars、host_vars、inventory、 playbook.yml


コマンドラインからの変数の上書きリスト変数は、プレイブックに設定された変数で上書きでき、両方ともコマンドラインパラメーターで上書きできます。

#配列を変数
ここに画像の説明を挿入
Accessメソッドとして使用します

users.lilei.first_name
users.hanmeimei.home_dir

変数はPython辞書として定義され、代替構文を使用できます。

users['lilei']['first_name']
users['hanmeimei']['home_dir']

#登録された変数を
使用してコマンド出力をキャプチャする管理者はregisterステートメントを使用してコマンド出力をキャプチャできます

---
- name: install
  hosts: web
  tasks:
          - name: install http
            yum:
                    name: httpd
                    state: installed
            register: install_result

          - debug: var=install_result
 ...

効果:

ここに画像の説明を挿入
動作のプロセスはデバッグで確認できるため、プロセスを確認できます。
###変数を管理するための演習
プレイブックを作成し、Apacheをインストールして起動し、アクセスできるようにします。プレイブックはWebサーバーにクエリを実行し、設定および実行されていることを確認します。
ここに画像の説明を挿入
変数名:
web_pkg#
インストールするWebサーバーパッケージfirewall_pkg インストールするファイアウォールパッケージ
web_service
管理する
Web サービスfirewall_service 管理するファイアウォールサービスpython_pkg #uriモジュール必要なパッケージ
ルールサービスを開く

- name: config Apache
  hosts: web
  vars:
          web_pkg: httpd
          firewall_pkg: firewalld
          web_service: httpd
          firewall_service: firewalld
          python_pkg: python3-PyMySQL
          rule: http

  tasks:
          - name: Install Package
            yum:
                    name:
                            - "{{ web_pkg }}"
                            - "{{ firewall_pkg }}"
                            - "{{ python_pkg }}"
                    state: latest
          - name: the {{ firewall_service }} started and enabled     #确保 firewalld 和 apache 开机启动
            service:
                    name: "{{ firewall_service }}"
                    enabled: true
                    state: started
                    - name: the {{ web_service }} started and enabled
            service:
                    name: "{{ web_service }}"
                    enabled: true
                    state: started
          - name: config index.html        #配置默认发布页面
            copy:
                    content: "hello westos!"
                    dest: /var/www/html/index.html
          - name: Firewall permit http       #使防火墙允许 http
            firewalld:
                    service: "{{ rule }}"
                    permanent: true
                    state: enabled

- name: Verify the Apache         #验证 apache 服务
  hosts: localhost
  become: false      #在本机测试,不必更改身份
  tasks:
          - name: Curl webserver
            uri:
                    url: http://rhe82.com
                    status_code: 200                                                                                                                         

#実行:
ここに画像の説明を挿入

3.4.4管理の機密性

目的:ansible-vaultを使用して機密変数を暗号化し、vaultで暗号化された変数ファイルのプレイブックを実行します。

Ansible-Vault
Vaultは、ホストを構成するために、パスワードやAPIキーなどの機密データへのアクセスを必要とする場合があります。
暗号化および復号化ツール:ansible-vaultコマンド
「ansible vaultは独自の暗号化機能を実装していませんが、外部のpythonツールセットを使用しています」

##暗号化されたファイルを作成する
方法:ansible-vault createファイル名に
ここに画像の説明を挿入
はパスワードが必要であり、
ここに画像の説明を挿入
現時点では表示できません。

##暗号化されたファイルを作成し、同時にパスワードを保存します。パスワードはwestosファイルに書き込む必要があります
ここに画像の説明を挿入
##暗号化されたファイルを表示します

方法:ansible-vault view filename

ここに画像の説明を挿入
##既存の暗号化ファイルを編集する
原則:ファイルを一時ファイルに復号化して編集します。保存するときに、コンテンツをコピーして一時ファイルを削除します
ここに画像の説明を挿入
ここに画像の説明を挿入

「編集コマンドは常にファイルを書き換えるため、ファイルを変更するときにのみ使用され、可能な限りビューを使用します」

##既存のファイルを暗号化する

方法:ansible-vault encrypt filename        #filename 参数可以是多个

ここに画像の説明を挿入
–output = filenameを使用して、暗号化されたファイルを新しい名前で保存できます。このパラメーターを使用する場合、入力ファイルは1つだけです。

##既存のファイルを解読する

方法:ansible-vault decrypt filename

ここに画像の説明を挿入
##復号化中に名前を変更

–Output = filename
ここに画像の説明を挿入
##暗号化されたファイルのパスワードを変更します

方法:ansible-vault rekey filename

「一度に複数のファイルパスワードを更新できます」#Vault
ここに画像の説明を挿入
パスワードファイルを使用する場合は、-net-vault-password-file
[root @ workstation wsp]#ansible-vault rekey --new-vault-password-file = wsp
westos .yml
Vaultのパスワード:
リキー成功した
## - Vaultの脚本とansible
暗号化された脚本を実行し、パスワードが指定されていない
ここに画像の説明を挿入
#インタラクティブパスワードを
ここに画像の説明を挿入
「対話型のコード提供するための-ask-ボールトパスを使用して、ansible 2.4の前に」
#することが可能シークレットをファイルに保存します(ファイルを保護するためのファイルシステムのアクセス許可に注意してください)

 ansible-playbook --vault-password-file=password user.yml

3.4.5管理ファクト######

ファクトには、ホスト名、カーネルバージョン、ネットワークの言い訳、IPアドレスなどが含まれます。
## ansibleファクトの説明
#ホスト情報を表示
ここに画像の説明を挿入
var:ansible_facts システム変数名。定義する必要はありません。

ansible-playbook fact.yml

ここに画像の説明を挿入
##ファクトを動的な値に置き換えます

---
- name: fact
  hosts : all
  tasks:
          - name: Print Facts
            debug:
                    var: ansible_facts


- hosts: all
  tasks:
          - name: Print IP and dn
            debug:
                    msg:
                            the IPv4 address of {{ ansible_facts.fqdn }}     #使用字典的方式查询值
                            is {{ ansible_facts.all_ipv4_addresses }}

ここに画像の説明を挿入
## ansibleファクトを変数注入として
#セットアップモジュールを使用してすべてのファクト情報を表示
ここに画像の説明を挿入
#ファクトコレクションをオフにして実行速度を向上

cat user.yml

ここに画像の説明を挿入
#操作
ここに画像の説明を挿入
時に何gather_factsこの1アップが行われていません。

##カスタムファクトの作成
#INI形式またはJSON形式を使用できます

##INI

[packages]
web_packages=httpd
da_packages=mariadb_server
[users]
user1=westos
user2=redhat



##JSON

{
        "packages": {
           "web_packages": "httpd",
           "db_packages": "mariadb-server"
        },
        "users":  {
           "user1": "westos",
           "user2": "redhat"
        }
}

'カスタム形式ではymal形式を使用できません。ymal形式に最も近いjsonを使用することをお勧めします'

 mkdir /etc/ansible/facts.d
 vim /etc/ansible/facts.dcustom.fact     #必须以.fact 结尾
        "packages": {
           "web_packages": "httpd",
           "db_packages": "mariadb-server"
        },
        "users":  {
           "user1": "westos",
           "user2": "redhat"
        }
}
 ansible localhost -m setup       查看我们定义的事实

ここに画像の説明を挿入
「カスタムファクトはデフォルトファクトと同じように使用されます」

##マジック変数の使用
一般的に使用される4つの方法があります。

HOSTVARS #管理対象ホストの変数が含まれます。これを使用して、別の管理対象ホストの変数の値を取得できます
group_names #現在管理されているホストが属するすべてのグループを一覧表示します
グループ #リスト内のすべてのグループとホストを一覧表示します
inventory_hostname #リストに構成されている現在管理されているホストのホスト名が含まれます

#目的の1つ:デバッグモジュールを使用して、特定のホストのhostvarsの値を報告する

 ansible localhost -m debug -a 'var=hostvars["servera.lab.example.com"]'

ここに画像の説明を挿入
##事実の管理:演習1

[ルート@ワークステーションのデータファクト]#ansible rhel82.com -m setup #Display information
ここに画像の説明を挿入
表示できます。

カスタム変数
vim westos.factを作成する
ここに画像の説明を挿入

プレイブックを作成

 vim facts.yml
---
- name: Install fact
  hosts: web
  vars:
          remote_dir: /etc/ansible/facts.d
          facts_file: westos.fact
  tasks:
          - name: Create directory
            file:
                    state: directory
                    recurse: yes
                    path: "{{ remote_dir }}"

          - name: copy file facts
            copy:
                    src: "{{ facts_file }}"
                    dest: "{{ remote_dir }}"
...

実行:
ここに画像の説明を挿入
ここに画像の説明を挿入
ディレクトリが作成され、ファイルが渡されました。

メインプレイブックを書く
ここに画像の説明を挿入

---
- name: INstall Apache
  hosts: web
  tasks:
          - name: Install package
            yum:
                    name: "{{ ansible_facts['ansible_local']['westos']['westos']['package'] }}"
                    state: latest
          - name: statr apache
            service:
                    name: "{{ ansible_facts['ansible_local']['westos']['westos']['service'] }}"
                    state: "{{ ansible_facts['ansible_local']['custom']['westos']['state'] }}"
                    enabled: "{{ ansible_facts['ansible_local']['custom']['westos']['enabled'] }}"

#httpaサービスがserveraで実行されていないことを確認します

 ansible servera.lab.example.com -m command -a 'systemctl status httpd'

ここに画像の説明を挿入
httpdサービスが82ホストにインストールされていないことがわかります。
法律チェック
ここに画像の説明を挿入
#実行

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

50件のオリジナル記事を公開しました 高く評価しました18 訪問数3780

おすすめ

転載: blog.csdn.net/thermal_life/article/details/105346098