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
ファイルは、管理対象ホストを記録するテキストファイルであるip
かhost
、バッチ管理を容易にするためにホストグループに複数のホストを配置できます。複数のホストグループを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
ファイルで定義されているグループに加えて、Ansible
2つの特別なグループがあります
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