質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

1799閲覧

playbook内で""で囲われた中で変数を展開する

jouhouatume0609

総合スコア11

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

1クリップ

投稿2018/10/24 03:02

前提・実現したいこと

Ansibleのplaybook内でデータベースの権限を設定する際に、
データベース名をハードコーディングしないようにする。

発生している問題、エラーメッセージ

下記のplaybookを実行。
26行目のデータベースの権限を設定する際に、
データベース名を規定している変数を利用しようとすると構文エラーが発生する。

1 - hosts: test-server 2 user: root 3 become: yes 4 5 vars: 6 database_user: wordpress 7 database_password: Zaq12wsx 8 database_name: wordpress 9 database_host: localhost 10 11 tasks: 12 13 - name: MariaDB 起動 14 service: name=mariadb state=started enabled=yes 15 16 - name: データベース作成 17 mysql_db: 18 name: "{{ database_name }}" 19 state: present 20 21 - name: データベースのユーザ作成(権限も付与する) 22 mysql_user: 23 name: "{{ database_user }}" 24 password: "{{ database_password }}" 25 host: "{{ database_host }}" 26 priv: ""{{ database_name }}".*:ALL,GRANT" 27 state: present

下記がエラー内容(抜粋)

[root@localhost ~]# ansible-playbook -i ansible-inventory.txt dbcreate.yml ERROR! Syntax Error while loading YAML. The error appears to have been in '/root/dbcreate.yml': line 26, column 15, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: host: "{{ database_host }}" priv: ""{{ database_name }}".*:ALL,GRANT"

試したこと

26行目をハードコーディングすると、
ダブルクォーテーションの競合がないため、playbookは無事に実行される。

26 priv: "wordpress.*:ALL,GRANT"

やはりハードコーディングは再利用性が低くなるので、
なんとか変数を使って記述したい。

補足情報

・OSのバージョン

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

・Ansibleのバージョン

[root@localhost ~]# rpm -qa ansible
ansible-2.4.2.0-2.el7.noarch

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

シングルクォーテーションを使えばいけるかと思います。

yml

1""{{ database_name }}".*:ALL,GRANT" 23'"{{ database_name }}".*:ALL,GRANT'

投稿2018/10/24 07:02

編集2018/10/24 07:03
xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jouhouatume0609

2018/10/24 07:24

うまくいきました!!!! ありがとうございます。 (下記が実行結果) priv: '"{{ database_name }}".*:ALL,GRANT' →ご教授いただいたとおりに変更 [root@localhost ~]# ansible-playbook -i ansible-inventory.txt dbcreate.yml ASK [データベース作成] **************************************************************************************************** changed: [172.16.13.47] TASK [データベースのユーザ作成(権限も付与する)] *************************************************************************************** changed: [172.16.13.47] [root@localhost ~]# mysql -uroot -e "select user,host from mysql.user where user='wordpress';" +-----------+-----------+ | user | host | +-----------+-----------+ | wordpress | localhost | +-----------+-----------+ root@localhost ~]# mysql -uroot -e "show grants for wordpress@localhost;" +------------------------------------------------------------------------------------------------------------------+ | Grants for wordpress@localhost | +------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'wordpress'@'localhost' IDENTIFIED BY PASSWORD '*2A0586C6A022660D2B545AC59B8CA27AFEE7BE37' | | GRANT ALL PRIVILEGES ON `"wordpress"`.* TO 'wordpress'@'localhost' WITH GRANT OPTION | +------------------------------------------------------------------------------------------------------------------+ →無事に権限を設定できていました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問