Skip to content

Commit c89111b

Browse files
authored
Enable parameter handling (#6)
With this commit we enabled handling of action input parameters. From now you can provide the following parameters: * ipam_version * ipam_database_host * ipam_database_user * ipam_database_pass * ipam_database_name * database_root_password All of these parameters are optional and default values will be guarantee a working environment anyways. We also extend our existing tests by providing inputs by environment variables and test the newly configured database as well. Finally we demonstrate in the test workflow the ability to use matrix builds.
1 parent 58e4a5a commit c89111b

File tree

10 files changed

+109
-42
lines changed

10 files changed

+109
-42
lines changed

.github/workflows/main.yml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,44 @@ on:
33
- push
44
- pull_request
55

6+
env:
7+
IPAM_VERSION: '1.4x'
8+
IPAM_DATABASE_HOST: 'database'
9+
IPAM_DATABASE_USER: 'ipamuser'
10+
IPAM_DATABASE_PASS: 'ipampass'
11+
IPAM_DATABASE_NAME: 'ipamdb'
12+
DATABASE_ROOT_PASS: 'v3ryS3cureP4ssw0rd'
13+
614
jobs:
715
check:
816
runs-on: ubuntu-latest
917
steps:
1018
- uses: actions/checkout@v2
1119
- name: run phpipam-action
1220
uses: ./ # use action in the root directory
13-
- name: "Test phpipam api"
21+
with:
22+
ipam_version: ${{ env.IPAM_VERSION }}
23+
ipam_database_host: ${{ env.IPAM_DATABASE_HOST }}
24+
ipam_database_user: ${{ env.IPAM_DATABASE_USER }}
25+
ipam_database_pass: ${{ env.IPAM_DATABASE_PASS }}
26+
ipam_database_name: ${{ env.IPAM_DATABASE_NAME }}
27+
database_root_password: ${{ env.DATABASE_ROOT_PASS }}
28+
- name: "Test phpipam api and database"
29+
run: |
30+
curl -k --user Admin:ipamadmin -X POST https://localhost/api/ansible/user/
31+
mysql -h 127.0.01 -u ${{ env.IPAM_DATABASE_USER }} -p${{ env.IPAM_DATABASE_PASS }} ${{ env.IPAM_DATABASE_NAME }} --execute="SHOW TABLES"
32+
matrix_test:
33+
runs-on: ubuntu-latest
34+
strategy:
35+
matrix:
36+
phpipam: ['1.4x','1.5x']
37+
steps:
38+
- uses: actions/checkout@v2
39+
- name: run phpipam-action
40+
uses: ./ # use action in the root directory
41+
with:
42+
ipam_version: ${{ matrix.phpipam }}
43+
- name: "Test phpipam api and database"
1444
run: |
1545
curl -k --user Admin:ipamadmin -X POST https://localhost/api/ansible/user/
46+
mysql -h 127.0.01 -u ${{ env.IPAM_DATABASE_USER }} -p${{ env.IPAM_DATABASE_PASS }} ${{ env.IPAM_DATABASE_NAME }} --execute="SHOW TABLES"

README.md

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,38 @@ In detail the action start two containers:
1111

1212
After that the action does a few things to prepare the phpipam installation:
1313

14-
* populate the database with a default data
14+
* populate the database with default data
1515
* activate the api
16-
* create a app for api connection
16+
* create an app for api connection
1717
* set required password change for defaut admin to _no_ - this is for local testing purposes
1818

1919
## Parameters
2020

21-
---
22-
**Note:**
23-
24-
There are several parameters defined in readme. These parameters were currently not used but they are here for future use.
25-
26-
---
27-
28-
The parameters are prepared as follows:
21+
We provide the following parameters to configure the phpipam instance database:
2922

23+
* **ipam_version**: the phpipam version to install: Default: "latest"
3024
* **ipam_database_host**: Database host phpipam connects to. Default: "database"
3125
* **ipam_database_user**: Database user phpipam needs to authenticate. Default: "phpipam"
3226
* **ipam_database_pass**: Database password phpipam needs to authenticate. Default: "phpipam"
3327
* **ipam_database_name**: Database name phpipam uses. Default: "phpipam"
3428
* **database_root_password**: Root password for the database. Default: "root"
3529

30+
---
31+
32+
**Note:** If you define a database host, the database (**ipam_database_name**) needs to be created or emptied before the action can be executed.
33+
34+
---
35+
3636
## Usage
3737

38-
The action is hosted in a separate repository and available on [github marketplace](https://github.com/marketplace/actions/phpipam-action){:target="_blank"}. To use it you have to add the following to your github workflow:
38+
The action is hosted in a separate repository and available on [github marketplace](https://github.com/marketplace/actions/phpipam-action). To use it you have to add the following to your github workflow:
3939

4040
~~~yaml
4141
steps:
4242
- uses: actions/checkout@v2
43-
- uses: codeaffen/phpipam-action@v1
43+
- uses: codeaffen/phpipam-action@v2
44+
with:
45+
ipam_version: "1.4x"
4446
~~~
4547

4648
If the action finishes successfully you will be able to run your api tests against the phpipam installation.
@@ -50,3 +52,17 @@ If the action finishes successfully you will be able to run your api tests again
5052
run: |
5153
curl -k --user Admin:ipamadmin -X POST https://localhost/api/ansible/user/
5254
~~~
55+
56+
With the `ipam_version` parameter you will be able to test against different phpipam versions by using githubs build matrix feature. This is done by defining a job as follows:
57+
58+
~~~yaml
59+
strategy:
60+
matrix:
61+
phpipam: ['1.4x','1.5x']
62+
steps:
63+
- uses: actions/checkout@v2
64+
- name: run phpipam-action
65+
uses: codeaffen/phpipam-action@v2
66+
with:
67+
ipam_version: ${{ matrix.phpipam }}
68+
~~~

action.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
name: 'phpIPAM Action'
22
description: 'Spin up a phpIPAM instance'
33
inputs:
4+
ipam_version:
5+
description: 'phpIPAM version to install'
6+
required: false
7+
default: 'latest'
48
ipam_database_host:
59
description: 'database host phpipam connects to'
610
required: false

dist/docker-compose.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
version: '3'
22
services:
33
phpipam:
4-
image: phpipam/phpipam-www:v1.4.4
4+
image: phpipam/phpipam-www:${IPAM_VERSION:-1.4x}
55
ports:
66
- "443:443"
77
environment:
8-
IPAM_DATABASE_HOST: "database"
9-
IPAM_DATABASE_USER: "phpipam"
10-
IPAM_DATABASE_PASS: "phpipamadmin"
11-
IPAM_DATABASE_NAME: "phpipam"
8+
IPAM_DATABASE_HOST: "${IPAM_DATABASE_HOST:-database}"
9+
IPAM_DATABASE_USER: "${IPAM_DATABASE_USER:-phpipam}"
10+
IPAM_DATABASE_PASS: "${IPAM_DATABASE_PASS:-phpipamadmin}"
11+
IPAM_DATABASE_NAME: "${IPAM_DATABASE_NAME:-phpipam}"
1212
depends_on:
1313
- database
1414
database:
1515
image: mariadb:10.3.18
1616
ports:
1717
- "3306:3306"
1818
environment:
19-
MYSQL_ROOT_PASSWORD: "rootpw"
20-
MYSQL_USER: "phpipam"
21-
MYSQL_PASSWORD: "phpipamadmin"
22-
MYSQL_DATABASE: "phpipam"
19+
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD:-rootpw}"
20+
MYSQL_USER: "${IPAM_DATABASE_USER:-phpipam}"
21+
MYSQL_PASSWORD: "${IPAM_DATABASE_PASS:-phpipamadmin}"
22+
MYSQL_DATABASE: "${IPAM_DATABASE_NAME:-phpipam}"

dist/exec.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ exec_list:
33
- name: init database
44
container: phpipam
55
commands:
6-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam < /phpipam/db/SCHEMA.sql"]
7-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam --execute=\"UPDATE settings SET api=1 WHERE id=1;\""]
8-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam --execute=\"INSERT INTO api (app_id, app_code, app_permissions, app_security, app_lock_wait) VALUES ('ansible','aAbBcCdDeEfF00112233445566778899',2,'ssl_token',0);\""]
9-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam --execute=\"UPDATE users SET passChange = 'No' WHERE username = 'Admin';\""]
6+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} < /phpipam/db/SCHEMA.sql']
7+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} --execute="UPDATE settings SET api=1 WHERE id=1;"']
8+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} --execute="INSERT INTO api (app_id, app_code, app_permissions, app_security, app_lock_wait) VALUES (\"ansible\",\"aAbBcCdDeEfF00112233445566778899\",2,\"ssl_token\",0);"']
9+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} --execute="UPDATE users SET passChange = \"No\" WHERE username = \"Admin\";"']

dist/index.js

Lines changed: 9 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ async function down() {
3535
async function execInContainer(container, commands, options={}) {
3636
for(const c of commands)
3737
{
38+
core.debug(`executing "${c}" inside "${container}"`);
3839
await compose.exec(container, c, options);
3940
}
4041
}
@@ -66,6 +67,13 @@ try {
6667
core.setFailed(error.message);
6768
}
6869

70+
process.env.PHPIPAM_VERSION = core.getInput("phpipam_version");
71+
process.env.PHPIPAM_DATABASE_HOST = core.getInput("phpipam_database_host");
72+
process.env.PHPIPAM_DATABASE_USER = core.getInput("phpipam_database_user");
73+
process.env.PHPIPAM_DATABASE_PASS = core.getInput("phpipam_database_pass");
74+
process.env.PHPIPAM_DATABASE_NAME = core.getInput("phpipam_database_name");
75+
process.env.MYSQL_ROOT_PASSWORD = core.getInput("database_root_password");
76+
6977
switch (myArgs[0]) {
7078
case "up":
7179
up();
@@ -77,7 +85,7 @@ switch (myArgs[0]) {
7785
down();
7886
break;
7987
default:
80-
core.info("staring phpipam in action mode");
88+
core.info(`staring phpipam (${process.env.PHPIPAM_VERSION}) in action mode`);
8189
up();
8290
setTimeout(init, 30000);
8391
}

services/docker-compose.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
version: '3'
22
services:
33
phpipam:
4-
image: phpipam/phpipam-www:v1.4.4
4+
image: phpipam/phpipam-www:${IPAM_VERSION:-1.4x}
55
ports:
66
- "443:443"
77
environment:
8-
IPAM_DATABASE_HOST: "database"
9-
IPAM_DATABASE_USER: "phpipam"
10-
IPAM_DATABASE_PASS: "phpipamadmin"
11-
IPAM_DATABASE_NAME: "phpipam"
8+
IPAM_DATABASE_HOST: "${IPAM_DATABASE_HOST:-database}"
9+
IPAM_DATABASE_USER: "${IPAM_DATABASE_USER:-phpipam}"
10+
IPAM_DATABASE_PASS: "${IPAM_DATABASE_PASS:-phpipamadmin}"
11+
IPAM_DATABASE_NAME: "${IPAM_DATABASE_NAME:-phpipam}"
1212
depends_on:
1313
- database
1414
database:
1515
image: mariadb:10.3.18
1616
ports:
1717
- "3306:3306"
1818
environment:
19-
MYSQL_ROOT_PASSWORD: "rootpw"
20-
MYSQL_USER: "phpipam"
21-
MYSQL_PASSWORD: "phpipamadmin"
22-
MYSQL_DATABASE: "phpipam"
19+
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD:-rootpw}"
20+
MYSQL_USER: "${IPAM_DATABASE_USER:-phpipam}"
21+
MYSQL_PASSWORD: "${IPAM_DATABASE_PASS:-phpipamadmin}"
22+
MYSQL_DATABASE: "${IPAM_DATABASE_NAME:-phpipam}"

services/exec.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ exec_list:
33
- name: init database
44
container: phpipam
55
commands:
6-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam < /phpipam/db/SCHEMA.sql"]
7-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam --execute=\"UPDATE settings SET api=1 WHERE id=1;\""]
8-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam --execute=\"INSERT INTO api (app_id, app_code, app_permissions, app_security, app_lock_wait) VALUES ('ansible','aAbBcCdDeEfF00112233445566778899',2,'ssl_token',0);\""]
9-
- ["sh", "-c", "mysql -h database -u phpipam -pphpipamadmin phpipam --execute=\"UPDATE users SET passChange = 'No' WHERE username = 'Admin';\""]
6+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} < /phpipam/db/SCHEMA.sql']
7+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} --execute="UPDATE settings SET api=1 WHERE id=1;"']
8+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} --execute="INSERT INTO api (app_id, app_code, app_permissions, app_security, app_lock_wait) VALUES (\"ansible\",\"aAbBcCdDeEfF00112233445566778899\",2,\"ssl_token\",0);"']
9+
- ["sh", "-c", 'mysql -h ${IPAM_DATABASE_HOST} -u ${IPAM_DATABASE_USER} -p${IPAM_DATABASE_PASS} ${IPAM_DATABASE_NAME} --execute="UPDATE users SET passChange = \"No\" WHERE username = \"Admin\";"']

0 commit comments

Comments
 (0)