Ansible(1)はじめに、インストール、基本構成

Ansibleの紹介

Ansibleは軽量の自動管理ツールであり、クライアントにエージェントをインストールしOpenSSHたりWinRM、管理対象ホストを介して接続したりタスクを実行たりする必要はありません

Ansibleインストール

制御ノードホストepelでソースを構成してからyum install ansibleインストールを実行するだけです。管理対象ホストでの操作は必要ありません。
制御ノードと管理対象ホストのpythonバージョンを同じにすることをお勧めします

Ansible構成ファイル

後にAnsibleインストールが完了し、/etc/ansible/ansible.cfg設定ファイルは、デフォルトで生成されます他の構成ファイルを使用することもできます

現在使用されている構成ファイルを表示する

[root@localhost ~]# ansible --version |grep cfg
  config file = /etc/ansible/ansible.cfg

他の構成ファイルを設定する

Ansible取得した最初の構成ファイルの構成のみが使用されます。
デフォルトの構成ファイルに加えて、他の場所で構成ファイルを使用することもできます。優先度の高いものから低いものへの順序は次のとおりです。

# 通过环境变量指定的配置文件优先级最高
ANSIBLE_CONFIG 
# 其次是当前目录下的ansible.cfg文件
./ansible.cfg
# 再次是用户家目录下的.ansible.cfg文件
~/.ansible_cfg
# 默认的配置文件优先级最低
/etc/ansible/ansible.cfg

Ansibleコマンドを実行するディレクトリにansible.cfgファイル作成し、他の関連ファイルを同じディレクトリに配置することをお勧めします

構成ファイルの内容

Ansible構成ファイルはsectorとして分割されます。各角括弧は1つを意味しますsector

一般的なオプション

# 基本配置
[defaults] 
# 该配置文件默认使用的inventory文件
inventory = /etc/ansible/hosts
# 该配置文件使用root用户进行ssh连接
remote_user = root
# 使用root用户进行ssh连接时不提示输入密码
ask_pass = false

# 权限提升相关配置
[privilege_escalation] 
# 如果remote_user使用root用户,就不需要配置提权部分。
# 如果remote_user不是root,但不需要做特权操作,也不需要配置
# 权限实际是否提升取决于被管理主机是否配置了sudoers文件

# 需要提权
become = true
# 提权的方式
become_method = sudo
# 提权到root用户
become_user = root
# 进行sudo操作的时候不需要输入密码
become_ask_pass = false

Ansibleインベントリファイル

inventoryこのファイルは、どのホストをAnsible制御できるかを記録
inventoryするためのもので、静的ファイルと動的ファイルに分けることができます。

静的インベントリファイル

静的inventoryファイルは、管理対象ホストを記録するテキストファイルであるiphost
、バッチ管理を容易にするためにホストグループに複数のホストを配置できます。複数のホストグループを1つの大きなグループに入れることもできます。シンボル
を使用して[]複数のホスト指定できます

# 主机示例
# 使用IP地址  
192.169.1.100
# 使用主机名
servera

# 主机组示例 
# group1中包含server1和server2
[group1]
server1
server2
# group2中包含server3和server4
[group2]
server[3:4]
# group3中包含group1和group2里面的所有主机
# 使用:children来代表下面定义的是主机组
[group3:children]
group1
group2

特別グループ

inventoryファイルで定義されているグループに加えてAnsible2つの特別なグループがあります

  • all表しinventoryホスト内のすべての管理対象ホストを
  • ungrouped どのホストグループにも属していない管理対象ホストを表します

動的インベントリファイル

動的inventoryファイルは、実際には、他の場所から管理対象ホストに関する情報を取得するために使用できるスクリプトです。
スクリプトは任意の言語で記述でき、戻り値は次のJSON形式である必要があります

動的インベントリファイルを使用する

ansible -i inventory.py all --list-hosts
動的inventoryファイルには実行権限が必要であることに注意してください

JSON形式を使用してインベントリファイルを表示する

ansible-inventory -i inventory --list

静的インベントリファイルとJSON形式の比較と説明

# 静态inventory文件
[root@localhost ~]#  cat inventory
server1

[group1]
server2 user=root
server3

[group2]
server[4:6]

[group3:children]
group1
group2

[group2:vars]
user=devops
password=123

# 对应的JSON格式文件
[root@localhost ~]#  ansible-inventory -i inventory --list
## 整个JSON是一个Python中的字典,该字典中的key值包括以下两种
## 1. `_mata` 记录了所有主机和主机的变量
## 2. `主机组名` 记录了组中的主机列表或子组列表
{
   ## _mata的值是一个字典,其中包括一个hostvars的key,对应的value是一个记录主机名和相关变量的字典
    "_meta": {
        "hostvars": {
            # hostvars的值,是以主机名为key的字典,如果主机名没有变量,对应的value值是个空字典,如果主机名有对应的变量,对应的value值是一个key=变量名,value=变量值的字典
           # 注意主机组变量在这里会记录到组中的所有主机中
            "server1": {},
            "server2": {
                "user": "root"
            },
            "server3": {},
            "server4": {
                "password": 123,
                "user": "devops"
            },
            "server5": {
                "password": 123,
                "user": "devops"
            },
            "server6": {
                "password": 123,
                "user": "devops"
            }
        }
    },

  ## 主机组名作为key的value值也是字典,该字典的key-value可能有以下几种
  ## key=children  value=子主机组的列表
  ## key=hosts value=组中主机的列表
  ## key=vars  value=对应变量的字典
    "all": {
        "children": [
            "group3",
            "ungrouped"
        ]
    },
    "group1": {
        "hosts": [
            "server2",
            "server3"
        ]
    },
    "group2": {
        "hosts": [
            "server4",
            "server5",
            "server6"
        ]
    },
    "group3": {
        "children": [
            "group1",
            "group2"
        ]
    },
    "ungrouped": {
        "hosts": [
            "server1"
        ]
    }
}

インベントリで定義されたホストを表示する

ansible -i inventory group1 --list-hosts

おすすめ

転載: blog.51cto.com/13540167/2605638